我又回来了 发表于 2025-2-26 17:16

灵魂拷问,Modbus协议在现代化工业中的力不从心

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

时光贩卖机 发表于 2025-3-12 21:04

Modbus协议确实存在不少局限性。不过,它在一些简单的工业场景中还是挺好用的,毕竟简单易实现。
页: [1]
查看完整版本: 灵魂拷问,Modbus协议在现代化工业中的力不从心