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

Memory Modbus寄存器地址空间不是线性的?,memory,modbus,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/读取多个保持寄存器 据我所知,人们可以将寄存器视为一个16位数值的内存块,通过从6000开始读取6个寄存器/12个字节,可以一次性读取它 我认为

我目前正在开发一个modbus服务器来控制一个设备

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

Adress 6000: ValueA, 2 Byte
Adress 6001: ValueB, 1 Byte; ValueC, 4 Byte; ValueD, 4 Byte 
Adress 6005: ValueE, 2 Byte
唯一受支持的读取功能是FC 03/读取多个保持寄存器

据我所知,人们可以将寄存器视为一个16位数值的内存块,通过从6000开始读取6个寄存器/12个字节,可以一次性读取它

我认为1字节的值不是问题,寄存器只包含不超过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寄存器是否是线性的吗?

我偶然发现了一个类似的情况,并在一个更专业的论坛上询问了这个问题。最重要的是,地址空间大部分时间是线性的,但并不总是线性的

请查看以下示例:

请原谅德语部分,但您可以在这里看到,寄存器地址0x2021包含由八个字或八个16位块组成的数据。按照上面的逻辑,您希望第二个字存储在寄存器0x2022中,但我在本地设备上进行了检查,发现它们不一样。总之,有一些设备决定,它们给一个寄存器的内存比它应有的多。所以,寄存器0x2021实际上单独保存8个字,而不使用寄存器0x2022保存内存。
你可能有类似的情况

你说得对,这似乎没有道理。你可以发布设备手册的链接吗?@Marker该手册不是公开的,但由于鲁本·博内特发布了我也使用的另一个modbus设备的手册,grrr,很明显寄存器不是线性的。太好了,这是来自WAGO IO系统750的,我桌上有完全相同的文档。我当然也应该看看这份文件。这肯定证明了地址空间不是线性的…@sweber你和我,我不得不放弃一周的编程,因为我的寄存器访问优化策略有一个先决条件,地址空间是线性的。。。