Fronius WR an PI3, per Modbus

mf2000

Level-1
Beiträge
146
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe jetzt über Modbus einen Fronius WR Symo und das Fronius SmartMeter in Codesys eingebunden.
Das Ganze habe ich zum Testen erst einmal, auf einen kleinen PI3 gemacht.

Alle für mich relevanten Werte lese ich aus. In erste Linie geht es darum, jetzt Verbraucher etwa wie Klimaanlage, Trockner, … bei einem Stromüberschuss EIN und AUS zu schalten.

Sollte jemand Interesse haben kann er sich gerne melden. Ich selber habe dazu leider sehr wenig im Internet gefunden und wenn nur dann in json.

Das Programm ist sicherlich nicht perfekt gelöst, aber ich programmiere nur in meiner Freizeit. Auch war Codesys 3.5 für mich neu. Dieses war auch ein guter Grund endlich mit ST Programmierung anzufangen, also auch Anfänger :)

Fehler (DC Wandler 1+2 und WR) werden in Klartext gewandelt. Wärende der Anlaufphase kann es sein das kurz ein Fehler angezeit wird. Da der WR versucht immer wieder anzulaufen.


Einmal zusammengefasst, was meine Hürden waren:


Die ID Adressen von Fronius sind in der Grundeinstellung für den WR 001 und für das SmartMeter 240.

Die Daten lese ich als „int+SF“ aus. Wichtig ist auch zu wissen, dass man in der Doku von Fronius angeben Adresse immer -1 rechnen muss.

40108 ist 40107


Bei manchen Adressen muss man etwas rechnen. Will man das Leistungsschild auslesen, wird hier z.B. 4 angeben. Dann steht oben im Text der Doku, dass die Startadresse 40121 ist.

40121 +4 -1 = 40124.


Auch kann es sein, dass nicht alle Werte unterstütz werden, so kann man aus dem SM den „Export Gesamt“ herauslesen, aber z.B. nicht den „Export auf Phase A“.


Hat man eine Adresse von z.B. zwei Word, so muss man erst draus einen Realwert errechnen.

Word1 = 70
Word2 = 8882

Total_Wh_expored := ((WORD_TO_REAL(Exported_READ[0]) * 65536) + WORD_TO_REAL(Exported_READ[1]));

Das Ganze kann man sicher auch Bit weise verschieben, finde es so aber besser lesbar.


Der Scale Faktor gibt an, um wieviel sich das Komma verschiebt (z.B. -2 = 2 Kommastellen nach links).
Das ganze kann man mit der 10er Potenz machen.

AC_Voltage_AB := WORD_TO_REAL(AC_Voltage_READ[0]) / EXPT(10,(WORD_TO_INT(AC_Voltage_READ[6]) * (-1)));


Das Ganze soll noch erweitert werden um:


  1. VISU (Ist eine guter Einstieg)
  2. Datenloger
  3. Per eMail zugeschickt Reports einbinden und in der VISU darstellen
Also wenn einer Lust hat, kann er gerne hier mitmachen. Gerade beim Datenloger stehe ich noch am Anfang.

Gruß
mfreye
 

Anhänge

  • 2017-10-30 07_33_47-WR.project - CODESYS.jpg
    2017-10-30 07_33_47-WR.project - CODESYS.jpg
    375,7 KB · Aufrufe: 53
  • 2017-10-30 07_35_29-WR.project - CODESYS.jpg
    2017-10-30 07_35_29-WR.project - CODESYS.jpg
    40,7 KB · Aufrufe: 36
Zuviel Werbung?
-> Hier kostenlos registrieren
kleine Vereinfachung hier: 1/(x^-1) => x

Danke.





Zu Info.

Ich musste leider feststellen das die Werte vom DC String 1 nicht immer richtig sind, die vom DC String2 sind jedoch immer richtig.
Es komm vor, das der String 1 immer höhre Werte anzeigt, als die Wirklichen.

Nach Rücksprache mit Fronius (sehr netter Service!) kann es sich hier noch um einen Fehler im Modbus seitens Fronius Handel :rolleyes:

Ein Update vom Modbus hat nichts gebracht und auch eine neu Konfiguration nicht.

Edit:
Habe das ganze jetzt erst einmal so gelöst, dass ich nur die Werte aktualisiere, wenn diese richtig sind. Die beiden Werte von String 1 + 2 dürfen nicht größer der erzeugten Gesamtleistung sein.
 
Zuletzt bearbeitet:
Hallo zusammen,
die Kombination Fronius - Codesys auf PI würde mich auch interessieren.
Kann mich jemand an der Hand nehmen, wie man da startet?
Viele Grüße
Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Daniel81,

leider ist die Umsetzung bei mir schon eine Weile her.
Ich versuche mal die wichtigsten Schritte zusammen zu fassen:

Schritte über die Hardwareconfig
1. Schritt: Am Umrichter die Datenart eintragen. (Bei mir werden Integerwerte übertragen)
1. Schritt: Am Raspberry PI einen Modbus_Master anlegen.
2. Schritt: Die jeweiligen ModbusSlaves hinzufügen (Beispiel: Wechselrichter und Smartmeter)
3. Schritt: Den Slaves eine IP-Adresse geben (Hier musst du die IP-Adresse des Wechselrichters eingeben) und die Unit-ID gegebenenfalls anpasse (WR hat bei mir Unit-ID 1 (Default), SmartMeter hat bei mir die Unit-ID 240 (Default))
4. Schritt: Anlegen der benötigten Daten unter Modbus Slave-Kanal (Siehe Bild). Die Read-Offset Adresse entspricht dem Excelfile vom WR - Hersteller - 1.

Schritte in der Software:

1. Schritt: Nun kannst du die Daten in einem Programm mit deren Namen aufrufen.
Beispiel: DC-Spannung = WORD_TO_REAL(WR_DC_Voltage_Value)
Je nachdem musst du noch die Werte durch 10 oder 100 dividieren, damit du auf den richtigen Wert kommst.
 

Anhänge

  • Modbusstrang_Anlegen.png
    Modbusstrang_Anlegen.png
    5,4 KB · Aufrufe: 10
  • BenoetigtenDaten_Anlegen.png
    BenoetigtenDaten_Anlegen.png
    32,6 KB · Aufrufe: 11
Zurück
Oben