掌桥专利:专业的专利平台
掌桥专利
首页

一种基于CoDeSys系统的UDP数据包解析方法

文献发布时间:2024-04-18 20:02:40


一种基于CoDeSys系统的UDP数据包解析方法

技术领域

本发明属于工控设备数据安全领域,涉及一种基于CoDeSys系统的UDP数据包解析方法。

背景技术

互联网+、物联网、两化融合进程的不断交叉融合,越来越多的信息技术应用于工控领域,工控系统的开放程度也越来越高,这为工业生产带来极大推动。

CoDeSys是一种基于IEC 61131-3标准的PLC编程软件,在全球范围内被广泛应用于工业自动化领域。CoDeSys支持多种编程语言,如梯形图(LD)、结构化文本(ST)、功能块图(FB)、顺序函数图(SFC)等,且具有良好的可移植性和兼容性。此外,CoDeSys还提供了丰富的开发工具和库,方便编程和调试。

CoDeSys作为一种行业公认的PLC编程软件,被广泛应用于多种PLC型号的编程中。各大PLC品牌也都不断地扩展支持CoDeSys编程的型号,以满足不同行业的需求。目前支持的型号包括,Siemens PLC、ABB PLC、Beckhoff PLC、Phoenix Contact PLC、WAGO PLC、德尔福PLC、Schneider PLC等。

但是,现有技术的技术方案存在的问题是:CoDeSys支持多种PLC,与工控PLC设备网络连接时,使用UDP协议进行数据交互,且CodeSys V3 UDP数据封包具有应答特性,但很多字节数据得含义、获取方法及解析方法未被公开,因此,本领域技术人员无法获取UDP数据包的具体含义,因而无法掌握工控PLC设备数据与上位机交互数据的内容,对工控PLC设备及其配套设备的开发也带来不利影响。因此,急需一种基于CoDeSys系统的UDP数据包解析方法。

发明内容

本发明针对现有技术的不足问题,提出了一种基于CoDeSys系统的UDP数据包解析方法,通过解析UDP数据包上、下文并验证结构内容,提供了一种解析CoDeSys系统的UDP数据包的方法,包括以下步骤:

本发明的有益效果是:无需添加额外硬件设备及其他软件的低成本的条件下,实现高效地解析基于CoDeSys系统的UDP数据包。

附图说明

图1为本发明的流程图;

图2A为本发明一个实施例中UDP数据包的数据结构图;

图2B为本发明另一实施例中UDP数据包的数据结构图;

图2C为本发明又一实施例中UDP数据包的数据结构图;

图2D为本发明再一实施例中UDP数据包的数据结构图;

图3为本发明中进行UDP数据包的交互处理流程的流程图;

图4为本发明中解析分包并获取解析后的信息的流程图;

图5为本发明实施例中所获取UDP数据包交互处理完成后的数据结构图;

图6为本发明实施例中所获取UDP数据包心跳标识的数据结构图;

图7为本发明实施例中所获取UDP数据包厂商信息标识的数据结构图。

具体实施方式

下面结合附图和实施例对本发明作进一步阐述。值得注意的是,为了与附图的数据结构图所述的计数规则一致,本申请所描述的UDP数据包的第XX字节中,其计数规则均从0开始(而不是从1开始)。例如,图2A中UDP数据包第17字节内容为0x01,第37字节、第38字节内容为0x55CD,以下同。

本申请采用现有技术中最新的CodeSys系统(其V3版本号为3.5.19.40)为实施例进行说明。如图1所示,本发明的方法包括以下步骤:

S100:获取工控PLC设备发送的UDP数据包。本实施例中,采用WireShark获取工控PLC设备发送的UDP数据包。

S200:判断所获取UDP数据包前3字节内容是否为数据收发标识,如果是,执行步骤S300,否则,执行步骤SB00;

本实施例中,数据收发标识为C56340或C56B 40,其中,数据收发标识C56340表示工控PLC设备向上位机发送消息;而数据收发标识C56B 40表示上位机向工控PLC设备发送消息。

图2A示出了本发明一个实施例中UDP数据包的数据结构图。如图2A所示,UDP数据包的前3字节内容为C56340,表示工控PLC设备向上位机发送消息。

图2B示出了本发明另一实施例中UDP数据包的数据结构图(仅示出了部分数据)。如图2B所示,UDP数据包的前3字节内容为C56B 40,表示上位机向工控PLC设备发送消息。

S300:判断所获取UDP数据包第17字节内容是否为交互处理标识,如果是,执行步骤S400,否则,执行步骤S500。

本实施例中,交互处理标识为0x01。

图2A示出了本发明一个实施例中UDP数据包的数据结构图。如图2A所示,UDP数据包的第17字节内容为0x01。因此,执行步骤S400。

