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

2024-10-03 13:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我的太阳能电池板连接到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。事务:当前事务状态-空闲
  • 调试:pymodbus。事务:运行事务1
  • 调试:pymodbus。事务:发送:0x0 0x4 0x0 0x1 0x0 0x2c 0xa1 0xc6
  • 调试:pymodbus.client.sync:新事务状态发送
  • 调试:pymodbus.事务:将事务状态从发送更改为等待答复
  • 调试:pymodbus。事务:事务失败。(Modbus错误:[无效消息]收到的消息不完整,预计至少有2个字节(收到0个))
  • 调试:pymodbus.framer.rtu_framer:Frame-[b]未就绪
  • 调试:pymodbus。事务:获取事务0
  • 调试:pymodbus.事务:将事务状态从处理应答更改为事务完成

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

我猜Growt的寄存器与Omnik不同。这并不奇怪:) 因为我找不到关于Omnik本身的任何文档。。。如何确定Omnik逆变器的正确代码

非常感谢您在这方面的帮助

巴特


Tags: 代码importclientreadinputvalue状态rr