可读保持寄存器中间的保持寄存器可以是“ IllegalDataAddress”吗?

时间:2018-07-20 07:47:41

标签: modbus

在我编写Modbus驱动程序进行单元测试时,我经历了以下事情:

  1. 我可以读取保持寄存器0到1022。
  2. 无法读取保持寄存器1022到13000。我收到一个illegal data address错误代码。
  3. 我可以读取保持寄存器13000到25000。

我希望支持Modbus的设备以下列两种方式之一运行:

  1. 每个设备都支持从0x0000到0xFFFF的整个地址范围。
  2. 每个设备都支持从0x0000到N的地址范围,其中N <0xFFFF。

你们中任何更有经验的人知道吗?

  1. 关于Modbus设备的预期行为的假设1或2是否正确?
  2. 除了使地址成为illegal data address以外,还有其他原因吗?

1 个答案:

答案 0 :(得分:3)

两个假设都是错误的。完全由设备决定要支持哪些寄存器。某些设备不错,即使不使用它们也支持广泛的寄存器。不过,我用过的大多数都没有。他们将使用寄存器组,例如您的设备。

此外,并非所有Modbus设备都支持所有Modbus功能代码。仅仅因为它是由Modbus协议标准定义的,并不一定意味着该设备将支持它。

关键是要坚持使用设备手册中定义的地址。该手册通常是必读的,否则您将只能猜测范围,单位和比例。