S400:进行UDP数据包的交互处理流程:获取当前数据包的序列号、上位机请求数据的序列号、分包(SubPackage)数据的字节长度并解析分包(SubPackage),执行步骤SB00;

图3示出了本发明中进行UDP数据包的交互处理流程的流程图。如图3所示,步骤S400包括以下步骤:

S401:判断所获取UDP数据包第18字节内容是否为0x01,如果是,执行步骤S404,否则,执行步骤S402。

具体地,如图2A所示,UDP数据包的第18字节内容为0x01。因此,执行步骤S404。

S402:判断所获取UDP数据包第18字节内容是否为0x00,如果是,执行步骤S403,否则,执行步骤SB00。

图2C为本发明又一实施例中UDP数据包的数据结构图。如图2C所示,UDP数据包第18字节内容为0x00。因此,执行步骤S403。

S403:获取当前数据包的序列号、上位机请求数据的序列号及流数据;执行步骤SB00;其中,

获取UDP数据包第21字节至第24字节内容,作为当前数据包的序列号;

获取UDP数据包第25字节至第28字节内容,作为上位机请求数据的序列号;

将UDP数据包第29字节至数据结束标识之间的数据作为流数据进行储存,其中,查询上位机请求数据的序列号,用以获取所储存的流数据名称。

参考图2C,UDP数据包第21字节至第24字节内容0xEC030000(即,大端格式读取为0x03EC)为当前数据包的序列号;

值得注意的是,本申请中除非特别说明,所读取字节的格式均为大端格式,以下同。

UDP数据包第25字节至第28字节内容0x85010000(即,大端格式读取为0x0185)为上位机请求数据的序列号;

UDP数据包第29字节至数据结束标识之间的数据作为流数据进行储存,如图2C中阴影部分所示的数据。

本实施例中,数据结束标识为连续4字节的零,如图2C最后4字节内容所示,即,0x00000000。

此时,执行步骤SB00。

S404:作为UDP数据包的第18字节内容为0x01的情况,此时,需获取如图2A所示UDP数据包第21字节至第24字节内容0x02000000(即,大端格式读取为0x02)为当前数据包的序列号;

S405:获取如图2A所示UDP数据包第25字节至第28字节内容0x02000000(即,大端格式读取为0x02)为上位机请求数据的序列号;

S406:获取如图2A所示UDP数据包第29字节至第32字节内容0xB4000000(即,大端格式读取为0xB4)为分包(SubPackage)数据的字节长度;

S407:获取如图2A所示UDP数据包第33字节至第36字节内容0x1291A89F为分包(SubPackage)数据的CRC32校验和;

S408:解析分包(SubPackage)并获取解析后的信息,执行步骤SB00。

图4示出了本发明中解析分包并获取解析后的信息的流程图。如图4所示,步骤S408包括以下步骤:

S4081:判断如图2A所示UDP数据包第37字节、第38字节内容是否为0x55CD,如果是,执行步骤S4082,否则,执行步骤SB00;

S4082:获取如图2A所示UDP数据包第39字节、第40字节内容0x1000的,其大端格式的值为0x0010(十进制为16),作为标签Tag数据包相对于UDP数据包第40字节的偏移地址;换言之,从UDP数据包第41字节为起始地址,其偏移量为0x10(十进制为16)。

值得注意的是,本申请中除非特别说明,所读取字节的格式均为大端格式,以下同。

S4083:获取如图2A所示UDP数据包第45字节至第48字节内容0x370582E9,作为工控PLC设备连接特征值。

S4084:获取如图2A所示UDP数据包第49字节至第52字节内容0xA0000000,其大端格式的值为0x000000A0(十进制为160),作为标签Tag数据包的字节长度。

如图2A中第53字节至第56字节所示,结束标识为0x00000000。如图2A的阴影部分所示,地址第57字节起、至地址第216字节为止,字节长度为160字节的内容,为标签Tag数据包。

S4085:寻址当前标签Tag数据包并获取Tag ID,判断Tag ID是否小于0x80,如果是,执行步骤S4086,否则,执行步骤S4087;

具体地,如图2A的阴影部分开始所示,第57字节内容为第一个Tag ID,其值为0x05,小于0x80,因而满足判断条件,执行步骤S4086;

S4086:标签Tag数据包组成格式为标签Tag ID+标签Tag数据包内容的字节长度+标签Tag数据包内容,执行步骤S4088;

