首页 > 解决方案 > 使用 Python 代码从 Modbus RTU 从站获取整数值

问题描述

我正在读取 modbus 从站寄存器中的值。但是存储在寄存器中的值是两个寄存器的组合。也就是说,如果寄存器 3 有 72,寄存器 4 有 489。实际值为 72489。我能够做到这一点。

但是问题来了,当第二个寄存器中的值以0开头时。也就是说,如果寄存器2有72,寄存器4有012。实际值应该是72012,但我得到7212。有没有办法防止这种情况。

执行此操作的代码部分是,

`rr = client.read_holding_registers(2, 22, unit=1)
 unconcatenateSensorConsumptionValues = rr.registers
 sensorsConsumptionValues = []
 for i in range(0, 10, 2):
    ftemp = ""+str(unconcatenateSensorConsumptionValues[i])
    stemp = ""+str(unconcatenateSensorConsumptionValues[i+1])
    fin = ftemp+stemp
    sensorsConsumptionValues.append(int(fin))`

标签: pythonpython-3.xmodbuspymodbus

解决方案


将寄存器数字视为字符串。

fin = int(unconcatenateSensorConsumptionValues[i]) * 1000 + int(unconcatenateSensorConsumptionValues[i+1]) * 1

第一个寄存器是 1000,第二个寄存器是 1。


推荐阅读