Modbus寄存器地址空间不是线性的吗?

时间:2018-07-24 12:25:55

标签: memory modbus

我目前正在开发用于控制设备的Modbus服务器。

设备手册说明了如何保存寄存器:

Adress 6000: ValueA, 2 Byte
Adress 6001: ValueB, 1 Byte; ValueC, 4 Byte; ValueD, 4 Byte 
Adress 6005: ValueE, 2 Byte

唯一受支持的读取功能是 FC 03 /读取多个保持寄存器

据我所知,可以将寄存器看作是编号为16Bit值的存储块,并且可以通过读取6个寄存器/ 12字节(从6000开始)一次读取它。

我认为1Byte值不是问题,寄存器仅包含不超过255的值。

但是扩展上面的表格可以得到:

Adress 6000:      ValueA, 2 Byte
Adress 6001:      ValueB, 1 Byte
Adress 6002-6003: ValueC, 4 Byte
Adress 6004-6005: ValueD, 4 Byte 
Adress 6005:      ValueE, 2 Byte

因此,最后一行重叠在6005。

我的设备手册中充斥着此类事件,与此同时,我认为modbus寄存器并不是我想象的那样简单,线性的存储器。

有人知道modbus寄存器是否是线性的吗?

1 个答案:

答案 0 :(得分:1)

我偶然发现了类似情况,并在一个更专业的论坛中询问了有关情况。 “很久没读”的是,地址空间在大多数情况下是线性的,但并非总是如此。

查看以下示例: Example showcasing how registers don't always be linear.

不好意思,但是在这里您可以看到,寄存器地址0x2021包含由八个字或八个16位块组成的数据。按照上述逻辑,您希望第二个单词存储在寄存器0x2022中,但是我在本地设备上进行了检查,它们并不相同。因此,总而言之,有一些设备可以决定它们为一个寄存器提供的内存多于应有的数量。因此,寄存器0x2021实际上自己拥有8个字,并且不使用寄存器0x2022来存储内存。 您可能有类似的情况。