当前位置: 首页 > 知识库问答 >
问题:

如何检查pymodbus版本以解码浮点值?

太叔经赋
2023-03-14

我使用pymodbus读取和解码浮点值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参数已被弃用):

引用:看起来参数已更改,但文档未更改

然后我改变了这行,如下所示:

dec = BinaryPayloadDecoder.fromRegisters(
    req.registers,
    byteorder=Endian.Big,
    wordorder=Endian.Little)

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

共有1个答案

萧德庸
2023-03-14

我发现了一个技巧,绕过pymodbusversion对浮点值进行解码,以处理不同版本的解码功能

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)

[注]:

您还可以使用:pipshow检查PyPi包的版本

 类似资料:
  • 问题内容: 我必须为我们的应用程序使用Python和Django。所以我有两个版本的Python,分别是2.6和2.7。现在,我已经安装了Django。我可以运行示例应用程序以测试Django成功。但是,如何确定Django使用2.6还是2.7版本以及Django使用什么版本的模块? 问题答案: 我必须为我们的应用程序使用Python和Django。所以我有两个版本的Python,分别是2.6和2

  • 问题内容: 我试图找到最大的立方根,即整数,小于12,000。 我不确定如何检查它是否是整数!我可以将其转换为字符串,然后使用索引来检查最终值,看看它们是否为零,但这似乎很麻烦。有没有更简单的方法? 问题答案: 要检查浮点值是否为整数,请使用以下方法: 该方法已添加到Python 2.6中的类型中。 请考虑在Python 2中为(整数操作数的底数除法!),并且浮点算术可能不精确(a是使用二进制分数

  • 我只是想知道composer如何在检查需求时检查要使用哪个php。我使用MacOS和终端类型: 结果是这样的: 当我检查php版本时: 结果是: PHP 5.6.10 (cli)(创建时间:2015年6月12日14:08:56)版权所有(c)1997-2015 PHP Group Zend Engine v 2 . 6 . 0,版权所有(c)1998-2015 Zend Technologies

  • 如何检查服务器上安装了哪个版本的GitLab? 我是关于GitLab更改日志中指定的版本: https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md 例如:“6.5.0”、“6.4.3”等。 Сa这只能通过终端完成吗 有没有办法远程执行此操作(使用浏览器而不是终端)?

  • 如何在Ubuntu 16.04中检查安装了哪个版本的aiohttp? 这个管用 但事实并非如此

  • 问题内容: 我是JavaScript新手。如何编写JavaScript函数,该函数将返回计算机中已安装的Java版本。 感谢 Sunil Kumar Sahoo 问题答案: 使用JNLP,Sun统一部署机制,功能就是您的答案: NB 它可以在 各种浏览器* 中以 一致的方式 工作 *