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:
- VISU (Ist eine guter Einstieg)
- Datenloger
- 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