基于IEC60870-5-104协议的电力监控系统设计
2021-06-16蒋腾龙
蒋腾龙
(上海电气自动化设计研究所有限公司智慧交通事业部 上海市 200023)
电力监控系统是城市轨道交通综合监控系统最重要的系统之一,也是保障轨道交通供电安全,可靠稳定运行的重要基础。通过电力监控系统,调度中心可以实时监测全线各个变电站的设备运行情况,并可以直接对设备进行操作。目前电力行业普遍应用的是IEC60870-5-104 协议,城市轨道交通的电力监控系统也广泛使用这种协议。本文结合工程实践,简述了一个基于IEC60870-5-104 协议的电力监控系统主站程序的设计及其应用。
1 IEC60870-5-104协议简介
IEC60870-5 系列通信协议体系是国际电工委员会第57 技术委员会第3 工作组(IEC TC57WG 03)于1990年开始制订的用于变电站远动通信的协议体系,即“远动设备和系统”的第5 部分:传输规约。IEC60870-5系列协议根据应用领域定义了一系列配套标准:IEC60870-5-101 用于变电站与控制中心之间或不同系统之间的串行数据通信,IEC60870-5-102 用于电能计量信息的接入;IEC60870-5-103 用于继电保护信号接入,IEC60870-5-104 是IEC60870-5-101的网络版本。
2 IEC60870-5-104协议分析
2.1 过程与接口
IEC60870-5-104 协议采用平衡传输模式,不论网络中的设备属于主站还是厂站,都有权发起通讯。基本网络通讯的发起和终止,包括连接的建立、握手、数据的传输和连接的断开都遵循TCP/IP协议标准。协议采用TCP/IP 地址,其标准通讯端口号为2404,在任何情况下,厂站通过监听端口2404 来获取接入连接。
2.2 通讯过程控制及数据传输
IEC60870-5-104 协议通过一系列“控制信息”的交换来对整个通讯过程进行控制,确保传输的准确性。在进行任何有效设备数据传输前,首先要进行启动通讯操作,同理,在终止一个连接前,需要进行结束通讯操作。在数据传输过程中,有基于收、发计数的应答机制来确保传输数据的完整性、不重复性和连续性。对于闲置时间较长的连接,有通讯测试机制以随时确定通讯链路的有效性。
2.3 应用数据内容
应用协议数据单元APDU,是IEC60870-5-104 协议最大的数据传输单位。一个APDU 包含了一次数据传输的全部数据内容,是传输数据包的总称,通常称为帧,APDU 由应用规约控制信息APCI 和应用服务数据单元ASDU 组成。
2.3.1 APCI
APCI 具有固定的帧长度和帧结构,分别是起始字节(68H),APDU 长度字节(最大253)和4 个控制域字节。根据4 个控制域字节携带信息和结构的不同,APCI 被分为3 种类型,分别是:编号的信息传输(简称为I 帧);编号的监视功能(简称为S 帧);未编号的控制功能(简称为U 帧)。APCI 的类型同时决定了整个APDU 的类型。
I 帧,控制域标志:第一位八位位组的第一位bit=0,第三位八位位组的第一位bit=0。I 帧至少必须包含一个ASDU。I 帧报文必须有发送序号计数和给对方I 帧信息确认的接收序号计数。凡是传送遥测、遥信、遥控信息只能使用I 帧。
图1:网络通信结构
I 帧的报文结构如表1 所示。
S 帧:第一个八位位组的第一位bit=1 并且第二位bit=0,第三个八位位组的第一位bit=0。S 帧只包含APCI,只能用来给对方的报文序号确认,不传送任何信息。
S 帧的报文结构如表2 所示。
U 帧:第一个八位位组的第一位bit=1 并且第二位bit=1,第三个八位位组的第一位bit=0。U 帧只包含APCI,只能用来给对方的报文序号确认,用于控制链路传输开始或者终止信息,或者链路测试信息等:V 表示生效,C 表示确认,START:启动命令、STOP:停止命令,TEST:测试命令。同一时刻,TESTFR,STOPDT 或STARTDT 中只有一个功能可能被激活。
U 帧的报文结构如表3 所示。
2.3.2 ASDU
ASDU 包括数据单元标志符和信息体两部分组成。
(1)数据单元标志符包括:类型标志(1 个字节);可变结构限定词(1个字节);传送原因(2个字节);ASDU公共地址(2个字节)。
(2)信息体包括:信息对象地址(3 个字节);信息元素集(若干字节);时标(7 个字节(可选))。
类型标志定义了后续信息对象的结构、类型和格式。可变结构限定词,其最高位等于0 表示后续的信息体的地址是不连续的,等于1 表示后续的信息体的地址是连续的。其余7 位表示信息体的数量。
在本文中提到的电力监控系统中需要实现如下ASDU:
监视方向的ASDU,见表4。
控制方向的ASDU,见表5。
3 电力监控系统网络结构
上海轨道交通18 号线沿线有主变电站、开关站、混合变电站、降压变电站4 钟类型的变电站。环网电缆将主站变电站与车站变电站串成供电网络,各变电站内均采用变电站综合自动化系统,在车站综合弱电机房通过车站级的以太网交换机接入综合监控系统。
变电站综合自动化系统设有通讯管理机,完成所内各设备监控及远程通讯。通讯管理机配置两个以太网口,经过两个交换机后,再分别接入到车站综合弱电机房的主备通道上,通过专用传输网络完成与综合监控系统的远程通信,通信协议采用IEC60870-5-104规约。网络通信结构如图1 所示。
表1:I 帧的报文结构
表2:S 帧的报文结构
表3:U 帧的报文结构
表4:监视方向的ASDU
表5:控制方向的ASDU
4 电力监控系统软件设计及应用
4.1 软件结构和开发环境
轨道交通电力监控系统由两大部分构成:综合监控系统和变电站综合自动化系统。本文只介绍综合监控系统部分。根据IEC60870-5-104 协议,主站与厂站之间的通信是一种基于TCP/IP网络通用协议的典型的C/S 模式,其中厂站(即厂站端RTU)是服务器端,控制站(综合监控系统)是客户机端。这里在VS2010 开发环境上,采用C++编程语言,运用ACE 库实现TCP/IP 网络编程。
ACE 库提供了ACE_INET_Addr 类,ACE_SOCK_Connector 类,ACE_SOCK_Stream 类等用于网络编程。其中ACE_INET_Addr 类用于处理网络地址,ACE_SOCK_Connector 类用于客户端与服务端建立网络连接,ACE_SOCK_Stream 类用于数据传输,包括发送和接收数据以及断开连接等。通过应用ACE_SOCK_Connector 类的connect()方法,可以控制主站跟厂站得网络连接,通过应用ACE_SOCK_Stream 类的recv()方法,可以控制接收和发送通信链路上的APDU。
4.2 程序主线程设计
综合监控系统程序运行以后,由主站端发起连接请求后与变电站综合自动化系统建立TCP 连接。当TCP 连接成功后,主站发送U 帧中的STARTDT 后,等待厂站回应该命令报文后,然后发送I帧中的总召报文,开始接收厂站发来的变位信息和周期性扫描数据。根据厂站发送数据,进行有效性检查:确定报文的数据格式,报文序列校验,对象地址以及属性值。数据流程图如图2 所示。对于厂站上传的数据,进行有效性检查:确定报文序号、数据类型、信息对象地址是否有效。
图2
4.2.1 I 帧序号检验及处理
当通讯正常时,发送方每发送一个格式报文,其发送序号应加1,接收方每接收到一个与其接收序号相等的I 帧,其接收序号应加1,每次重新建立TCP 连接后,主站和厂站的接收序号和发送序号都清零。因此主站程序加入了计数器,存储接收序号。当主站程序每接收一个发送序号与其接收序号相等的I 帧后,计数器加1。若收到的I 帧不等于计数器,则认为是报文丢失或者报文重复,该I 帧将会被丢弃。若连续出现12 个序号不正确的I 帧,则主站断开连接并复位。
I 帧的接收和发送序号连续编号,终究是要溢出的。溢出之后的I 帧将会被丢弃。根据I 帧的定义,接收和发送序号的最大值是32767。为了确保序号连续,循环不止,首先主站程序将32767 后序号为0 的I 帧判断为连续编号,I 帧为有效帧,然后设定当计数器达到32767 时,下一个接收序号为0。这样就确保了在主站和厂站的通信过程中不会出现序号到达上限有效I 帧做无效处理的情况。
4.2.2 超时定义及处理
根据协议定义,主程序设定4 个定时器,分别设置为T0,T1,T2,T3。主站与厂站若未能在T0 时间内建立TCP 连接,程序自动复位进行TCP 重连。主站程序在发送U 帧或者I 帧后,若在T1 时间内未收到U 帧或者I 帧,则主动断开连接。主站程序在收到I 格式报文后,会在T2 时间内发送一个S 格式确认报文给厂站。主站若在T3 时间内未能收到任何报文,将向厂站发送U 格式的测试帧。
4.3 关键代码
4.3.1 对象定义
(1)全局对象定义:
ACE_SOCK_Connectorm_TCPConn;
ACE_SOCK_Streamm_TCPPeer;
(2)临时对象定义:
ACE_INET_Addraddr;(2404(通信端口), IP 地址(字符串类型,厂站地址));
(3)队列定义:
::PubSvr::OctetSeqm_ShowRecv, m_CurRecv;
::PubSvr::OctetSeqm_DataSend;
4.3.2 主要方法应用
(1)connect()
ACE_Time_Value timeout (T0, 0); //超时设置
intnRet= m_TCPConn.connect(m_TCPPeer,addr,& timeout);// 建立网络连接
(2)recv()
ACE_Time_Value timeout (1000/1000, (1000%1000)*1000);// 超时设置
ssize_tnRet = m_TCPPeer.recv(m_CurRecv.get_buffer(), m_CurRecv.length(), &timeout);//接收数据
(3)send()
ssize_t nRet1 = m_TCPPeer.send(m_DataSend.get_buffer(), m_DataSend.length());//发送数据
5 结语
IEC60870-5-10 协议具有兼容性好,稳定性强,可靠性好的特点,对于城市轨道交通的电力监控系统,应用IEC60870-5-104 协议能确保整个系统的稳定和实时数据的准确。本文提到的基于IEC60870-5-104 协议的电力监控系统的设计方案能有效的处理应用协议时出现的几个常见问题。并且运用ACE 库相关内容能简化程序中网络编程代码,提高程序网络通信性能。本文中的主站程序,已应用到实际工程中,整体系统运行高效稳定。