我使用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版本,以知道必须使用哪个版本的解码。
我发现了一个技巧,绕过pymodbus
version对浮点值进行解码,以处理不同版本的解码功能:
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 它可以在 各种浏览器* 中以 一致的方式 工作 *