一篇文章带你认识“Goose”

一、什么是goose?

什么是goose,goose是指面向通用对象的变电站事件,是IEC61850标准中用于满足变电站自动化系统快速报文需求的一种机制,是传输变电站内IED之间重要的实时性信号

二、goose可以传输什么?

GOOSE采用网络信号代替了常规变电站装置之间硬接线的通信方式,主要用于实现在多IED 之间的信息传递,可以传输开入(智能终端的常规开入等),开出(跳闸,遥控,启动,联锁,自检信息等),模拟量,是基于GOOSE网络传输代替传统的硬接线实现开关位置、闭锁信号和跳闸命令等实时信息的可靠传输,其在过程层应用的可靠性、实时性、安全性能满足继电保护的要求,主要依赖于各智能设备的通信处理能力以及GOOSE网络的组网方案。

三、Goose传输原理

IEC61850借鉴公共设施通信体系(UCA)的通用变电站状态事件GSSE(Generic Substation State Event)引入了GOOSE。在智能化变电站中,GOOSE是一种实时应用,为保证GOOSE的可靠性及实时性,IEC61850规定GOOSE通信协栈,Goose常见可传输布尔量,整型,浮点型,位串等数据类型。

(1)基于4层通信协议栈。GOOSE协议栈只用了国际标准化组织开放系统互联 (ISO/OSI)中的4层.其目的是提高可靠性和降低传输延时。

(2)IEEE8021Q的应用。在数据链路层,GOOSE采用IEEE802.1QIEEE8021P协议.保证GOOSE报文的优先传送并提高了GOOSE网络的安全性。

(3)基于P2P通信方式。GOOSE服务是以高速P2P(PtoP)通信为基础的。P2P体系结构消除了主/从方式和非网络化的串行连接方案存在的缺陷.网络化的连接同时也降低了设备的维护成本。

(4)GOOSE应用层协议中包含数据有效性检查和GOOSE消息的丢失、检查、重发机制,以保证接收智能装置(IED)能够收到消息并执行预期的操作。

5)传输介质基于光纤以太网或双绞线.通信速率达到10 M100 M1000 M。应用在过程层GOOSE

网络中,建议采用光纤传输来提高抗干扰能力。

四、goose的组网方式

随着数字化变电站的逐渐发展,网络技术在数字化变电站中的应用程度越来越高,GOOSE报文传输组网方式分为了三个阶段:

(1)GOOSE报文传输单独组网。由于GOOSE报文传输对实时性和可靠性的高要求,变电站的IED装置都具备了独立的GOOSE通信接口,该方式保证了GOOSE报文传输的可靠性。

(2)GOOSE报文传输与站控层共用网络。这种组网方式需要支持IEEE802.1P协议交换机的支持,支持IEEE802.1P的交换机可以确保GOOSE报文的优先传输。

(3)数字化变电站共用网络。这种共用网络的方式在间隔层IED设备之间只需要一个通信接口,这样就降低了IED设备的成本,也降低了变电站的建设成本。

五、 领祺科技Goose配置说明

采集配置

新建通道

新建一个goose采集通道,协议选择Goose采集。其他参数无需设置。

新建设备

在采集goose数据时,一个goose数据集对应一个设备。需要接收一个goose数据集的数据时,就需要新建一个设备,自定义设备名称,通讯地址填写Application IDGOOSE数据的虚拟局域网应用连接ID保留0填写GOOSE ID即,其余参数留空即可。

其中Application ID需要goose发送方提供。GOOSE IDscd(icd)文件的“GSEControl”元素中的“appID”字段值。如下图所示是一个goose模拟软件中相关的值。

新建测点

建好设备后,在数据集中选取需要读取的值,数据集中的一个值对应一个测点。测点按照goose数据集中的顺序来建立采集点,采集点的地址填该测点在数据集中的顺序即可,测点数据类型按照实际类型来填写。如下图所示的一个goose数据集,它对应的采集点的地址是0-21

 

配置转发

新建通道

