尝试使用 PyModBus 通过 USB 在没有任何可用文档的情况下读取 Omnik 逆变器

问题描述

我的太阳能电池板连接到 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 调试,这给了我:

  • DEBUG:pymodbus.transaction:当前事务状态 - 空闲
  • DEBUG:pymodbus.transaction:运行事务 1
  • 调试:pymodbus.transaction:发送:0x0 0x4 0x0 0x1 0x0 0x2c 0xa1 0xc6
  • DEBUG:pymodbus.client.sync:新交易状态发送
  • DEBUG:pymodbus.transaction:将交易状态从 SENDING 更改为 WAITING FOR REPLY
  • DEBUG:pymodbus.transaction:交易失败。 (Modbus 错误:[无效消息] 收到不完整的消息,预计至少 2 个字节(0 收到))
  • DEBUG:pymodbus.framer.rtu_framer:Frame - [b] 未准备好
  • DEBUG:pymodbus.transaction:获取交易 0
  • DEBUG:pymodbus.transaction:将交易状态从 PROCESSING REPLY 更改为 TRANSACTION_COMPLETE

错误来自:rr = client.read_input_registers(1,44)

我的猜测是 GROWATT 的寄存器与 Omnik 不同。这并不奇怪:) 由于我找不到有关 Omnik 本身的任何文档...我如何确定我的 Omnik 逆变器的正确代码

非常感谢您对此的任何帮助!

巴特

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...