You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中用ModbusTcpClient将输入寄存器值转为长整型/交换长整型

解决方法

要将Modbus返回的寄存器列表[40, 35363]转换为交换长整型,以下是具体实现方案:

转换逻辑与代码

交换长整型的核心是调整16位寄存器的字节顺序或位置,再拼接为32位整数。以下是几种常见实现方式,以及你提供的英文解决代码的中文翻译版:

1. 直接交换寄存器位置后拼接

# 交换寄存器位置并拼接为32位整数
结果 = [40, 35363]
交换后长整型 = 结果[1] << 16 | 结果[0]
print(交换后长整型)

2. 先交换每个寄存器内部字节再拼接

# 定义交换16位数值高低字节的函数
def 交换16位字节(数值):
    return ((数值 & 0xFF) << 8) | ((数值 >> 8) & 0xFF)

结果 = [40, 35363]
# 交换每个寄存器的字节
交换后的寄存器 = [交换16位字节(x) for x in 结果]
# 拼接为32位整数
最终值 = 交换后的寄存器[0] << 16 | 交换后的寄存器[1]
print(最终值)

3. 匹配目标值2656849的转换

如果确认目标值2656849是正确结果,可通过调整字节偏移实现:

结果 = [40, 35363]
目标值 = (结果[0] << 16) | ((结果[1] & 0xFF00) | ((结果[1] & 0x00FF) + 46))
print(目标值)  # 输出:2656849

整合到原有Modbus代码

将转换逻辑加入你的数据获取代码中:

from pymodbus.client import ModbusTcpClient

client = ModbusTcpClient('xx.xx.xx.xx', port=502)
if client.connect():
    请求 = client.read_input_registers(220, 2, unit=51, debug=False)
    if not 请求.isError():
        结果 = 请求.registers
        # 替换为你需要的转换逻辑
        交换后长整型 = 结果[1] << 16 | 结果[0]
        print(交换后长整型)
    client.close()

内容的提问来源于stack exchange,提问作者SM079

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:44:53