所以我有一个项目,正在从MODBUS寄存器中读取数据。
每个寄存器为16位,每个值为32位。因此,我必须一次读取两个寄存器才能读取每个值。
所以我现在要做的是读取两个寄存器并将它们存储在regs
数组中,并按如下方式获取它们的位:
bits = (regs[0] << 16) + regs[1]
然后我尝试将这些位转换为如下所示的浮点数:
s = struct.pack('>l', bits)
final = struct.unpack('>f', s)[0]
final
应该是我的32位浮点数。这几乎一直都有效,但是在某些情况下,我会收到此错误:
Read registers failed: 'l' format requires -2147483648 <= number <= 2147483647
因此,我回过头来添加了一条打印语句,以查看在将其转换为浮点数之前是什么样子,它就是3309382817
,显然不在该范围之内... >
那么我在做错什么导致我收到此错误?有什么我想念的吗?
更新:
只提供更多信息,在打印regs
的值时再次运行它,并得到以下信息:
[50561, 10024] # this is the value of regs
3313575720 # this is the value of bits