一种GOOSE报文序列的生成和编辑方法与流程

文档序号:11147283阅读:798来源:国知局

本发明涉及一种GOOSE报文序列的生成和编辑方法。



背景技术:

通信过程是指通信双方(或多方,如SV订阅即为一发多收)为了完成某种功能或目的而进行的一系列通信报文交互的过程,由此可见通信过程有四个要素,分别为通信报文的1发送者和接收者,通信报文的内容,以及通信报文发出的时间。通信过程有一个重要的概念就是上下文环境,也就是说各种报文的出现次序是有严格规定,且必须严格遵循。

针对GOOSE报文测试,发出的报文序列即是一个通信过程,发送者和接收者通过组播地址或APPID实现关联(因GOOSE属于组播通信,并没有严格意义上的接收者)。报文发出的时间存在两个概念,一是报文发出的绝对时间,二是报文发出的相对时间,即与相邻的上一帧报文的时间间隔。上下文环境规定了相邻两帧GOOSE报文在某些字段上必须遵守的规则,依据IEC61850的规定,GOOSE报文的上下文环境规则如下:1)重启时,stnum=1,sqnum=1;2)无新事件时,stnum相比前一帧报文的stnum保持不变,sqnum相比前一帧报文的squnm加1,相邻两帧报文时间间隔为T0;3)新事件时,stnum相比前一帧报文的stnum加1,sqnum为0,之后依据2)发送,但新事件后的4帧报文与其前一帧报文的时间间隔依此为T1、T1、T2、T3;其中T0为SCD文件中定义的maxTime,T1为SCD文件中定义的minTime,T2为两倍的T1,T3为两倍的T2。

长期以来,一直没有一种测试仪器可以针对GOOSE报文序列进行编辑,最多是只能依据某些规则自动产生好报文序列,之后只能对某帧报文的内容以及相邻两帧报文的时间间隔进行编辑。经市场调查,也尚未有一种继电保护GOOSE报文测试仪器可以对报文序列进行编辑。



技术实现要素:

本发明的目的是提供一种GOOSE报文序列的生成和编辑方法,能够在不增加工作量的前提下,极大的增加了GOOSE报文测试的全面性和多样性。

一种GOOSE报文序列的生成和编辑方法,其特别之处在于,包括如下步骤:

(1)报文序列的生成:

采用复合链表存储报文序列,每帧报文是复合链表(SList)中的一个节点(pFNode),利用pFNode复制以及复合链表的插入和删除操作实现报文序列的编辑;

其中pFNode内含有:报文结构的内容(context)、指向下一个pFNode的指针(pnext)、与下一帧报文的时间间隔(ts)、结束条件(condition);

其中context中含有的关键字段:状态号(stNum)和顺序号(sqNum),关键字段的值根据关键字段生成规则来自动产生,或者对其编辑写入指定的值;其中stNum的自动生成规则是:与其相邻的上一帧报文的stNum相同;sqNum的自动生成规则是:比其相邻的上一帧报文的sqNum大1,如果到达字段的最大值,则为1;

其中ts的值根据当前pFNode的context的sqNum的值来自动产生,或者对其编辑写入指定的值,自动产生的规则是:如果sqNum为0或1,则ts为T1,如果sqNum为2,则ts为T2,如果sqNum为3,则ts为T3,如果sqNum为其他值,则ts为T0;

其中报文序列的顺序由pnext指出,或者pnext回头指向一个复合链接中的节点形成环形链表,或者pnext为空表明序列结束;当形成环形链表时,设置某个pFNode的condition来结束循环,condition的内容包括循环次数(count)和循环跳出节点(pout),当该pFNode的count满足条件时,跳出到pout处,如果pout为空,则序列结束;

(2)报文序列的编辑:

报文序列的拷贝操作:将选定的报文序列中的每一个节点复制一份,将复制的节点依次插入到指定位置的节点之后,节点在插入时,除stNum、sqNum、ts和condition外其他属性的值保持不变,stNum、sqNum和ts的值依据用户选择,具体有两种操作模式:一是依据自动生成规则产生新的值,二是保持原有的值,condition的值清除;指定位置的节点原有的后续节点的stNum、sqNum和ts的值依据用户选择,具体有两种操作模式:一是依据自动生成规则产生新的值,二是保持原有的值;

