一种IEC 61850 GOOSE报文的组织方法
技术领域
本发明涉及一种IEC 61850 GOOSE报文的组织方法,属于电力系统自动化领域。
背景技术
智能变电站是智能电网的重要一环。在传统变电站中,模拟量采集、开入信号、跳闸和联闭锁信号等都是通过大量的硬接线实现的。在智能变电站中,过程层电子式互感器采集的信号经合并单元汇总后,通过光纤发布到以太网上,智能开关也将自己采集的开关状态量发布到以太网上,保护测控装置采用组播订阅的方式获取所需的信息,并且通过网络将保护出口信号、开关分合闸信号、间隔层装置之间的联闭锁信号等发布到以太网上。IEC 61850详细定义了通用面向对象的变电站事件(GOOSE)报文以及相应的服务模型,这类报文在进行协议栈映射时均只包含物理层、数据链路层、表示层和应用层,去掉网络层、传输层、会话层是为了提高传输效率。GOOSE报文包括控制信息以及数据集成员数据,用于实现跳合闸、联闭锁等实时性要求很高的场合,其传输延时要求小于3毫秒。GOOSE数据集有可能定义得较大,包含较多的数据成员。在每个GOOSE报文中发送全部的数据集成员,由订阅方根据其INPUT语句进行有选择的解码接收。
现有方法每次发送GOOSE报文时都对所有控制信息以及所有数据集成员进行完整的ASN.1编码,因为ASN.1编码是比较耗时的操作,所以直接导致了GOOSE发送延时增加很多。尤其在数据集成员较多的情况下,延时更加明显。
发明内容
本发明所要解决的技术问题是,提出一种IEC 61850 GOOSE报文的组织方法,当GOOSE控制块监视的数据集成员发生变化、以及GOOSE报文重发送时,能够高效、实时地对控制信息和数据进行编码,缩短报文的生成时间,提高GOOSE报文传输的实时性。
为了解决上述问题,本发明采用了以下技术方案。
一种IEC 61850 GOOSE报文的组织方法,其特征是:系统初始时为每一个GOOSE发布控制块分配一块足以容纳最大以太网帧长度的编码缓冲区EncBuf,编码后报文起始的指针pEncBuf,编码后报文长度的变量EncBufLen,每个数据集成员以及控制信息在编码缓冲区EncBuf中的位置指针;
系统启动发送GOOSE初始数据时,在编码缓冲区EncBuf中进行全部数据集成员数据以及控制信息的ASN.1编码,对原始数据类型的数据采用固定长度的ASN.1编码,同时记录每个数据集成员以及控制信息在编码缓冲区EncBuf中的位置指针,记录编码后报文长度EncBufLen和起始指针pEncBuf;
当GOOSE控制块监视的数据集成员发生变化时,对变化的数据按照其对应的编码位置指针采用固定长度重新编码,对控制信息中的报文存活时间timeToLive、报文刷新时间utcTime、状态号stNum、顺序号sqNum按照其对应的编码位置指针,采用固定长度重新编码;当进行GOOSE报文重发送时,对控制信息中的报文存活时间timeToLive、报文刷新时间utcTime、顺序号sqNum按照其对应的编码位置指针,采用固定长度重新编码。
数据集成员数据以及控制信息的重新编码只针对数据本身部分,不包括该数据对应的类型标签和数据长度。
对于无符号整型变量,其固定长度编码的数据长度总是为该数据类型的长度加1,数据区从低字节到高字节分别是一个字节为0,然后按大端字节序排放该数据类型的数据。
对于带符号整型变量,其固定长度编码的数据长度总是为该数据类型的长
度,数据区从低字节到高字节按大端字节序排放该数据类型的数据。
当处于检修状态时,控制信息test置1,按照其对应的编码位置指针,采用固定长度重新编码。
整型变量的ASN.1编码,通常去掉负数高字节冗余的0xff,去掉正数高字节冗余的0x0,但正数要保证最高bit不为1,否则要在其前面补充一个字节0x0,其目的是通过最高bit区分正负数。因此,对于整型变量,随着其取值的不同,其ASN.1编码的数据长度不一定相同,造成同一数据集成员数据、GOOSE报文控制信息在每次编码时位置不一定一样。而固定长度的ASN.1编码不存在这个问题。对于GOOSE报文中可能出现数据变化的布尔量、固定长度位串量、UTC时间、单双精度浮点型数据,其数据长度是固定的,不需特殊处理。
本发明的积极效果在于:由于对原始数据类型的数据采用固定长度的ASN.1编码,因此可以在数据变化发送、重发送时精确定位需要重新编码的控制信息和数据集成员数据。报文的部分内容虽然发生了变化,但所有控制信息和数据集成员数据的编码位置保持不变,没有变化的数据集成员数据以及控制信息不需要重新编码,大大缩短了GOOSE报文的组织时间,提高了GOOSE报文传输的实时性。
附图说明
图1是GOOSE报文示意图。
具体实施方式
下面结合附图和具体实施例进一步说明本发明。
1、首先实现原始数据类型数据的固定长度ASN.1编码。
整型变量的ASN.1编码,通常去掉负数高字节冗余的0xff,去掉正数高字节冗余的0x0,但正数要保证最高bit不为1,否则要在其前面补充一个字节0x0,其目的是通过最高bit区分正负数。因此,对于整型变量,随着其取值的不同,其ASN.1编码的数据长度不一定相同,造成同一数据集成员数据、
GOOSE报文控制信息在每次编码时位置不一定一样。例如:控制信息stNum为无符号32位整型变量,其有效取值范围为1-0xffffffff,当stNum为1时,其ASN.1编码的数据长度为1,数据区为0x01;当stNum为0xff时,其ASN.1编码的数据长度为2,数据区为0x0,0xff;当stNum为0xffff时,其ASN.1编码的数据长度为3,数据区为0x0,0xff,0xff;当stNum为0xffffffff时,其ASN.1编码的数据长度为5,数据区为0x0,0xff,0xff,0xff,0xff。
每次发送GOOSE报文时,可能发生变化的控制信息和数据集成员数据的数据类型包括:整型、布尔型、固定长度位串型、UTC时间类型、单精度浮点型、双精度浮点型。除了整型,其它类型都是固定长度的ASN.1编码。因此重点实现整型变量固定长度的ASN.1编码。
(1)对于无符号整型变量,其固定长度编码的数据长度总是为该数据类型的长度加1,数据区从低字节到高字节分别是一个字节为0,然后按大端字节序排放该数据类型的数据。
(2)对于带符号整型变量,其固定长度编码的数据长度总是为该数据类型的长度,数据区从低字节到高字节按大端字节序排放该数据类型的数据。
2、系统初始时为每一个GOOSE发布控制块分配一块足以容纳最大以太网帧长度的编码缓冲区EncBuf,编码后报文起始的指针pEncBuf,编码后报文长度的变量EncBufLen,每个数据集成员以及控制信息在编码缓冲区EncBuf中的位置指针。
3、系统启动发送GOOSE初始数据时,在编码缓冲区EncBuf中进行全部数据集成员数据以及控制信息的ASN.1编码,对原始数据类型的数据采用固定长度的ASN.1编码,同时记录每个数据集成员以及控制信息在编码缓冲区EncBuf中的位置指针,记录编码后报文长度EncBufLen和起始指针pEncBuf。
编码后报文长度EncBufLen和起始指针pEncBuf在系统运行期间保持不
变,用于后续报文的发送。ASN.1编码是从缓冲区的后部向前部依次编码,分别是数据集成员n,数据集成员n-1……,数据集成员个数numDataEntries,是否需要进一步配置GOOSE控制块标志needsCommissioning,版本号confRev,检修标志test,顺序号sqNum,状态号stNum,报文刷新时间utcTime,应用标识号appID,数据集名称dataSetRef,报文存活时间timeToLive,GOOSE控制块索引名gcRef。每个数据集成员以及控制信息在编码缓冲区EncBuf中的位置指针记录的也是该编码数据最后一个字节的位置指针。
4、当GOOSE控制块监视的数据集成员发生变化时,对变化的数据按照其对应的编码位置指针采用固定长度重新编码,对控制信息中的报文存活时间timeToLive、报文刷新时间utcTime、状态号stNum、顺序号sqNum按照其对应的编码位置指针,采用固定长度重新编码。
5、当进行GOOSE报文重发送时,对控制信息中的报文存活时间timeToLive、报文刷新时间utcTime、顺序号sqNum按照其对应的编码位置指针,采用固定长度重新编码。
6、当处于检修状态时,控制信息test置1,按照其对应的编码位置指针,采用固定长度重新编码。
由于使用原始数据类型固定长度ASN.1编码,可以精确定位每一个变量的编码位置,只对当前要发送的GOOSE报文中有变化的数据集成员数据以及控制信息进行重新编码,并且只针对数据本身部分进行编码,不包括该数据对应的类型标签和数据长度,以进一步提高编码效率。