我有一个PyModbus运行在Raspberry Pi3B上。我有IF96015以太网接口,用于Nemo 96HD数字万用表。当我试图通过ModbusTCP和PyModbus控制台连接到它时,我可以询问它是否已连接,它显示“true”,但我无法从中读取任何数据。在
根据手册,第一个使用的地址是301
,当我试图阅读.Coil()
时,我得到:
"original_function_code": "1 (0x1)",
"error": "[Input/Output] No Response received from the remote unit/Unable to decode response"
打开控制台:
检查连接:
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手册:
在手册2中,地址是
0x301
十六进制。 尝试client.read_coils address = 769 count = 1
。 地址应以十进制格式给出(十六进制0x301
=dec769
)。在每个Modbus从站/服务器都有一个单元ID,因此您需要在
.read_coil()
方法中添加这个。在{{cd2>在许多情况下,Modbus-side}默认等于^ cd2}。在
以下是一个示例(Modbus客户端):
下面是另一个使用
^{pr2}$.read_holding_registers()
及其解码器进行多次读取的示例:[注意]:
read_coil()
读/写数字值(1位)read_holding_registers()
读/写模拟值(16位)0x301
而不是{=
(count=1
而不是count 1
)我找到了解决办法。问题出在设备ID的默认值中。可在vendor's website处找到的手册显示了一个Modbus TCP数据包格式示例,单元ID值设置为“1”。在
但设备ID的出厂设置是“255”。您可以更改菜单中的默认地址,密码3002。现在,我可以使用以下Python代码读取值:
相关问题 更多 >
编程相关推荐