Modbus是工业设备的标准通信协议了,一般通过串口进行通信,为了适应现在互联网也支持通过网络传输的TCP版本,我司现在一般要求设备方提供TCP版本,毕竟部署方便,不过在现行的主从模式下,也并非能支持所有场景
基本能力的不足
Modbus/TCP 协议本身并不复杂,这里就不详解解释了,另开一篇讨论。这里要说的是其通信模型,在正常的场景下,其包含2个角色,即设备端为Modbus从机,控制端(开发的程序)为Modbus主机。一般情况下的通信场景如下:
- Master连接Slave,发送读请求,Slave实时返回读取结果
- Master连接Slave,发送写请求,Slave实时返回写结果
基本的模式就是请求响应模式,而且必须是Master请求,这就限制了现在很多设备的功能,特别是很多设备希望在内部敏感数据变化时候进行通知,也就是进行反向通知,在这些场景下Modbus除了定期刷数据之外就没其他办法了。所以一般的厂商也就会定制自定义的协议,并且这些自定义协议质量参差不齐,而且各家不一,对于系统集成也是不小的工作量。
网络模型的不足
一般设备,都会在部署地搭建局域网,本地进行操作。然后还是有一些设备无法实现局域网打通,比如在草原上使用4G的物联网模块,这种没有公网能力的模式,Modbus也没有办法支持,另外现在一些采用太阳能设备为了节省能量,只希望进行定期的数据上报,上报成功后进行休眠,定期被自动唤醒进行数据上报。
基于这样的模型,采用Modbus协议,主机是没有办法访问从机的,因此可以考虑让从机访问主机,这种模式下,让从机主动连接主机,主机按协议请求数据即可,当然了在多个从机使用一个主机的情况下,要通过从机ID进行区分,也就支持两百多个吧,也还是可以的。
这种模式下,从机连接后,主机并不能知晓从机的ID,只能依靠广播地址去请求,各个从机均支持广播消息的返回,主机从而可以区分出各个从机,如果在连接没有断开的情况下,主机后续可以准确的请求到从机
其他
在能使用上网络的地方,其实就多了很多选择,比如物联网协议MQTT、CoAP等等,不过目前很多设备在提供网络功能之前都是串口通信,然后加了网络转接模块实现了网络,并且Modbus协议也是足够的简单,因此Modbus还有很多的应用场地。