一种集成工业以太网从站自主识别主站的方法

文档序号:6312793阅读:277来源:国知局
一种集成工业以太网从站自主识别主站的方法
【专利摘要】本发明公开了一种集成工业以太网从站自主识别主站的方法,应用在嵌入有Linux操作系统的集成从站上。该方法基于工业以太网主从站之间通信前,主站会向从站发送识别信息这一前提,采用在Linux操作系统下原始套接字编程的方法,抓取通信网络中主站发出的识别信息,并对抓取到的识别信息进行区分判断,从而确定主站的类型并加载相应的从站程序。通过该方法,可以实现工业以太网集成从站自主识别与之相连接的主站类型,并完成自动加载运行与之对应的从站程序。
【专利说明】一种集成工业以太网从站自主识别主站的方法

【技术领域】
[0001]本发明属于工业控制领域,涉及工业控制现场,运行有嵌入式Linux操作系统的集成工业以太网从站,与不同种类工业以太网主站进行通信时,进行自主识别与之连接的主站种类,进行相应从站程序的选择运行。

【背景技术】
[0002]以太网技术向工业现场的推广,为生产效率的提高,产品的优化等等多方面都起到了极大的促进作用。目前世界上有多种工业以太网标准,种类繁多,各有优点,在某一生产过程中,往往需要几种工业以太网配合使用会产生更大的收益。所以,在工业控制现场比较流行使用集成工业以太网从站,但是,集成从站内对于从站程序的选择运行,一直采用传统的手动加载运行,即在上电前确定集成从站的性质,这给大规模的工业生产带来了很多不便。目前,急需一种方法,能够实现集成从站自主识别与之连接的主站类型,并自动运行与之对应的从站程序。


【发明内容】

[0003]本发明的目的是为了解决现有技术上存在的上述问题,提供一种集成工业以太网从站能够识别主站类型并自主选择加载运行相应从站程序的方法。
[0004]本发明提供的集成工业以太网从站自主识别主站的方法,应用在工业控制现场,运行有嵌入式Linux操作系统的集成工业以太网从站,以下简称集成从站;所述的集成从站集成了 Modbus-TCP和P0WERLINK从站程序;此方法通过分析判断来自通信网络中的主站识别信息,来确定与集成从站相连接的主站类型,从而选择加载运行对应的集成从站程序,实现了集成从站对主站类型的自主识别和集成从站程序的自动加载,摆脱了传统的手动加载的方法;
该方法具体的实现步骤如下:
第I步、抓取工业以太网通信网络中主站发送的识别数据包;
第1.1步、启动集成从站中的Linux操作系统;
第1.2步、设置集成从站以太网芯片的工作模式为混杂模式,这样集成从站就不会只接受目的地址为它的数据包,而是全部经过它的数据包,方便下面获得主站发送来的识别信息数据包。
[0005]第1.3步、通过socket套接字函数创建一个原始套接字的文件描述符;
第1.4步、利用recv O函数来接受来自通信网络中的数据包,并将接收到的数据包赋值到一个字符型指针变量中,方便后续对其进行分析。
[0006]第2步、分析抓取到的通信网络中的数据包;
第2.1步、将第I步中抓取到的数据包划分格式,因为所抓取的数据包赋值给某一变量时是没有划分格式的,数据包从左向右依次为以太网报文头、IP报文头、TCP报文头或者UDP报文头,在区分Modbus-TCP和P0WERLINK工业以太网只需要知道以太网报文头即可。将抓取到的数据包强制转化为struct ether_header结构体,那么数据包的以太网报文头便被保留下来。
[0007]第2.2步、判断struct ether_header结构体中的ether_type成员变量,如果变量的值为0x0806则可确定数据包来自Modbus-TCP主站,与集成从站相连的是Modbus-TCP主站,结束第2步,进入第3步;如果ether_type的值,不为0x0806,继续分析数据包。
[0008]第2.3步、继续判断struct ether_header结构体中的ether_type成员变量,如果变量的值为0x88ab则可确定数据包来自P0WERLINK主站,与集成从站相连的是P0WERLINK主站,结束第2步,进入第3步;如果ether_type的值,不为0x88ab,继续分析数据包。
[0009]第2.4步、抛弃所抓取的数据包,返回第I步,重新抓取通信网络中其他数据包。
[0010]第3步、根据第2步的分析结果,加载相应的从站程序;
此步骤根据第2步中对ether_type成员变量的分析判断结果不同,选择加载运行不同的工业以太网从站程序,或者不加载运行:
第3.1步、对于Modbus-TCP主站,Modbus-TCP作为Linux下的可执行程序,在可执行文件中通过system ()函数来完成Modbus-TCP从站程序的运行;
第3.2步、对于P0WERLINK主站,POffERLINK从站程序代码被交叉编译后生成一个Linux内核模块,需要通过insmod命令加载到Linux内核中才能运行;这里,通过编写一个shell脚本文件,在可执行程序中通过执行system()来执行脚本文件,从而完成P0WERLINK从站程序的加载运行。
[0011]本发明的优点和有益效果
通过本发明采用的技术方案可以看出,本方法能够实现集成工业以太网从站对与之相连接主站进行判断识别,并加载相应的从站程序,与主站建立连接,完成后续通信的任务。摆脱了传统的手动选择方式所带来的工作量大,不确定因素多等问题。现在的方法既方便又安全可靠,有更高的实用价值。

