Beckhoff CX8090 Problem mit Modbus TCP Kommunikation zu PV Wechselrichter SolarEdge

marco1982

Level-1
Beiträge
5
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
habe beruflich schon sehr viel mit Beckhoff Steuerungen zu tun gehabt (TC2), jedoch nie Modbus benötigt, und genau da hakt es jetzt, habe jetzt ein privates Problem, und zwar schaffe ich es nicht die Daten meines SolarEdge Wechselrichters über Modbus TCP auszulesen.
Vielleicht hat ja hier einer sogar sowas am Laufen, eine Beckhoff Steuerung und liest die Daten von einem SolarEdge Wechselrichter aus, oder von einem anderen Wechselrichter der die Daten ähnlich zur Verfügung stellt.
Lt. SolarEdge Anleitung sollte es ein "SunSpec" Protokoll sein, die Startadresse sei wohl 40001, es sollen 122 Register sein.

Die Modbus Bibliothek läuft auf der CX8090, auch der SolarEdge Wechselrichter ist so eingestellt dass Modbus TCP aktiv ist (Port 502).
Habe den FB "FB_MBReadRegs" (Modbus Funktion 3) aufgerufen, aber ich habe keine Ahnung ob das der richtige ist??

Bei den ganzen anderen Variablen im FB bin ich mir auch nicht sicher, habe vieles probiert aber alles erfolglos...
Nachdem ich das Execute auslöste, kam immer ein Error oder Timeout, je nachdem mit was für Einstellungen ich probierte.

sIPAddr:= '192.168.0.10',
nTCPPort:= 502,
nUnitID:= 255,
nQuantitiy:=122, ist das richtig???
nMBAddr:= 40001, ist das richtig???
cbLength:= SIZEOF(IN_FromSolarEdge),
pDestAddr:= ADR(IN_FromSolarEdge),
tTimeout:= t#10s,
...

IN_FromSolarEdge habe ich global deklariert als ARRAY[1..122] OF INT;
Wobei ich hier auch zweifle dass das richtig ist, lt. Sunspec-"Liste" mit den all den Variablen ist da alles mögliche an Datentypen dabei (INT, UDINT, UINT, STRING, DSTRING).
Aber was soll ich da deklarieren??

Vielleicht hat ja jemand von Euch die Lösung für mein Problem, ein Beispielprogramm (bzw. ein Auszug davon) wär natürlich das beste.
Vielleicht funktionieren ja andere Wechselrichter ähnlich?

Ich komm irgendwie nicht mehr weiter, da ich wie gesagt nicht viel Ahnung von Modbus habe und hier einiges nur erraten kann.

Vielen Dank schon mal!
Marco
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Marco.

Ich hatte so ein ähnliches Problem bei der Verbindung zu meiner Heizung..
Probier mal den Baustein FB_MBReadInputRegs mit der Startadresse 0 oder 1.
Soweit ich mich erinnere geht der Baustein automatisch von dem Adressbereich 40000 aus.

Hier noch der Link aus der InfoSys:
https://infosys.beckhoff.com/conten...srv_client_overview.htm?id=633003957344765185

Hoffe du hast Erfolg!

Gruss
Michael
 
Hallo Marco,

Ich kenne jetzt die Registerliste des SunEdge nicht von daher kann ich jetzt nur allgemein was zum Aufbau des Programms sagen.

1. Modbus Register sind immer auf Word Größe ausgelegt. D.h. durch nQuantity := 122 würdest du z.b. 61 Int Werte auslesen.
2. Man kann nur zusammenhängende Registeradressen auslesen.
3. Die MB Library ist so ausgelegt, dass man immer nur einen Datentypen gleichzeitig auslesen kann.

Beispiel:
Register
40000/40001 -> PIst_kW (int)
40002/40003 -> QIst_kWVAr (int)

40000/40003 -> FIst_Hz (real)

Hierfür muss der FB zweimal aufgerufen werden. Einmal für die INT und einmal für die REAL. Hierzu verwende ich eine Statemachine. So dass bei jedem Zyklus nur einmal der FB ausgeführt wird.
Außerdem mache ich es so, dass ich mir zwei Strukturen erstelle. Einmal PowerIst mit den zwei INT Variablen und eine Frequenz mit der REAL Variablen. Deren Adresse werden dann als nDestAddr gewählt. Als Länge wird Sizeof(STRUCT)/Sizeof(WORD) übergeben.

Ich hatte auch schon einmal das Problem, dass eine UnitID ungleich 255 beim Slave eingestellt war. Und es hat deshalb nicht funktioniert. Versuch doch auch mal die 1.

Außerdem musst du wissen, ob die Daten im BigEndian oder LittleEndian übertragen werden.

Für solche Tests nutze ich das Janitza Modbus Diagnose Tool (kostenlos auf den Janitza Homepage) da man sich hier verschiedene Byte Reihenfolgen ansehen kann.

Gruß
Alex
 
Zurück
Oben