GOOSE报文详解
Goose报文在网络上传输时采用的是OSI模型,但只用到OSI网络模型七层中的四层,应用层、表示层、数据链路层和物理层,传输层和网络层为空。应用层定义协议数据单元PDU,经过表示层编码后,不采用TCP/IP协议,而是直接映射到数据链路层和物理层。这种映射方式的目的是避免通信堆栈造成传输延时,从而保证报文传输、处理的快速性。
GOOSE报文在MAC层的帧结构包括:源MAC地址、目的地址即组播地址、报文类型、四字节Tag、APPID、报文长度、四字节的保留和GOOSEPDU。Goose具体报文格式如图0所示[0]。
图0 Goose报文格式
Goose举例报文(十六进制):
01 0C CD 01 00 51 00 1E 4F D3 AE 41 81 00 80 42 88 B8 00 33 00 90 00 00 00 00 61 81 85 80 08 67 6F 63 62 52 65 66 31 81 05 00 00 00 27 10 82 07 64 61 74 53 65 74 31 83 05 67 6F 49 44 31 84 08 4E F2 85 E1 F7 CE D9 00 85 05 00 00 00 00 01 86 05 00 00 00 00 01 87 01 00 88 05 00
00 00 00 01 89 01 00 8A 05 00 00 00 00 09 AB 36 83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00 83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00 83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00
分析如下(可结合Ethereal解析):
1、01 0C CD 01 00 51
目的MAC地址
2、00 1E 4F D3 AE 41
源MAC地址
3、81 00 80 42
GOOSE报文支持IEEE 802.1Q/P优先级技术,IEEE 802.1Q为VLAN技术的标准,IEEE 802.1P为报文优先级标准。
这4个字节共同组成goose报文的tag位。Tag是有两个字节的TPID(标签协议标识)和2个字节的TCI(标签控制信息)组成。TPID配置为0x8100表示goose报文加入了优先级标识。TPID和TCI组成如图1所示:
图1:PID和TCI组成
TCI中12位VID,1位CFI和3位Priority(优先级)。12位VID可以配置4096个VLAN,CFI一般配置为0,3位Priority可以分为8个优先级:其中只配置了0-4级,5、6、7及保留未来使用。
4、88 B8
以太网类型值
0x88 B8为goose,0x88 B9为GSE,0x88 BA为采样值。如图3所示
图3 以太网类型值分配
5、00 33
APPID
两字节的最高两位对照图3解释。所以此处APPID=51(D)
6、00 90
长度=144(D)
长度字节数包含从APPID开始以太网PDU头和APDU(应用协议数据单元)的长度。长度是8+m,m是APDU的长度,m<1492。
为什么是8+m?这个8个字节分别是APPID 2个字节,长度2个字节,以及后面的保留1、保留2各两个字节。对应到本帧报文的8个字节为:00 33 00 90 00 00 00 00。
7、00 00 00 00
保留1、保留2。为将来的应用扩展使用,缺省值为0。
8、61 81 85
GoosePDU开始(APDU应用协议数据单元)
搞清楚这个,得看ASN.1编码,此处稍作解释。ASN.1的传输基于八位位组的字节序列来进行的,它的编码规则遵循标记TAG(也有称TYPE)、长度LENGTH、值V ALUE的格式,简称TLV,如图4所示。
图4 ASN.1编码格式
对图4解释:
TAG:
一般占1或者2个字节。TAG的组成如图5所示,
图5 TAG编码格式
Bit7 Bit6不解释,如上图。
Bit5:=0表示V ALUE为简单结构,即只包含数值内容。=1表示V ALUE为复合结构,即V ALUE还包含了TLV结构,直至TLV结构中Bit5为0.
Bit4~0:由于最高的3位(7、6、5)作为它用,因此TAG(bit4~0)只能表示到11111(b)=31(D)。若想表示>31是,此时TAG就要占2个字节(第1个字节后面的被称为扩展字节)。此时TAG 编码格式如图6所示。
图6 大于31时TAG编码
对图6解释:
此时字节1中Bit7~5不变,Bit4~0全为1,字节2表示真正的TAG值,可表示0~255。
LENGTH:
紧跟TAG后面的length,它描述后续的V ALUE值是由多少个字节数所构成。若V ALUE 长度≤127,则LENGTH占1个字节,字节最高位为Bit7=0;若V ALUE长度>127,则LENGTH 第1个字节最高位Bit7=1,Bit6~0表示的是LENGTH本身所占的字节数,从第2个字节开始到最后1个字节表示的是V ALUE的长度。如图7所示。
图7 LENGTH编码格式
V ALUE:
值。实际所要传递的编码内容,具体编码规则,根据不同的标记类型,采用不用的编码规范。
因此,结合上述,对61 81 85解释为:TAG=0x61,APPLICATION应用,复合结构,tag 值为1。0x81最高位为1,表示V ALUE长度>127,LENGTH本身长度为1,即:0x85。后续V ALUE长度为0x85=133(D)个字节。
9、之后的字节排列顺序如图8所示
图8 IECGoosePDU报文格式
10、80 08 67 6F 63 62 52 65 66 31
gocbRef字符串
ASN.1编码格式TLV。80为TAG,08为LENGTH,后面的为V ALUE,67 6F 63 62 52 65 66 31转换成字符为gocbRef1。
11、81 05 00 00 00 27 10
timeAllowedtoLive(报文存活时间,单位ms)
ASN.1编码格式TLV。81为TAG,05为LENGTH,后面的为V ALUE,00 00 00 27 10转成10进制为10000,即10s。
Goose接收方的中断时间一般定为大于2* timeAllowedtoLive即报Goose中断告警。
由于Goose报文的重要性,即使外部状态不再变换,也应重发。此参数提示订阅者等待下一报文到来的最长时间。当等待事件大于timeAllowedtoLive值仍未收到有效报文时,订阅者认为通信联系失去,采用预先定义的默认值取代。
12、82 07 64 61 74 53 65 74 31
datSet字符串
ASN.1编码格式TLV。82为TAG,07为LENGTH,后面的为V ALUE,64 61 74 53 65 74 31转换成字符为datSet1。
13、83 05 67 6F 49 44 31
goID字符串
ASN.1编码格式TLV。83为TAG,05为LENGTH,后面的为V ALUE,67 6F 49 44 31转换成字符为goID1。
14、84 08 4E F2 85 E1 F7 CE D9 00
t,stnum加1时的时间,精确到毫秒。
Goose报文产生时的时标。通常作为驱动事件的发生时标(若有特殊要求,驱动事件的发生时标可另外包含在数据集中)。
ASN.1编码格式TLV。84为TAG,08为LENGTH,后面的为V ALUE。
第8个字节代表品质因数。
15、85 05 00 00 00 00 01 86 05 00 00 00 00 01
stnum值85 05 00 00 00 00 01
sqnum值86 05 00 00 00 00 01
装置发送方:后面allData数据跟上一次的allData值不一致时stnum+1,sqnum=0。一致时stnum不变,sqnum+1。上电第1帧时stnum=1,sqnum=1。stnum、sqnum加到最大值时都从1开始。
装置接收方:上电时stnum=sqnum=0。
16、87 01 00
test位
当装置检修压板投入时,装置发送的GOOSE报文中的test应置位。Goose接收装置应将接收的Goose报文中的test位与装置自身的检修压板状态比较,只有两者一致时才将信号作为有效进行处理或动作。
17、88 05 00 00 00 00 01
confRev()
配置版本号(配置次数)。表示Data-Set配置改变的计数器,例如当Data-Set里某个成员被删除或成员重新排序等均会导致confRev数值改变。
字符串长度大于518、89 01 00
ndsCom
表示此控制块配置的必要性,当属性dataset值为NULL时,ndsCom值应为TRUE,表示此控制块需进一步配置。
19、8A 05 00 00 00 00 09
numDatSetEntries
表示allData中有多少个数据项,此处表示有9个
20、AB 36
从这开始到结束为allData内容
TAG=0xAB,上下文关联,复合结构,即V ALUE也是有TLV组成。
LENGTH=0x36=54(D)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。