以太网现场总线的跨平台网络通信
时间:12-04
来源:互联网
点击:
1,引言
“EAST(Experimental Advanced Superconducting Tokamak)超导TOKMAK装置”是国家九五重大科学工程。极向场电源控制系统是托卡马克主要子系统之一,它为等离子体的产生、约束、维持、加热,以及等离子体的电流、位置、形状、分布和破裂的控制,提供必要的工程基础和控制手段。对装置运行的性能与安全,物理实验的成败与效率,有着至关重要的作用。其实时性、可靠性、可扩充性要求甚高。为了满足整个控制系统的这种高要求,整个控制系统由三层网络组成:Windows 监测层、QNX实时控制层、现场总线执行层。
――――――――――――――――――-----------------------
基金项目:国家发展计划委员会“投资(1998)1303号项目”(子项目)
作者简介:兰鲁光(1980-),男,硕士生,研究方向现场总线技术、实时计算机监控;傅鹏,研究员、博导;杨亚龙,博士生;吴勇,硕士生 E-mail:lanluguang@163.com
Windows 监测层选用Windows 2000平台作为操作工作站,进行测量、监控、故障分析和波形显示。而QNX实时控制层选用QNX6.20实时操作系统,担负着电源系统多变量反馈电流反馈控制、系统连锁控制、保护及各种运行方式的调配。现场总线层由大量的现场总线控制器及现场总线模块组成,负责采集大量现场设备的状态通过网络传递给QNX实时控制层和WINDOWS监测层,并接受QNX控制层发来的控制信号控制现场设备。
2,现场总线层构建
现场总线是应用在生产现场、在微机化测量控制设备之间实现双向串行多节点数字通信的系统,也被称为开放式、数字化、多点通信的底层控制网络。以太网现场总线就是利用当今世界上最流行的开放式局域网Ethernet作为工业I/O控制模块的通信网络,作为真正开放式的现场总线系统。
工业以太网协议主要有以下几种:Modbus TCP/IP(Schneider,1998)、Interbus(Phoenix,1999)、EtherNet/IP(ODVA,1999)、IDA(Vendor Alliance,2000)、HSE(Foundation Fieldbus,2000)、ProfiNet(Profibus,2001)。
EAST极向场电源控制系统由12套电源子系统组成,在空间上具有较强的分散性,需要发送至现场的控制量信号及采集的状态有上千个,如此分散而庞大的信号量要实现实时、可靠的通信最好的解决方法就是采用工业现场总线。考虑到以太网技术的成熟性、开放性及高的性价比,极向场电源控制系统使用德国WAGO公司的以太网总线模块,采用Modbus Tcp/IP协议,Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信,它已成为一种通用工业标准。通过它,不同厂商生产的控制设备可以连成工业网络进行集中监控。
MODBUS/TCP协议是为制造自动化和过程自动化独立设计的一种开放的现场总线标准。它是MODBUS协议的变异,可以通过TCP/IP的连接来优化现场的通讯。MODBUS/TCP协议定义了通过以太网通讯时,服务器/客户机请求和响应消息的帧格式。如图1所示:
通讯标识、协议标识、单元标识均为16进制0x0000,这是因为底层的IP帧头中已经有类似的标识符。控制器通过IP帧头已经可以识别帧是发给谁的了。消息长度是用来描述此区域后总共还有多少个字节。功能代码是用来描述此帧数据是干什么用的。传输数据是用来描述想要读写的I/O通道,及所传送的数据值。此外, 由于TCP/IP 协议以及链路层的求和校验机制可以保证数据包传递的正确性,所以MODBUS/TCP协议中没有定义CRC- 16 或LRC 校验。
WAGO以太网总线通讯时,需要在以太网标准上叠加几种重要的通讯协议。在ISO/OSI标准化模型的第三层网络层上需叠加IP,ICMP和ARP协议,在第四层传输层视传输情况需叠加TCP协议或UDP协议。另外,现场总线适配器还包含了几种额外的用户协议以用于传输和接收数据。其中MODBUS/TCP协议用于对模块读取和写入数据,端口号为502;Bootstrap协议用于配置总线IP地址;HTTP协议用于访问总线适配器中存储的HTML页面以监控总线适配器的状态,端口号为80。图2所示为数据传输时协议的叠加情况。
在WAGO以太网总线适配器和控制器的应用层有Modbus协议的多种操作程序,通过这些操作程序实现数字或模拟输入输出数据的对现场总线模块的写入或读出。在极向场电源控制系统中对WAGO总线模块的操作既有读取状态量的操作也有发出控制量的操作,所以通常采用操作程序代码为FC23: 0x0017.
极向场电源控制系统现场总线层由多个总线控制器、大量数字量输入输出模块、少量模拟量输入输出模块组成,分成12组以实现对现场12套极向场电源装置的控制和状态读取,以达到远动和监控的目的。通过100M以太网很方便的实现了现场总线控制器同12台极向场电源子系统控制上位机的高速连接,仅仅需要使用普通的网卡、网线和一台交换机,大大简化了普通现场总线接线的繁琐,性价比也较普通现场总线有较大提高。同时,由于TCP/IP协议应用技术的普遍,能通用于WINDOWS、UNIX、QNX等多种操作系统,具有良好的互操作性。
3、以太网总线的跨平台通信研究
3.1、网络通信模式
网络中存在多种类型的机器,这些不同类型的机器表示数据的字节顺序是不同的,即主机字节顺序不同。而网络协议中的数据采用统一的网络字节顺序,因为只有采用统一的字节顺序,才能在不同类型的机器和不同操作系统间进行正确地发送和接收数据。进行跨平台进程间的通信时必须要将字节序转变成网络字节序进行传递,并且套接字的建立需要双方可见的IP地址和端口号。上位机同以太网现场总线控制器的通信在传输层可以选用TCP或UDP协议,TCP提供的是面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。由于EAST极向场电源控制系统具有收发数据多为短消息 ,对响应速度要求较高的特点,故采用UDP 面向数据报方式。图三为UDP协议传输下的客户端/服务器示意图.
3.2、Windows平台的软件实现
Windows平台软件用Visual C++6.0编程,运行在Windows2000环境下。Visual C++6.0的最大的特色就是提供对面向对象技术的支持,它利用类把大部分与用户界面设计有关的Windows API函数封装起来,通过MFC (Microsoft Foundation Class)类库的方式提供给开发人员使用,大大提高了程序代码的重用性,其功能几乎包括了Windows应用的各个方面。Visual C++6.0还支持多任务、多线程的编程技术。
CBlockingSocket 是在Visual C++的Winsock API基础上的一个简单包装,为辅助线程中的同步编程而设计的,其优点就是能进行对错误的异常处理和发送、接收数据的超时处理。这一点对极向场电源的实时控制反应能力尤为重要,应此Windows平台软件网络部分程序采用CBlockingSocket编写。采用UDP客户机模式与现场总线通信,同时利用辅助线程进行具体的接收和处理数据;部分UDP客户机模式代码如下:
CBlockingSocket sClient;
CSockAddr saServer;
saServer =CSockAddr(ip,port2);
try{
sClient.Create(SOCK_DGRAM);//建立套接字
sClient.Connect(saServer);//连接服务器
AfxBeginThread(Server1ThreadProc, GetSafeHwnd());//启动接受线程
}
//异常处理
catch(CBlockingSocketException* e){
AfxMessageBox(" error!");
sClient.Cleanup();//关闭套接字
e->Delete();
}
3.3、QNX平台的软件实现
QNX6.20是一个多任务、分布式、嵌入式、可扩展规模的符合POSIX标准的微内核实时操作系统;其内核提供4种服务:进程调度、进程间通信、底层网络通信和中断处理;网络服务程序在内核外执行,为程序员提供了一个单一化的编程接口,忽略所涉及到的网络结构和数量;QNX6.20系统可以动态的停止和启动网络服务程序。
QNX平台软件采用ANSI C语言、利用QNX6.20特有的函数和库函数来编写,运行在QNX6.20环境下。采用BSD Socket API作为套接字应用程序接口(Socket API)进行TCP/IP通信,部分代码如下:
sock = socket(AF_INET, SOCK_DGRAM, 0); //得到一个UDP套接字
server.sin_family = AF_INET;
server.sin_addr.s_addr=inet_addr( HOST_FIELD_CTL );
server.sin_port = htons( PORT_FIELD_CTL ); //填充套接字结构
ioctl( sock, FIONBIO, on );//设置非阻塞的UDP传送
填充MODBUS/TCP帧结构,并调用sendto()函数发送控制量,recvfrom()函数接收状态量即可。
3.4 最佳通信周期的确定
在EAST极向场电源控制系统中,现场总线总是同时与QNX控制层和WINDOWS监控层进行数据通信,一方面采集现场模拟量和开关量信号并转换成数字信号传输到QNX实时层作为计算机的反馈输入信号,接受来自QNX实时控制层的数据包,根据其内容控制现场的诸多开关、变压器、整流器等器件;另一方面还要将采集到的现场模拟量和开关量信号并转换成数字信号传输到WINDOWS监控层,用来监控现场设备的状态。在通信过程中要保证实时通信的稳定性,不能出现较大的丢包率。为保证上位机与现场总线可靠的通信,同时尽量确保其实时性,必须找出适当的通信周期。
实验方法:首先让上位机分别在QNX与WINDOWS下运行通信程序,交替发送0、1数据包
到同一数字量输出模块,用示波器测量模块的输出值,以监测数据包丢失的情况。同时不断更改发送周期,找出无掉包率的最小通信时间,即为最佳通信周期,测出QNX与WINDOWS单独对现场总线通信时各自的最佳通信周期. 接着将两台上位机通过交换机实现与单个现场总线模块的连接,让一台上位机在WINDOWS下不断发送1信号,另一上位机在QNX下发送0信号到同一数字量模块,重复单机情况下的步骤,找到最佳通信周期.(上位机均采用Pentium 4 1.8GHz , QNX6.20操作系统,WINDOWS2K系统,以太网现场总线采用WAGO 750系列,SWITCH采用3COM 17206)。
实验分析:通过实验发现以太网总线虽然通信速度很高100Mb/s,但由于它采用ISO/OSI标准化模型的七层完整结构,其协议复杂度比起CAN和PROFIBUS等工业控制总线要复杂得多,故其发送方和接收方开销很大。当一台上位机对总线模块操作时,通信周期为4ms及以上掉包率为0;周期为3ms时掉包率小于0.1%;周期为2ms时统计掉包率为28.9%;可见通信周期必须在3ms以上才能保证通信正常。当两台上位机同时与总线模块通信时,要保证控制量和状态量数据的可靠性,不出现掉包,必然要加大通信周期,当然通信周期也必须尽可能的小以兼顾实时性。由于WINDOWS层负责监控,对实时性要求不如QNX实时控制层高,因此我们将QNX下通信周期固定为4ms,通过不断调整WINDOWS下的周期来
分析总线模块的丢包情况确定最佳通信周期,WINDOWS下通信周期为10ms以上时丢包率为0,周期为8ms时丢包率为2.2%,周期为6ms时丢包率为19.7%。综合考虑系统可靠性和实时性的因素,将QNX层的最佳通信周期定为4ms,WINDOWS层定为10ms.图4为最佳通信周期下的示波器监测图。
4 结论
利用BSD Socket采用API 建立的套接字,使得QNX平台同Windows平台能同时与现场总线在基于TCP/IP协议的网络上进行通信,并确定了最佳通信周期,满足系统提出的实时性和可靠性要求,为EAST装置的建立打下坚实的基础。
参考文献:
[1] 阳宪惠. 现场总线技术及其应用. 北京,清华大学出版社. 1999.6
[2] Rob krten. QNX Operating System Architecture. QNX Software system Itd.2000.2
[3] W.Richard Stevens. 陆雪莹等译.TCP/IP 详解卷2. 机械工业出版社. 2000.
[4] 实时操作系统QNX中文网. http://hichun.nease.net.
[5] Kruglinski D J 潘爱民,王国印. Visual C++技术内幕(第四版).北京:清华大学出版社
“EAST(Experimental Advanced Superconducting Tokamak)超导TOKMAK装置”是国家九五重大科学工程。极向场电源控制系统是托卡马克主要子系统之一,它为等离子体的产生、约束、维持、加热,以及等离子体的电流、位置、形状、分布和破裂的控制,提供必要的工程基础和控制手段。对装置运行的性能与安全,物理实验的成败与效率,有着至关重要的作用。其实时性、可靠性、可扩充性要求甚高。为了满足整个控制系统的这种高要求,整个控制系统由三层网络组成:Windows 监测层、QNX实时控制层、现场总线执行层。
――――――――――――――――――-----------------------
基金项目:国家发展计划委员会“投资(1998)1303号项目”(子项目)
作者简介:兰鲁光(1980-),男,硕士生,研究方向现场总线技术、实时计算机监控;傅鹏,研究员、博导;杨亚龙,博士生;吴勇,硕士生 E-mail:lanluguang@163.com
Windows 监测层选用Windows 2000平台作为操作工作站,进行测量、监控、故障分析和波形显示。而QNX实时控制层选用QNX6.20实时操作系统,担负着电源系统多变量反馈电流反馈控制、系统连锁控制、保护及各种运行方式的调配。现场总线层由大量的现场总线控制器及现场总线模块组成,负责采集大量现场设备的状态通过网络传递给QNX实时控制层和WINDOWS监测层,并接受QNX控制层发来的控制信号控制现场设备。
2,现场总线层构建
现场总线是应用在生产现场、在微机化测量控制设备之间实现双向串行多节点数字通信的系统,也被称为开放式、数字化、多点通信的底层控制网络。以太网现场总线就是利用当今世界上最流行的开放式局域网Ethernet作为工业I/O控制模块的通信网络,作为真正开放式的现场总线系统。
工业以太网协议主要有以下几种:Modbus TCP/IP(Schneider,1998)、Interbus(Phoenix,1999)、EtherNet/IP(ODVA,1999)、IDA(Vendor Alliance,2000)、HSE(Foundation Fieldbus,2000)、ProfiNet(Profibus,2001)。
EAST极向场电源控制系统由12套电源子系统组成,在空间上具有较强的分散性,需要发送至现场的控制量信号及采集的状态有上千个,如此分散而庞大的信号量要实现实时、可靠的通信最好的解决方法就是采用工业现场总线。考虑到以太网技术的成熟性、开放性及高的性价比,极向场电源控制系统使用德国WAGO公司的以太网总线模块,采用Modbus Tcp/IP协议,Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信,它已成为一种通用工业标准。通过它,不同厂商生产的控制设备可以连成工业网络进行集中监控。
MODBUS/TCP协议是为制造自动化和过程自动化独立设计的一种开放的现场总线标准。它是MODBUS协议的变异,可以通过TCP/IP的连接来优化现场的通讯。MODBUS/TCP协议定义了通过以太网通讯时,服务器/客户机请求和响应消息的帧格式。如图1所示:
通讯标识、协议标识、单元标识均为16进制0x0000,这是因为底层的IP帧头中已经有类似的标识符。控制器通过IP帧头已经可以识别帧是发给谁的了。消息长度是用来描述此区域后总共还有多少个字节。功能代码是用来描述此帧数据是干什么用的。传输数据是用来描述想要读写的I/O通道,及所传送的数据值。此外, 由于TCP/IP 协议以及链路层的求和校验机制可以保证数据包传递的正确性,所以MODBUS/TCP协议中没有定义CRC- 16 或LRC 校验。
WAGO以太网总线通讯时,需要在以太网标准上叠加几种重要的通讯协议。在ISO/OSI标准化模型的第三层网络层上需叠加IP,ICMP和ARP协议,在第四层传输层视传输情况需叠加TCP协议或UDP协议。另外,现场总线适配器还包含了几种额外的用户协议以用于传输和接收数据。其中MODBUS/TCP协议用于对模块读取和写入数据,端口号为502;Bootstrap协议用于配置总线IP地址;HTTP协议用于访问总线适配器中存储的HTML页面以监控总线适配器的状态,端口号为80。图2所示为数据传输时协议的叠加情况。
在WAGO以太网总线适配器和控制器的应用层有Modbus协议的多种操作程序,通过这些操作程序实现数字或模拟输入输出数据的对现场总线模块的写入或读出。在极向场电源控制系统中对WAGO总线模块的操作既有读取状态量的操作也有发出控制量的操作,所以通常采用操作程序代码为FC23: 0x0017.
极向场电源控制系统现场总线层由多个总线控制器、大量数字量输入输出模块、少量模拟量输入输出模块组成,分成12组以实现对现场12套极向场电源装置的控制和状态读取,以达到远动和监控的目的。通过100M以太网很方便的实现了现场总线控制器同12台极向场电源子系统控制上位机的高速连接,仅仅需要使用普通的网卡、网线和一台交换机,大大简化了普通现场总线接线的繁琐,性价比也较普通现场总线有较大提高。同时,由于TCP/IP协议应用技术的普遍,能通用于WINDOWS、UNIX、QNX等多种操作系统,具有良好的互操作性。
3、以太网总线的跨平台通信研究
3.1、网络通信模式
网络中存在多种类型的机器,这些不同类型的机器表示数据的字节顺序是不同的,即主机字节顺序不同。而网络协议中的数据采用统一的网络字节顺序,因为只有采用统一的字节顺序,才能在不同类型的机器和不同操作系统间进行正确地发送和接收数据。进行跨平台进程间的通信时必须要将字节序转变成网络字节序进行传递,并且套接字的建立需要双方可见的IP地址和端口号。上位机同以太网现场总线控制器的通信在传输层可以选用TCP或UDP协议,TCP提供的是面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。由于EAST极向场电源控制系统具有收发数据多为短消息 ,对响应速度要求较高的特点,故采用UDP 面向数据报方式。图三为UDP协议传输下的客户端/服务器示意图.
3.2、Windows平台的软件实现
Windows平台软件用Visual C++6.0编程,运行在Windows2000环境下。Visual C++6.0的最大的特色就是提供对面向对象技术的支持,它利用类把大部分与用户界面设计有关的Windows API函数封装起来,通过MFC (Microsoft Foundation Class)类库的方式提供给开发人员使用,大大提高了程序代码的重用性,其功能几乎包括了Windows应用的各个方面。Visual C++6.0还支持多任务、多线程的编程技术。
CBlockingSocket 是在Visual C++的Winsock API基础上的一个简单包装,为辅助线程中的同步编程而设计的,其优点就是能进行对错误的异常处理和发送、接收数据的超时处理。这一点对极向场电源的实时控制反应能力尤为重要,应此Windows平台软件网络部分程序采用CBlockingSocket编写。采用UDP客户机模式与现场总线通信,同时利用辅助线程进行具体的接收和处理数据;部分UDP客户机模式代码如下:
CBlockingSocket sClient;
CSockAddr saServer;
saServer =CSockAddr(ip,port2);
try{
sClient.Create(SOCK_DGRAM);//建立套接字
sClient.Connect(saServer);//连接服务器
AfxBeginThread(Server1ThreadProc, GetSafeHwnd());//启动接受线程
}
//异常处理
catch(CBlockingSocketException* e){
AfxMessageBox(" error!");
sClient.Cleanup();//关闭套接字
e->Delete();
}
3.3、QNX平台的软件实现
QNX6.20是一个多任务、分布式、嵌入式、可扩展规模的符合POSIX标准的微内核实时操作系统;其内核提供4种服务:进程调度、进程间通信、底层网络通信和中断处理;网络服务程序在内核外执行,为程序员提供了一个单一化的编程接口,忽略所涉及到的网络结构和数量;QNX6.20系统可以动态的停止和启动网络服务程序。
QNX平台软件采用ANSI C语言、利用QNX6.20特有的函数和库函数来编写,运行在QNX6.20环境下。采用BSD Socket API作为套接字应用程序接口(Socket API)进行TCP/IP通信,部分代码如下:
sock = socket(AF_INET, SOCK_DGRAM, 0); //得到一个UDP套接字
server.sin_family = AF_INET;
server.sin_addr.s_addr=inet_addr( HOST_FIELD_CTL );
server.sin_port = htons( PORT_FIELD_CTL ); //填充套接字结构
ioctl( sock, FIONBIO, on );//设置非阻塞的UDP传送
填充MODBUS/TCP帧结构,并调用sendto()函数发送控制量,recvfrom()函数接收状态量即可。
3.4 最佳通信周期的确定
在EAST极向场电源控制系统中,现场总线总是同时与QNX控制层和WINDOWS监控层进行数据通信,一方面采集现场模拟量和开关量信号并转换成数字信号传输到QNX实时层作为计算机的反馈输入信号,接受来自QNX实时控制层的数据包,根据其内容控制现场的诸多开关、变压器、整流器等器件;另一方面还要将采集到的现场模拟量和开关量信号并转换成数字信号传输到WINDOWS监控层,用来监控现场设备的状态。在通信过程中要保证实时通信的稳定性,不能出现较大的丢包率。为保证上位机与现场总线可靠的通信,同时尽量确保其实时性,必须找出适当的通信周期。
实验方法:首先让上位机分别在QNX与WINDOWS下运行通信程序,交替发送0、1数据包
到同一数字量输出模块,用示波器测量模块的输出值,以监测数据包丢失的情况。同时不断更改发送周期,找出无掉包率的最小通信时间,即为最佳通信周期,测出QNX与WINDOWS单独对现场总线通信时各自的最佳通信周期. 接着将两台上位机通过交换机实现与单个现场总线模块的连接,让一台上位机在WINDOWS下不断发送1信号,另一上位机在QNX下发送0信号到同一数字量模块,重复单机情况下的步骤,找到最佳通信周期.(上位机均采用Pentium 4 1.8GHz , QNX6.20操作系统,WINDOWS2K系统,以太网现场总线采用WAGO 750系列,SWITCH采用3COM 17206)。
实验分析:通过实验发现以太网总线虽然通信速度很高100Mb/s,但由于它采用ISO/OSI标准化模型的七层完整结构,其协议复杂度比起CAN和PROFIBUS等工业控制总线要复杂得多,故其发送方和接收方开销很大。当一台上位机对总线模块操作时,通信周期为4ms及以上掉包率为0;周期为3ms时掉包率小于0.1%;周期为2ms时统计掉包率为28.9%;可见通信周期必须在3ms以上才能保证通信正常。当两台上位机同时与总线模块通信时,要保证控制量和状态量数据的可靠性,不出现掉包,必然要加大通信周期,当然通信周期也必须尽可能的小以兼顾实时性。由于WINDOWS层负责监控,对实时性要求不如QNX实时控制层高,因此我们将QNX下通信周期固定为4ms,通过不断调整WINDOWS下的周期来
分析总线模块的丢包情况确定最佳通信周期,WINDOWS下通信周期为10ms以上时丢包率为0,周期为8ms时丢包率为2.2%,周期为6ms时丢包率为19.7%。综合考虑系统可靠性和实时性的因素,将QNX层的最佳通信周期定为4ms,WINDOWS层定为10ms.图4为最佳通信周期下的示波器监测图。
4 结论
利用BSD Socket采用API 建立的套接字,使得QNX平台同Windows平台能同时与现场总线在基于TCP/IP协议的网络上进行通信,并确定了最佳通信周期,满足系统提出的实时性和可靠性要求,为EAST装置的建立打下坚实的基础。
参考文献:
[1] 阳宪惠. 现场总线技术及其应用. 北京,清华大学出版社. 1999.6
[2] Rob krten. QNX Operating System Architecture. QNX Software system Itd.2000.2
[3] W.Richard Stevens. 陆雪莹等译.TCP/IP 详解卷2. 机械工业出版社. 2000.
[4] 实时操作系统QNX中文网. http://hichun.nease.net.
[5] Kruglinski D J 潘爱民,王国印. Visual C++技术内幕(第四版).北京:清华大学出版社
- 基于S3C44B0X+μcLinux的嵌入式以太网设计(07-08)
- TM1300 DSP系统以太网接口的设计(03-07)
- 工业级特性在嵌入式处理中至关重要(05-08)
- 基于VxWorks的双端口网卡智能双冗余驱动(07-01)
- 基于μC/OS-II和TCP/IP协议的多串口服务器(08-23)
- 基于DSP/FPGA的以太网控制器的运动控制器设计(02-06)