TIA S7-1200 Modbus

Zuviel Werbung?
-> Hier kostenlos registrieren
Alles klar muss ich mal ausprobieren. Hab noch ein anderes Problem. Wandle DC Current in Real um sprich von UInt nach Real und er verschiebt das Komma wie er möchte. Sprich Wenn ich da 8000 als UInt drin hab kann es sein, dass es 8A sind oder nur 0,8A. Das ist etwas blöd. Hat da jemand ne Lösung? Bzw. ab wann ist der Überlauf?
 
Der Wert setzt sich immer aus zwei Registern zusammen.
Normalerweise so: (reduziert auf eine Kommastelle in Real)
Code:
"DB_Fronius".SM.I_A_G := INT_TO_REAL(REAL_TO_INT(("DB_MB_Client_PV".Holdingregister[2]) * 10 ** INT_TO_REAL("DB_MB_Client_PV".Holdingregister[6]) * 10)) / 10;

Beim DC Strom von den Panels hab ich was anderes gemacht:
Code:
"DB_Fronius".WR.String1_DC_A := UINT_TO_REAL(INT_TO_UINT("DB_MB_Client_PV".Holdingregister[19])) * 10 ** ((65536 - UINT_TO_REAL(INT_TO_UINT("DB_MB_Client_PV".Holdingregister[2]))) * -1);

// Fronius Modbusfehler ausgleichen
IF "DB_MB_Client_PV".Holdingregister[19] = 65535 THEN
      "DB_Fronius".WR.String1_DC_A := 0;
END_IF;

Da es schon zu lange her ist, weiß ich auch hier nicht mehr warum ich das so gemacht habe. Offensichtlich gibt es einen zeitweisen Fehler beim Register 19, der dann abgefangen gehört.
Der Rest geht vermutlich einfacher, ab da hab ich gerade erst angefangen zu programmieren.
Jedenfalls funktioniert es so.
Du mußt nur passenden 2 Register suchen.
 
Das Holdingregister wie liest du es aus? Also als Real oder Int? Könntest du mal einen Screenshot von deinem Modbus DB für das DC zeigen?
Int - siehe:

 
So.... da mir die Registerdaten Sucherei und Rausfinderei schon reicht, habe ich jetzt die Lösung mit Raspberry PI und Solaranzeige versucht. der Vorteil, man bekommt gleich super aufbereitete Daten in Real raus, hinzugefügt habe ich noch eine Wetterstation, die man eventuell noch in die Logik einbinden kann. Nächster Schritt ist dann die Wetterprognose von morgen mit einzufügen.
1646686943390.png
1646686980185.png
 
auf dem Raspi habe ich die Solarnzeige.de geflasht, Snap7 darauf installiert und damit die Verbindung zur SPS hergestellt. Der Raspi kommuniziert via Wlan mit dem WR und schreibt die Daten (in meinen Fall alle 30sek.) in eine Datenbank (Influx). die SPS holt sich dann die Daten von der Datenbank. Raspi hängt via LAN auf der SPS. Aber ich denke, dass es mit Wlan Router auch mit Wlan funktionieren würde. In der Solaranzeige kann man sich dann auch die Wetterstation parametrieren. Die holt sich Daten von einer Wetterseite, dort muss man sich eine API erstellen und dann in die Solaranzeige einfügen. für deinen genauen Standort musst du dir eine Standort ID erstellen. Wenn bei mir das alles jetzt mal ordentlich läuft (Warmwasseraufbereitung) dann möchte ich noch eine Wetterprognose für den nächsten Tag und Meldungen aufs Handy via whatsapp zb. Notstrom aktiv! Akku gewisse % Ladestand erreicht (Für meine Frau, damit sie nicht immer am Abend den Trockner einschaltet :-) )
 
Darf ich Fragen wie ich Daten vom Sungrow Wechselrichter (SH5.0RT) per modbus in eine S7-1200 bekomme?
Ich steh noch am Anfang. Ein paar zielführende link sind evtl auch schon mal ein Hilfe.

MartinST83 :

Solarnzeige.de kann anscheinend auch Sungrow Wechselrichter lesen.
Damit sollte deine Methode auch bei mir funktionieren?
Ist die Raspi dann also Dolmetscher?

Ohne geht es nicht ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wenn du die Solaranzeige nutzen willst, kommst du über den Raspi nicht hinweg. Den Raspi kann man dann auch gut mit der 1200er verbinden. Ich habe beides gemacht.... die 1200er per Modbus mit dem Wechselrichter und eben auch den Raspi. Vorteil über Modbus, du bekommst Live Daten in real time, was beim Gen24 zB. sehr gut und schnell geht, habe mal was von 200ms gelesen. Mit der Solaranzeige ist man da schon sehr langsam. Um die Datenbank nicht in kürzester Zeit voll zu müllen, muss man da schon auf 1min. abtastrate einstellen. Also ich rate dir per Modbus direkt auf die 1200er zu Verbinden. die 1200er muss halt die richtige Version haben. der Modbus Baustein muss glaub ich min. die Version 4.xx haben. dann geht es relativ einfach wenn man es mal heraussen hat. Kompliziert und langwierig war dann die Daten mit den Reg. Adressen zu finden und aufzubereiten. Ich kann nur vom Gen24 und 1200er reden, aber die Kommunikation zw. den beiden Geräten wird gleich sein.
 
Danke dir
wenn du die Solaranzeige nutzen wills
Will nicht, ich möchte einfach nur die Daten aus dem Wechselrichter in eine DB der CPU haben.
Dann komme ich selber weiter ….

Als Test Cpu habe ich hier eine CPU1212C V04.01.01 und eine TIA V15.1
Mit welchem Baustein kann ich testen ob ich eine Antwort bekomme.
Bei Sungrow gehen die Adressen wohl 5000 los.
Hast du evtl. ein Beispiel wo ich schon mal eine Verbindung oder Daten bekommen müsste?
 
Was vielleicht mal interessant wäre, ist eine Bausteinbibliothek mit den ganzen UDTs für die Sunspec Datensätze. Und dann ggf. noch ein paar Konvertierungsfunktionen um Geräte die keine floats anbieten darauf normieren zu können. Ich hatte das für ein Projekt mal angefangen, aber da es dann doch anders umgesetzt wurde schlummert das eben halbfertig und ohne Test bei mir rum.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
13 oder 14 auch ok
Schick mir mal deine Mail Adresse. Habe dir eine TIA14 zusammengerichtet. Du musst quasi nur noch deine IP Adresse, Port Nummer, WR ID und Reg. Adressen anpassen. Wenn dann im WR dann auch die Modbus TCP Schnittstelle aktiviert ist, dann sollte es funktionieren. Ich kenne halt deinen WR nicht.
 
Hey,
vielen Dank für den Thread, der hat meine letzten Nerven gerettet!
Das Eintragen der MB_Unit_ID hat es gebracht.
Wieso ist so ein wichtiger Parameter auch nicht von "außen" zugänglich??

Beim Kostal Plenticore Plus greife ich allerdings über Port 1502 zu (steht ja auch in den Optionen des WRs)
 
cpu 1212 v3

tia16

hallo
ich kann die Register ab 40001 aus einem Frosinus Wechselrichter lesen
beim Register 500 erhalte ich Status 8383 was muss ich an den Parametern MB_Data_ADDR, MB_Mode, MB_DATA_LEN eintragen
2 warum muss man bei den Registern ab 40001 440001 an MB_Data_ADDR schreiben
 
Zurück
Oben