1.需求说明
在公司开发的项目中,为了实现云端modbus采集,在其中所学习到的关于mudbus不同数据位及不同寄存器读取的使用心得。
2.Modbus中的寄存器与数据位
Modbus的存储方式:
大端存储:
大端存储简单说就是一个int x = 0x12345678.
小端存储保存为: 78 56 34 12
大端存储则是: 12 34 56 78 (大端存储不需要倒过来)
Modbus基础格式:
主机读取从机输入寄存器数据格式:
数据格式:
8位举例:
modbus传递8位的 00 01 :这个表示的就是1。
换算方式可以理解为:2的 01次方就是这个8位数据的值。
16位举例:
modbus传递16位的 00 01 :这个表示的就是1。
换算方式可以理解为:前两位00*256 + 01*1就是这个16位数据的值。
32位举例:
modbus传递32位的 00 02 00 01 :这个表示的就是65538。
换算方式可以理解为:后两位(00 01)*65536 + (00 02)*1,这里需要倒过来了。
读功能码:
0x01: 读线圈寄存器
实际上就可以类比为开关量,每个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。
0x02: 读离散输入寄存器
他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的 0x02。