2024年4月26日发(作者:)

Modbus-Modbus TCP/IP的网关设计

摘 要: 介绍一种基于STM32芯片的Modbus-Modbus TCP/IP网关系统,系统采

用μCOSII嵌入式实时操作系统,实现Modbus串行链路到以太网的协议转换,利用多

线程与存储池技术解决速率不匹配问题,最后对系统的通信质量进行相关测试。实验结果表

明,系统方案能够在低廉的成本下,有效、准确地进行Modbus串行链路与以太网的相互

通信。关键词: Modbus协议;移植;协议转换;多线程与存储池

“十二五”规划纲要将“智能电网”正式纳入国家发展战

略,特别提出“现代电网体系要适应大规模跨区输电和新能源发电并网的要求。进一

步扩大输电规模,完善主干电网,依托信息、控制和储能等先进技术,推进智能电网建设。

”电网主要包含了发电、输电、变电、配电、用电和其他辅助部分[1]。低压的配电

和用电端是智能电网的末端,是电能最主要的消耗部分,大约占到80%。因此智能电网的

建设要求配电和用电所需要的低压电器必须具备数据通信与采集等智能化特性[2]。 当

前,国内外许多大型低压电器设备厂的产品都支持Modbus总线标准。但是,智能电网的

信息化建设利用的是以太网等方式,而非现场总线技术[3]。这就要求数据能在以太网与现

场总线之间进行交互。 国外的几大电器也都有相应的网关设备,但是价格昂贵。国内目

前也有些类似的产品出现,相对于国外的产品,虽然在价格上有极大的优势,但是通信速度

较慢,只能简单地实现单链路的连接,功能并不完善。 开发一款价格低廉、性能优越的

网关设备是智能电网建设过程中一个必要的需求。因此提出了一个在STM32F107芯片上

实现Modbus-Modbus TCP/IP协议转化的解决方案,能在成本上和性能上同时满足需求。

1 Modbus协议 Modbus是Modicon(现为施耐德电气公司的一个品牌)在1979年开

发的一项在OSI模型第7层的应用层报文传输协议,在过去几十年已被大量地应用于工业

控制领域的开放的、标准的、免费的网络通信协议[4]。它在连接至不同类型总线或网络的

设备之间提供客户机/服务器通信:在串行链路上取决于TIA/EIA标准(232-F和485-A),

在TCP/IP上取决于 IETF标准(RFC793和RFC791)。1.1 串行链路的通信 Modbus在

串行链路采用主/从方式的通信协议,即Modbus通信由主站发起,从站在未收到主站请求

时,不能主动发起数据。Modbus在串行链路上的通信帧包括地址域、功能域、数据域和

校验域。 Modbus在串行链路上的通信帧分为RTU和ASCII两种模式[5],其中RTU

模式通信帧中的8 bit数据包括2个4 bit十六进制字符,相对于ASCII模式,在表达相同

的数据信息时RTU需要的位数较少,在相同的传输速率下RTU有更高的数据吞吐量。 在

RTU传输模式中,用3.5个字符的时间间隔将报文帧区分开,帧内两个字符之间的间隔必

须小于1.5个字符时间,当传输速率大于19 200 b/s时,可以采用1.750 ms的固定值替

代3.5个字符时间作为帧间的延迟时间,用750 ?滋s替代1.5个字符时间作为字符超时时

间。1.2 Modbus TCP/IP应用数据单元 在基于TCP/IP的Modbus中,每个应用数据

单元的结构包含Modbus应用报文头、功能码域和数据域。其中MBAP(Modbus

Application Protocol Header)的报文头长度为7 B,该报文的字段如表1所示。

1.3 Modbus串行链路和Modbus TCP/IP转换 要使在串行链路传输的Modbus

数据包能在以太网进行无阻碍、准确的传输,必须对串行链路上的数据包或以太网数据包进

行处理、转化。一般的办法是以TCP/IP协议为基础,将数据量较小的串行链路上的数据包

封装在TCP/IP帧中。由于Modbus在串行链路中的帧格式不同于在TCP/IP中传输的帧格

式,因此在进行TCP/IP封装前必须将Modbus在串行链路中的帧格式转换成Modbus

TCP/IP应用数据单元结构。同样地,对于在以太网上输出的Modbus数据包,必须先对

TCP/IP数据包进行拆包,之后再对数据内容进行帧格式转换,将Modbus TCP/IP的ADU

转换成串行链路上的ADU,最后才能在串行链路上进行通信。2 系统硬件电路 STM32

系列芯片是意法半导体专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM

Cortex-M3内核芯片。其中STM32F107互连型系列微控制器内部集成高性能以太网模块,

支持通过以太网进行数据的收发。基于STM32F107的硬件电路。

整个系统电路包含STM32F107最小单元、以太网接口电路、电平转换电路和电源电

路四部分。 STM32F107最小系统单元包括复位电路、晶振电路和程序下载电路。晶振

电路中,选用25 MHz的无源器件作为系统时钟源,同时通过配置芯片的相关寄存器使系

统工作在最高的72 MHz。 在以太网接口电路中由于STM32F107内部已经集成了以

