TIA S7-1200 Modbus

Hallo Jogi,

ich habs jetzt. Die Register muss ich mit Array of Real auslesen, da es ja Float32 Werte sind.

Hier mein Beispiel.....
Screenshot (3).jpgScreenshot (4).jpg
 
Hm, das ist eine Einstellung am Wechselrichter wie die Daten ausgegeben werden. Aber warum ich jetzt "Int SF" am WR gewählt habe, das scheinbar auch aufs SM wirkt, weiß ich echt nicht mehr.
EV weil die Abfrage mit "int" schneller ist als "real"? Sonst wäre ja "real" eigentlich besser, weil dann die Umrechnung wegfällt, die ich nacher mache.
EV gibt es aber auch noch einen anderen Grund, den ich nicht mehr weiß??

Naja, egal. Hauptsache es geht! :s1:

Falls noch was Auftritt das gegen Real spricht - WR umstellen.
 
Hallo JoGi,

du sag mal, ich versuche noch die aktuellen Daten vom WR auszulesen. Das heißt Register 500-501 aktuelle Leistung und die Energiedaten ab Register 502. ID habe ich die 1 gewählt, da es ja WR 01 ist. bekomme aber keine Daten im DB. Hast du die Register auch ausgelesen und kannst mir eventuell einen Tipp geben?
Mit der LOGO bekomme ich das Register 501 ausgelesen, aber nicht mit der 1200er.
Merkwürdig.

Gruß
Torsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hatte ein ähnliches Problem mit der 1200er. Damals lag es daran, dass die CPU eine Version3.x hatte und der Adressbereich deshalb eingeschränkt war.
Abhilfe: Eine CPU der Version 4.x verwenden.

Die Treiberbausteine werden im TIA automatisch in Abhängigkeit dieser Version eingebunden.
Danach flutschte alles wie gewünscht!

Viel Erfolg!

Gerhard
 
Hallo,
ich hatte ein ähnliches Problem mit der 1200er. Damals lag es daran, dass die CPU eine Version3.x hatte und der Adressbereich deshalb eingeschränkt war.
Abhilfe: Eine CPU der Version 4.x verwenden.

Die Treiberbausteine werden im TIA automatisch in Abhängigkeit dieser Version eingebunden.
Danach flutschte alles wie gewünscht!

Viel Erfolg!

Gerhard

Hallo,

ich habe eine CPU, der Version 3.x. könnte eine Ursache sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

hänge mich mal hier mit dazu.

Möchte für einen Kunden die Anbindung Fronius Symo zu einer S7-1200 realisieren. Hab alles genau so wie in Post #6 eingestellt (allerdings array 0-39 auf real und im Fronius Modbus auf float), erhalte allerdings immer Fehler 8384 (u.a. ungültiger Exception Code empfangen). (mit array int + int-SF geht es aber genau so wenig)

Gibt es noch was zu beachten? Tipps?


LG
 
Ließt Du Smartmeter und Wechselrichter aus oder nur ein Teil?
Wie startest Du die Abfrage?
Welche Modbus Version verwendest Du?
Die CPU Thematik oberhalb hast Du vermutlich gelesen?

Hast Du unter Programmbausteine/Programmressourcen/"Name von Baustein für Abfrage"/MB_Unit_ID - auch die richtige Adresse zugeordnet? 16#01 für den Fronius.

Stopp/Start CPU nach Programmierungsänderung.
 
Ich versuche mich nur mit dem Wechselrichter (Register 440070 für Data_Len 40)
16#01 für MB_Unit_ID habe ich eingestellt.
Stopp/Start wurde durchgeführt.
Firmware ist 4.2 (S7-1214C).
Für die Abfrage habe ich momentan zum testen nur einen 0.5Hz Clock am REQ.
Was ist mit Modbus Version gemeint, bzw. wo finde ich das? Wenn Baustein Version, das wäre bei MB_CLIENT die 3.1.

Habe auch noch eine zweite Modbus Verbindung zu einem PAC3200. Die funktioniert auch ohne Probleme
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab jetzt die Anweisungen geupdatet mit MB_CLIENT auf 5.2. Und siehe da nun läuft es! Danke für die Denkanstöße. Jetzt muss ich nur wieder das PAC zum laufen bringen, denn das geht jetzt dafür nicht mehr :sad:
 
