多寄存器Modbus数据项重叠会出现什么问题?

What Problems Might Occur if I Overlap Multi-Register Modbus Data Items?

通常使用 2 个寄存器来 read/write Modbus 中的浮点值。 我的问题是,如果我如下指定具有重叠数据的设备寄存器映射,会出现什么问题或兼容性问题..

40001 (float a), 40002 (float b), 40003 (float c), 40004 (float d),依此类推

Float(a)可以用FC03读取到40001,寄存器个数为2。 Float(b)可以用FC03读取到40002,寄存器个数为2个。 Float(a)和(b)可以用FC03读取到40001,寄存器个数为4.

这将使您的设备不再是 modbus-compatible 设备,而只是 modbus-like 设备。

缺点是有很多 modbus 客户端,主要是 SCADA 系统,它们会简单地停止使用此类寄存器映射。所以如果你不关心 3rd 方客户端,你可以这样做,但是目的是什么?

UPD

在读取同时属于不同值的寄存器时,您还会得到未定义的行为。在 4002 读取单个单词的预期输出是什么? a 的 LSB 或 b 的 MSB?

如何读取 2 个后续数字(ab)??

Modbus is already only modbus-like when it comes to multi-register values

错了,它仍然是 modbus,但是每当您准备好多寄存器值或实现时间戳时,您都会在文档中明确定义它们,并且您的规则不应违反如上所述的通用 modbus 规则。告诉您正在使用 2 个寄存器和 MSB BOM 并没有错。

所以答案是它可能适用于某些特定情况,但通常根本不可用