TIA S7-1200 Modbus

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo MartinST83. In Betrag 55 ist fast alles drinnen was Du brauchst. Weiter vorne galub ich komplett, nur etwas anders.
Wenn Du mit den SCL Zeilen (hoffe das geht mit 1200er) und dem Baustein nicht zurecht kommst, detailiert nachfragen.
Vielen Dank dafür! Ich habe diese Code Zeilen jetzt übernommen, den DB angelegt aber habe noch eine Unklarheit..
In der letzten Zeile: CONNECT := "DB_MB_Client_PV".Fronius_Connect);

Dieses Connect finde ich im MB_Client Baustein nicht? Das einzige wäre die CONNECT_ID. Somit erkennt er diese Zeile immer als Fehler.
Was mache ich falsch?

Vielen Dank für die Unterstützung!


// Smartmeter abfragen
#MB_CLIENT_PV(REQ := "DB_MB_Client_PV".Done OR "DB_MB_Client_PV".Start,
DISCONNECT := "DB_MB_Client_PV".Disconnect,
MB_MODE := "DB_MB_Client_PV".MB_Mode,
MB_DATA_ADDR := "DB_MB_Client_PV".MB_Data_Addr_SM,
MB_DATA_LEN := "DB_MB_Client_PV".MB_Data_Len_SM,
DONE => "DB_MB_Client_PV".Done,
BUSY => "DB_MB_Client_PV".Busy,
ERROR => "DB_MB_Client_PV".Error,
STATUS => "DB_MB_Client_PV".Status,
MB_DATA_PTR := "DB_MB_Client_PV".Holdingregister,
CONNECT := "DB_MB_Client_PV".Fronius_Connect);
 
Hallo MartinST83. In Betrag 55 ist fast alles drinnen was Du brauchst. Weiter vorne galub ich komplett, nur etwas anders.
Wenn Du mit den SCL Zeilen (hoffe das geht mit 1200er) und dem Baustein nicht zurecht kommst, detailiert nachfragen.
Dazu kommt noch, dass ich eine 6ES7 214-1BG31-0XB0 CPU verwende... da ist bei Firmware Version 3.0 schluss.
Hier habe ich gelesen, dass man aber min. 4.0 oder 4.1 benötigt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
CONNECT_ID heißt der Eingang bei der MB_CLIENT Baustein-Version für S7-1200 Firmware V2.x bis 3.x, ab Firmware V4.x heißt der Eingang CONNECT. Siehe die wirklich sehr ausführliche TIA-Hilfe zu MB_CLIENT

Welche SPS mit welcher Firmwareversion hast Du? Welche TIA-Version?

(PS: ich habe die Versions-Formulierung präzisiert)

Harald
 
CONNECT_ID heißt der Eingang bei der Baustein-Version 2.x bis 3.x des Bausteins MB_CLIENT, ab Baustein-Version 4.x heißt der Eingang CONNECT. Siehe die wirklich sehr ausführliche TIA-Hilfe zu MB_CLIENT

Welche SPS mit welcher Firmwareversion hast Du? Welche TIA-Version?

Harald
Servus Harald,

CPU 6ES7 214-1BG31-0XB0 mit Firmware 3.0. Anscheinend kann man diese aber nicht updaten?
TIA16 UP4
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dazu kommt noch, dass ich eine 6ES7 214-1BG31-0XB0 CPU verwende... da ist bei Firmware Version 3.0 schluss.
Hier habe ich gelesen, dass man aber min. 4.0 oder 4.1 benötigt?
Das hängt nach meiner Erfahrung mit den Anzusprechenden Adressbereichen zusammen.
Ich habe mich mal eine Woche damit beschäftigt und seit dem verwende ich nur noch die Version 4.x
und seit dem AEG (auf einmal gehts)
Viel Erfolg!
 
Code:
// PV Daten lesen und aufbereiten
REGION PV
   
    // Daten lesen
    REGION PV_Modbus_lesen
       
        // Beim CPU hochfahren und/oder wenn alle Verbindungen aus sind, im Abstand von 2 Sekunden neuen Abfrage Zyklus starten
        IF "DB_MB_Client_PV".Busy = FALSE AND "DB_MB_Client_PV".Done = FALSE AND "DB_Time".Clock.Flanke."0,5Hz_Impuls" = TRUE THEN// Smartmeter - Modbus TCP nicht belegt und 2 Sekunden Flanke! für Start
            "DB_MB_Client_PV".Start := TRUE;
        ELSE
            "DB_MB_Client_PV".Start := FALSE;
        END_IF;
       
        // MB_Client_SM_Daten lesen!
        IF "DB_MB_Client_PV".Schritt = 1 THEN
           
            // Subnetadress vom Smartmeter setzen!
            "MB_CLIENT_PV".MB_Unit_ID := "DB_MB_Client_PV".MB_Unit_ID_SM;
           
            // Smartmeter abfragen
            "MB_CLIENT_PV"(REQ := "DB_MB_Client_PV".Done OR "DB_MB_Client_PV".Start,
                           DISCONNECT := "DB_MB_Client_PV".Disconnect,
                           MB_MODE := "DB_MB_Client_PV".MB_Mode,
                           MB_DATA_ADDR := "DB_MB_Client_PV".MB_Data_Addr_SM,
                           MB_DATA_LEN := "DB_MB_Client_PV".MB_Data_Len_SM,
                           DONE => "DB_MB_Client_PV".Done,
                           BUSY => "DB_MB_Client_PV".Busy,
                           ERROR => "DB_MB_Client_PV".Error,
                           STATUS => "DB_MB_Client_PV".Status,
                           MB_DATA_PTR := "DB_MB_Client_PV".Holdingregister,
                           CONNECT := "DB_MB_Client_PV".Fronius_Connect);
           
            // Smartmeter Lesen - Zyklus Counter
            REGION Zyklus_Counter_SM
               
                IF "DB_MB_Client_PV".Busy = 1 THEN
                    "DB_MB_Client_PV".Cyclus_Count_SM := "DB_MB_Client_PV".Cyclus_Count_SM + 1;
                ELSE
                    "DB_MB_Client_PV".Cyclus_Count_SM := 0;
                END_IF;
               
                IF "DB_MB_Client_PV".Cyclus_Count_SM > "DB_MB_Client_PV".Cyclus_max_SM THEN
                    "DB_MB_Client_PV".Cyclus_max_SM := "DB_MB_Client_PV".Cyclus_Count_SM;
                END_IF;
               
            END_REGION
           
            // Smartmeter Daten aufbereiten
            REGION SM_Daten
               
                // Wenn das Datenlesen vom Smartmeter fertig ist, Daten aufbereiten
                IF "DB_MB_Client_PV".Done = TRUE THEN
                        ;// hier die Werte auf den Zielspeicher übergeben
                END_IF;
               
            END_REGION
           
            // nächster Schritt in der Abfrage
            IF "DB_MB_Client_PV".Done = TRUE THEN
                "DB_MB_Client_PV".Schritt := 2;
            END_IF;
           
            // MB_Client_WR_Daten lesen!  
        ELSIF "DB_MB_Client_PV".Schritt = 2 THEN
           
            // Subnetadress vom Wechselrichter setzen!
            "MB_CLIENT_PV".MB_Unit_ID := "DB_MB_Client_PV".MB_Unit_ID_WR;
           
            // Wechselrichter abfragen
            "MB_CLIENT_PV"(REQ := "DB_MB_Client_PV".Done OR "DB_MB_Client_PV".Start,
                           DISCONNECT := "DB_MB_Client_PV".Disconnect,
                           MB_MODE := "DB_MB_Client_PV".MB_Mode,
                           MB_DATA_ADDR := "DB_MB_Client_PV".MB_Data_Addr_WR,
                           MB_DATA_LEN := "DB_MB_Client_PV".MB_Data_Len_WR,
                           DONE => "DB_MB_Client_PV".Done,
                           BUSY => "DB_MB_Client_PV".Busy,
                           ERROR => "DB_MB_Client_PV".Error,
                           STATUS => "DB_MB_Client_PV".Status,
                           MB_DATA_PTR := "DB_MB_Client_PV".Holdingregister,
                           CONNECT := "DB_MB_Client_PV".Fronius_Connect);
           
            // Wechselrichter lesen - Zyklus Counter
            REGION Zyklus_Counter_WR
               
                IF "DB_MB_Client_PV".Busy = 1 THEN
                    "DB_MB_Client_PV".Cyclus_Count_WR := "DB_MB_Client_PV".Cyclus_Count_WR + 1;
                ELSE
                    "DB_MB_Client_PV".Cyclus_Count_WR := 0;
                END_IF;
               
                IF "DB_MB_Client_PV".Cyclus_Count_WR > "DB_MB_Client_PV".Cyclus_max_WR THEN
                    "DB_MB_Client_PV".Cyclus_max_WR := "DB_MB_Client_PV".Cyclus_Count_WR;
                END_IF;
               
            END_REGION
           
            // Wenn neue Daten vom Wechselrichter kommen, diese aufbereiten
            REGION WR_Daten
               
                // Wechselrichter Daten aufbereiten
                IF "DB_MB_Client_PV".Done = TRUE THEN
                ;// hier die Werte auf den Zielspeicher übergeben
                END_IF;
            END_REGION
           
            // nächster Schritt in der Abfrage
            IF "DB_MB_Client_PV".Done = TRUE THEN
                "DB_MB_Client_PV".Schritt := 3;
            END_IF;
           
            // MB_Client_WR_DC_Daten lesen!
        ELSIF "DB_MB_Client_PV".Schritt = 3 THEN
                       
            // Subnetadress vom Wechselrichter setzen!
            "MB_CLIENT_PV".MB_Unit_ID := "DB_MB_Client_PV".MB_Unit_ID_WR;
           
            // Wechselrichter DC abfragen
            "MB_CLIENT_PV"(REQ := "DB_MB_Client_PV".Done OR "DB_MB_Client_PV".Start,
                           DISCONNECT := "DB_MB_Client_PV".Disconnect,
                           MB_MODE := "DB_MB_Client_PV".MB_Mode,
                           MB_DATA_ADDR := "DB_MB_Client_PV".MB_Data_Addr_WR_DC,
                           MB_DATA_LEN := "DB_MB_Client_PV".MB_Data_Len_WR_DC,
                           DONE => "DB_MB_Client_PV".Done,
                           BUSY => "DB_MB_Client_PV".Busy,
                           ERROR => "DB_MB_Client_PV".Error,
                           STATUS => "DB_MB_Client_PV".Status,
                           MB_DATA_PTR := "DB_MB_Client_PV".Holdingregister,
                           CONNECT := "DB_MB_Client_PV".Fronius_Connect);

            // Wechselrichter DC lesen - Zyklus Counter
            REGION Zyklus_Counter_WR_DC
               
                IF "DB_MB_Client_PV".Busy = 1 THEN
                    "DB_MB_Client_PV".Cyclus_Count_WR_DC := "DB_MB_Client_PV".Cyclus_Count_WR_DC + 1;
                ELSE
                    "DB_MB_Client_PV".Cyclus_Count_WR_DC := 0;
                END_IF;
               
                IF "DB_MB_Client_PV".Cyclus_Count_WR_DC > "DB_MB_Client_PV".Cyclus_max_WR_DC THEN
                    "DB_MB_Client_PV".Cyclus_max_WR_DC := "DB_MB_Client_PV".Cyclus_Count_WR_DC;
                END_IF;
               
            END_REGION
           
            // Wenn neue DC_Daten vom Wechselrichter kommen, diese aufbereiten
            REGION WR_DC_Daten
               
                IF "DB_MB_Client_PV".Done = TRUE THEN
                    ;// hier die Werte auf den Zielspeicher übergeben
                END_IF;
               
            END_REGION
           
            // wieder zum ersten Schritt in der Abfrage
            IF "DB_MB_Client_PV".Done = TRUE THEN
                "DB_MB_Client_PV".Schritt := 1;
            END_IF;
           
        END_IF;
       
    END_REGION

