石文江,隋 珺,朱亮亮
(大连供电公司电网调度中心,辽宁 大连 116011)
采用数据集以“发布/订阅”方式进行公共数据交换的GOOSE在智能变电站过程总线上被用于跳合闸命令及状态信息的快速传递,它工作于以太网链路层,直接服务于应用层保护测控等装置。因此GOOSE报文的正确解析是智能变电站过程层调试和应用软件开发的重要基础;是故障定位的依据;是保障智能变电站可靠运行的重要技术手段。图1是通过MMSEthereal抓包的GOOSE实例报文。
图1 PCS978主变保护装置GOOSE跳闸报文
发布者 (如 PCS978主变保护装置)的GOOSE控制块GoCB[1]定时根据虚端子映射表更新与IECGoossePdu[2]变量列表成员相对应的数据集,依据 GOOSE 的应用协议描述,经 ASN.1[3]BER[4]编码后将数据以FIFO方式压入发送缓冲区,由网络适配器通过以太网交换机采取多播或单播的形式发送给订阅者 (如主变主一次智能操作箱)。特定事件发生后,立刻启动上述流程,并以先密后疏(2 ms至10 s)的形式,快速重传以提高可靠性[5]。订阅者根据新数据通知读取接收缓冲区中的GOOSE数据,经MAC过滤、ASN.1 BER解码、GOOSE报文状态号 (StNum)和顺序号 (SqNum)的效验等解析出合法的应用数据[6]。实现正确解析的一个重要的前提是订阅者必须获得发布者的ICD自描述文件,以获得多播MAC地址、APPID、数据集成员顺序等重要参数,这些参数可抽取并归纳到发布者的GOOSE配置文件中。图2对GOOSE信息传输流程进行了概括描述。本文主要研究的对象是以太网链路层GOOSE报文。
图2 GOOSE信息传输模型
正确理解抽象语法记法 (ASN.1)及其基本编码规则 (BER)才能对GOOSE报文的应用协议数据单元 (APDU)和应用服务数据单元 (ASDU)进行编解码。
2.1.1 TLV三联码结构
ASN.1 BER采用大端编码的8位组 (octet字节),既从左到右分别是bit 7至bit 0。信息元由Tag、Length、Value三部分组成,每部分由1个及以上字节组成,因此又称TLV三联码,它可以嵌套,既其Value部分可以包含其它的TLV三联码。Tag部分用来标识信息元的结构和类型,Tag的高2位 (bit 7、bit 6) 为 tag class,00表示 “UNIVERSAL通用”;01表示“APPLICATION应用”,如GOOSE;10表示“context-specific上下文”,所描述信息的结构、顺序和含义需由双方事先约定,它在GOOSE报文中应用的十分广泛;11表示“PRIVATE私有”。Tag的bit 5为tag form,0表示“Primitive基本类型”,如布尔型、整型、字符串等;1表示“Constructed组合类型”,既数据单元中含有2种以上基本类型的数据元,GOOSE报文就属于这种情况。Tag的其余位Bit 0~Bit 4主要定义为数据类型,其中UNIVERSAL Tag的数据类型为ASN.1标准所规定,不能改变,APPLICATION Tag的数据类型可由具体应用决定,如可作为Tag的编码序号。如图3中的“goosePdu[APPLICATION 1]”表示数据类型为1,Tag编码为0x61。Length部分用来表示Value部分的字节数。
2.1.2 TLV的Tag及Length的编码方法
TLV的Tag的低五位 (Bit0~Bit4)用来表示数据类型 (或编码序号),因此应用协议描述中不同数据类型的个数如果超过30个,或采用自动Tag编码的个数超过30个,则Tag的字节数将由1个扩展为多个,既第1个字节的低五位为全1码,中间字节的bit7为1,最后字节的bit7为0,Tag的数据类型 (或编码序号)由中间字节和最后字节的bit6~bit0从左向右合并而得,根据图3的应用协议描述,Tag的编码序号最大为11,因此GOOSE报文中的Tag只有一个字节。Tag的低五位(Bit0~Bit4)被用来表示数据类型还是编码序号,由该类型的Tag在模块定义中是否声明隐式 (IMPLICIT TAGS)或者在模块定义中标识为自动编码(AUTOMATIC TAGS),如果是,则数据集成员IMPLICIT左侧[]中的数字为Tag编码序号,或由ASN.1编解码器对SEQUENCE、SET和CHOICE类型自动从0开始,步长为1进行各成员Tag的自动编码;否则为数据类型,如IECGoosePdu中allData数据集内成员的Tag编码。GOOSE报文采用context-specific的Tag编码序号,即图3中的成员从gocbRef到 numDatSetEntries的 Tag编码为0x80到0x8a,由于allData属于SEQUENCE OF数据结构,因此其bit5=1(Constructed组合类型),Tag编码为Oxab。
TLV的Length有两种表达方式:定长 (Definite Form)和不定长 (Indefinite Form)。采用定长方式时,当长度不大于127个字节 (8位)时,Length只有1个字节;当长度大于127个字节时,Length需在多个字节中编码,此时第一个字节的低7位表示的是Length本身的长度,后续Length字节表示Value的长度。采用不定长方式时,Length只有一个字节,固定编码为0x80,但在编码结束后需以连续两个0x00结尾,这种方式的一个好处是,在编码没有结束的情况下,发布者可以先发送部分消息给订阅者。GOOSE报文的TLV的Length采用定长方式。
根据 MMS:ISO 9506-2:2003 的规定[7],GOOSE报文中主要采用4种数据类型:BOOLEAN(布尔)、BIT-STRING(字符串)、INTEGER(32位整数)、UtcTime(UTC时间类型),相应APPLICATION Primitive Tag编码分别为 0x83、0x84、0x85,0x91,这些APPLICATION Primitive Tag编码将在图3中allData数据集序列中出现。
GOOSE的应用协议描述文件采用ASN.1语法规则,共有12个部分,本文摘取与GOOSE报文解析相关的模块定义和IECGoosePdu部分,见图3。
在图3中,SEQUENCDE为由不同类型的值组成一个有序结构:SEQUENCDE OF类似于C语言中的动态数组,所有成员都属于一个类型,数目不定;CHIOCE为在类型中选择。allData数据集成员序列的内容将由发布者GOOSE的工程配置文件中确定,该文件为发布者ICD自描述文件的一部分。
GOOSE的工程配置文件是从发布者的ICD自描述文件抽取出来的,主要用于描述以太网链路层基本参数;VLAN号、优先级、AppID应用标识、报文传送的时间要求等,以及allData数据集序列的具体成员。如图4中数据集序列的第一个成员指向主变智能操作箱 (LD:PT6601API_BCU)的断路器控制逻辑节点 (LN:CK_GOIN CSWI1)的主变主一次断路器分闸位置控制继电器 (B04.highout.Obj1.OUT_RELAY_F)。$ST$OpO-pn$general用于属性描述,含义为:状态量、分闸操作、通用。
图4 GOOSE的工程配置文件
根据表1,链路层以太网帧头由PRE(先导字节,7个 10101010)和 SFD(帧开始标志,10101011)组成,这一部分和最后4字节的帧检查序号由网络适配器自动滤掉。图1报文中01 0c cd 01 01 61为目的MAC地址,它为多播地址,根据IEC 61850-9-2标准[8],推荐的范围为01-0ccd-01-00-00到01-0c-cd-01-01-ff。00 10 00 00 00 61为源MAC地址,为单播地址。 “源MAC地址”报文后没有紧跟着4字节的802.1q的TAG标签[9]。TAG由2字节802.1q的报文类型标识码TPID(0x8100)和2字节TCI组成,其中TCI中的高3位 (bit7~bit5)为优先级标识 (根据图4,Priority=4),后12位为VLAN的标识码VID(根据图4,VID=0),bit4位为公认格式标识CFI,对于过程总线而言CFI=0,由此TAG报文段应为81 00 80 00。图1实例报文中没有TAG报文段的原因为以太报文信息通过交换机access口下路时,TAG标识将被脱去,否则普通网卡无法识别该报文而弃之。88 b8为GOOSE以太网报文类型。01 61为APPID应用标识 (十进制353),GOOSE APPID的取值范围为0~ox3fff,不同应用的APPID在一个系统中应具有惟一性。00 f7为报文长度 (247字节),它是从APPID开始至帧检查序号前的PDU报文长度。随后的00 00 00 00为保留字节。紧接着的是IECGoosePdu应用层数据[10]。
通过这段报文解析,作为保证GOOSE报文实时传输的二层以太网交换机的优先级、VLAN、多播等配置情况通过正常的报文抓包是无法看出的,必须对交换机的当前配置进行认真核对,并通过严格的试验手段加以测试,以保证信息的有效隔离和高优先级报文的快速传输。但多播地址、GOOSE报文类型、APPID应用标识需要结合报文解析加以严格印证,如保证APPID的惟一性、多播规划符合设计要求等。
根据图3的模块定义部分“goosePdu[APPLICATION 1]IMPLICIT IECGoosePdu…”及 “IECGoosePdu∷=SEQUENCE”可知,整个GOOSE块采用 tag class=context-specific(上下文)、tag form=constructed、编码序号=1的Tag标识,即0x61。由此可以摘取出IECGoosePdu的以太网报文部分,见表2。
IECGoosePdu以太网实例报文的解析需要重点集中在:事件序号StNum、发送序号sqNum、测试状态test、配置版本变更 confRev、需要配置 ndsCom、allData所有成员的实时状态是否正确。
表1 以太网帧结构
表2 IECGoosePdu以太网实例报文解析
事件序号StNum应在新的GOOSE事件出现时,既allData数据集成员的实时状态有变化,发布者应将StNum加1。发布者每发出1个GOOSE报文,应将发送序号SqNum加1,上电运行或复位时SqNum和StNum的初始值为1,0为保留值。订阅者接收到的StNum、SqNum的记录应是连续的,StNum的增加还要和allData的本次和上次记录对比有变化相一致,订阅者发现异常应产生报警并拒绝执行发布者的GOOSE命令或采用其状态信息。
测试状态test在实际使用时,常用于反应试验把手、检修压板等的位置状态,订阅者接收到test=TRUE的报文,可接收其状态信息但应拒绝执行发布者的GOOSE命令,因此它在设备检修试验,尤其是不动一次设备情况下的遥控实验中具有重要意义。相关功能需按照设计要求在test真假值变化时进行严格测试。
发布者在allData数据集成员发生变化时,如:增加或减少成员数目、改变成员的先后顺序等,应将配置版本变更confRev加1。订阅者发现confRev发生变化时应产生报警,并重新读取发布者的ICD自描述文件,取得allData数据集相应的变化配置。目前国内大部分厂家的IED设备需要人工干预才能进行配置修改。confRev初始值建议为1,0保留。
发布者在接收订阅者数据请求时数据集中只有部分成员实时数据,或allData数据集中存在无法获得当前值的成员 (如某些inputs)时,也就是说allData中存在NULL或老数据,应将NdsCom设为TRUE,告知数据集需要进一步更新。此时订阅者需要判断是否采用发布者的数据。allData中NULL编码结构为 [Tag 0空],如:83 00_。
在采用IEC 61850-9-2标准过程层设备的实际测试中,发现过程总线上除了GOOSE和SV多播、单播等报文外,还存在着大量 TCP、ARP、UDP、ICMP等协议的数据报文,大部分是不需要的数据,亟待进一步规范过程总线上IED设备网络适配器的配置,以消减这部分垃圾数据,从而保证过程总线上的数据进行清晰有序地流动。另一方面,调试中使用的MMSEthereal软件功能很强大,但没有中文界面且不够直观,不便于供电企业维护人员的使用,需要研发具有自主知识产权、针对性强且界面友好的IEC 61850过程总线以太网报文解析工具。
[1] IEC 61850-7-2:Communication networks and systems in substation-Part 7-2:Basic communication structure for substation and feeder equipment-Abstract communication service interface(ACSI).
[2] IEC 61850-8-1:Communication networks and systems in substations-Part 8-1:Specific communication service mapping(SCSM) -Mappings to MMS(ISO/IEC 9506-1 and ISO/IEC 9506-2)and to ISO/IEC 8802-3.
[3] ISO/IEC 8824-1:1999,Information technology-Abstract Syntax Notation One(ASN.1)
[4] ISO/IEC 8825-1,Information technology-ASN.1 encoding rules:Specification of Basic Encoding Rules(BER),Canonical Encoding Rules(CER)and Distinguished Encoding Rules(DER).
[5] 段吉泉.变电站GOOSE报文在IED中的实时处理 [J].电力系统自动化,2007,31(11):65-69.
[6] 殷志良.基于IEC 61850的通用变电站事件模型[J].电力系统自动化,2005,29(19):45-50.
[7] ISO 9506-2:2003,Industrial automation systems-Manufacturing Message Specification-Part 2:Protocol specification.
[8] IEC 61850-9-2:Communication networks and systems in substations-Part 9-2:Specific Communication Service Mapping(SCSM) -Sampled values over ISO/IEC 8802-3.
[9] 王 松.数字化变电站继电保护的GOOSE网络方案 [J].电力系统自动化,2009,33(3):51-54.
[10] 王 松.GOOSE报文过滤方法研究[J].电力系统自动化,2008,32(19):54-57.
[11] 黄少雄.智能变电站GOOSE网配置方案研究 [J].东北电力技术,2010,31(10):47-49.
[12] 周 满.基于数字化变电站的继电保护改进方案[J].东北电力技术,2010,31(4):29-37.