Anhand des Fehlers wundert mich das zwar, aber das Zeug hat schon ein Eigenleben.

Deine halbe Sekunde ist recht knapp. Möglicherweise gibt es da ein Problem. Schau Dir die Abfrage Laufzeiten an. Bei mir dauert die Abfrage nur vom Wechselrichter bis zu 350ms, bei einer Zykluszeit von ca. 6ms bis 24ms mit der 1515.

So wie es ausschaut, kommen sich Deine zwei Abfragen in die Quere. Ich hab mitlerweile die Abfragen serialisiert, das heißt "Busy und Done" von der ersten und zweiten Abfrage müssen 0 sein, damit die erste Abfrage startet (Flanke, nicht langes Signal), und die zweite Abfrage wird dann mit dem "Done" von der ersten gestartet! (Hoffe das ist verständlich)
Damit sollte es laufen. Ich stelle demnächst ein paar aktualisierte Daten ein, aber heute arbeite ich noch am Hardwareupdate vom Garten.
 
So, wie versprochen noch die letzten Info von der Fronius Front.

Als erstes gibt es noch einen Adressbereich, der die DC Werte der zwei PV Generatoren anzeigt. P/U/I lassen sich jeweils abfragen.
Wenn man das möchte, muss leider eine eigene Abfrage gemacht werden, da die Modbusabfrage der Simatic auf 125 Register beschränkt ist.
Braucht somit auch eine neue Connection ID (Soweit ich beim mitlesen der anderen Beiträge gesehen habe, wäre auch ein neues Beschalten der Verbindung möglich. Für mich ist es so halt leichter)

Anbei der Screenshot vom DB:

Fronius_DC_DB.jpg

Und dann hatte ich manchmal Anlauf Probleme mit der Abfrage. Ein neuerliches Starten der Abfragen mit jedem Zyklus hat nicht funktioniert. (So wie es ausschaut macht der Modbusbaustein selbst noch einiges nach dem Start, wozu er Zeit braucht).

Im Beispiel auf der ersten Seite, hab ich die Abfragen für SM und WR mit aufsteigender und abfallender Flanke gestartet. Das funktioniert grundsätzlich, da die zweite Abfrage so lange wartet bis die erste fertig ist, ist aber unter dem Gesichtspunkt einer dritten Abfrage, und einer unbekannten variierenden Zeitdauer keine saubere Lösung.

Deswegen sind die Abfragen jetzt nacheinander, und werden mit "Done" der vorhergehenden Modbus Abfrage gestartet.

Quelltext anbei:
Code:
    // Smartmeter Daten lesen
    REGION Smartmeter_lesen
        
        // MB_Client V5.1 - Achtung bei Umstellung vorher auf Test CPU versuchen und nach Update CPU Stopp - Start
        
        // Beim CPU hochfahren und/oder wenn alle Verbindungen aus sind, im Abstand von 0,5 Sekunden neuen Abfrage Zyklus starten
        IF "DB_Modbus_SM_lesen".Busy = FALSE AND "DB_Modbus_SM_lesen".Done = FALSE AND // Smartmeter - Modbus TCP nicht belegt
            "DB_Modbus_WR_lesen".Busy = FALSE AND "DB_Modbus_WR_lesen".Done = FALSE AND // Wechselrichter Modbus TCP nicht belegt
            "DB_Modbus_WR_lesen_DC".Busy = FALSE AND "DB_Modbus_WR_lesen_DC".Done = FALSE AND // Wechselrichter_DC Modbus TCP nicht belegt
            "DB_Time".Clock.Flanke."0,5Hz_Impuls" = TRUE // 0,5 Sekunden Flanke! für Start
        THEN
            "DB_Modbus_SM_lesen".Start := TRUE;
        ELSE
            "DB_Modbus_SM_lesen".Start := FALSE;
        END_IF;
        
        // MB_Client
        "MB_Fronius_SM_lesen"(REQ := "DB_Modbus_WR_lesen_DC".Done OR "DB_Modbus_SM_lesen".Start, //Takteingang MB_Client
                              DISCONNECT := "DB_Modbus_SM_lesen".Disconnect, //0=Kommunikationsverbindung zu über "Connect" eingestellten Partner herstellen
                              MB_MODE := "DB_Modbus_SM_lesen".MB_Mode, //Modbusmode: 0=Lesen
                              MB_DATA_ADDR := "DB_Modbus_SM_lesen".MB_Data_Addr, // (Modbus Funktion 3) bis zu 125 Halteregister auf der remote Adresse 0 bis 9.998 lesen
                              MB_DATA_LEN := "DB_Modbus_SM_lesen".MB_Data_Len, //Anzahl der zu lesenden Register
                              DONE => "DB_Modbus_SM_lesen".Done, //Das Bit am Ausgangsparameter DONE wird auf "1" gesetzt, sobald der letzte Modbus-Auftrag ohne Fehler ausgeführt wurde
                              BUSY => "DB_Modbus_SM_lesen".Busy, //0: Keine Modbus-Anfrage in Bearbeitung - 1: Modbus-Anfrage wird bearbeitet
                              ERROR => "DB_Modbus_SM_lesen".Error, //0: Kein Fehler - 1: Fehler aufgetreten. Die Fehlerursache wird über den Parameter STATUS angezeigt.
                              STATUS => "DB_Modbus_SM_lesen".Status, //siehe Statusliste in der Hilfe
                              MB_DATA_PTR := "DB_Modbus_SM_lesen".Holdingregister, //Zeiger auf einen Datenpuffer für die vom Modbus-Server zu empfangenden Daten
                              CONNECT := "DB_Modbus_SM_lesen".Fronius_Connect); //TCON_IP_v4: Abfrage Ziel Einstellung
        
    END_REGION

    // Wechselrichter Daten lesen
    REGION Wechselrichter_Daten_lesen
        
        "MB_Fronius_lesen"(REQ := "DB_Modbus_SM_lesen".Done,
                           DISCONNECT := "DB_Modbus_WR_lesen".Disconnect,
                           MB_MODE := "DB_Modbus_WR_lesen".MB_Mode,
                           MB_DATA_ADDR := "DB_Modbus_WR_lesen".MB_Data_Addr,
                           MB_DATA_LEN := "DB_Modbus_WR_lesen".MB_Data_Len,
                           DONE => "DB_Modbus_WR_lesen".Done,
                           BUSY => "DB_Modbus_WR_lesen".Busy,
                           ERROR => "DB_Modbus_WR_lesen".Error,
                           STATUS => "DB_Modbus_WR_lesen".Status,
                           MB_DATA_PTR := "DB_Modbus_WR_lesen".Holdingregister,
                           CONNECT := "DB_Modbus_WR_lesen".Fronius_Connect);
        
    END_REGION

    // Wechselrichter DC Daten lesen
    REGION Wechselrichter_Daten_lesen
        
        "MB_Fronius_lesen_DC"(REQ := "DB_Modbus_WR_lesen".Done,
                              DISCONNECT := "DB_Modbus_WR_lesen_DC".Disconnect,
                              MB_MODE := "DB_Modbus_WR_lesen_DC".MB_Mode,
                              MB_DATA_ADDR := "DB_Modbus_WR_lesen_DC".MB_Data_Addr,
                              MB_DATA_LEN := "DB_Modbus_WR_lesen_DC".MB_Data_Len,
                              DONE => "DB_Modbus_WR_lesen_DC".Done,
                              BUSY => "DB_Modbus_WR_lesen_DC".Busy,
                              ERROR => "DB_Modbus_WR_lesen_DC".Error,
                              STATUS => "DB_Modbus_WR_lesen_DC".Status,
                              MB_DATA_PTR := "DB_Modbus_WR_lesen_DC".Holdingregister,
                              CONNECT := "DB_Modbus_WR_lesen_DC".Fronius_Connect);
               
    END_REGION

Hoffe es hilft noch dem einen oder anderen, und somit ist das Fronius Kapitel bis zum Update mit Akku und Notstrom Anlauf erledigt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.
Erstmal vielen Dank, mit der Hilfe eurer Anleitungen habe ich es geschafft den Wechselrichter mit meiner S7-1500 "reden" zu lassen.

Jetzt hätte ich noch eine Frage:
Hat es schon jemant geschaft den Ladestand des Akkus (in meinem Fall BYD HVM 11.0) auszulesen ?

Danke im Voraus.
 
Hast Du einen Symo Hybrid oder einen GEN24?
Hast Du dir von Fronius schon die Registerlisten heruntergeladen?
Meines Wissens ist der GEN24 noch nicht ganz fertig, bzgl. der Modbus Register.
 
Zurück
Oben