太网模块,因此只需要增加一个DP83848物理层芯片并通过RMII连接方式,再接上标准

的RJ45接口,就能形成10/100 M以太网电路。 Modbus在串行链路中一般采用

RS485通信接口,它是一种差动半双工的通信方式,而STM32F107自带的是USART异

步串行通信接口,因此通过SP3485电平转换芯片将STM32F107芯片的USART接口转换

成RS485接口,才能与工业设备进行信息通信。 STM32F107等芯片需要的工作电源

一般都在3.3 V,而电源变压器输出的电压为5 V,这就需要将输入的5 V电源电压转成3.3

V,用来提供给芯片工作。3 系统软件设计 软件设计部分的关键主要在于μCOSII

移植、两个事务处理任务和多线程与缓冲区设计。3.1 μCOSII移植 μCOSII

是一种专门为嵌入式设备设计的源代码公开、可移植、可固化、可裁减、抢占式的实时多任

务操作系统,自1992年发布以来就获得广泛的使用。在将μCOSII移植到STM32的

固件平台时,必须对其进行修改、编写。其中主要的内容有:(1)基本配置和定义。包括与

编译器相关的数据类型和定义栈的增长方向。(2)编写与处理器相关的函数。包括运行优先

级最高的就绪任务函数OSStartHighRdy()、任务优先级切换函数OSCtxSw()、中断级的任

务切换函数OSInitCtxSw()和时钟节拍中断服务函数OSTickISR()。(3)编写与操作系统相关

的函数。 在μCOSII中的OS_CPU_C.C的文件中包含6个与CPU相关的函数,其

中在移植中必不可少的任务是堆栈初始化函数OSTaskStkInit()。3.2 事务处理任务

μCOSII是一个多任务的实时操作系统,最多可以管理64个任务,根据实际需求创建

两个任务: 与以太网通信的TaskModbusTCP任务一:系统开始运行后,任务一处于

空闲状态,同时监听以太网的502端口,此端口是Modbus TCP/IP的默认端口;当端口

接收到有效数据时,程序对其进行拆包分析后,再经过μCOS的邮箱机制将数据发送给

任务二,之后任务一进入等待响应状态,同时开启超时响应定时器;当在超时响应时间内接

收到邮箱中来自任务二的响应数据时,任务一进入到处理应答状态,对其数据进行打包封装

等处理后送至502端口,然后重新进入到空闲状态。至此完成一次正确的Modbus TCP/IP

的通信过程。其任务的状态流图。

与从站通信的TaskMastertask任务二:系统开始运行后,任务二进入空闲状态;当

μCOS的邮箱收到数据后,任务二提取邮箱中的数据,首先进行数据有效性分析,然后

再对数据添加CRC校验,使数据符合Modbus在串行链路上的通信帧,接着通过RS485

接口将数据发送到总线上,同时超时响应定时器开启,任务二进入等待响应状态;若在超时

响应时间内接收到从站的响应,则进入应答处理,并对数据进行处理分析。如果数据正确且

有效,则通过邮箱发送给任务一,然后进入空闲状态中等待下一次的邮箱数据。其任务的状

态流图。

3.3 多线程与缓冲区 由于工业控制系统的通信速率普遍较低,当数据在现场总线与

以太网进行交互时,通信速率受限于工业控制端的速率,采用多线程与存储池相结合的技术

来匹配现场总线和以太网的传输速率。即当多线程的类似指令连接时,网关的现场总线端只

发送一次指令,将得到的数据放到存储池中,然后再解析给各个线程。4 测试结果 测

试中,采用环宇集团的HUM8D-400型和HUM8D-225型塑料外壳智能断路器作为

Modbus的从站设备,利用第三方软件Modbus Poll模拟主站设备。

对于以太网通信的可靠性的重要参数有:IP包传输延时、IP包的误码率、IP包的丢失

率等[6]。然而现场总线的网络性能与以太网有很大的不同,其主要指标包含传输距离、传

输速率、丢包率等,同时这些指标随着负载的变化而变化,因此本文对于以太网到现场总线

的通信性能从不同的负载和传输速率方面对IP包的响应时间、误码率和丢失率进行测试。

其中数据接收准确性测试参数为500 000次数据指令,RS485接口通信距离100 m;响应

时间为以太网数据包从发送到接收到响应数据包的整体时间,包括设备的响应时间和数据包

在线路的传输时间。单线程测试结果整理后如表2所示。多线程存储池结果整理后如表3

所示。

表2与表3的测试结果说明,网关能够很好地保证数据通信的准确性和可靠性。同时

响应时间受网关波特率的制约,提高波特率能有效地提高响应时间。同时利用多线程与存储

池技术,可以大大减少单线程情况下运行多指令所消耗的时间。 利用STM32所设计的

网关不仅能够有效地进行通信,同时对比于目前市场上售价高达数千元的类似设备,仅需要

不到百元的成本,大大提高了其推广的可能性。 当前的工业现场设备在通信中基本都能

够支持Modbus,通过网关进行数据交互,为远程的遥信提供有力的支持。