具体地,当前标签Tag数据包组成格式为标签Tag ID+标签Tag数据包内容的字节长度+标签Tag数据包内容,如图2A的阴影部分前4字节内容所示,即,当前标签Tag数据包组成格式为标签Tag ID+标签Tag数据包内容的字节长度+标签Tag数据包内容的内容为0x05020000,表示标签Tag ID为0x05,标签Tag数据包内容的字节长度为0x02字节,标签Tag数据包内容的内容为随后2字节的内容0x0000,即,内容为空。

再如,如图2A的阴影部分所示的第61字节内容为0x01,则标签Tag ID为0x01。随后的第62字节内容为0x8C,表示当前标签Tag数据包内容的字节长度为0x8C(十进制为140)个字节。即,从第63字节至第202字节的内容为当前标签Tag数据包内容。

S4087:当前标签Tag数据包为父标签Tag数据包,其包含一个或多个标签Tag数据包,采用Base 128Varint编码方法获取标签Tag ID及标签Tag数据包内容的字节长度;

本实施例中,作为Tag ID大于或等于0x80的例子,请参考如图2D的阴影部分所示,第57字节内容为0x84,其大于0x80,该数据包为父标签Tag数据包并包含一个或多个标签Tag数据包。

对于包含一个或多个标签Tag数据包的父标签Tag数据包的解析,采用Base128Varint编码方法进行获取。Base 128Varint编码方法为现有技术,在此不再赘述。

S4088:是否存在下一标签Tag数据包,如果是,执行步骤S4085,否则,执行步骤SB00。

S500:判断所获取UDP数据包第17字节内容是否为交互处理完成标识,如果是,执行步骤S700,否则,执行步骤S600;

本实施例中,交互处理完成标识为0x02。

图5示出了本发明实施例中所获取UDP数据包交互处理完成后的数据结构图(仅示出了部分数据)。如图5所示,第17字节内容为交互处理完成标识0x02。

S600:判断所获取UDP数据包第17字节内容是否为心跳标识,如果是,执行步骤S800,否则,执行步骤S900;

本实施例中,心跳标识为0x03。

图6示出了本发明实施例中所获取UDP数据包心跳标识的数据结构图(仅示出了部分数据)。如图6所示,第17字节内容为心跳标识0x03。

S700:获取工控PLC设备完成PLC数据交互处理后的PLC数据包序列号,执行步骤SB00;

具体地,步骤S700包括以下步骤:

S701:获取如图5所示UDP数据包第21字节至第24字节内容0x04000000,即,大端格式读取为0x04,作为交互处理完成后的PLC数据包序列号;

S702:执行步骤SB00。

S800:获取工控PLC设备心跳信息,执行步骤SB00。

具体地,步骤S800包括以下步骤:

S801:判断如图6所示的所获取UDP数据包第18字节内容是否为0x00,如果是,执行步骤S802,否则,执行步骤S803;

S802:确定当前心跳为工控PLC设备向上位机发送的心跳,执行步骤S805;

S803:判断所获取UDP数据包第18字节内容是否为0x80,如果是,执行步骤S804,否则,执行步骤S805;

S804:确定当前心跳为上位机向工控PLC设备发送的心跳;

S805:执行步骤SB00。

S900:判断所获取UDP数据包第17字节内容是否为工控PLC设备的厂商信息标识,如果是,执行步骤SA00,否则,执行步骤SB00;

本实施例中,工控PLC设备的厂商信息标识为0x80。

图7示出了本发明实施例中所获取UDP数据包厂商信息标识的数据结构图。如图7所示,所获取UDP数据包第17字节内容为工控PLC设备的厂商信息标识0x80。

SA00:获取工控PLC设备的厂商信息。

具体地,步骤SA00包括以下步骤:

SA01:获取图7所示UDP数据包第19字节内容0x03,作为数组下标个数,即,数组下标个数为3个;获取UDP数据包第31字节至第32字节内容0x1800(即,大端格式读取为0x18),作为数组下标为1的字符串长度;获取UDP数据包第33字节至第34字节内容0x0A00(即,大端格式读取为0x0A),作为数组下标为2的字符串长度,以此类推。

SB00:判断是否获取下一工控PLC设备发送的UDP数据包,如果是,如果是,执行步骤S100,否则,结束流程。

通过本发明提供的方法,解决了现有技术中尚无一种基于CoDeSys系统的UDP数据包解析方法的技术问题。

应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

相关技术
  • 对于IPv6网络UDP数据包的接收解析与存储方法
  • 一种基于泊松模型的递增型对称NAT的UDP穿透方法与系统
  • 一种基于RFID技术和UDP协议的课外体育锻炼考勤方法及系统
  • 一种多终端系统的UDP下载加速方法及装置
  • 一种UDP数据包解析方法、系统和存储介质
  • 一种UDP数据包解析方法、系统和存储介质
技术分类

06120116588074