Modbus TCP多路复用实现多从站高速通讯

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过Modbus协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。

Modbus通讯采用轮询方式,每个通讯周期按从站顺序轮流和每一个从站交互数据。所以从站数量越多,通讯数据量越多,总线的通讯周期就会变得越长。

本文基于贝加莱控制器,实现了在一路以太网上,同时进行多组Modbus TCP通讯,从而极大的提高了通讯效率。 

一 案例分析

在Modbus TCP多从站数据采集项目中,常常遇到的状况是:从站数量越多,通讯刷新率就越低,表现为数据轮询周期变长。5个从站的项目中,轮询周期可能是20ms,同样的20个从站,轮询周期就会变成80ms。

为了提高数据刷新率,一个可行的方案把从站分组,每组配置一个主站。这样可以缩短数据轮询周期,数据刷新的更快。

以太网的数据带宽可以达到100Mbit/s或1000Mbit/s,而且TCP也是支持多路并发的协议。如果能够在同一个以太网接口上同时实现多路Modbus TCP通讯,就可以大大提高网络利用率。

二 开发平台

选择贝加莱Automation Studio平台进行开发,是因为Automation Studio对于以太网通讯有良好的支持。提供给用户丰富的开发支持库,如下表:

图片

贝加莱工程师已经基于AsTCP库开发了Modbus TCP协议的主从站程序,并封装成开发库,供客户直接使用。可以在贝加莱知识库查找到相应的文档。贝加莱知识库的地址:https://brtechs.huashengyun.online

Modbus TCP库中包括了MBClient和MBServer两个功能块。分别对应Modbus TCP的主站和从站实现。

三 实现

图片

图片

由于是纯软件实现的Modbus TCP,理论上就可以同时创建多个主站功能块,每个主站功能块只和一个Modbus TCP从站进行通讯。所有通讯都运行在同一个网络上,这样就实现了多路复用,并可以大幅提高通讯刷新速率。 

第一步,声明包括16个元素的MBClient功能块的实例数组。 

图片

第二步,在程序中通过循环配置MBClient功能块的参数。 

图片

第三步,循环调用MBClient功能块实例。 

图片

通过这样简单的方式,就实现了Modbus TCP通讯的多路复用。实际结果非常令人满意,在同时和16个Modbus TCP从站通讯,每个从站读取38字节的负载情况下,测试得到的通讯周期在3ms左右。也就是说每3ms,所有16个从站的数据都可以刷新一次。和轮询方式比较,刷新时间缩短为原来的十六分之一。 

四 结语

本文通过一个简单的Modbut TCP案例,介绍了纯软件方案的Modbus TCP主站在实际应用中的强大和灵活性。这也是自动化行业目前变革的方向,传统的硬件解决方案被新型的软件解决方案所替代。正如基于模型识别的温度控制算法替代了传统pid温控表一样,越来越多的项目中可以看到软件和算法的身影。

随着技术和产品的发展,自动化和软件变得越来越密不可分,很多时候控制算法的优劣可以决定机器的效率和品质,或是项目的成败。自动化行业也在慢慢抛弃传统的工作方式和方法,需要工程师具有软件开发知识。例如数据库,网络等等以往在自动化项目中很少触及的IT技术,现在越来越多的在自动化项目中得到了应用。

在这个IT和OT加速融合的大背景下,贝加莱Automation Studio提供了一个同时对IT工程师和自动化工程师都友好的平台。在这个平台下,来自不同背景的工程师可以分别使用C++和梯形图一起协作。在这个平台下,大量美好的想法得以实现,IT和OT技术无缝链接,碰撞出美妙的火花。

 

作者简介

陈巍:

现任北京亿德同创自动化技术有限公司技术总监,工控行业15年老兵,精通运动控制,总线通讯。主要服务OEM客户,涉及包装、印刷、制药、物流等行业。

2023年3月

剑控友人们,星标吧!

亲爱的剑控友人们,微信公众号又改版了,如果没有「星标」,公号文章就会渐渐沉底,我们可能长久失联。为了我们不再走散,请给我们一个星标,让我们每天都能相见图片

方法如下:

图片

Tags: