# Fronius WR über Modbus-TCP an PFC100 (750-8100), Real oder Int?



## passra (11 November 2016)

Hallo zusammen,

seit 2 Wochen teste ich eine Wago PFC 100, die demnächst meine S7-200 von 1997 in meinem Hausverteiler ersetzen soll. Diese steuert bisher nur das Licht, die neue Steuerung soll aber auch diverse Geräte abfragen (PV-WR, KWL, UVR1611), einen Webserver für die Bedienung und Erweiterungsmöglichkeiten für die Hausautomation bieten. Das Preis-Leistungsverhältnis und die vielfältigen Zusatzmodule (Can-Bus, KNX, 1-Wire, Dali, EnOcean) sprechen da sehr für die Wago.
Zum Programmieren benutze ich e!cockpit in der neuesten Version.
Zu mir noch schnell: Ich programmiere sein 1994 Siemens-Steuerungen, die letzten 10 Jahre aber fast ausschließlich nur noch PCS7.

Die Software für die Lichtsteuerung war kein Problem, sobald man sich im e!cockpit zurechtfindet.
Nun habe ich mich die letzten Tage mit der Anbindung des Fronius-Wechselrichters an die Steuerung beschäfigt. Der WR stellt seine Daten über Modbus-TCP bereit.
In der SPS läuft der Baustein "FbMbMasterTcp"
	

		
			
		

		
	



	

		
			
		

		
	
, die Kommunikation funktioniert soweit und es kommen auch sinnvolle Daten (als INT).

Der WR stellt seine Daten in 2 Formaten zur Verfügung: Entweder als Real (float)-Werte oder als Integer-Werte.




Nun zum Problem dabei:

Hole ich die Daten als Int, kann der WR laut Handbuch Fronius den Scale-Factor nicht mit übertragen. In den entsprechenden Registern stehen nur Dummy-Werte. Und da z.B. heute abend eine aktuelle Leistung von 107 W als 10700 übertragen wurde, gehe ich davon aus, dass sich dieser Faktor mit der Höhe der Leistung (max 7000W) ändert und das eine böse Rechnerei geben wird.
Deshalb wären mir die Werte als Real eigentlich viel lieber, auch für die leichtere Weiterverarbeitung.

Problem dabei:
Die Antwortstruktur "typMbResponse"


des Modbus-Bausteins speichert die zurückgelieferten Registerwerte in einem "Array of Word" ab. Schau ich mir die Struktur online an, sind in den Arrayfeldern, die Real-Werte enthalten sollten, nur Nullen zu sehen. Dort hätte ich als Bitinterpretation der Real-Zahlen zumindest "sinnlose" Zahlen erwartet.

Frage:
Wie schaffe ich es, die WR-Werte als Real-Werte einzulesen bzw. das Word-Array in ein Real-Array zu wandeln oder zumindest jeweils 2 Worte in einen Realwert zu pressen?

Hoffe, ihr könnt mir da weiterhelfen.

Danke.

Servus
Manfred


----------



## Stefan3107 (12 November 2016)

Hallo Manfred

Gratuliere da bist du ja schon um einiges weiter als ich, bei mir funktioniert mit meiner S7 1200 noch nichts.
Sie plaudert mit meinen Symo noch nicht richtig...
Zu deiner Frage:
Ich habe am Android eine App laufen wo ich alle Werte meines Symo vernünftig auslesen kann.
Momentan bekomm ich 207 Watt runter, das Register 40084 zeigt dann wie bei dir 20700 an. Das sunssf 40085 zeigt -2. Ich denkt das bedeutet dann die hinteren 2 Nullen weg.
Zumindest beim 40094 (livetime Energy) stimmt da,s bei mir bekomme ich den Wert 4021910(Watt) was auch stimmt, der zugehörige sunssf 40096 ist 0, also keine Stellen hinten weg.
So währe es ja eine leichte umrechnung für deinen Wert, (hoffe mal so).
Ich hoffe heut noch über 999 Watt zu kommen um dann den 40085 zu kontrollieren.
Vieleicht hast du ja noch einen Tipp für meine S7 1200.

LG. Stefan


----------



## passra (12 November 2016)

Hallo,

manchmal sieht man echt den Integer vor lauter Word nicht  Ich habe als Skalierungsfaktor immer sowas wie 1, 10 oder 100 erwartet; auf -1 oder -2 wär ich nie gekommen. Und 65534 in Integer konvertiert ist halt -1, bzw. bei 65533 dann -2. Und schon funktioniert die Umrechnung und die Werte passen 

Zur Verbindung: Der Fronius erwartet im Protokoll auch die Geräte-ID, der WR ist normalerweise 001 und das Smartmeter 240. Ohne geht es meines Wissens nicht. Ansonsten nur IP-Adresse und Port.

Servus
Manfred


----------



## Stefan3107 (12 November 2016)

Hallo
Schön das es passt, 
Das mit der Geräte-ID ist mir klar, nur kann ich die ab der Bausteinversion 4.0 nicht eingeben??? S7 1200
Irgendwie bin ich da auf dem Holzweg.
lg.


----------



## MSB (12 November 2016)

Stefan3107 schrieb:


> Hallo
> Schön das es passt,
> Das mit der Geräte-ID ist mir klar, nur kann ich die ab der Bausteinversion 4.0 nicht eingeben??? S7 1200
> Irgendwie bin ich da auf dem Holzweg.
> lg.


Es gibt im Instanz-DB des Client Bausteins einen Parameter (Stat-Var) "Byte" MB_Unit_ID, dieser dürfte dem gesuchten entsprechen.


----------



## Stefan3107 (13 November 2016)

Hallo 
Hätte schon fast gedacht es funktioniert da ich im Status 7000 sah, leider hatte ich am Disconnect eine 1 und dann kam kein Error.
Jetzt steht am Status 8383

8383
02
Fehler beim Lesen oder Schreiben der Daten oder Zugriff außerhalb des Adressbereichs von MB_DATA_PTR.
Der Fehler kann sowohl lokal als auch bei der Anweisung "MB_SERVER" auftreten



und habe schon alles versucht und geht nicht!!!
Hat da einer eine Idee?

Lg
Stefan


----------



## MSB (13 November 2016)

Stefan3107 schrieb:


> Hallo
> Hätte schon fast gedacht es funktioniert da ich im Status 7000 sah, leider hatte ich am Disconnect eine 1 und dann kam kein Error.
> Jetzt steht am Status 8383
> 
> ...


Da müsstest du jetzt schon deutlich präziser werden ... wie rufst du den Baustein mit welchen Parametern auf?


----------



## passra (13 November 2016)

Und vielleicht das Problem im Siemensbereich neu eröffnen  dort werden sich doch mehr Siemensprogrammierer wie hier im Wagobereich tummeln


----------



## Stefan3107 (13 November 2016)

Hallo
Ja das habe ich ja schon am Freitag gemacht aber da antwortete keiner.
Aber danke vorerst mal für eure Hilfe.
Ich nem mal meinen Pack und übersiedele nach Siemens....
Lg 
Stefan


----------



## eloee (15 November 2016)

Hallo Manfred,

habe das ganze auch schon in ähnlicher Konstellation (PFC200 & Fronius Symo) versucht, habe aber bisher keine sinnvollen Werte bekommen...
Werde es dann auch mal mit deiner Lösung über den FbMbMasterTcp Baustein versuchen, vielleicht habe ich damit mehr Glück.
Warum verwendest du nicht die integrierte MODBUS Funktionalität von e!Cockpit ? 

Gruß
Eloee


----------



## passra (15 November 2016)

Du meinst, in der Gerätestruktur MODBUS-Variablen anlegen?

Wenn man das macht und dann online geht und mit der Maus über die Steuerung fährt, sieht man, dass die Modbusfunktion nicht aktiv ist. Dies geschieht erst, wenn der Masterbaustein läuft.
Nach längerer Suche bin ich dann darauf gekommen, dass diese Variablen nur als Slavedefinition fungieren, es braucht dann also einen externen Modbusmaster, der die Werte aus der PFC ausliest.

