基于Modbus TCP高速网络数据通讯系统
2020-08-31赵大兴
郑 振,赵大兴
(湖北工业大学机械工程学院,湖北 武汉 430068)
许多学者对工业自动化控制领域数据传输进行了研究。文献[1]设计了一种与底层链路无关的ModBus协议的协议栈,较好实现了数据的可靠通信,但其控制算法协议复杂,移植困难,对硬件的要求比较高。文献[2]一种基于Modbus-RTU协议设计的库房环境实时监控系统,在可靠性与稳定性上取得了一定的效果,但其传输距离存在明显的局限性。文献[3]基于ARM处理器和MODBUS-RTU通讯协议的温控系统,通过RS232/485总线组成二级通信网络,采用MODBUS协议“主-从”方式通信,但其通讯响应慢,时效性不高。文献[4]基于PROFIBUS现场总线实现了,PLC控制系统稳定、高效的数据通讯,但其硬件成本比较高、研究投入大。文献[5]提出了基于FreeModbus协议栈的Modbus/TCP数据通讯控制系统,较好实现了数据的远程通讯与传输,但其模块高度集成化,无法根据需求进行定制更改。为了解决工业自动化中的传输距离短、时效性低、成本过高的问题,本文设计了一种基于uIP协议栈和Modbus TCP协议采集数据,并把数据传输至服务器端的一种数据通讯系统。
1 系统总体设计
基于Modbus TCP高速网络数据通讯系统可以看做是在以太网上运行的Modbus,但其仅仅采用TCP/IP标准,简单地把Modbus所传输的信息包进行处理,再通过以太网发送给目标设备。这种方式使得任何Modbus TCP设备可以通过以太网进行连接和通信。而Modbus TCP网络的从站设备数量仅仅局限于网络物理层的承载能力,因此一个Modbus TCP主站可以控制更多的从站设备,极大提高了设备的利用率。基于ModbusTCP高速网络数据通讯系统采用STM32F407VET6,网络协议采用uIP协议栈,通信协议采用Modbus TCP协议,最终通过uIP和Modbus TCP实现对数据高速、实时采集。系统硬件结构如图1所示。
图1 系统硬件结构
2 系统硬件设计
2.1 ARM最小系统
主控采用ST(意法半导体)最新的ARM内核STM32系统处理器(ARM Cortex-M4内核)STM32F407VET6(LQFP100)。此款微控制器拥有丰富的硬件资源,极大的flash和RAM,主频可达168 MHz。主控板主要负责数字量或者模拟量的信号采集、控制网络的链接、数据的解析和传输,实现了数据的高速通讯。最小系统原理如图2所示。
图2 最小系统原理
2.2 以太网模块
作为一款以太网控制器,DP83848设计用于在最严苛的环境中实现以太网连接,可在-55~125℃的军用级温度范围内满足 IEEE 802.3u标准。其功耗低,有标准的3.3 V MAC接口,最大数据传输速率理论可达100 Mb/s。DP83848提供两个灵活的LED指示灯,一个用于链路,另一个用于速度。此外,MII和RMII都得到了支持,以确保设计的简便性和灵活性。其典型应用电路如图3所示,该模块在电路板上电路如图4所示。
图3 DP83848典型应用电路
图4 DP83848网络模块电路
2.3 系统调试接口
STM32不仅支持JTAG接口,还支持SWD接口进行编程调试。SWD模式需要的引脚少,只需要通过简单的4根线与JLINK仿真器连接,即可完成开发过程中程序的下载和跟踪调试。SWD接口的引脚为SWDIO,GND,3.3 V,SWCLK。系统调试接口电路如图5所示。
图5 调试接口
2.4 电源管理电路
本系统用于高速网络传输,对电源功耗以及电源稳定性有较高要求,电源模块的设计是否合理关系到整个系统能否正常运行,因此选择良好的电源芯片变得十分重要。
在设计系统输入电源时,为了整个系统的演示方便,本系统使用电脑USB提供所需的电能,选择ASM1117-3.3电源芯片作为5 V转3.3 V电压转换芯片,在电源芯片前后加上合适电容,其作用是滤除相应高频低频信号干扰。在电路板上留出了多个5 V以及3.3 V接口用于给外设供电,同时在电源与地之间接一个防反接二极管M7,可承受瞬间反向电压,达到保护电路的目的。电源电路图如图6所示。
图6 电源电路
3 系统软件设计
该控制系统的架构功能示意图如图7所示。TCP/IP协议是数据传输可靠性的保证,而数据传输速度取决于该网络的带宽。通讯双方接收信息事先约定好数据报文的格式,是处理器对数据有效信息进行提取的关键。
图7 软件功能示意图
3.1 以太网传输模块
对于嵌入式系统而言,若能够运行本地 TCP/IP,则系统可以是公司局域网甚至是全球互联网。嵌入式设备有了TCP/IP 的支持,设备将可以与网络中的其他主机进行通信,但是要使嵌入式设备进行网络通信,该设备必须要能运行可实现的TCP/IP协议栈[6]。uIP协议栈就属于这样的网络协议栈,其重点是在应用层方面,即TCP/IP协议,对于底层协议(比如链路层协议),则一般由硬件实现。TCP/IP数据流如图8所示。
图8 TCP/IP数据流
上述就是发送数据的过程,接收则执行相反的操作。为了减小代码体积,实现基本TCP/IP功能,uIP移除了许多并不必需的应用程序和协议栈之间接口,比如软件错误报告机制和动态的TCP连接相关的服务类型配置,以减轻单片机RAM的压力,降低单片机的购置成本。同时,uIP 采用事件驱动方式,当有事件发生时,会触发相应的应用程序,该程序可以指定宏定义,这样就可实现uIP调用用户应用程序。与其他TCP/IP协议栈不同的是,uIP协议栈可以通过应用程序来实现重传机制,正是由于uIP所面对的目标对象架构RAM并不大,网络设备将数据包发送出去之后,uIP并没有跟踪数据包内容,因此当数据包丢失时,uIP则需要进行重传。当uIP要重传某个数据包的片段时,会设置重传标记,然后通知应用程序,重传该片段[7]。应用程序通过协议栈的调度来实现数据重传,使数据传输可靠性相比于其他协议栈更有效。
3.2 Modbus TCP通讯协议
Modbus TCP通信协议遵循基本的主从通信模式:主站设备采取主动查询的方式,发出启动请求给从站设备,然后由从站设备根据接收到的启动请求内容,准备数据响应发送给主站设备。Modbus TCP通信系统包括能够连接至以太网的Modbus TCP从机,以及能够连接至以太网的Modbus TCP主机或网络服务器。
与普通Modbus不同的是,Modbus TCP协议使用了一种专用的报文头识别单元MBAP报文头,可以使持多个独立的Modbus终端设备在使用同一个IP地址时不会发生冲突。在Modbus TCP中,如果将报文分成多个信息包依次发送,并在MBAP报文头上携带附加数据的长度信息,以此来使接收端识别报文的边界,接收端也可以接收到数据。TCP/IP上的MODBUS请求/响应图如图9所示。
图9 TCP/IP上的MODBUS请求/响应
Modbus TCP协议通过功能码来反映传输正常响应或传输错误响应(即异常响应)[8]。正常通讯过程响应如图10a所示。当产生错误或者异常响应时,服务器依旧会返回与客户机相同的功能码,并在该异常码后增加一个错误码,以此来告知客户机产生异常的原因,从而实现错误信息反馈。异常响应如图10b所示。
(a)正常响应
(b)异常响应图10 响应过程
3.3 上位机
QT可以同时开发GUI和非GUI程序。该软件提供了大量的应用接口程序及范例,并提供对CAN和Modbus的支持,极大缩短了开发时间。而Qt Creator是用于开发QT应用程序的软件,可通过直接调用控件,对控件进行编程,类似于C++的编程方式完成上位机的制作。
在本设计中用到了文本框、下拉式菜单、按钮、定时器等组件。利用这些具有图形化接口的控件,可方便编写用户程序。其界面效果如图11所示。
图11 上位机界面
4 试验结果
系统测试主要以电脑作为客户端,单片机作为服务器,通过网络调试助手发送请求给单片机。程序初始化采集系统的IP地址为192.168.1.128。单片机程序里源地址为1000,输入寄存器个数为4,使用8路AD采集端口A0~A7作为模拟量输入,8路IO采集端口C0~C7作为数字开关量输入,AD采样的值直接赋值给输入寄存器,数字量通过处理后赋值给线圈寄存器,然后通过协议发送至上位机端。硬件实物如图12所示。单片机的处理流程如图13所示。
图12 硬件实物
图13 单片机处理流程
为了验证基于Modbus TCP高速通信系统的正确性,需要对该系统的功能进行分析,在上位机分别下发了4组指令,得到其发回的数据,并进行解析。
表1 测试报文数据
从表1可以看出,在发送请求的12位16进制数据中,前5位为固定数据。在后7位数据中,以第3组数据为例,其中:06表示在该数据后面的字节总数,01表示从机地址;03表示功能码;03 E7为启动请求,换算成十进制为999;00 04表示为偏移地址,对应十进制为4 。接收反馈的数据中,前5位数据为固定数据,第6位表示后面字节的总数,第7位表示地址,第8位表示请求的功能码,剩余数据表示各个寄存器数据。第1组由于单片机设置源地址为1000,而单片机发送源地址为0000,此时系统返回错误响应0x83 0x02,表示非法数据地址;第2组由于单片机保持寄存器个数只有四个,而单片机请求读取10个,此时系统返回错误响应0x83 0x02,表示非法数据地址;第3次和第4次为正常响应。
通过对发送数据和接收数据进行分析,验证了该系统基于Modbus TCP高速通信系统的正确性,同时为了验证通信速度的稳定性和快速性,利用Wireshark抓包工具对数据进行抓包截取,抓包取到的网络数据如图14所示。
图14 网络数据包
从图14可以看出,通过10 ms周期的不断轮询,向单片机发送数据,单片机能够在1~3 ms内高速响应并发回数据,其中通信速度、数据传输非常稳定。
5 结论
本文设计的以STM32F407VET6为核心的系统,通过uIP协议栈和Modbus TCP通讯协议实现了对数据实时采集。该系统以以太网通讯为原型,在设备联网的情况下数据就能够高速、稳定地传输到达目的地,较好解决了工业自动化领域数据传输的非实时性和距离短的问题,同时系统硬件结构简单,成本较低,比较容易运用到实际生产生活中。通过对该系统进行性能测试与通讯实验,结果表明该系统数据传输具有稳定性与快速性。