Goose协议简介Goose是面向通用对象的变电站事件的简称,它是IEC61850中的一种快速报文传输机制,用于传输变电站内IED之间重要的实时性信号。传输机制GOOSE报文的发送按下图(图一)所示的规律执行。其中T0是心跳时间,装置正常每隔T0时间发送一次当前状态,此时的报文成为心跳报文。当GOOSE数据集中任何一个成员的数据值发生变化,装置会马上发送该数据集的所有数据,然后间隔T1发送第二帧以及第三帧,间隔T2发送第四帧,间隔T3发送第五帧,后续报文的发送时间间隔逐渐增加,直到最后报文间隔恢复为心跳时间。图一T0——稳定条件(长时间无事件)下重传(T0)——稳定条件下的重传可能被时间缩短T1——时间发生后,最短的传输时间T2,T3——直到获得稳定条件的重传时间GOOSE报文心跳时间间隔为图中5—1中的T0。按照国内IEC61850实施规范的要求,报文允许生存时间为2T0,如果接收端超过2T0时间内没有收到报文则判断报文丢失;在报文允许生存时间的2倍时间内没有收到下一帧GOOSE报文即判断为通信中断。判断中断后,装置将发出GOOSE断链报警。因此在通信过程中,GOOSE通过不断自检实现了装置间回路通断的智能化监测,克服了传统电缆回路故障无法自动发现的缺点。IEC61850第一版中对于GOOSE报文重发的具体时间间隔值和重发次数并没有做出明确说明。按照目前国内某些地区工程的实施习惯,T0一般设置成5000ms,T1设置成2ms,T2设置成2倍T1的时间,T3为2倍T2的时间。所以变位报文的4次重传时间间隔为:第一次重传间隔2ms,第二次2ms,第三次4ms,第四次8ms。经过四次重传后GOOSE报文强制恢复为心跳报文。通信的实现1.Goose服务的映射采用GOOSE传输保护跳闸等重要的实时性报文,应满足继电保护“可靠性、速动性”的要求,因此GOOSE在IEC61850中属于快速报文传输服务。IEC61850规定GOOSE报文传输的延迟应在4ms内。为了降低报文处理过程的延时,保证数据传输的实时性,IEC61850在定义GOOSE服务实现机制时,对原有的TCP/IP协议栈进行了裁剪,去掉了网络层、传输层和会话层,如下图所示。IEC61850-8-1采用ASN.1语法规则定义了GOOSE服务的应用层协议数据单元——GOOSEPDU。GOOSEPDU在经过表示层ASN.1规则编码后,生成的数据包不经TCP/IP协议,直接映射到数据链路层和物理层传输,避免了通信堆栈造成的延时,保证了报文传输的快速性。图二TCP/IP模型中传输层的主要作用是在发送主机和接收主机之间提供可靠的数据传输。为了保证数据传输的可靠性,TCP/IP协议规定接收端必须发回确认信息,若数据丢失则发送端必须重新发送。另外TCP/IP协议还有“按序交付、差错检测”等机制保证数据传输的可靠性。由于GOOSE服务在映射时去掉了传输层和网络层,因此这些可靠性机制也已不再使用,必须采取其他措施保证GOOSE传输的可靠性。为了保证GOOSE传输的可靠性,IEC61850主要采取了以下措施:(1)快速重发机制。如图一所示,当数据集成员发生变位后,装置会立刻发出第一帧GOOSE变位报文,随后在很短的时间内,装置会补发第二帧,第三帧报文......这样即使第一帧报文发出后丢失,也会有第二帧报文即使抵达接收端,从而保证了GOOSE传输的可靠性。另外处于可靠性考虑,报文重发的时间间隔逐渐被拉长,有效的避免了网络负载过重,达到了可靠性和网络流量的平衡。(2)链路通断自检。GOOSE报文中携带有TimeAllowedToLive(报文存货时间)参数。如齐纳文所述,如果接收端在TimeAllowedToLive时间内未收到任何报文,则接收端会判断报文丢失;在其2倍时间内灭有收到下一帧GOOSE报文,即判断为通信中断。因此在通信过程汇总,GOOSE实际上是在不断自检,由此提高了变电站二次回路的可靠性。(3)GOOSE报文中携带有StNum和SqNum参数。StNum为状态序号,用于记录GOOSE数据总共的变位次数。GOOSE数据集成员的值每改变一次,StNum加1。SqNum为顺序号,用于记录稳定状态下发出报文的帧数,装置每发出一帧GOOSE报文,SqNum应该加1;当有GOOSE数据变位时,该值归0,从头开始重新计数。因此StNum和SqNum的变化有严格的规律。GOOSE接收方通过StNum和SqNum的变化规律,能够判断报文是否有丢帧、是否有错序、是否有重复等。例如,GOOSE接收方能够通过StNum和SqNum变化的连续性判断GOOSE报文是否丢帧,如果StNum和SqNum不连续,说明报文有丢帧。GOOSE报文错序是指由于受网络传输延时的影响,后发出的报文比先发出的报文先到达接收端装置。GOOSE接收方能够依据StNum和SqNum一次递增的特点,检查GOOSE报文是否错序,以此判断网络是否异常。GOOSE报文重复是指发送方连续发送两帧StNum和SqNum序号完全相同的报文。GOOSE接收方通过检查两帧报文的序号是否相同,能够判断报文是否重复。2.GOOSEPDU的结构定义IEC61850-8-1SpecificProtocol::=CHOICE{gseMngtPdu[APPLICATION0]IMPLICITGSEMngtPdu,goosePdu[APPLICATION1]IMPLICITIECGoosePdu,}IECGoosePdu::=SEQUENCE{gocbRef[0]IMPLICITVISIBLE-STRING,timeAllowedtoLive[1]IMPLICITINTEGER,datSet[2]IMPLICITVISIBLE-STRING,goID[3]IMPLICITVISIBLE-STRINGOPTIONAL,t[4]IMPLICITUtcTime,stNum[5]IMPLICITINTEGER,sqNum[6]IMPLICITINTEGER,Test[7]IMPLICITBOOLEANDEFAULTFALSE,confRev[8]IMPLICITINTEGER,ndsCom[9]IMPLICITBOOLEANDEFAULTFALSE,numDatSetEntries[10]IMPLICITINTEGER,allData[11]IMPLICITSEQUENCEOFData,Security[12]ANYOPTIONAL,--为数字签名预留}PDU各参数的含义:(1)gocbRef:GOOSE控制块引用,由分层模型中的逻辑设备名、逻辑节点名、功能约束和控制块名级联而成。(2)timeAllowedtoLive:报文允许生存时间。(3)datSet:GOOSE控制块所对应的GOOSE数据集引用名。由逻辑设备名、逻辑节点名和数据集名级联而成。报文中Data部分传输的就是该数据集的成员值。(4)goID:该参数是每个GOOSE报文的唯一标识,属于可视字符串类型,长度不能超过65个字节。该参数的作用和目的地址、APPID的作用类似。接收方通过对目的地址、APPID和GOOSEID等参数进行检查,判断是否是其所订阅的报文。GOOSEID的默认值是GOOSE控制块引用。(5)t:事件时标,其值为GOOSE数据发生变位的时间,而非装置发出本条报文的时间。(6)stNum:状态序号stNum,用于记录GOOSE数据发生变位的总次数。(7)sqNum:顺序号sqNum,用于记录稳态情况下报文发出的帧数。按照国内IEC61850工程实施规范的要求,装置上电时发出的第一针GOOSE报文中,stNum=1,sqNum=1。(8)test:检修标识,用于表示发出该GOOSE报文的装置是否处于检修状态。当检修压板投入时,装置发出的GOOSE报文中test标识应为TRUE。GOOSE接收端装置应将接受的GOOSE报文中TEST位与自身的检修压板状态进行比对,只有当两者一致时才将信号作为有效处理或动作。(9)confRef:配置版本号,是一个计数器,代表GOOSE数据集配置被改变的次数。当对GOOSE数据集成员进行重新排序、删除等操作时,GOOSE数据集配置被改变。配置每改变一次,配置版本号应加1。(10)ndsCom:该参数是一个布尔类型变量,用于指示GOOSE是否需要进一步配置。例如,如果参数datSet为空,那么ndsCom值应该变为TRUE,表示GOOSE控制块需要进一步配置;如果GOOSE数据集成员的个数超过规定的范围,ndsCom值也为true,表示数据集成员需要进行删减。(11)numDatSetEntries:数据集条目数,表示GOOSE数据集中含的成员个数,相应的报文Data部分含有相同个数的数据条目。(12)Data:该部分是GOOSE报文所传输的数据当前值。Data部分各条目的含义、先后次序和所属的数据类型都是由配置文件的GOOSE数据集定义的。Data::=CHOICE{array[1]IMPLICITSEQUENCEOFData,structure[2]IMPLICITSEQUENCEOFData,boolean[3]IMPLICITBOOLEAN,bit-string[4]IMPLICITBITSTRING,integer[5]IMPLICITINTEGER,unsigned[6]IMPLICITINTEGER,--shallnotbenegativefloating-point[7]IMPLICITFloatingPoint,--[8]isreservedoctet-string[9]IMPLICITOCTETSTRING,visible-string[10]IMPLICITVisibleString,generalized-time[11]IMPLICITGeneralizedTime,binary-time[12]IMPLICITTimeOfDay,bcd[13]IMPLICITINTEGER,--shallnotbenegativebooleanArray[14]IMPLICITBITSTRING,objId[15]IMPLICITOBJECTIDENTIFIER,mMSString[16]MMSStringUtc-time[17]IMPLICITNULL}3.数据帧结构GOOSEPDU在映射到数据链路层后,采用ISO/IEC8802-3版本的以太网数据帧。这种数据帧其实就是带IEEE802.1和IEEE802.1Q标记的以太网数据帧,具体格式如下:作用字节数目的地址6源地址6优先级标志TPID2(固定值0x8100)TCI2优先级3bitCFI1bitVLANID12bit以太网类型2(固定值0x88B8)APPID2长度2(APPID开始到APDU结束)保留12保留22APDU不固定帧校验序列ISO/IEC8802-3数据帧中各字段的含义如下。(1)目的地址:目的地址长度为6字节。IEEE规定,对于GOOSE报文的目的地址,前4个字节固定为“010CCD01”。IEC61850建议的组播地址取值范围为“01-0C-CD-01-00”到“01-0C-CD-01-FF”.变电站中IED的网卡接收到组播报文后,应根据设置好的组播地址过滤算法判断是否为该组成员。如果是,则接受并传给装置CPU;如果不是则丢弃报文。(2)VLAN和用户优先级。GOOSE报文默认优先级为4,而其它报文优先级一般为1,从而保证在过程层网络上GOOSE和采样值报文能够优先传输。(3)以太网类型值。IEC61850中各种报文的以太网类型已经由IEEE的著作权注册机构进行了注册,是独一无二的;其中GOOSE报文的以太网类型值是0x88B8。(4)APPID。应用标示APPID长度为2个字节。对于网卡接受上来的每一帧数据,应用程序会判断APPID的值。如果与CID文件中预先配置的值一直才继续解析报文,否则丢弃报文。APPID值由“APPID类型”加“实际ID值”两部分组成。AP