GOOSE卡设计与实现

GOOSE卡设计与实现

一.   GOOSE发送

允许发送的GOOSE报文个数为N(定义为宏,方便扩展),数据流程如图1所示:

GOOSE卡设计与实现_第1张图片

1 GOOSE发送数据流

 

    根据IED标志将GOOSE发送的系统参数写入节点中;

    GOOSE实时参数有些部分需要写入节点中;

    根据GOOSE实时参数中allData总长度找到TxFrameBuf合适位  置(从尾部开始留出空间),再将实时参数中allData数据集转换成MMS格式并存储;

    将节点中数据按从Node_10Node_0的逆顺序填充到TxFrameBuf中,将记录sqNum位置和帧头指针;

    将组织好的GOOSE报文发送到EMAC口,组织好超时时间和回调函数并加入到系统超时链中。

 

二.   GOOSE接收

允许接收的GOOSE报文个数为N(定义为宏,方便扩展),数据流程如图2所示:

 

2 GOOSE接收数据流

 

EMAC接收的数据存储在RxFrameBuf中,根据stNumsqNum的值判断本报文是否为重传,如果是重传将直接丢弃,否则执行如下解析:

    首先根据判别ID知道IED的序号,再将GOOSE报文中的Head部分解析并存储到节点中;

    将GOOSE报文allDataMMS格式转换成接口格式,转发给cRIO,如果allData数据量很大,那将会分片成多帧发送给cRIO;

    将GOOSE接收实时帧转发给cRIO

 

三.   GOOSE报文重传

要确保GOOSE报文重传需要如图3所示信息:p_Head指向重传GOOSE报文的头部,p_sqNum指向GOOSE报文中的域sqNumTotLen等于GOOSE报文总长度,TOCnt保存下次重传时间(单位为毫秒)。

TOCnt的计算规则如下:

每次接收到GOOSE实时数据帧时赋初值为FirstInterval,以后每次执行如下语句操作:If (TOCnt < MaxInterval)  TOCnt *= Mul;

 

3 GOOSE重传数据结构

 

最后一步操作是将需要重传的相关信息加入到系统超时链中:TOCnt是超时时间(单位为毫秒),CallBack根据p_sqNumsqNum进行加一操作,再将 GOOSE报文发送到EMACArg是图3所示数据结构的指针。

GOOSE卡设计与实现_第2张图片

4 系统超时链

 

在定时器的IRQ中,对图4的系统超时链每个TOCnt不为0的元素进行减1操作,如果等于零,则传递指针ArgCallBack并执行该回调函数。

四.ASN.1解析

 

GOOSE卡设计与实现_第3张图片

5 解析一个TLV

你可能感兴趣的:(IEC61850,GOOSE,数字化变电)