END_REGION
Hallo JoGi,

Ich habe nun deinen Code und DB kopiert und es läuft zumindest mal etwas... der erste MB Baustein der den Smartmeter auslesen soll. meldet mir im Status immer 7004, 7006, 7006, 7004 .. usw. Es kommt aber nie das DONE Bit, somit startet auch der zweite MB Baustein für den WR nicht.
das Holdingregister ist auch leer... Offensichtlich mache ich etwas falsch, weiß aber nicht was. Gibt es eine Möglichkeit wie ich die Kommunikation zum WR prüfen kann? Als IP Adresse habe ich die W - Lan Adresse vom WR eingegeben. am WR selbst habe ich Modbus TCP Master aktiviert. Port 502 WR ID 1

Über eine kleine Hilfe würde ich sehr dankbar sein.

Grüße,

Martin

1644917089469.png
 
Das hängt nach meiner Erfahrung mit den Anzusprechenden Adressbereichen zusammen.
Ich habe mich mal eine Woche damit beschäftigt und seit dem verwende ich nur noch die Version 4.x
und seit dem AEG (auf einmal gehts)
Viel Erfolg!
Verwende jetzt auch die V4.xxx FB läuft soweit. Verwende den Code von JoGi aus dem Beitrag #55. Mach aber noch etwas falsch, da mein Holdingregister leer ist.... bin mir auch nicht sicher ob ich über W-Lan so auf den Umrichter komme..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Done Bit wirst Du nicht sehen, da es nur einen Zyklus ansteht. Du kannst aber auf den Schrittzähler schauen, ob er durchzählt.
Hast Du die Werte der Holdingregister auf eine andere Variable übergeben - siehe Anmerkung im Code? Allerdings sollte man da schon werte sehen.

