目前不少的仪表使用Modbus RTU进行数据传输,为了大家全面了解Modbus协议,昌晖仪表聊聊Modbus RTU协议存在的读取数据量的限制和不支持寄存器位的写入的两个不足,昌晖仪表聊Modbus RTU协议的缺点,并非否认Modbus RTU协议是好协议的事实,凡事均有两面性,仅此而已。
1、读取数据量的限制
下面这张图表示的是Modbus RTU协议03功能码的数据格式:
从上图中可以看到从站返回数据的数据个数(字节计数)只占了1个字节。由于字节计数只占用1个字节,导致读取输入/保持寄存器时,一次性最多只能读取127个寄存器(用代码去读),这个对于某些数据量非常大的场合,就需要读取多次,才能读取到所有的数据,这样通信效率必然会降低。
2、不支持寄存器位的写入
Modbus常用的8个功能码当中,是没有针对寄存器的位写入的。所以当我们需要给某个寄存器的某个位置位或者复位时,就会变得非常麻烦。
我们一般的处理方式有两种:
第一种方式:先读取这个寄存器的值,然后再将这个值的某个位处理之后,将处理后的值进行写入,相当于需要交互两次才可以实现,并且这种方式从某种角度上来说是不安全的。
第二种方式:用一个寄存器代替一个位,写入1表示为True,写入0表示为False,这种方式可以单次交互实现,但是会浪费很多内存空间。
Modbus RTU协议是1979年诞生,现在已经应用在成千上万个设备当中,相信发明者肯定也知道这样的问题,但是无法统一去更改。也有人说Modbus RTU协议的缺点不叫问题,认为Modbus RTU协议注定是不会改了,原因是用它的环境不会在乎这些缺点,在乎这些缺点场合不会用这个协议。
大家怎么看,欢迎在评论区发表留言。