我的太阳能电池板连接到 Omnik 逆变器 (5000tl2)。那家公司已经破产,可用的文档没有指定使用 USB 端口或逆变器本身的寄存器。
我正在尝试在不使用 wifi 模块的情况下读取逆变器上的数据。我将我的 Pi 2B+ 连接到 USB 端口,安装了 pymodbus 并尝试了这段代码(由 Fasthook 提供),它最初是为另一个品牌 (GROWATT) 设计的:
import subprocess
from time import strftime
import time
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
client = ModbusClient(method='rtu', port='/dev/ttyUSB0', baudrate=9600, stopbits=1, parity='N', bytesize=8, timeout=1)
client.connect()
rr = client.read_input_registers(1,44)
rr = client.read_input_registers(2,1) #Watts delivered by panels (DC side)
value=rr.registers
pv_watts=float(value[0])/10
rr = client.read_input_registers(3,1) # Volts on DC side
value=rr.registers
pv_volts=float(value[0])/10
rr = client.read_input_registers(4,1) # Amps on DC side??? Not sure.
value=rr.registers
pv_amps=float(value[0])/10
rr = client.read_input_registers(12,1) #watts delivered by inverter to net
value=rr.registers
out_watts=float(value[0])/10
rr = client.read_input_registers(13,1) # frequency of AC
value=rr.registers
ac_hz=float(value[0])/100
rr = client.read_input_registers(14,1) # volts on AC side delivered by inverter
value=rr.registers
ac_volts=float(value[0])/10
rr = client.read_input_registers(27,1) # Total energy production today
value=rr.registers
Wh_today=float(value[0])*100
rr = client.read_input_registers(29,1) # Total energy production in inervter storage
value=rr.registers
Wh_total=float(value[0])*100
rr = client.read_input_registers(32,1) # Inverter temperature
value=rr.registers
current_temp=float(value[0])/10
client.close()
我还启动了 PyModBus 调试,它给了我:
- 调试:pymodbus.transaction:当前事务状态 - 空闲
- 调试:pymodbus.transaction:运行事务 1
- 调试:pymodbus.transaction:发送:0x0 0x4 0x0 0x1 0x0 0x2c 0xa1 0xc6
- DEBUG:pymodbus.client.sync:New Transaction state SENDING
- DEBUG:pymodbus.transaction:将事务状态从发送更改为等待回复
- 调试:pymodbus.transaction:交易失败。(Modbus 错误:[Invalid Message] 收到不完整的消息,预计至少 2 个字节(收到 0))
- DEBUG:pymodbus.framer.rtu_framer:Frame - [b] 未准备好
- 调试:pymodbus.transaction:获取事务 0
- DEBUG:pymodbus.transaction:将事务状态从 PROCESSING REPLY 更改为 TRANSACTION_COMPLETE
此错误来自:rr = client.read_input_registers(1,44)
我的猜测是 GROWATT 的寄存器与 Omnik 不同。这并不奇怪 :) 因为我找不到关于 Omnik 本身的任何文档……我怎样才能为我的 Omnik 逆变器确定正确的代码?
非常感谢您对此的任何帮助!
巴特