首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用pymodbus TCP库获取浮点值?

如何用pymodbus TCP库获取浮点值?
EN

Stack Overflow用户
提问于 2019-04-24 00:44:41
回答 1查看 1.5K关注 0票数 0

我正在从带有pymodbusTCP库的机器中读取一些值,但是当我读取浮点数时,我的值是错误的。获取这些值的函数是:

代码语言:javascript
复制
def ler_dado(endereco,tipo):
    if tipo == "float":
        valor = modbus.read_holding_registers(endereco,1*2)
        return [utils.decode_ieee(f) for f in utils.word_list_to_long(valor)][0]
    if tipo == "int":
        return modbus.read_holding_registers(endereco,1)[0]

例如,真正的值是367,但读取的是366。会出什么问题呢?

EN

回答 1

Stack Overflow用户

发布于 2019-04-24 10:07:06

听起来你的系统有一个错误的字节顺序转换。如果使用pymodbus.payload转换器,则可以更改字节顺序转换以获得正确的数据。

代码语言:javascript
复制
from pymodbus.constants import Endian
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.payload import BinaryPayloadDecoder

UNIT = 0x01
client = ModbusTcpClient(config_modbus['ip'],config_modbus['port'])
client.connect()
result = client.read_holding_registers(entry['address'],entry['count'],unit=UNIT)
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, Endian.Big, wordorder=Endian.Big)
value = decoder.decode_32bit_float()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55815894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档