读取Modbus相邻寄存器D或F(32位)的工作原理



主要软件: Lookout
主要软件版本: 3.8
主要软件修正版本: N/A
次要软件: N/A

问题:

当我在Lookout中使用32位的D或者F寄存器具体会发生什么?-一个教程

当我们插入一个表达式时,系统如何从两个相邻寄存器中读值?当写入这些寄存器时又是如何执行一个值的split命令?



解答:

已知一个D寄存器数据成员是一个“32位无符号存储寄存器,可以读取相邻的存储寄存器作为一个单精度32位数,范围是从0-4294967296”。

让我们先看下如何从相邻两个寄存器中获取一个单精度数值。

例如,如果我们插入一个表达式在D40010,然后我们读取 (2^16 x p )+( q ),p是40010中的一个变量,q是40011变量。所以,如果40010里面是2,40011里面是5,那么D40010将会显示(2^16 x 2) + (25) = (65536 x 2) + (25) = 131097

那就是, D40010 = (2^16 x 40010) + (40011)
推广一下, D4x..N = (2^16 x 4x...N) + (4x...N + 1)
再清楚解释就是: D40001 = (2^16 x value_in_40001) + (the_value_in_40002)

现在,最难的一部分就是当我们在Modbus中向D寄存器写入时。如果采用D40010,我们实际上写入(2^16x40010)+(40011). 所以,你必须确认你已经分离数字到两个寄存器中,正如上面所示,在PLC中也同样如此。如果你想要用D40010读取时,你必须写一个 <=65535 数字到40011.大于65535的数字将被如上述一样分离。如果你想要写入75000,那么 75000 - 65536 = 9464,因此你将会写入9464到40010和1到40011.这个将会给你一个D40010的表达式2^16x1+9465 = 75000.
如果你想从Lookout中写入,你只能写入到D40010中。Lookout注意将数字分离到40010和40011。

F寄存器工作方式基本类似,除了你使用IEEE浮点寄存器格式来写,可以参照 IEEE floating-point representations of real numbers获得更多信息。
现在这些如何影响你?当你使用D或者F寄存器时将会有一些例子,你可以实现连续不断地从寄存器中读写数据,直到读取错误的数据。

现在你已经明白两个寄存器的使用和使用原理。

这个对于Lookout是有效的并且对Modbus/ModbusSlave也已经验证过。然而,它应该对所有Modbus PLC的32位寄存器有效。D和F对于BridgeVIEW和服务器管理器分别是4字节无符号和4字节实数类型。



相关链接: IEEE floating-point representations of real numbers

附件:





报告日期: 05/19/1998
最近更新: 06/29/2014
文档编号: 19IJR48U