python-3.x 如何使用Modbus TCP连接到夏威夷SmartLogger 3000

bzzcjhmw  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(136)

我正在尝试使用Modbus TCP查询智能记录器。我使用pyModbusTCP

from pyModbusTCP.client import ModbusClient

c = ModbusClient()

c.host = 'x.x.x.x' #my smartlogger IP
c.port = 502
c.debug = True

regs = c.read_holding_registers(0, 10)

if regs:
    print(regs)
else:
    print("read error regs")

并得到错误:Modbus异常(代码3“非法数据值”)
有任何建议的潜在错误或其他软件与smartlogger通信?
尝试对c.read_holding_registers(0,10)使用不同的int值,但仍然得到相同的错误:Modbus异常(代码3“非法数据值”)

sczxawaw

sczxawaw1#

我也在尝试同样的方法,你的代码让我走上了正确的道路!我使用ChatGPT来给予我更多的信息,它建议使用“pymodbus”代替。
要找到寄存器,请参阅https://support.huawei.com/enterprise/en/doc/EDOC1100050690(查看第14页-> SN 30 ->这就是我所说的寄存器信息)。
我用来检查每日收益率的代码作为测试:

from pymodbus.client import ModbusTcpClient
# Replace 'x.x.x.x' with your Smartlogger IP address
client = ModbusTcpClient('x.x.x.x')

# Specify the Modbus unit ID (default is 0)
unit_id = 0

# Specify the starting register address and the number of registers to read
starting_register = 40562
num_registers = 2

try:
    # Connect to the Modbus TCP server
    if client.connect():
        # Read holding registers from the Smartlogger
        response = client.read_holding_registers(starting_register, num_registers, unit=unit_id)

        if not response.isError():
            # Extract the data from the response
            data = response.registers
            print(data)
        else:
            print("Modbus error response:", response)
    else:
        print("Could not connect to Modbus TCP server.")

except Exception as e:
    print("Error:", e)

finally:
    # Close the Modbus TCP connection
    client.close()

这给了我这个结果:

[0, 19560]

Smartlogger的Web UI显示1.96MWh,docu说这个值的增益为10,单位为kWh。所以将结果除以10,你就得到了你的kWh。

相关问题