多寄存器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 个后续数字(a
和 b
)??
Modbus is already only modbus-like when it comes to multi-register
values
错了,它仍然是 modbus,但是每当您准备好多寄存器值或实现时间戳时,您都会在文档中明确定义它们,并且您的规则不应违反如上所述的通用 modbus 规则。告诉您正在使用 2 个寄存器和 MSB BOM 并没有错。
所以答案是它可能适用于某些特定情况,但通常根本不可用。
通常使用 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 个后续数字(a
和 b
)??
Modbus is already only modbus-like when it comes to multi-register values
错了,它仍然是 modbus,但是每当您准备好多寄存器值或实现时间戳时,您都会在文档中明确定义它们,并且您的规则不应违反如上所述的通用 modbus 规则。告诉您正在使用 2 个寄存器和 MSB BOM 并没有错。
所以答案是它可能适用于某些特定情况,但通常根本不可用。