首页 > 解决方案 > 如何修复 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手册:

手册_1

手册_2

标签: pythontcpmodbusmodbus-tcppymodbus

解决方案


每个 Modbus 从站/服务器都有一个unit_ID,因此您需要在.read_coil()方法上添加它。

在许多情况下,unit参数等于1Modbus 从站端的默认值。


这是一个示例(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 位)
  • 一些地址是十六进制的(也许0x301301
  • 不要忘记=在每个这样的论点之后(count=1而不是count 1

推荐阅读