Modbus协议,作为工业物联网领域中的重要协议之一,以其显著的特点赢得了广泛的认可与应用。
然而,正如任何技术都有其局限性和改进空间一样,今天我们将打破常规,采取一种‘倒反天罡’的视角,不再专注其优点,而是 深入剖析并探讨Modbus协议在实际应用中可能遇到的一些不足之处 ,以期能更系统地理解这一协议,并为未来的技术选型与优化提供参考依据。
读个数据还得分批来?你需要有点儿耐心。
下面这张图是ModbusRTU协议03功能码读取保持型寄存器的报文格式:
从这张图上,我们可以看到从站返回数据中有一个选项叫做数据个数,这个数据个数就是我们之前说的字节计数,它所占用的字节数是1。 那么意味着字节计数的最大值是255,返回报文中的字节计数是读取寄存器数量的2倍,因此读取寄存器的数量最大值是255/2=127。如果超过127个,就得通过分组的方式来多次读取。这个就会导致在一些数据量较大的场合,需要多次报文交互,才能完成所有的数据读取,从而导致通信效率的降低。
如果当初设计时,字节计数为2个字节,是不是意味着一次性可以读取更多的数据?
这个问题也是很多人比较头疼的。
Modbus协议常用的8个功能码中,并没有直接支持寄存器的位写入。当需要对某个寄存器的特定位进行置位或复位时,操作会变得非常繁琐。一种方法是先读取整个寄存器的值,对需要修改的位进行位操作后,再写回寄存器。这种方法需要两次通信,不仅增加了通信量,还可能引发数据一致性和安全性问题。另一种方法是用一个寄存器代替一个位,写入1表示True,写入0表示False。虽然这种方法可以在一次写操作中完成,但会浪费大量的寄存器空间,降低了资源利用率。
不仅是Modbus,其他很多协议也有同样的问题。
但是西门子S7协议是支持单个位写入的,对于那些需要频繁操作单个IO点或内部状态位的场景,西门子S7协议可能是一个更加合适的选择,它能够大幅提升系统的整体性能和响应速度。下面以S7协议无线以太网通信方案为例,介绍触摸屏与两台 PLC的无线S7协议通信实现过程。
当然,每种协议都有其适用的场景和优势,综合考量通信效率、设备兼容性、开发成本等因素,选择适合项目需求的协议才是关键。
下面这张图是三菱MC协议中的一段报文帧。
这段报文的含义是一次性读取出D0、T0、M100-M115、X20-X2F、D1500-D1501、 Y160-Y17F、M1111-M1142。
Modbus协议不支持这样的读取操作,如果地址比较零散,就需要分很多批,这样必然会导致通信效率的降低。
安全性?不存在的!
Modbus的安全措施几乎为零,对黑客几乎不设防,没有加密、没有认证,简直是网络安全的“反面教材”。
这个其实和Modbus协议的使用场景有关。Modbus协议主要应用在设备层的一些仪表及控制层的一些PLC控制器中,所以大部分情况下都是局域网的应用,因此基本上不会出现黑客攻击或者数据篡改之类的问题。
Modbus协议作为工业现场应用,它的目的是实现数据交互,在不联网的环境下,没有攻击就没有伤害。所以你得自己想办法采取额外的安全措施来保障数据的安全性,如使用VPN、防火墙等网络安全设备,或者采用加密通信协议来替代Modbus协议。
为了适应现代工业自动化的需求,许多新的通信协议和技术正在被开发和采用,以弥补Modbus的局限性。
总之,尽管存在这些不足,Modbus协议因其简单、易于实现和广泛的支持,仍然在许多工业场合中发挥着重要作用,作为“工业老兵”Modbus协议依然很能打!