【专利附图】

【附图说明】
[0012]图1是数据包抓取流程图;
图2是以太网控制芯片设置分析图;
图3是Modbus-TCP和P0WERLINK主站报文分析图;
图4是Modbus-TCP和P0WERLINK报文以太网头分析图;
图5是数据包分析流程图。

【具体实施方式】
[0013]本发明提供的集成工业以太网从站自主识别主站的方法,具体步骤如下:
第I步、抓取工业以太网通信网络中主站发送的识别数据包;
图1是集成从站嵌入式Linux操作系统下,如何运行程序来抓取通信网络上的数据包。
[0014]首先启动Linux操作系统,提供软件程序的工作环境,加载af_packet.ko原始套接字功能模块,一般的嵌入式Linux操作系统中往往不具有这一模块,需要自行加载到内核中。接着,将与集成从站相连的以太网芯片的工作模式设置成混杂模式,因为以太网芯片的缺省工作模式为直接模式或广播模式,缺省工作模式下,以太网控制芯片会判断每个物理数据帧目的地是否为本站地址,如果不是就将它丢弃。然而,集成从站需要在从站程序运行前,完成对通信网络中主站发出的带有识别信息的数据包进行抓取和分析。因此,需要将适配器网卡设置成为混杂模式,这样就可以达到对于网络信息监视捕获的目的。通过命令“ifconfig ethO promise”完成以太网卡模式的修改,图2上下两部分显示出了以太网控制芯片设置前后的状态。
[0015]第2步、分析抓取到的通信网络中的数据包;
这里涉及到的图3和图4都是通过wireshark抓包工具,抓取到的来自通信网络中数据包。
[0016]图3中方框标注的内容分别为Modbus-TCP和P0WERLINK工业以太网主站发出的识别信息数据包,观察比较可知,二者在协议类型(protocol选项)上存在差异,Modbus-TCP是ARP,POffERLINK是印1,以此作为区标志。
[0017]图4是这两种协议以太网报文头的分析图。本发明方法对抓取到的数据包进行分析,所涉及到的内容是在数据链路层,主要判定以太网报文头,对上层网络包括网络层和传输层,不作分析判定。Modbus-TCP和P0WERLINK为两种工业以太网通信协议,使用的均为Ethernet II帧格式,这里之所以要突出是使用的Ethernet II型数据帧,是因为它的12字节之后为类型选项,而Modbus-TCP和P0WERLINK这两种协议在这里有所区分。Modbus-TCP协议是基于TCP/IP的工业以太网,它的以太网报文头中此项内容为0x0806 ;P0WERLINK协议不是基于TCP/IP的以太网,它有自己的数据链路层协议标准,因此它的以太网报文头的类型内容为0x88ab。因此,就可以通过判断抓取到的数据包的以太网数据报文类型,来确定与集成从节点相连接的通信主站类型。
[0018]图5是分析判断所抓取到数据包的流程图。首先,根据数据包的构成形式,将抓取到的数据包划分格式,因为所抓取的数据包给某一变量是没有划分格式的,数据包从左向右依次为以太网报文头、IP报文头、TCP报文头或者UDP报文头,根据上面的分析,可知区分Modbus-TCP和P0WERLINK工业以太网只需要知道以太网报文头即可。将数据包赋值到某一字符指针变量中,并将此变量强制转化为struct ether_header结构体,那么数据包的以太网报文头便被保留下来。struct ether_header结构体是以太网报文头的函数体形式,具体构成如下:
氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺
struct ether—header
{
u_int8_t ether_dhost[ΕΤΗ—ALEN];
u_int8_t ether_shost[ETH—ALEN];
u_intl6_t ether—type;
};
接着,通过判断语句,判断以太网报文头中的ether_type这一项,根据图3的报文分析可知,如果以太网头的类型为0x0806,就是Modbus-TCP主站的识别信息,那么就加载Modbus-TCP从站程序;如果以太网头的类型为0x88ab,就是P0WERLINK主站的识别信息,那么就加载P0WERLINK从站程序;如果不是这两种的一个,那么就是垃圾包,将其丢弃,并通过while函数返回到第I步,重新抓取分析数据包。
[0019]第3步、根据第2步的分析结果,加载相应的从站程序
此步骤根据第2步中对ether_type成员变量的分析判断结果不同,选择加载运行不同的工业以太网从站程序,或者不加载运行。由于Modbus-TCP和P0WERLINK的从站程序的特点不同,它们运行的方式也是不同的。Modbus-TCP作为Linux下的可执行程序,在可执行文件中通过system ()函数来完成Modbus-TCP从站程序的运行;而POWERLINK从站程序代码被交叉编译后生成一个Linux内核模块,需要通过insmod命令加载到Linux内核中才能运行,但是,从可执行文件中是无法执行insmod命令来加载内核模块,这里,通过编写一个shell脚本文件,在可执行程序中通过执行system O来执行脚本文件,从而间接地完成POffERLINK从站程序的加载运行。
【权利要求】
1.一种集成工业以太网从站自主识别主站的方法,该方法应用在工业控制现场,运行有嵌入式Linux操作系统的集成工业以太网从站,以下简称集成从站;所述的集成从站集成了 Modbus-TCP和POWERLINK从站程序;此方法通过分析判断来自通信网络中的主站识别信息,来确定与集成从站相连接的主站类型,从而选择加载运行对应的集成从站程序,实现了集成从站对主站类型的自主识别和集成从站程序的自动加载,摆脱了传统的手动加载的方法;此方法的具体实现步骤如下: 第I步、抓取工业以太网通信网络中主站发送的识别数据包; 第1.1步、启动集成从站中的Linux操作系统; 第1.2步、设置集成从站以太网芯片的工作模式为混杂模式,这样集成从站就不会只接受目的地址为它的数据包,而是全部经过它的数据包,方便获得主站发送来的识别信息数据包; 第1.3步、通过socket套接字函数创建一个原始套接字的文件描述符; 第1.4步、利用recv O函数来接受来自通信网络中的数据包,并将接收到的数据包赋值到一个字符型指针变量中,方便后续对其进行分析; 第2步、分析抓取到的通信网络中的数据包; 第2.1步、将第I步中抓取到的数据包划分格式,因为所抓取的数据包赋值给某一变量时,是没有划分格式的,数据包从左向右依次为以太网报文头、IP报文头、TCP报文头或者UDP报文头,在区分Modbus-TCP和POWERLINK工业以太网只需要知道以太网报文头即可;将数据包所复制的变量强制转化为struct ether_header结构体,那么数据包的以太网报文头便被保留下来; 第2.2步、判断struct ether_header结构体中的ether_type成员变量,如果变量的值为0x0806则可确定数据包来自Modbus-TCP主站,与集成从站相连的是Modbus-TCP主站,结束第2步,进入第3步;如果ether_type的值,不为0x0806,继续分析数据包; 第2.3步、继续判断struct ether_header结构体中的ether_type成员变量,如果变量的值为0x88ab则能够确定数据包来自POWERLINK主站,与集成从站相连的是POWERLINK主站,结束第2步,进入第3步;如果ether_type的值,不为0x88ab,继续分析数据包; 第2.4步、抛弃所抓取的数据包,返回第I步,重新抓取通信网络中其他数据包; 第3步、根据第2步的分析结果,加载相应的从站程序; 此步骤根据第2步中对ether_type成员变量的分析判断结果不同,选择加载运行不同的工业以太网从站程序,或者不加载运行: 第3.1步、对于Modbus-TCP主站,Modbus-TCP作为Linux下的可执行程序,在可执行文件中通过system ()函数来完成Modbus-TCP从站程序的运行; 第3.2步、对于POWERLINK主站,POWERLINK从站程序代码被交叉编译后生成一个Linux内核模块,需要通过insmod命令加载到Linux内核中才能运行;这里,通过编写一个shell脚本文件,在可执行程序中通过执行system()来执行脚本文件,从而完成POWERLINK从站程序的加载运行。
【文档编号】G05B19/418GK104503390SQ201410703498
【公开日】2015年4月8日 申请日期:2014年11月30日 优先权日:2014年11月30日
【发明者】陈在平, 孙逊, 贾超, 倪建云 申请人:天津理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1