[Megoldva] Huawei SUN2000 (5KTL M1) - Modbus RS485

Sziasztok,

Esetleg valaki csatlakozott mar nem TCP-n hanem RS485-on keresztul a fenti(hez hasonlo) szerkezethez?

Elvileg ket RS485 busza is van:

RS485/1: Used to cascade  inverters or connect to the RS485 signal port on the SmartLogger
RS485/2: Used to connect to the RS485 signal port on devices such as the Smart Power Sensor and the energy storage device

Lehet egyaltalan barmelyikhez olyan modon csatlakozni, mint a modbus-TCP-s megoldas eseten (masterkent kiolvasni a inverter (slave)) regisztereit? Azt sem tudom, hogy tud-e slave es / vagy master lenni barmelyik porton az inverter (gondolom a kaszkadnal valamelyiknek masternek kellene lenni a tobbi meg slave), a logger es a power sensor eseten nem tudom melyik mi, s a batteryrol azt gondolnam, hogy o slave, de csak talalgatas.

Azt gondoltam, az RS485/2 lenne a hasznalhato, de mindket porton probaltam. Az RS485/2 eseten mindig timeout van. Az RS485/1-gyel barmit probalok olvasni, "illegal function" jon vissza.

A beallitas 9600 8N1 (az inverteren csak a baud rate allithato, a data bit, paritas, stop bitek szama nem), address 1 (az inverter cime).

Koszi

Hozzászólások

Volt téma pár fórumon már ez és többeknek sikerült. Ha jól emlékszem úgy, hogy a power meternél másztak rá a buszra.
Én csak félig figyeltem oda, mert TCP-s megoldásban vagyok érdekelt.

"Az RS485/1-gyel barmit probalok olvasni, "illegal function" jon vissza."

A kérdés, hogy mit próbálsz olvasni. Éppen most írtam hozzá drivert és úgy tűnik volt egy kis módosítás a regiszterek számozásában. Pl. a battery SOC eltűnt a v3.0-ban, illetve a v1.0-s regiszterkiosztás mintha nem fedné a későbbi verziót.

A napokban rakom ki GUIra a battery SOC-ot és akkor első kézből tudok segíteni, hogy milyen regiszereknél, milyen lekérés esetén van esélyed sikerre.

Az nem irtam, hogy csak inverter van (se logger, se meter, se akku), szoval valahogy ugy kellene megtamadnom, hogy csak az inverter valamelyik RS485-os buszara csatlakozok direktben.

Kozben van olyan erzesem, hogy valamit elrontok.

A Wi-Fi (es Ethernet) dongle-on, Modbus-TCP-n keresztul tudok lekerdezni, az mukodik rendesen (ezzel butykoltem).

Most egy hasznalaton kivuli RPi-t + Modbus adaptert (kinai, CH341-es USB-serial + RS485 illeszto) helyeztem el a inverter kozeleben. Talaltam egy Modbus-RTU megoldast, de a fuggosegeivel egyelore nen tudtam zoldagra vergodni. Feltettem az mbpoll utility-t, azza jottek a hibak amit fentebb irtam. Az mbpoll tud RTU-t es TCP-t is, viszont TCP-n is azt mondja, hogy timeout ami kisse gyanus, tekintve, hogy a Python szkript tud csatlatlozni, kiolvasni (ez be is van allitva Home Assistanthoz), mig ugyanaezen a gepen (ez is egy RPi) az mbpoll nem mukodik. Igy probalnam:

mbpoll -m tcp -a 1 -r 30070 -c2 -t 3:hex -1 <inverter IP>

Mivel ez is timeoutot mond, valoszinuleg elrontok valamit - de egyelore nem latom, hogy mit, probaltam azokat a beallitasokat hasznalni amit Python szkriptben van (502-es port, slave address 1, olyan regisztrer olvasnek amit a Python szkript is olvas).

Ami miatt az egeszet csinalnam az az, hogy a dongle-on keresztuli lekerdezes rettenetesen lassu. Par (~10) ertek lekerdezese tobb (5+) masodpercbe telik. Talan nem tunik veszesnek, de szinkronizalni szeretnem a villanyoraval (hogy minel kozelebb legyen az inverter altal adott adat az villanyora altal szolgaltatotthoz, es ne legyenek (vagy csokkenjenek) a glitchek).

/sza2

Digital? Every idiot can count to one - Bob Widlar

Idokozben egy problemat mar talaltam, az mbpoll eseten nem lehet varakozast beallitani a connect utan, ami viszont kell a Huawei csoda Modbusnak - legalabbis TCP eseten. Csak akkor mukodik, ha a connect es a lekerdezes kozott van ~1 masodperc.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Szerkesztve: 2022. 09. 06., k – 21:20

Vegulis kikiserletezodott, az RS485/1 buszra (kommunikacios csatlakozo 1-es es 3-as labai) kell kotni a mastert, illetve az alabbi rovid szkripttel ki lehet olvasni a modell stringet (vagy a cimtol fuggen mast is persze):

from pymodbus.client.sync import ModbusSerialClient as ModbusClient

client = ModbusClient(method='rtu', port="/dev/ttyUSB0", timeout=1, baudrate=9600, stopbits = 1, bytesize = 8, parity = 'N')
client.connect()
response = client.read_holding_registers(30000, 15, unit = 1)
model = []
for d in response.registers:
    model.append(chr(d//256))
    model.append(chr(d%256))
print(model)
client.close()

Igaz, 3-5 probalkozasbol kb. 1-szer sikerul olvasni, a tobbi esetben exception jon - irtak egy-ket helyen, hogy a Smart Dongle (Wi-Fi + Ethernet) nem jo ha csatlakoztatva van amikor RTU modban hasznalna az ember, amit el is tudok kepzelni, ha mindket eszkoz ugyanazt a fizikai buszt probalja elerni. Valamikor leszedem, megnezem ugy jobb-e.

Edit: es valoban, a dongle-t kihuzva megszunnek a problemak, minden lekerdezes hibatlanul megy, visszadugva a dongle-t, ujra jonnek az exceptionok - szoval valoszinuleg mindketten ugyanazt az buszt probaljak elerni. Volt ahol irtak, hogy ujra kell inditani az invertert, nalam erre nem volt szukseg.

/sza2

Digital? Every idiot can count to one - Bob Widlar