著录项信息
专利名称 | 智能变电站动态通信链接的定位方法 |
申请号 | CN201510462083.0 | 申请日期 | 2015-07-31 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2015-11-11 | 公开/公告号 | CN105049346A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L12/701 | IPC分类号 | H;0;4;L;1;2;/;7;0;1;;;H;0;4;L;2;9;/;0;8查看分类表>
|
申请人 | 南京荣桓电力自动化有限公司 | 申请人地址 | 江苏省南京市玄武区丹凤街19号502室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 南京荣桓电力自动化有限公司 | 当前权利人 | 南京荣桓电力自动化有限公司 |
发明人 | 胡永春 |
代理机构 | 南京同泽专利事务所(特殊普通合伙) | 代理人 | 闫彪 |
摘要
本发明涉及智能变电站动态通信链接的定位方法,属于电数字数据处理技术领域。该方法执行步骤如下:1)初始化建立若干用于检索过程中使用的数据结构,其中包括McLink、IpPair和IpTerl;2)判断收到报文类型为GOOSE类报文、SMV类报文或IP类报文;3)根据步骤2)中接收到的所述报文的报文类型采用不同的通信过程检索。该方法针对智能变电站的通信链接的特殊特点,以及其内存资源的丰富性,在条件允许的情况下,通过用以空间换时间的思路,对通信过程可能出现的情况进行分类,最终使得通信链接定位的时间复杂度为O(2),空间复杂度为O(65536),极大的缩短了处理时间,提升了智能变电站通信过程在线分析的效率。
1.一种智能变电站动态通信链接的定位方法,其特征在于执行步骤如下:
1)定义用于所述智能变电站动态通信链接的定位方法中的数据结构,包括用于GOOSE和SV类通信过程的数据结构McLink、用于IP类通信过程的数据结构IpTerl和用于记录一个IpTerl中对象的对端设备的数据结构IpPair;
所述数据结构McLink包含用于记录APPID信息的appid项,用于记录通信过程对象的plink项,和用于记录相同组播地址的下一个McLink对象的pnext项;
所述数据结构IpTerl包含用于记录IP地址信息的ip项,用于记录对端设备的IpPair类型的ppair和plast项,用于记录对端设备数量的pairnum项,和用于记录相同IP地址的下一个IpTerl对象的pnext项;
所述数据结构IpPair包含用于记录该对端对应的IpTerl类型的pterl项,用于记录通信过程对象的plink项,和用于记录该IpTerl对象的下一个对端设备的pnext项;
2)初始化;
对象为数据结构McLink的指针数组GSEArray开辟大小为65536字节的地址空间,所述指针数组GSEArray的每个元素对应地址均为空;
对象为数据结构McLink的指针数组SMVArray开辟大小为65536字节的地址空间,所述指针数组SMVArray的每个元素对应地址均为空;
对象为数据结构IpTerl的指针数组IPLArray开辟大小为65536字节的地址空间,所述指针数组IPLArray的每个元素对应地址均为空;
3)判断收到报文类型;
当所述智能变电站收到一帧报文时,提取所述报文的目的MAC地址,并比对所述目的MAC地址的前四位:
若所述目的MAC地址的前四位为01-0C-CD-01时,则收到的所述报文为GOOSE类报文;
若所述目的MAC地址的前四位为01-0C-CD-04时,则收到的所述报文为SMV类报文;
若接收到的所述报文既不为GOOSE类报文也不为SMV类报文时,则比对所述报文的链路层TYPE字段的值,若TYPE值为0x0008,则收到的所述报文为IP类报文,否则为其他类报文;
4)根据步骤2)中接收到的所述报文的报文类型采用不同的通信过程检索:
当在步骤2)中接收到的所述报文为GOOSE类报文时,进行GOOSE类通信过程检索;
当步骤2)中接收到的所述报文为SMV类报文时,进行类SMV类通信过程检索;
当步骤2)中接收到的所述报文为IP类报文时,进行IP类通信过程检索;
当步骤2)中接收到的所述报文为其他类报文时,不进行检索。
2.如权利要求1所述的智能变电站动态通信链接的定位方法,其特征在于步骤4)中的所述GOOSE类通信过程检索的流程如下:
(1)提取所述报文中的APPID和组播地址的后两位设为DMAC,并定义两个类型为McLink的临时对象GSEPREV和GSENEXT;判断GSEArray[DMAC]是否为空,如果为空,则进入(2),如果不为空,则进入(3);
(2)创建一个McLink对象并赋值给GSEArray[DMAC],同时创建McLink->plink,并将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文的通信过程,检索结束;
(3)判断GSEArray[DMAC]->appid是否等于APPID,如果相等,则GSEArray[DMAC]->plink为该报文所属的通信过程,检索结束;如果不等,设GSENEXT为GSEArray[DMAC]->pnext,设GSEPREV为GSEArray[DMAC],进入(4);
(4)判断GSENEXT是否为空:如果为空,则进入(5),如果不为空,则进入(6);
(5)创建一个McLink对象并赋值给GSEPREV->pnext,同时创建McLink->plink,将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;
(6)判断GSENEXT->appid是否等于APPID:如果相等,则GSENEXT->plink为该报文所属的通信过程,检索结束;如果不等,GSEPREV赋值为GSENEXT,GSENEXT赋值GSENEXT->pnext,进入(4)。
3.如权利要求1所述的智能变电站动态通信链接的定位方法,其特征在于步骤4)中的所述类SMV类通信过程检索的流程如下:
(1)提取所述报文中的APPID和组播地址的后两位设为DMAC,并定义两个类型为McLink的临时对象SMVPREV和SMVNEXT;判断SMVArray[DMAC]是否为空,如果为空,则进入(2),如果不为空,则进入(3);
(2)创建一个McLink对象并赋值给SMVArray[DMAC],同时创建McLink->plink,并将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;
(3)判断SMVArray[DMAC]->appid是否等于APPID,如果相等,则SMVArray[DMAC]->plink为该报文所属的通信过程,检索结束;如果不等,设SMVNEXT为SMVArray[DMAC]->pnext,设SMVPREV为SMVArray[DMAC],进入(4);
(4)判断SMVNEXT是否为空:如果为空,则进入(5),如果不为空,则进入(6);
(5)创建一个McLink对象并赋值给SMVPREV->pnext,同时创建McLink->plink,将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;
(6)判断SMVNEXT->appid是否等于APPID:如果相等,则SMVNEXT->plink为该报文所属的通信过程,检索结束;如果不等,SMVPREV赋值为SMVNEXT,SMVNEXT赋值SMVNEXT->pnext,进入(4)。
4.如权利要求1所述的智能变电站动态通信链接的定位方法,其特征在于步骤4)中的所述IP类通信过程检索使用下面的步骤检索出源IP地址对应的通信终端SIPTerl对象和目的IP地址对应的通信终端DIPTerl对象:
a设IP地址后两位为IPKey,并定义两个类型为IpTerl的临时对象IPPREV和IPNEXT;判断IPLArray[IPKey]是否为空:如果为空,则进入b,如果不为空,则进入c;
b创建一个IpTerl对象并赋值给IPLArray[IPKey],将IP赋值给IpTerl->ip,IpTerl->pnext赋值为空,IPTerl为IpTerl,检索结束;
c判断IPLArray[IPKey]->ip是否等于IP,如果相等,则IPTerl为IPLArray[IPKey],检索结束;如果不等,设IPNEXT为IPLArray[IPKey]->pnext,设IPPREV为IPLArray[IPKey],进入d;
d判断IPNEXT是否为空,如果为空,则进入e,如果不为空,则进入f;
e创建一个IpTerl对象并赋值给IPPREV->pnext,将IP赋值给IpTerl->ip,IpTerl->pnext赋值为空,IPTerl为IpTerl,检索结束;
f判断IPNEXT->ip是否等于IP:如果相等,则IPTerl为IPNEXT,检索结束;如果不等,IPPREV赋值为IPNEXT,IPNEXT赋值IPNEXT->pnext,进入d;
g当IP地址为源IP地址时,检出的IPTerl为SIPTerl,当IP地址为目的IP地址时,检出的IPTerl为DIPTerl;
然后使用下面的步骤检索IP类报文的通信过程:
A定义两个类型为IpTerl的临时对象HOST和IED,定义两个类型为IpPair的临时对象TPREV和TNEXT;判断SIPTerl->pairnum是否大于DIPTerl->pairnum:如果大于,则设HOST为SIPTerl,IED为DIPTerl;否则,则设HOST为DIPTerl,IED为SIPTerl;
B设TPREV为IED->ppair,判断TPREV是否为空:如果为空,则进入C;如果不为空,则设TNEXT为TPREV->pnext,进入F;
C创建一个IpPair对象IedPair,将HOST赋值给IedPair->pterl,同时创建IedPair->plink,IedPair->pnext赋值为空,并将IedPair赋值给IED->plast,IED->pairnum自加1;
D判断TPREV是否为空:如果为空,则将IedPair赋值给IED->ppair;如果不为空,则将IedPair赋值给TPREV->pnext;
E创建一个IpPair对象HostPair,将IED赋值给HostPair->pterl,将IedPair->plink赋值给IedPair->plink,HostPair->pnext赋值为空,并将HostPair赋值给HOST->ppair,HOST->pairnum自加1;
F判断HOST->ppair是否为空:如果不为空,则将HostPair赋值给HOST->plast->pnext,再将HOST->plast赋值为HostPair;如果为空,则将HostPair赋值给HOST->ppair和HOST->plast;
GIedPair->plink为该报文所属的通信过程,检索结束;
H判断TPREV->pterl是否等于HOST:如果相等,则TPREV->plink为该报文所属的通信过程,检索结束;如果不等,进入I;
I判断TNEXT是否为空:如果为空,则进入C;如果不为空,则TPREV赋值为TNEXT,TNEXT赋值TNEXT->pnext,进入H。
智能变电站动态通信链接的定位方法\n技术领域\n[0001] 本发明涉及一种动态通信链接的定位方法,属于电数字数据处理技术领域。\n背景技术\n[0002] 一个智能变电站的通信网络内存在非常多的动态通信链接,而通信双方或多方为了完成某种功能或目的而进行的一系列通信报文交互过程,对于特定的规范或协议,任一报文都在特定的语境中年出现,特定的语境就称为报文的上下文环境,其包括之前的若干帧报文、之后的若干帧报文。例如:MMS通信的应用端口号为102,在某两个通信终端之间(有固定的IP地址,称为IPA和IPB),以102为应用端口号的一次TCP连接(其随机端口号相同)过程中产生的报文,就是一个通信过程。一般认为通信过程可分类为GOOSE类、SMV类、IP类。\n[0003] GOOSE类:其通信过程对应一个GOOSE应用,其标识关键字为组播地址和APPID;组播地址为通信报文中的目的MAC地址,其组播地址的分布范围为01-0C-CD-01-00-00至01-\n0C-CD-01-01-FF,即前四位固定为01-0C-CD-01,后两位在00-00至01-FF之间。\n[0004] SMV类:其通信过程对应一个SMV应用,其标识关键字为组播地址和APPID;其组播地址的分布范围为01-0C-CD-04-00-00至01-0C-CD-04-01-FF,即前四位固定为01-0C-CD-\n04,后两位在00-00至01-FF之间。\n[0005] IP类:此类并非一个真实的通信过程,而是一些基于IP协议的通信过程的载体,IP类的标识关键字为通信双方的IP地址;在变电站这样一个封闭的局域网内,一般存在两个独立的局域网,每个局域网内通信终端的数量都不会太多,绝大部分都不超过200个,而且其各自的IP地址分配是有一定规则的,将IP的四位分别称为IPA1、IPA2、IPA3和IPA4,在一个局域网内,一般以IPA4来给各个不同的通信终端分配不同的IP地址,其他三个地址相同,两个独立的局域网之间一般以IPV3来区分。例如:局域网A内的IP地址分配为192.168.0.1~\n192.168.0.254之间,局域网B的IP地址分配为192.168.1.1 192.168.1.254之间。\n~\n[0006] 而上述这些通信过程如果只是使用传统的哈希路由式定位方式,虽可做到准确定位,但其效率不足以支撑详尽的在线分析功能,不足以适应当下的发展趋势。哈希路由式定位方法的复杂度主要由两部分组成,其一是关键字的大小一旦关键字确定,这部分的复杂度则是固定的,其二则是由进行进一步定位检索的链表确定,这一部分的时间复杂度一般是这个链表的一半;一般来说对哈希路由式算法进行时间复杂度的优化是针对后者的,然而无论怎么进行优化,检索关键字一旦确定,哈希路由式算法的最小复杂度也就确定了。\n发明内容\n[0007] 本发明要解决的技术问题是,针对现有技术不足,提出一种智能变电站动态通信链接的定位方法,以解决哈希路由式定位方式在只能变电站中应用所带来你的动态通信链接定位效率低下的问题。\n[0008] 本发明为解决上述技术问题提出的技术方案是:1. 一种智能变电站动态通信链接的定位方法,其特征在于执行步骤如下:\n[0009] 1)定义用于所述智能变电站动态通信链接的定位方法中的数据结构,包括用于GOOSE和SV类通信过程的数据结构McLink、用于IP类通信过程的数据结构IpTerl和用于记录一个IpTerl中对象的对端设备的数据结构IpPair;\n[0010] 所述数据结构McLink包含用于记录APPID信息的appid项,用于记录通信过程对象的plink项,和用于记录相同组播地址的下一个McLink对象的pnext项;\n[0011] 所述数据结构IpTerl包含用于记录IP地址信息的ip项,用于记录对端设备的IpPair类型的ppair和plast项,用于记录对端设备数量的pairnum项,和用于记录相同IP地址的下一个IpTerl对象的pnext项;\n[0012] 所述数据结构IpPair包含用于记录该对端对应的IpTerl类型的pterl项,用于记录通信过程对象的plink项,和用于记录该IpTerl对象的下一个对端设备的pnext项;\n[0013] 2)初始化;\n[0014] 对象为数据结构McLink的指针数组GSEArray开辟大小为65536字节的地址空间,所述指针数组GSEArray的每个元素对应地址均为空;\n[0015] 对象为数据结构McLink的指针数组SMVArray开辟大小为65536字节的地址空间,所述指针数组SMVArray的每个元素对应地址均为空;\n[0016] 对象为数据结构IpTerl的指针数组IPLArray开辟大小为65536字节的地址空间,所述指针数组IPLArray的每个元素对应地址均为空;\n[0017] 3)判断收到报文类型;\n[0018] 当所述智能变电站收到一帧报文时,提取所述报文的目的MAC地址,并比对所述目的MAC地址的前四位:\n[0019] 若所述目的MAC地址的前四位为01-0C-CD-01时,则收到的所述报文为GOOSE类报文;\n[0020] 若所述目的MAC地址的前四位为01-0C-CD-04时,则收到的所述报文为SMV类报文;\n[0021] 若接收到的所述报文既不为GOOSE类报文也不为SMV类报文时,则比对所述报文的链路层TYPE字段的值,若TYPE值为0x0008,则收到的所述报文为IP类报文,否则为其他类报文;\n[0022] 4)根据步骤2)中接收到的所述报文的报文类型采用不同的通信过程检索:\n[0023] 当在步骤2)中接收到的所述报文为GOOSE类报文时,进行GOOSE类通信过程检索;\n[0024] 当步骤2)中接收到的所述报文为SMV类报文时,进行类SMV类通信过程检索;\n[0025] 当步骤2)中接收到的所述报文为IP类报文时,进行IP类通信过程检索;\n[0026] 当步骤2)中接收到的所述报文为其他类报文时,不进行检索。\n[0027] 上述技术方案的改进是,步骤4)中的所述GOOSE类通信过程检索的流程如下:\n[0028] (1)提取所述报文中的APPID和组播地址的后两位设为DMAC,并定义两个类型为McLink的临时对象GSEPREV和GSENEXT;判断GSEArray[DMAC]是否为空,如果为空,则进入(2),如果不为空,则进入(3);\n[0029] (2)创建一个McLink对象并赋值给GSEArray[DMAC],同时创建McLink->plink,并将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文的通信过程,检索结束;\n[0030] (3)判断GSEArray[DMAC]->appid是否等于APPID,如果相等,则GSEArray[DMAC]->plink为该报文所属的通信过程,检索结束;如果不等,设GSENEXT为GSEArray[DMAC]->pnext,设GSEPREV为GSEArray[DMAC],进入(4);\n[0031] (4)判断GSENEXT是否为空:如果为空,则进入(5),如果不为空,则进入(6);\n[0032] (5)创建一个McLink对象并赋值给GSEPREV->pnext,同时创建McLink->plink,将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;\n[0033] (6)判断GSENEXT->appid是否等于APPID:如果相等,则GSENEXT->plink为该报文所属的通信过程,检索结束;如果不等,GSEPREV赋值为GSENEXT,GSENEXT赋值GSENEXT->pnext,进入(4)。\n[0034] 上述技术方案的改进是,步骤4)中的所述类SMV类通信过程检索的流程如下:\n[0035] (1)提取所述报文中的APPID和组播地址的后两位设为DMAC,并定义两个类型为McLink的临时对象SMVPREV和SMVNEXT;判断SMVArray[DMAC]是否为空,如果为空,则进入(2),如果不为空,则进入(3);\n[0036] (2)创建一个McLink对象并赋值给SMVArray[DMAC],同时创建McLink->plink,并将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;\n[0037] (3)判断SMVArray[DMAC]->appid是否等于APPID,如果相等,则SMVArray[DMAC]->plink为该报文所属的通信过程,检索结束;如果不等,设SMVNEXT为SMVArray[DMAC]->pnext,设SMVPREV为SMVArray[DMAC],进入(4);\n[0038] (4)判断SMVNEXT是否为空:如果为空,则进入(5),如果不为空,则进入(6);\n[0039] (5)创建一个McLink对象并赋值给SMVPREV->pnext,同时创建McLink->plink,将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;\n[0040] (6)判断SMVNEXT->appid是否等于APPID:如果相等,则SMVNEXT->plink为该报文所属的通信过程,检索结束;如果不等,SMVPREV赋值为SMVNEXT,SMVNEXT赋值SMVNEXT->pnext,进入(4)。\n[0041] 上述技术方案的改进是,步骤4)中的所述IP类通信过程检索使用下面的步骤检索出源IP地址对应的通信终端SIPTerl对象和目的IP地址对应的通信终端DIPTerl对象:\n[0042] (1)设IP地址后两位为IPKey,并定义两个类型为IpTerl的临时对象IPPREV和IPNEXT;判断IPLArray[IPKey]是否为空:如果为空,则进入(2),如果不为空,则进入(3);\n[0043] (2)创建一个IpTerl对象并赋值给IPLArray[IPKey],将IP赋值给IpTerl->ip,IpTerl->pnext赋值为空,IPTerl为IpTerl,检索结束;\n[0044] (3)判断IPLArray[IPKey]->ip是否等于IP,如果相等,则IPTerl为IPLArray[IPKey],检索结束;如果不等,设IPNEXT为IPLArray[IPKey]->pnext,设IPPREV为IPLArray[IPKey],进入(4);\n[0045] (4)判断IPNEXT是否为空,如果为空,则进入(5),如果不为空,则进入(6);\n[0046] (5)创建一个IpTerl对象并赋值给IPPREV->pnext,将IP赋值给IpTerl->ip,IpTerl->pnext赋值为空,IPTerl为IpTerl,检索结束;\n[0047] (6)判断IPNEXT->ip是否等于IP:如果相等,则IPTerl为IPNEXT,检索结束;如果不等,IPPREV赋值为IPNEXT,IPNEXT赋值IPNEXT->pnext,进入(4);\n[0048] (7)当IP地址为源IP地址时,检出的IPTerl为SIPTerl,当IP地址为目的IP地址时,检出的IPTerl为DIPTerl;\n[0049] 然后使用下面的步骤检索IP类报文的通信过程:\n[0050] (1)定义两个类型为IpTerl的临时对象HOST和IED,定义两个类型为IpPair的临时对象TPREV和TNEXT;判断SIPTerl->pairnum是否大于DIPTerl->pairnum:如果大于,则设HOST为SIPTerl,IED为DIPTerl;否则,则设HOST为DIPTerl,IED为SIPTerl;\n[0051] (2)设TPREV为IED->ppair,判断TPREV是否为空:如果为空,则进入(3);如果不为空,则设TNEXT为TPREV->pnext,进入(6);\n[0052] (3)创建一个IpPair对象IedPair,将HOST赋值给IedPair->pterl,同时创建IedPair->plink,IedPair->pnext赋值为空,并将IedPair赋值给IED->plast,IED->pairnum自加1;\n[0053] (4)判断TPREV是否为空:如果为空,则将IedPair赋值给IED->ppair;如果不为空,则将IedPair赋值给TPREV->pnext;\n[0054] (5)创建一个IpPair对象HostPair,将IED赋值给HostPair->pterl,将IedPair->plink赋值给IedPair->plink,HostPair->pnext赋值为空,并将HostPair赋值给HOST->ppair,HOST->pairnum自加1;\n[0055] (6)判断HOST->ppair是否为空:如果不为空,则将HostPair赋值给HOST->plast->pnext,再将HOST->plast赋值为HostPair;如果为空,则将HostPair赋值给HOST->ppair和HOST->plast;\n[0056] (7)IedPair->plink为该报文所属的通信过程,检索结束;\n[0057] (8)判断TPREV->pterl是否等于HOST:如果相等,则TPREV->plink为该报文所属的通信过程,检索结束;如果不等,进入(9);\n[0058] (9)判断TNEXT是否为空:如果为空,则进入(3);如果不为空,则TPREV赋值为TNEXT,TNEXT赋值TNEXT->pnext,进入(8)。\n[0059] 本发明采用上述技术方案的有益效果是:针对智能变电站的通信链接的特殊特点,以及其内存资源的丰富性,在条件允许的情况下,通过用以空间换时间的思路,并通信过程可能出现的情况进行分类,最终使得得通信链接定位的过程中,无论检索关键词如何变换,使用该方法进行检索的时间复杂度仅为O(2),空间复杂度为O(65536),极大的缩短了处理时间,提升了智能变电站的在线分析的效率。而一旦在线分析效率提升,那么与之对应的一些工作的处理效率大幅度提高,不再受到的响应速度的制约。\n具体实施方式\n实施例\n[0060] 本实施例的一种智能变电站动态通信链接的定位方法,其特征在于执行步骤如下:\n[0061] 1)定义用于智能变电站动态通信链接的定位方法中的数据结构,包括用于GOOSE和SV类通信过程的数据结构McLink、用于IP类通信过程的数据结构IpTerl和用于记录一个IpTerl中对象的对端设备的数据结构IpPair;\n[0062] 数据结构McLink包含用于记录APPID信息的appid项,用于记录通信过程对象的plink项,和用于记录相同组播地址的下一个McLink对象的pnext项;\n[0063] 数据结构IpTerl包含用于记录IP地址信息的ip项,用于记录对端设备的IpPair类型的ppair和plast项,用于记录对端设备数量的pairnum项,和用于记录相同IP地址的下一个IpTerl对象的pnext项;\n[0064] 数据结构IpPair包含用于记录该对端对应的IpTerl类型的pterl项,用于记录通信过程对象的plink项,和用于记录该IpTerl对象的下一个对端设备的pnext项;\n[0065] 具体如果用软件实现的话是采用如下方式的:\n[0066] typedef struct tagMcLink\n[0067] {\n[0068] UINT16 appid; //APPID\n[0069] void* plink; //通信过程对象\n[0070] tagMcLink* pnext; //下一个相同组播地址的McLink对象\n[0071] }McLink;\n[0072] typedef struct tagIpPair\n[0073] {\n[0074] IpTerl pterl; //对端对象\n[0075] void* plink;//通信过程对象\n[0076] tagIpPair* pnext; //对端列表\n[0077] }IpPair;\n[0078] typedef struct tagIpTerl\n[0079] {\n[0080] UINT ip; //IP地址\n[0081] IpPair* ppair; //对端子设备和链接\n[0082] IpPair* plast; //最后一个对端子设备\n[0083] INT pairnum; //对端子设备个数\n[0084] tagIpTerl* pnext; //下一个相同ipkey的IpTerl对象\n[0085] }IpTerl;\n[0086] 2)初始化;\n[0087] 对象为数据结构McLink的指针数组GSEArray开辟大小为65536字节的地址空间,指针数组GSEArray的每个元素对应地址均为空;\n[0088] 对象为数据结构McLink的指针数组SMVArray开辟大小为65536字节的地址空间,指针数组SMVArray的每个元素对应地址均为空;\n[0089] 对象为数据结构IpTerl的指针数组IPLArray开辟大小为65536字节的地址空间,指针数组IPLArray的每个元素对应地址均为空;\n[0090] 3)判断收到报文类型;\n[0091] 当智能变电站收到一帧报文时,提取报文的目的MAC地址,并比对目的MAC地址的前四位:\n[0092] 若目的MAC地址的前四位为01-0C-CD-01时,则收到的报文为GOOSE类报文;\n[0093] 若目的MAC地址的前四位为01-0C-CD-04时,则收到的报文为SMV类报文;\n[0094] 若接收到的报文既不为GOOSE类报文也不为SMV类报文时,则比对报文的链路层TYPE字段的值,若TYPE值为0x0008,则收到的报文为IP类报文,否则为其他类报文;\n[0095] 4)根据步骤2)中接收到的报文的报文类型采用不同的通信过程检索:\n[0096] 当在步骤2)中接收到的报文为GOOSE类报文时,进行GOOSE类通信过程检索;\n[0097] 当步骤2)中接收到的报文为SMV类报文时,进行类SMV类通信过程检索;\n[0098] 当步骤2)中接收到的报文为IP类报文时,进行IP类通信过程检索;\n[0099] 当步骤2)中接收到的报文为其他类报文时,不进行检索。\n[0100] 本实施例的步骤4)中的GOOSE类通信过程检索的流程如下:\n[0101] (1)提取报文中的APPID和组播地址的后两位设为DMAC,并定义两个类型为McLink的临时对象GSEPREV和GSENEXT;判断GSEArray[DMAC]是否为空,如果为空,则进入(2),如果不为空,则进入(3);\n[0102] (2)创建一个McLink对象并赋值给GSEArray[DMAC],同时创建McLink->plink,并将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文的通信过程,检索结束;\n[0103] (3)判断GSEArray[DMAC]->appid是否等于APPID,如果相等,则GSEArray[DMAC]->plink为该报文所属的通信过程,检索结束;如果不等,设GSENEXT为GSEArray[DMAC]->pnext,设GSEPREV为GSEArray[DMAC],进入(4);\n[0104] (4)判断GSENEXT是否为空:如果为空,则进入(5),如果不为空,则进入(6);\n[0105] (5)创建一个McLink对象并赋值给GSEPREV->pnext,同时创建McLink->plink,将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;\n[0106] (6)判断GSENEXT->appid是否等于APPID:如果相等,则GSENEXT->plink为该报文所属的通信过程,检索结束;如果不等,GSEPREV赋值为GSENEXT,GSENEXT赋值GSENEXT->pnext,进入(4)。\n[0107] 本实施例的步骤4)中的类SMV类通信过程检索的流程如下:\n[0108] (1)提取报文中的APPID和组播地址的后两位设为DMAC,并定义两个类型为McLink的临时对象SMVPREV和SMVNEXT;判断SMVArray[DMAC]是否为空,如果为空,则进入(2),如果不为空,则进入(3);\n[0109] (2)创建一个McLink对象并赋值给SMVArray[DMAC],同时创建McLink->plink,并将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;\n[0110] (3)判断SMVArray[DMAC]->appid是否等于APPID,如果相等,则SMVArray[DMAC]->plink为该报文所属的通信过程,检索结束;如果不等,设SMVNEXT为SMVArray[DMAC]->pnext,设SMVPREV为SMVArray[DMAC],进入(4);\n[0111] (4)判断SMVNEXT是否为空:如果为空,则进入(5),如果不为空,则进入(6);\n[0112] (5)创建一个McLink对象并赋值给SMVPREV->pnext,同时创建McLink->plink,将APPID赋值给McLink->appid,McLink->pnext赋值为空,McLink->plink为该报文所属的通信过程,检索结束;\n[0113] (6)判断SMVNEXT->appid是否等于APPID:如果相等,则SMVNEXT->plink为该报文所属的通信过程,检索结束;如果不等,SMVPREV赋值为SMVNEXT,SMVNEXT赋值SMVNEXT->pnext,进入(4)。\n[0114] 本实施例的步骤4)中的IP类通信过程检索使用下面的步骤检索出源IP地址对应的通信终端SIPTerl对象和目的IP地址对应的通信终端DIPTerl对象:\n[0115] (1)设IP地址后两位为IPKey,并定义两个类型为IpTerl的临时对象IPPREV和IPNEXT;判断IPLArray[IPKey]是否为空:如果为空,则进入(2),如果不为空,则进入(3);\n[0116] (2)创建一个IpTerl对象并赋值给IPLArray[IPKey],将IP赋值给IpTerl->ip,IpTerl->pnext赋值为空,IPTerl为IpTerl,检索结束;\n[0117] (3)判断IPLArray[IPKey]->ip是否等于IP,如果相等,则IPTerl为IPLArray[IPKey],检索结束;如果不等,设IPNEXT为IPLArray[IPKey]->pnext,设IPPREV为IPLArray[IPKey],进入(4);\n[0118] (4)判断IPNEXT是否为空,如果为空,则进入(5),如果不为空,则进入(6);\n[0119] (5)创建一个IpTerl对象并赋值给IPPREV->pnext,将IP赋值给IpTerl->ip,IpTerl->pnext赋值为空,IPTerl为IpTerl,检索结束;\n[0120] (6)判断IPNEXT->ip是否等于IP:如果相等,则IPTerl为IPNEXT,检索结束;如果不等,IPPREV赋值为IPNEXT,IPNEXT赋值IPNEXT->pnext,进入(4);\n[0121] (7)当IP地址为源IP地址时,检出的IPTerl为SIPTerl,当IP地址为目的IP地址时,检出的IPTerl为DIPTerl;\n[0122] 然后使用下面的步骤检索IP类报文的通信过程:\n[0123] (1)定义两个类型为IpTerl的临时对象HOST和IED,定义两个类型为IpPair的临时对象TPREV和TNEXT;判断SIPTerl->pairnum是否大于DIPTerl->pairnum:如果大于,则设HOST为SIPTerl,IED为DIPTerl;否则,则设HOST为DIPTerl,IED为SIPTerl;\n[0124] (2)设TPREV为IED->ppair,判断TPREV是否为空:如果为空,则进入(3);如果不为空,则设TNEXT为TPREV->pnext,进入(6);\n[0125] (3)创建一个IpPair对象IedPair,将HOST赋值给IedPair->pterl,同时创建IedPair->plink,IedPair->pnext赋值为空,并将IedPair赋值给IED->plast,IED->pairnum自加1;\n[0126] (4)判断TPREV是否为空:如果为空,则将IedPair赋值给IED->ppair;如果不为空,则将IedPair赋值给TPREV->pnext;\n[0127] (5)创建一个IpPair对象HostPair,将IED赋值给HostPair->pterl,将IedPair->plink赋值给IedPair->plink,HostPair->pnext赋值为空,并将HostPair赋值给HOST->ppair,HOST->pairnum自加1;\n[0128] (6)判断HOST->ppair是否为空:如果不为空,则将HostPair赋值给HOST->plast->pnext,再将HOST->plast赋值为HostPair;如果为空,则将HostPair赋值给HOST->ppair和HOST->plast;\n[0129] (7)IedPair->plink为该报文所属的通信过程,检索结束;\n[0130] (8)判断TPREV->pterl是否等于HOST:如果相等,则TPREV->plink为该报文所属的通信过程,检索结束;如果不等,进入(9);\n[0131] (9)判断TNEXT是否为空:如果为空,则进入(3);如果不为空\n[0132] 本发明的实施例虽然是以软件方式为基础进行的描述,然而软件是依托于硬件之上的,用软件能够实现的方法用硬件自然能够实现,只是相对于软件而言硬件实现的方式更为复杂且成本过高得不偿失,本发明不局限于上述实施例。凡采用等同替换形成的技术方案,均落在本发明要求的保护范围。
法律信息
- 2018-01-12
- 2015-12-09
实质审查的生效
IPC(主分类): H04L 12/701
专利申请号: 201510462083.0
申请日: 2015.07.31
- 2015-11-11
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-10-02
|
2013-06-07
| | |
2
| |
2013-10-30
|
2012-04-27
| | |
3
| |
2012-02-08
|
2011-06-09
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |