夏焱 朱岩
摘 要:为了满足配电网自动化中高容量数据存储、高速率数据通信的通信要求,根据异步传输的特点,结合IEC60870-5-104协议的参考模型,提出了异步传输方式在IEC60870-5-104规约中的应用设计。软件部分以.NET为平台,采用C#语言设计异步回调方法,结合多线程,实现数据传输,并快速、实时响应主站操作。结果表明,使用异步传输方式,可以满足系统的实时性,快速性,有效性。
关键词:IEC60870-5-104;异步传输;配电自动化;回调;多线程
随着世界电力系统的飞速发展,电力技术日新月异,IEC60870-5-104规约也应运而生。IEC60870-5-104远动规约主要应用于调度主站与RTU之间的数据传输。它将IEC60870-5-101的应用层与TCP/IP网络传输层相结合,在确保规约标准化的同时也保证了通信的实时性和可靠性。
1 异步传输与同步传输要点
1.1 异步传输(Asynchronous Transmission)
异步传输是将数据(BIT)先分成若干个部分再进行传输。发送端发送数据是随机的,可以在任意时刻发送,所以接收方不能准确的计算出数据何时会到达。
在异步传输模式中,需要在待传送字符码前添加起始位,用来表示字符码传输的开始;而在字符码后面同样需要添加1-2个停止位,用来表示字符结束。通过起始位和停止位,接收方便可以判断出一个新字符是否开始或结束,最终使得发送方与接收方达到同步[1]。
1.2 同步传输(Synchronous Transmission)
同步传输是把字符组合起来一并发送,同样的,每个字符都需要加上起始位和停止位。我们把这些组合叫做数据帧,简称为帧[2]。
数据帧头即起始位,它是一种特殊的比特组合,其作用是告知接收方数据帧是否已送达,同时,它还能使得发送方与接收方进入同步,保证了数据的传输速度和接收方的读取速度相一致。数据帧尾是结束标志位,相当于停止位,其作用是表示数据已经传输结束,不会再有其他数据到达。
1.3 异步传输与同步传输的区别
由于字符之间通过异步方式来传输,所以异步传输方式并不需要发送方和接收方的时钟同步。而对于同步传输方式来说,发送方和接收方则需时钟同步,因为字符间的传输是同步的。
异步传输的时候,需要调用异步函数发送数据,这个函数立马有返回值返回,程序可以继续执行其他函数;接收时,当异步函数有数据来时,将会收到通知,或者直接调用回调函数。
同步传输的时候,对方在确认收到数据之前,该函数无返回值;接收时,线程就一直处于等待状态,直到接收到返回值,然后继续执行其他指令,否则不执行任何操作[3]。
2 IEC60870-5-104协议
为了适应网络更安全更高效的传输,国际电工委员会制订了IEC60870-5-104规约,它是以IEC60870-5-101远动通信规约为基础的。IEC60870-5-104规约利用以太网进行传输,网络层使用TCP/IP协议,应用层使用IEC60870-5-101规约中的应用服务数据单元(ASDU)。
IEC60870-5-104远动规约结构[4]如图1所示。在该图的5层结构中,IEC60870-5-104规约处于应用层协议的位置。IEC60870-5-104规约规定传输层使用的是TCP协议,每一种应用层协议都有一个网络端口号对应。应用规约数据单元(APDU),是由应用规约控制信息(APCI)和应用服务数据单元(ASDU)两部分组成,它是一个标准的数据帧[5]。
3 异步传输在104中的应用
IEC60870-5-104规约通信过程主要包括以下几个步骤:
3.1 建立连接过程
TCP连接和建立采用客户端/服务器端方式,在建立TCP连接之前,服务器端始终处于侦听状态以等待客户端的连接请求,客户端不断的向服务器端发出连接请求;当服务器端接收到连接请求以后,TCP连接建立,并开始持续的监测TCP连接状态,以便TCP连接被关闭或意外断开后重新发出连接请求[6][9]。
3.2 启动传输
其数据帧为U格式帧,主要用于测试链路、启动/停止数据传输。在建立连接后,由于建立连接时STOPDT处于未确认状态,服务器端不会发送任何数据,直到客户端主动发送一个STARTDT指令用来激活用户数据的传输[7]。如图2所示:
3.3 总召
由主站启动发送。子站收到总召命令后依次向主站发送总召确认帧、测试帧、结束帧,来完成整个总召激活过程。
3.4 数据传输
准备工作完成后,子站开始主动地向主站即服务器端发送数据。
3.5 对时
主站发送时间同步数据帧,启动对时命令,子站在收到帧后更新时间,并向主站发送确认帧。
3.6 子站事件自动上传
根据实际情况,子站将主动的向主站发送一些突发事件。以太网对于服务器端和客户端都是一个高速的全双工网络,因此IEC6080-5-104的传输方式应当选择非平衡式传输。
3.7 命令传输
主站向子站发送命令,子站返回确认并发送数据,最后子站向主站发送总召结束命令[8]。
由于IEC60870-5-104规约的特殊性,接收方不知道什么时候数据会到达,不能做到与发送方的时钟同步,所以采用的是非平衡方式传输,即一方发起通讯,另一方进行响应。采用网络协议的IEC60870-5-104规约,子站会将消息主动上传到主站,数据帧解析后再将消息交给线程进行处理,所以采用的是异步传输方式。设计流程图如图3。
通讯过程中连接的建立使用Socket异步传输方法BeginReceiveAsync()和EndReceiveAsync()来接收、处理数据包,当数据处理结束后,使用AsyncCallback委托方法回调[10]。
// 启动异步
this.socket.BeginReceiveFrom(packet.Data, 0, UdpPacket.BUFFERSIZE,SocketFlags.None,ref packet.RemoteEndPoint, new AsyncCallback(EndReceiveAsync), packet);
在建立TCP连接之前,服务器端需要始终处于侦听状态以等待客户端的连接请求,这里使用的是TcpListener类进行侦听;客户端不断的向服务器端发出连接请求,建立连接后,开始并持续监测TCP连接的状态,当TCP连接被关闭或断开后,客户端立即重新向服务器端发出连接请求。
连接建立后,客户端与服务器端之间就可以开始数据交互传输。由于同步传输是单线程的,等待操作的过程中可能会导致方法阻塞,异步方法很好的解决了这些问题,异步执行某个方法,程序在线程池里选取一个新线程来运行该异步方法,这样主线程就不容易卡死。
由异步开辟出的新线程,用完之后我们要想办法将它回收。这里我们使用的是异步回调方法。其核心如下:
⑴使用回调函数,异步操作结束后,程序将会自动调用此回调函数。
⑵在主线程的回调函数中使用EndInvoke方法。
异步回调的大致流程:启动异步,在主程序里加上异步结束时所需执行的回调函数,然后就可以继续执行其他程序,最后当此异步线程工作自动完成,就会执行主程序里的那个回调函数,将其结果返回给主函数,并执行下一步操作。如图4所示:
采用异步回调的方法,并运用多线程的处理,可以在等待响应的过程中执行下一行代码,大幅提高程序的运行速率,防止程序因等待过程的无响应而死掉。最好的体现就是在IEC60870-5-104中与连接有关的四个超时时间t0-t3。通过异步回调,程序可以在等待响应的时间段里继续执行后面代码,而通过回调函数可以接收到超时状态,有效的解决了因等待而造成的程序停滞、瘫痪,体现了其快速性、高效性、可靠性。
4 结语
随着计算机网络技术和电力自动化技术的蓬勃发展,国家电网对配电自动化水平的要求越来越高,电力监控系统越来越多地使用IEC60870-5-104远动规约。作为国际化标准,IEC60870-5-104规约能很好地保证通信的统一性和安全性。而使用异步传输方式,可以有效的提高IEC60870-5-104规约的传输效率,使得IEC60870-5-104规约更加简单可靠,在未来的配电网自动化发展中的应用也将会越来越广泛。
[参考文献]
[1]D.W.CALDWELLA Distributed Spacecraft Thermal Control Architecture Using the Dallas Semicinductor MicroLan Products.Digital Avionics Systems Conference,1997,10:1-8.
[2]姜川.汽车音响系统中双机通信的设计与实现[D].辽宁:大连理工大学.2007.
[3]葛纫秋,王玉花,马秋菊,等.实用微机接口技术[M].北京:高等教育出版社.2003:172-175.
[4]刘玉芳.华为交换机维护心得[J].江西通信科技.2007.
[5]彭永峰.104规约通信在远动系统的应用[J].科技资讯.2010.
[6]鲁晶.基于DES理论的IEC60870-5-104通讯异常的自动探测方法[D].湖南:长沙理工大学.2013.
[7]薛飞.IEC60870-5-104协议的软件建模与实现[D].北京:华北电力大学.2012.
[8]朱永利,王德文,邸剑,等.遵循IEC61850的新型网络化电力远动系统[J].华北电力大学学报.2008,35(6).
[9]邵留成.程控交换机的维护与管理[J].电力与能源.2009.
[10]陈什,朱岩.大规模车辆监控系统中通信服务器的设计与实现[J].计算机与现代化.2011.