python - 如何修复 PyModbus 无法通过 IME 使用 IF96015 接口解码响应错误
问题描述
我有一个 PyModbus 在Raspberry PI 3b上运行。我有用于Nemo 96HD数字万用表的IF96015以太网接口。当我尝试使用 PyModbus 控制台通过 ModbusTCP 连接到它时,我可以询问它是否已连接并且它说“true”但我无法从中读取任何数据。
根据手册,第一个使用的地址是301
,当我尝试阅读时,.Coil()
我得到:
"original_function_code": "1 (0x1)",
"error": "[Input/Output] No Response received from the remote unit/Unable to decode response"
打开控制台:
pymodbus.console tcp --host 192.168.178.200 --port 502
检查连接:
client.connect
尝试阅读线圈:
client.read_coils address 301 count 1
输出:
"original_function_code": "1 (0x1)",
"error": "[Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 8 bytes (0 received)"
[注意]:
IF96015手册:
解决方案
每个 Modbus 从站/服务器都有一个unit_ID,因此您需要在.read_coil()
方法上添加它。
在许多情况下,unit
参数等于1
Modbus 从站端的默认值。
这是一个示例(Modbus 客户端):
pymodbus.console tcp --host 192.168.178.200 --port 502
client.connect
client.read_coils address=301 count=1 unit=1
.read_holding_registers()
这是另一个使用及其解码器进行多次读取的示例:
client.read_holding_registers count=4 address=9 unit=1
{
"registers": [
60497,
47134,
34091,
15424
]
}
result.raw
{
"registers": [
15626,
55203,
28733,
18368
]
}
result.decode word_order=little byte_order=little formatters=float64
28.17
[注意]:
read_coil()
读/写数字值(1位)read_holding_registers()
读/写模拟值(16 位)- 一些地址是十六进制的(也许
0x301
是301
) - 不要忘记
=
在每个这样的论点之后(count=1
而不是count 1
)
推荐阅读
- python - 多个传感器的python精确计时
- nginx - Nginx 无法添加标头
- java - moveToElement 不会触发鼠标悬停事件
- javascript - 如何在每次单击按钮时显示 3 秒的图像?
- typescript - 在 aws-pulumi 上部署 lambda 函数
- system-verilog - 同一个接口的两个 Modport 有 1 个时钟周期差
- purescript - 在 Purescript 中使用 ADT 的构造函数作为类型
- r - 如果变量中的值重复,请根据其他变量保留具有最低值的行
- azure - 是否可以使用 REST API 获取 Azure 存储帐户连接字符串?
- javascript - js中的动态构造函数名称