文献标识码:A
DOI:10.16157/j.issn.0258-7998.2016.10.019
中文引用格式:吴志杰,王新霞,孔凡敏,等. 多路隔离的Modbus协议转换器的设计[J].电子技术应用,2016,42(10):77-79.
英文引用格式:Wu Zhijie,Wang Xinxia,Kong Fanmin,et al. Design of multiple isolated Modbus protocol converter[J].Application of Electronic Technique,2016,42(10):77-79.
0 引言
随着控制、计算机、通信、网络等技术的发展,Internet正在把全世界的计算机系统和通信网络逐渐集成起来,形成信息高速公路,形成公用数据网络,而在此基础上,传统的工业控制领域也正经历一场前所未有的变革,开始向网络化方向发展,形成新的控制网络[1]。以太网作为一种具有高速数据传输能力的网络成为了大多数工业控制网络的选择,而将控制系统中需要用到的各种仪器接入以太网进行集中隔离控制成为一项重要的课题。在水蓄冷控制系统中大多数底层的电子设备的接口为RS485接口,通信协议为ModbusRTU,本文设计了一种多路隔离的协议转换器来解决这个问题,并可拓展为用手机通过WiFi来控制设备。
1 转换器涉及通信协议介绍
1.1 Modbus RTU协议
Modbus串行链路协议包括RTU模式和ASCII模式,本设计用到的为Modbus RTU模式。
Modbus RTU的帧格式有两种:一种是主机发起的查询和命令从设备的格式,另一种是从设备收到主机命令后的应答格式。两种格式在大多数情况下相同,如表1所示。
从机地址:地址信息为1 B,表示要接收命令或发出应答响应的从设备的地址。从设备的地址的合法范围是0~247(十进制),主机将要查询或命令的从设备地址信息放入从机地址区内,选择对应的从设备,而从设备将自己的地址信息放入从机地址区内来响应主机,告诉主机是谁作出响应。
功能码:功能码为1 B,表示主机要求从设备进行何种操作,或者从设备应答的数据为何种操作下得到的数据。在控制系统中经常用到的读取从设备状态的功能码有:0x01,0x02,0x03,0x04;用来设定从设备状态的功能码有0x05和0x06。Modbus协议的各常用功能码对应功能如表2所示。
数据域:数据信息的字节数根据功能码而异,表示主机对从设备的状态的设定,或者主机读取的从设备寄存器数据。当主机设定线圈或者寄存器时,命令格式的数据域和图1一样,而如果要读取状态时,则数据域的第一段为状态数据的个数。数据的格式为高字节在前,低字节在后。
校验码:校验码为2 B,RTU模式下使用CRC校验码,是由发送设备输出的数据计算得到,在接收数据时先用同一方法再算一次CRC,若相同则接收,若不同则丢弃,以此来校验传输的数据是否有误。
1.2 Modbus over TCP协议
基于Modbus over TCP协议的设备可以直接接入以太网,无需经过协议转换器,本系统中只有少数设备是基于该协议的,因此不做详细介绍。
1.3SLIP协议
SLIP协议是一种在串行线路上传输数据的协议,如果使用SLIP协议来进行通信,则目标IP地址和源IP地址都必须已知[2]。SLIP协议是链路层协议,只能和TCP/IP一起使用。由于本设计可以接入3个RS-485接口的设备,只有一个输出数据的串口,3路数据可能同时发送,所以需要一种对数据打包的协议来实现,而设备只需接入以太网进行监控,并且TCP/IP提供了很好的可靠性保证,所以SLIP协议能很好地满足这个需求。
SLIP协议定义了2个特殊的字符:END(0xC0)和ESC(0xDB)。需要打包的数据在开头和结尾加入一个END字符,END字符标志着数据的开始和结束。如果传输的数据中包含END字符,就会造成错误的接收和结束,所以引入ESC字符来防止这种情况的发生。传输原始数据中存在的END字符转换为ESC(0xDB)或ESC-END(0xDC),而存在的ESC字符则转换为ESC(0xDB)或ESC-ESC(0xDD)[3]。SLIP协议对应的数据封装过程如图1所示。
2 设计实现
协议转换器的系统框图如图2所示。
2.1ARM模块
本协议转换器的主控模块使用ARM,选择了32 bit的ARM(Atmel SAM3X8E),它拥有84 MHz的CPU时钟频率、96 KB的SRAM、512 KB的Flash和54个数字I/O口。4路UART硬件串口用来进行串行通信,其中3路串口用来连接协议转换机箱的3路RS485串口,另外一个串口用来传输SLIP协议打包的数据。未使用的I/O口可以用来输出控制阀门继电器,并且可以显示阀门开关的到位指示,图3为软件流程图。
运用ARM开发工具来进行设备数据的处理,先对串口的波特率、I/O口的输入输出模式等进行初始化,然后对数据处理过程中的各个函数进行定义。下面对几个主要函数进行说明。
先定义函数calcCRC16用于计算Modbus RTU的CRC16校验码。当主机对从设备发出请求时,请求数据通过以太网传输过来,经过串口进入ARM进行解包处理,并识别出请求是发送给哪个从设备的,从而将相应数据传送给对应设备的串口,这个过程由processNetworkData函数实现。
当从设备响应主机发出的请求时,通过RS-485接口传输的数据格式为Modbus RTU,消息帧需要通过SLIP协议进行打包,因此定义一个sendSlipPacket函数,然后定义函数来处理对应RS485端口接收到的数据。若判断数据包还没有接收完,则不进行处理,返回。若数据包处于接收错误状态(超长,数据错误等),则清空接收缓冲区并返回。若收到一个完整的数据包,则SLIP编码后由网络端口(Serial)发送。
2.2 串口转以太网模块
经SLIP协议打包的Modbus RTU数据通过串口发送后,并不能进入以太网进行传输,因此采用了深圳海凌科电子有限公司的HLK-RM04。RM04模块是海凌科电子推出的嵌入式UART-ETH-WIFI(串口-以太网-无线)模块,内置TCP/IP协议栈,能够实现用户串口、以太网、无线(WiFi)3个接口之间的转换,传统的串口设备在不需要更改任何设置的情况下,即可通过网络传输数据。
先通过网线将模块与PC相连接,进入模块配置界面来设定模块的IP地址、网关、网络协议等。将RM04的模式设为TCP Server,该模式下模块监听指定端口,等待TCP Client连接,连接成功后,模块将串口TCP数据发送给连接的各个TCP Client,如图4所示。将ARM模块的输出串口与RM04模块的串口相连,就可以把Modbus RTU数据转换成TCP数据,并通过以太网传输。
2.3 从设备隔离部分
RS485接口的设备大多工作在工业自动化领域,特别容易受到失控电压和电流所带来的负面影响,所以有必要在通信总线与逻辑控制器之间进行电气隔离。另外,本设计是对多路数据进行转换,为了防止各路信号的相互串扰和电气噪声的影响,隔离必不可少。
本设计使用了ADI公司的ADM2587E芯片,它提供了RS485通信的完整隔离方案。ADM2587E内部集成了运用isopower技术的DC/DC隔离电源,在单个封装内还集成了三通道隔离器、三态差分线路驱动器和差分输入接收机,保护功能好,而且其体积小、功耗小,大大减少了占用电路板的面积。
2.4 上位机设计
在本控制系统中,要在主机端控制底层的电子设备,需要开发对应的上位机软件来进行控制和监测。本上位机使用Delphi语言在XE7平台下设计。
基于Modbus协议的设备都属于新建的父类TModbus,然后分为TModbusoverslip类和TModbusovertcp类,这些类属于通信协议类。
本设计的系统接口也需要建立类TTcpclient,这个类基于TWSocket类,TWSocket类的作用是将Windows Socket封装起来,TTcpclient起到了TCP客户端的作用,负责连接Server端,并进行数据处理。
为了使得工作人员在主机端便利地控制各种设备,控制界面应美观,因此建立了基于TPanel的类TDevGUI,系统界面中的图形都基于此类。
3 协议转换器的拓展功能
随着移动通信的不断发展,手机成为了每个人必不可少的工具,所以考虑加入手机端对电子设备的控制,这样工作人员就可以方便地查看设备的工作状态,而且在本设计中使用的HLK-RM04模块还支持串口转WiFi功能,这就使得构想成为了可能。
通过RM04模块配置界面将模块工作方式设定为WiFi AP模式,手机作为客户端来连接WiFi,将ARM中未使用的2个I/O口拓展为串口,进而控制设备。
4 结束语
本文对水蓄冷控制系统中无法使用主机通过以太网控制设备的问题进行了讨论,提出了一种工业中实用的多路隔离的Modbus协议转换器的设计方法。本协议转换器已投入使用,稳定性强,安全性好。
参考文献
[1] 贾东耀,汪仁煌.工业控制网络结构的发展趋势[J].工业仪表与自动化装置,2002(5):12-14.
[2] SHANMUGAM R,PADMINI R,NIVEDITA S.TCP/IP详解[M].尹浩琼,李剑,译.北京:电子工业出版社,2003.
[3] 吴明光,崔家林,陈冠雄.串行网际协议在记录仪通信中的应用[J].科技通报,2005,21(5):612-614.
[4] 沈建华.ARM处理器与嵌入式系统[J].单片机与嵌入式系统应用,2010(11):5-7.
[5] 俞野秋,陈坚.Modbus和Modbus-TCP协议转换研究[J].仪表技术,2013(1):28-31.