1

在对我正在编写的 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
4

1 回答 1

4

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

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

关键是坚持设备手册中定义的地址。该手册通常是需要阅读的,否则您只会猜测范围、单位和比例。

于 2018-07-20T18:35:53.727 回答