gpt4 book ai didi

python - 如何检查 pymodbus 版本以解码 float_32 值?

转载 作者:行者123 更新时间:2023-12-01 01:48:11 27 4
gpt4 key购买 nike

我使用 pymodbus 读取并解码 float_32 值。

之前,我使用以下代码简单地对其进行解码:

from pymodbus.client.sync import ModbusTcpClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder

cli = ModbusTcpClient('an-IP')
cli.connect()
req = cli.read_holding_registers(<hex-address>, count=4)
dec = BinaryPayloadDecoder.fromRegisters(req.registers, endian=Endian.Little)
print(dec.decode_32bit_float())
<小时/>

但是最近我遇到了这个错误:

TypeError: fromRegisters() got an unexpected keyword argument 'endian'
<小时/>

[更新]

我认为新版本的pymodbus已被修改(endian参数已被弃用):

A reference: Looks like the arguments changed but not the documentation

然后我将这一行更改如下:

dec = BinaryPayloadDecoder.fromRegisters(
req.registers,
byteorder=Endian.Big,
wordorder=Endian.Little)
<小时/>

问题:

现在我想检查 pymodbus 版本以了解必须使用哪个版本的解码。

最佳答案

我找到了绕过pymodbus的技巧解码 float_32 值的版本以处理解码函数的差异版本:

try:
'''For pymodbus 1.3.2 and older version.'''
dec = BinaryPayloadDecoder.fromRegisters(req.registers,
endian=Endian.Little)
except:
'''For pymodbus 1.4.0 and newer version.'''
dec = BinaryPayloadDecoder.fromRegisters(req.registers,
byteorder=Endian.Big,
wordorder=Endian.Little)

或者:

import inspect


if 'endian' in inspect.getargspec(BinaryPayloadDecoder.fromRegisters)[0]:
'''For pymodbus 1.3.2 and older version.'''
dec = BinaryPayloadDecoder.fromRegisters(
req.registers,
endian=Endian.Little)
else:
'''For pymodbus 1.4.0 and newer version.'''
dec = BinaryPayloadDecoder.fromRegisters(
req.registers,
byteorder=Endian.Big,
wordorder=Endian.Little)
<小时/>

[注意]:

您还可以使用以下命令检查 PyPi 软件包版本:pip show <pkg-name>

关于python - 如何检查 pymodbus 版本以解码 float_32 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com