Soll die PFC Master sein, geht das meines Erachtens nur über den Masterbaustein.



Parameter zum Baustein (für das Smartmeter ist die ID dann 240 und nicht 1):


----------



## eloee (16 November 2016)

Genau das meinte ich,
also ich habe z.B. einen Siemens PAC3200 Energiezähler sowie einen Arduino als Modbus Slaves über diese Gerätestruktur angebunden, das heißt grundsätzlich funktioniert es schon ohne den Modbusmaster Baustein.
Blos hat es beim Fronius WR jetzt eben gehakt, werde aber auch nochmal versuchen die Werte als INT abzurufen, hatte das damals glaube mit den Float Werten versucht und das ging bei dir ja auch nicht...
Falls das immernoch nicht klappt, werde ich auch mal deine Lösung versuchen, wobei ich dann nicht weiß ob das Probleme gibt wenn ich das über die Gerätestruktur und den Baustein mache.

Liebe Grüße
Eloee


----------



## passra (16 November 2016)

Interessant, kannst du mal ein paar Hardcopys dazu einstellen?


----------



## uzi10 (24 September 2019)

hat schon wer geschafft einen Fronius per Modbus TCP auszulesen? Habt ihr da einen fertigen Baustein oder Anleitung? Ich finde das Gerät nicht im Modbus(Port ist offen aber Scanner finden nichts)!
Oder hat es wer geschafft diesen per API einzubinden?


----------



## Stefan3107 (24 September 2019)

Hallo
Welche PLC hast du?
LG.Stefan


----------



## uzi10 (24 September 2019)

Pfc200... 750-8202


----------



## Stefan3107 (24 September 2019)

Hallo
Ich könnte nur eine fertige Lösung einer s7 anbieten, tut leid
LG. Stefan


----------



## uzi10 (25 September 2019)

Wie hast du den WR eingestellt? Ich finde den nicht mal mit einen Modbus Scanner und kann auch nichts auslesen, obwohl laut Portscanner der Port502(Gateway) offen ist


----------



## Stefan3107 (25 September 2019)

Habe es über ein Hanyapp problemlos auslesen können, aber heute schläft der WR schon. Kann dir aber morgen Mal in den Einstellungen reinschauen, wenn's noch hell ist damit er online ist!


----------



## KLM (5 Oktober 2019)

Moin, es geht übrigens auch mit dem e!C Modbus Konfigurator, was einfacher und schneller ist, als mit dem FB. Allerdings muss man dann die Zeiten für Timeout und Retrasmission hoch setzen, da der WR nur einmal pro Sekunde antwortet.


----------



## uzi10 (5 Oktober 2019)

KLM schrieb:


> Moin, es geht übrigens auch mit dem e!C Modbus Konfigurator, was einfacher und schneller ist, als mit dem FB. Allerdings muss man dann die Zeiten für Timeout und Retrasmission hoch setzen, da der WR nur einmal pro Sekunde antwortet.



welche Werte sind das noch mal genau im Programm und auf wieviel? Warum findet das Windows Programm dann auchnix`?


----------



## KLM (5 Oktober 2019)

Die Werte findest Du im Konfigurator auf der zweiten Register Karte und nachdem (siehe oben) der WR nur einmal pro Sekunde antwortet (genau eine Sekunde Verzögerung auf eine Master-Anfrage, wie Wireshark zeigt), sollten die beiden Zeiten natürlich größer eine Sekunde sein.
Ob Werte angezeigt werden (Konfigurator, FB, diverse Windows Tools) hängt von der jeweiligen Toleranz gegenüber ständigen Timeouts ab. Es kommen ja Werte, nur löst der Timeout vor jedem Telegrammeingang aus und auf TCP Ebene werden vor dem Eingang ständig Retransmissions ausgelöst.

Nachtrag: Auch beim FB sind ständig Timeouts dazwischen, weshalb die Zeit ebenfalls erhöht werden sollte. Nur ist im FB eine anderes Verhalten implementiert, als im Master über den Konfigurator.


----------