新建一个goose转发通道,协议选择Goose转发()。在通道的交互频率参数中设置goose报文的发送周期。

新建设备

转发goose设备,对应一个goose数据集。需要转发数据时,按数据集转发,一个数据集对应一个设备,按照实际需要创建设备。自定义设备名称,通讯地址填写GOOSE报文的Application ID公共地址填写GOOSE报文的目标MAC地址,也可以不配置目标MAC地址,此时将使用默认MAC地址:01:0c:cd:01:00:01保留0填写GOOSE ID保留1填写DataSet reference。其余参数留空即可。

新建测点

建好设备后,在设备中选择转发测点,作为GOOSE数据集中的Data。测点地址必须从0开始,且必须连续。地址不得出现空缺,否则该设备将无法发送GOOSE报文。测点数据类型按照实际类型来填写。

发送的报文如下: 

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要了解Goose报文的结构。Goose报文是基于IEC 61850标准的一种通信协议,主要用于在电力系统中进行广域保护和控制。它采用了Ethernet II帧的格式,但添加了一些特殊的字段,用于传输IEC 61850数据。 以下是Goose报文的基本结构: ![Goose报文结构](https://i.imgur.com/gJ7Vd3b.png) 其中,各字段的含义如下: - Destination MAC Address:目的MAC地址,通常为组播地址。 - Source MAC Address:源MAC地址。 - EtherType:以太网类型,固定为0x88B8。 - VLAN Tag:可选的VLAN标签,如果存在则占4个字节。 - APPID:应用程序标识符,用于标识Goose报文。 - Length:数据长度,包括APPID、数据集和GOOSE Control Block。 - Goose Control Block:Goose控制块,包括时间戳、状态变量和数据变量。 - Dataset:数据集,包括状态变量和数据变量。 下面是一个用Verilog实现的Goose报文解析代码示例: ```verilog module goose_parser ( input wire [7:0] rx_data, input wire rx_clk, input wire rx_valid, input wire rst_n, output reg [7:0] appid, output reg [15:0] length, output reg [31:0] time, output reg [47:0] mac_dest, output reg [47:0] mac_src, output reg [15:0] ethertype, output reg [15:0] vlan_tag, output reg [15:0] goose_appid, output reg [15:0] goose_length, output reg [15:0] goose_protocol, output reg [7:0] goose_pdu[], output reg [7:0] goose_mac[], output reg [15:0] goose_mac_length ); reg [7:0] rx_data_reg [63:0]; reg [5:0] rx_data_count; reg [7:0] appid_reg [1:0]; reg [15:0] length_reg [1:0]; reg [31:0] time_reg [1:0]; reg [47:0] mac_dest_reg [1:0]; reg [47:0] mac_src_reg [1:0]; reg [15:0] ethertype_reg [1:0]; reg [15:0] vlan_tag_reg [1:0]; reg [15:0] goose_appid_reg [1:0]; reg [15:0] goose_length_reg [1:0]; reg [15:0] goose_protocol_reg [1:0]; reg [7:0] goose_pdu_reg [255:0]; reg [7:0] goose_mac_reg [5:0]; reg [15:0] goose_mac_length_reg; reg [1:0] state; parameter IDLE = 2'b00; parameter RX_HEADER = 2'b01; parameter RX_GOOSE_PDU = 2'b10; always @(posedge rx_clk) begin if (!rst_n) begin state <= IDLE; rx_data_count <= 0; appid_reg[0] <= 8'h00; appid_reg[1] <= 8'h00; length_reg[0] <= 16'h0000; length_reg[1] <= 16'h0000; time_reg[0] <= 32'h00000000; time_reg[1] <= 32'h00000000; mac_dest_reg[0] <= 48'h000000000000; mac_dest_reg[1] <= 48'h000000000000; mac_src_reg[0] <= 48'h000000000000; mac_src_reg[1] <= 48'h000000000000; ethertype_reg[0] <= 16'h0000; ethertype_reg[1] <= 16'h0000; vlan_tag_reg[0] <= 16'h0000; vlan_tag_reg[1] <= 16'h0000; goose_appid_reg[0] <= 16'h0000; goose_appid_reg[1] <= 16'h0000; goose_length_reg[0] <= 16'h0000; goose_length_reg[1] <= 16'h0000; goose_protocol_reg[0] <= 16'h0000; goose_protocol_reg[1] <= 16'h0000; goose_mac_length_reg <= 16'h0000; state <= IDLE; end else begin case (state) IDLE: begin if (rx_valid) begin rx_data_reg[rx_data_count] <= rx_data; rx_data_count <= rx_data_count + 1; if (rx_data_count == 6) begin mac_dest_reg[1] <= {rx_data_reg[0], rx_data_reg[1], rx_data_reg[2], rx_data_reg[3], rx_data_reg[4], rx_data_reg[5]}; mac_src_reg[0] <= {rx_data_reg[0], rx_data_reg[1], rx_data_reg[2], rx_data_reg[3], rx_data_reg[4], rx_data_reg[5]}; state <= RX_HEADER; rx_data_count <= 0; end end end RX_HEADER: begin if (rx_valid) begin rx_data_reg[rx_data_count] <= rx_data; rx_data_count <= rx_data_count + 1; if (rx_data_count == 2) begin ethertype_reg[1] <= rx_data_reg[0]; ethertype_reg[0] <= rx_data_reg[1]; state <= RX_GOOSE_PDU; rx_data_count <= 0; end end end RX_GOOSE_PDU: begin if (rx_valid) begin rx_data_reg[rx_data_count] <= rx_data; rx_data_count <= rx_data_count + 1; if (rx_data_count == 8) begin appid_reg[1] <= rx_data_reg[0]; appid_reg[0] <= rx_data_reg[1]; length_reg[1] <= rx_data_reg[2]; length_reg[0] <= rx_data_reg[3]; time_reg[3] <= rx_data_reg[4]; time_reg[2] <= rx_data_reg[5]; time_reg[1] <= rx_data_reg[6]; time_reg[0] <= rx_data_reg[7]; state <= RX_GOOSE_PDU; rx_data_count <= 0; end else if (rx_data_count > 8 && rx_data_count <= 8 + length_reg[1] + length_reg[0]) begin goose_pdu_reg[rx_data_count-9] <= rx_data; if (rx_data_count == 8 + length_reg[1] + length_reg[0]) begin goose_protocol_reg[1] <= goose_pdu_reg[0]; goose_protocol_reg[0] <= goose_pdu_reg[1]; goose_appid_reg[1] <= goose_pdu_reg[2]; goose_appid_reg[0] <= goose_pdu_reg[3]; goose_length_reg[1] <= goose_pdu_reg[4]; goose_length_reg[0] <= goose_pdu_reg[5]; goose_mac_length_reg <= goose_pdu_reg[6] * 256 + goose_pdu_reg[7]; for (int i=0; i<goose_mac_length_reg; i=i+1) begin goose_mac_reg[i] <= goose_pdu_reg[i+8]; end end rx_data_count <= rx_data_count + 1; end end end endcase end end assign appid = appid_reg[1:0]; assign length = length_reg[1:0]; assign time = time_reg[3:0]; assign mac_dest = mac_dest_reg[1:0]; assign mac_src = mac_src_reg[1:0]; assign ethertype = ethertype_reg[1:0]; assign vlan_tag = vlan_tag_reg[1:0]; assign goose_appid = goose_appid_reg[1:0]; assign goose_length = goose_length_reg[1:0]; assign goose_protocol = goose_protocol_reg[1:0]; assign goose_pdu = goose_pdu_reg[255:0]; assign goose_mac = goose_mac_reg[5:0]; assign goose_mac_length = goose_mac_length_reg; endmodule ``` 这个模块将输入的Goose报文解析为各个字段,包括目的MAC地址、源MAC地址、应用程序标识符、数据长度、时间戳、数据集等。它通过有限状态机实现了报文解析的逻辑,一步一步地读取报文中的数据,并将其存储到对应的寄存器中。最后,通过输出端口将各个字段输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值