报文序列的删除操作:将选定的报文序列中的每一个节点从链表中删除,被选定的最后一个节点之后的所有节点,除stNum、sqNum和ts属性外其他属性的值保持不变,而stNum、sqNum和ts的值依据用户选择,具体有两种操作模式:一是依据自动生成规则产生新的值,二是保持原有的值;

报文序列的循环操作:将选定的报文序列的最后一个节点的condition的pout设置为该节点的pnext,将该节点的condition的count设置为循环的次数,将该节点的pnext设置为选定的报文序列的第一个节点。

本发明方法解决了继电保护人员在对继电保护装置进行通信容错性试验时,无法便捷高效的进行报文序列编辑的问题,该方法首创报文序列编辑,改变了以往只能针对单帧报文内容进行编辑的局限性,在完全不增加工作量的前提下,极大的增加了GOOSE报文测试的全面性和多样性。填补了继电保护装置报文容错性测试的空白。本发明方法具体是制定了一套GOOSE报文序列的编辑方法,完善了GOOSE报文测试案例的生成方式,从而有效完善了GOOSE报文序列的编辑方法,丰富了测试案例。

具体实施方式

实施例1:

复合链表的节点类型定义:

model的取值为1表明为依据自动生成规则产生context中关键字段和ts的值,取值为2表明不自动产生,使用原有的值。

结束条件结构定义:

设复合链路SList的首节点为phead,则以及phead->pnext可遍历整个SList,结束标记为某个节点的pnext为空。

复制的实现方法如下:

设复制出的第一个节点为pbeg,最后一个节点为pend,复制时清除每个节点的condition的值,并置每个节点的model为2;设复制后需要插入的位置处的前一个节点为pin1,后一个节点为pin2;

1)置pin1->pnext为pbeg;

2)置pend->pnext为pin2;

3)如果操作模式选择为保持原有的值,则操作完成,否则执行4);

4)从pin1开始遍历,直到pend为止,置每个节点的model为1。

循环的实现方法如下:

设循环的起始节点为pbeg,结束节点为pend,循环次数为n;

1)置pend->condition->count为n;

2)置pend->condition->pout为pend->pnext;

3)置pend->pnext为pbeg;

删除的实现方法如下:

如果选定的需要删除的节点不止一个链表,如删除第2、3、4、8、9个节点,则可以拆分为两次独立的删除操作,即第2、3、4个节点为一次,第8、9个节点为一次。此方法为删除选中的连续节点,设第一个选中的节点为pbeg,第一个选中的节点的前一个节点为pin,最后一个选中的节点为pend:

1)如果pin为空,则执行2),否则执行5);

2)置phead为pend->pnext,如果phead为空,则操作完成,否则执行3);

3)如果操作模式选择为保持原有的值,则操作完成,否则执行4);

4)从phead开始遍历,直到链表结束为止,置每个节点的model为1,操作完成;

5)置pin->pnext为pend->pnext,如果操作模式选择为保持原有的值,则操作完成,否则执行6);

6)从pin->pnext开始遍历,直到链表结束为止,置每个节点的model为1,操作完成。

发送的实现方法如下:

设当前即将发送的节点为pnode,其前一个节点为pprev:

1)置pprev为空,pnode为phead;

2)如果pnode为空,则发送结束,否则如果pnode的model为1,则执行3),否则执行4);

3)根据发送规则产生pnode->context的关键字段的值,并组织报文进行发送,执行5);

4)直接组织报文进行发送,执行5);

5)置pprev为pnode,如果pnode->condition->count不为0,则执行6),否则执行8);

6)pnode->condition->sndcnt加1,如果pnode->condition->sndcnt等于pnode->condition->count,则执行7),否则执行8);

7)置pnode为pnode->condition->pout,执行2);

8)置pnode为pnode->pnext,执行2)。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1