Es geht über WLAN genauso wie über LAN. Welchen Wechselrichter?
 
Ok verstehe. ich verwende den Fronius Gen24 WR. Nein, übergebe die Registerwerte noch nicht auf andere Variablen.
Also werde ich den zweiten MB Baustein so und so nie abarbeiten sehen?
 
Hast Du Beitrag 55 verwendet oder lt. den vorherigen Beiträgen?
Lt. Beitrag 55 ist es ein Modbusbaustein, der 3x anders beschalten wird durch den SCL Code.
Hast Du die Registerwerte an den GEN24 angepasst? Die angeführten Register betreffen den Symo. Keine Ahnung ob der GEN24 gleich ist. Vor allem die PV Panel Werte würde ich kontrollieren ob die Register nicht woanders liegen = // Wechselrichter DC abfragen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achso ok.. ja, habe Beitrag 55 1:1 nachgebaut... diese Art von Kommunikation ist leider totales Neuland für mich.. speziell wenn es um Register von einem Wechselrichter geht... muss ich erstmal rausfinden wo ich diese finde... Aber vielen Dank erstmal, dass du überhaupt diesen Code teilst.
Somit sollte Beitrag 55 auch für den Gen24 funktionieren, Voraussetzung ich trage die richtige Registeradressen ein?
 
Achso ok.. ja, habe Beitrag 55 1:1 nachgebaut... diese Art von Kommunikation ist leider totales Neuland für mich.. speziell wenn es um Register von einem Wechselrichter geht... muss ich erstmal rausfinden wo ich diese finde... Aber vielen Dank erstmal, dass du überhaupt diesen Code teilst.
Somit sollte Beitrag 55 auch für den Gen24 funktionieren, Voraussetzung ich trage die richtige Registeradressen ein?
Ja, geht auch für den GEN24. Die IDs des Smartmeter und Wechselrichter müssen natürlich auch passen, und ich vermute Du hast auch das neue Smartmeter. Das sollte gleich sein wie das alte, da es ja für beide Wechselrichter geht.

Am besten Du startest nur mit den Werten vom Smartmeter (Schritt 1), da das meines Erachtens auch für den GEN24 gleich funktionieren muss wie für den Symo. Programmiere es um, das Du Schritt 1 nicht verläßt, und wenn das funktioniert weiter zum nächsten. Hast Du den Wechselrichter richtig eingestellt (Float/Int+sf)? Mein Beispiel ist für int + sf.
Die Registeradressen sollten auf der Fronius Homepage zu finden sein.
 
Danke dir. so werde ich es versuchen. WR habe ich auf Int+sf eingestellt. Wenn Schritt 1 dann funktioniert, dann müssten Werte in das Holdingregister array rein geschrieben werden, oder?
 
So wie es aussieht kommen hier ein paar brauchbare Daten daher.. konnte schon ein paar identifizieren. hab jetzt mal auf float / real umgestellt...
Jetzt habe ich noch zwei Fragen...
1. gibt es hier eine Liste mit den Beschreibungen der einzelnen Daten? (hab im Netz hier und da etwas gefunden..... aber sollte es hier viel. schon eine aufbereitete Liste geben, wäre das sehr cool)
2. weiß jemand, wie ich an Daten von meinem BYD komme? Denke da wird es auch eine Registeradresse geben?

Vielen Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Smartmeter Register:

Der BYD hat sicher eine eigene Modbus Subnet ID und vermutlich jede Menge Daten. Am besten bei Fronius fragen.
Wäre auch nett, wenn Du deine Erkenntnisse hier dann weitergibst bzgl. BYD und GEN24
 
Zurück
Oben