【问题标题】:Modbus client script read a sensor valueModbus 客户端脚本读取传感器值
【发布时间】:2023-01-01 04:35:56
【问题描述】:

我在 LAN 上设置了一个 Modbus 服务器,IP 地址为 192.168.0.111,Modbus 地图是下面的这个片段,我正在尝试读取突出显示为黄色的传感器:

有人可以告诉我如何运行 Modbus 客户端脚本并读取传感器值吗?

from pymodbus.client import ModbusTcpClient

client = ModbusTcpClient('192.168.0.111')
result = client.read_coils(30500,1)
print(result.bits[0])

client.close()

这将出错:

print(result.bits[0])
AttributeError: 'ExceptionResponse' object has no attribute 'bits'

稍微试验一下并将打印更改为print(result),这将无一例外地返回

Exception Response(129, 1, IllegalFunction)

【问题讨论】:

  • 第一个地址数字可能表示 Modbus 功能代码。试试client.read_holding_registers(500, 2, unit=1)
  • 感谢您的评论...同样的事情 - AttributeError: 'ExceptionResponse' object has no attribute 'bits'
  • 它是这些独立电表之一:egauge.net/commercial-energy-monitor
  • 我注意到的一件事是当我使用时:result = client.read_input_registers(500, 2, unit=1) print(result)这不会从设备返回ExceptionResponse...这只会打印ReadInputRegistersResponse (2)
  • 但是我还是绕不开print(result.bits[0]) AttributeError: 'ReadInputRegistersResponse' object has no attribute 'bits'

标签: python modbus pymodbus


【解决方案1】:

在这个问题的聊天中......这个overstackoverflow问题被引用了。完整答案:

from pymodbus.client import ModbusTcpClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder


client = ModbusTcpClient('192.168.0.111')
result = client.read_input_registers(500,2,units=1)
print(result.registers)
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder=Endian.Big)
print(decoder.decode_32bit_float())
client.close()

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2016-10-27
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多