Ankündigung

Einklappen
Keine Ankündigung bisher.

Modbus - Anzahl Modbusverbindungen + Telegramme / 1 sec bzw. Telegramme / 10 sec

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Modbus - Anzahl Modbusverbindungen + Telegramme / 1 sec bzw. Telegramme / 10 sec

    Hallo zusammen,

    meine Modbus-Integration von einem SMA PV-Wechselrichter ist mittlerweile am Laufen und erhalte die korrekten Daten in den Eib-PC... meistens...
    Die Daten des Wechselrichters hole ich zyklisch via Modbus-Verbindung ab, hierbei muss ich zwischen zweierlei Daten unterscheiden
    1. Daten, welche zur Anlagensteurung genutzt werden
      • Status
      • Ausgangsleistung (Drehstrom) des Wechselrichters
      • Auf diese Signale reagiert aktuell die Hausautomatisierung. Zusätzlich wird demnächst der Batterie-Wechselrichter dazukommen, welcher hierüber ebenfalls gesteuert wird (Lade-/Entladeleistung)
    2. Daten, welche rein der Visualisierung dienen
      • DC-Leitungen
      • AC-Leitung je Phase
      • Blindleistung
      • ...
    Die Steuerdaten (1.) benötige ich alle 1-2 Sekunden, da ich hier den Anforderungen des Netzbetreibers hinsichtlich reaktionszeit der kommenden Batterie genügen muss (PV-Leistung sinkt -> Batterie darf nicht mit Netzstrom geladen werden)

    Die reinen Visu-Daten aktualisiere ich jede Minute. Hier hole ich aktuell gestaffelt jede 10 Sekunden 2-3 Werte aus dem Wechselrichter ab.

    Bei einer sekündlichen Abfrage von Modbusdaten bekomme ich alle Paar Sekunden Fehlermeldungen im Ereignisprotokoll, welche von der Modbus-Kommunikation kommen. Ich weiß nciht genau, ob der EibPC² oder der PV-WR hier nicht mit dem Datenhandling hinterher kommt. Bei Senkung auf 2 Sekunden läuft es. Leider gibt der cycle-Befehl keine 1,5sec etc. als Schleife her, um hier evtl. einen Grenzwert zu finden.

    Hat hier schon jemand erfahrungen, wie weit ich die Modbus-Kommunikation ausreizen kann? Mein Hauptproblem ist einfach dass ich die beiden Steuerdaten zeitkritisch aktualiseirt benötige um den Netzanforderungen der Batterieregelung gerecht zu werden. Und für den Batterie-WR werden ja noch Moodbus-Kommunikationen dazukommen...


    Das Programm sieht aktuell wie folgt aus (Mit den eingestellten 2 sec als Cycle läuft es problemlos, bei 1 sec als cycle ca.- alle 3-5 sec eine Fehlermeldung):

    //--------------------------------------------------------------------------------------------------------------------------------------

    //Modbus Init

    WR_PV_Handle=modbusmaster($192.168.2.225$, 502u16, 5u32, 5)

    //--------------------------------------------------------------------------------------------------------------------------------------

    if cycle(0,2) then {
    //Anlagenstatus holen
    WR_PV_Betrieb_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 40029u16, WR_PV_Betrieb, BIG_ENDIAN, BIG_ENDIAN); /* Betreibsstatus */
    WR_PV_P_DS_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30775u16, WR_PV_P_DS_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Wirkleistung DS */

    if(WR_PV_Betrieb == 295u32) then { /* Status von vor 2 Sekunde, da neue Daten noch nicht vorliegen */
    //Wechselrichter im Status "295 = In Betrieb"
    WR_PV_P_L1 = WR_PV_P_L1_Temp; /* Wirkleistung L1 */
    WR_PV_P_L2 = WR_PV_P_L2_Temp; /* Wirkleistung L2 */
    WR_PV_P_L3 = WR_PV_P_L3_Temp; /* Wirkleistung L3 */
    WR_PV_P_DS = WR_PV_P_DS_Temp; /* Wirkleistung DS */
    WR_PV_Q_L1 = WR_PV_Q_L1_Temp; /* Blindleistung L1 */
    WR_PV_Q_L2 = WR_PV_Q_L2_Temp; /* Blindleistung L2 */
    WR_PV_Q_L3 = WR_PV_Q_L3_Temp; /* Blindleistung L3 */
    WR_PV_Q_DS = WR_PV_Q_DS_Temp; /* Blindleistung DS */
    WR_PV_P_DC1 = WR_PV_P_DC1_Temp; /* Wirkleistung DC1 (Hausdach) */
    WR_PV_P_DC2 = WR_PV_P_DC2_Temp; /* Wirkleistung DC2 (Anbau) */
    WR_PV_U_ZK_mV = WR_PV_U_ZK * 10s32; /* Zwischenkreisspannung, in mV */
    } else {
    //Werte sind ungültig, da PV-WR nicht im Status "295 = In Betrieb"
    WR_PV_P_L1 = 0s32;
    WR_PV_P_L2 = 0s32;
    WR_PV_P_L3 = 0s32;
    WR_PV_P_DS = 0s32;
    WR_PV_Q_L1 = 0s32;
    WR_PV_Q_L2 = 0s32;
    WR_PV_Q_L3 = 0s32;
    WR_PV_Q_DS = 0s32;
    WR_PV_P_DC1 = 0s32;
    WR_PV_P_DC2 = 0s32;
    WR_PV_U_ZK_mV = 0s32;
    } endif;

    WR_PV_P_DCG = WR_PV_P_DC1_Temp + WR_PV_P_DC2_Temp; /* Wirkleistung DC Gesamt */

    // Wirkungsgrad Wechselrichter
    Temp_f32_1 = convert (WR_PV_P_DS, Dummy_f32);
    Temp_f32_2 = convert (WR_PV_P_DCG, Dummy_f32);
    if (Temp_f32_2 <= 0f32) then Temp_f32_2 = 8000f32 endif; /* Teilen durch 0 verhindern, 8000 = Maximalleistung PV-WR */
    WR_PV_Wirkungsgrad = 100f32 * Temp_f32_1 / Temp_f32_2;
    } endif

    //--------------------------------------------------------------------------------------------------------------------------------------

    if stime(0) then {
    //Anlagendaten holen
    WR_PV_Tagesertrag_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30535u16, WR_PV_Tagesertrag, BIG_ENDIAN, BIG_ENDIAN); /* Tagesertrag in Wh */
    WR_PV_Gesamtertrag_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30531u16, WR_PV_Gesamtertrag, BIG_ENDIAN, BIG_ENDIAN); /* Gesamtertrag in kWh */
    } endif

    if stime(10) then {
    //Anlagendaten holen
    WR_PV_P_L1_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30777u16, WR_PV_P_L1_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Wirkleistung L1 */
    WR_PV_P_L2_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30779u16, WR_PV_P_L2_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Wirkleistung L2 */
    } endif

    if stime(20) then {
    //Anlagendaten holen
    WR_PV_P_L3_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30781u16, WR_PV_P_L3_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Wirkleistung L3 */
    WR_PV_Q_L1_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30807u16, WR_PV_Q_L1_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Blindleistung L1 */
    } endif

    if stime(30) then {
    //Anlagendaten holen
    WR_PV_Q_L2_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30809u16, WR_PV_Q_L2_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Blindleistung L2 */
    WR_PV_Q_L3_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30811u16, WR_PV_Q_L3_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Blindleistung L3 */
    } endif

    if stime(40) then {
    //Anlagendaten holen
    WR_PV_Q_DS_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30805u16, WR_PV_Q_DS_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Blindleistung DS */
    WR_PV_P_DC1_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30773u16, WR_PV_P_DC1_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Wirkleistung DC1 (Hausdach) */
    } endif

    if stime(50) then {
    //Anlagendaten holen
    WR_PV_P_DC2_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30961u16, WR_PV_P_DC2_Temp, BIG_ENDIAN, BIG_ENDIAN); /* Wirkleistung DC2 (Anbau) */
    WR_PV_U_ZK_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30975u16, WR_PV_U_ZK, BIG_ENDIAN, BIG_ENDIAN); /* Zwischenkreisspannung, 2 Nachkommastellen */
    } endif

    //--------------------------------------------------------------------------------------------------------------------------------------

    Dazu die Visu (Ein wenig Nachbearbeitung der Daten fehlt noch, gerade beim Wirkungsgrad, da hier die Ausgangleistung schneller aktualisiert (alle 1-2 Sec) als die Eingangsleistung (alle 60 sec):

    Webserver2.png

    #2
    Hi,

    aktuell (bis einschließlich Firmware Version 4.105) erfolgen Modbus-Zugriffe max alle 0.5 s. Falls also zu viele Abfragen eingereiht werden, werden diese nicht mehr bearbeitet und gehen verloren, bis wieder Platz in der Warteschlange ist.

    Wenn du also sekündlich mehrere Abfragen einreihst, muss die Warteschlange überlaufen.

    Welcher Fehler steht denn genau im Ereignisprotokoll? ERR_MSGSND_MODBUS_0?

    Die Festlegung auf 0.5s zwischen zwei Abfragen ist kein festes Limit des Gerätes. Bei Http-Requests haben wir die Zeit mittlerweile reduziert, können wir für kommende Versionen auch hier umsetzen.

    Kommentar


      #3
      Hallo,

      ja genau der Fehler, und noch ein weiterer direkt im Anschluss.
      Ich werde morgen nochmal den oberen cycle von 2 auf 1 sec umstellen und dann den Log posten (heute ist der WR schon aus - Sonne Weg).

      Danke für das schnelle Feedback
      (btw ich bin noch auf der FW 4.104)

      Kommentar


        #4
        Hat leider gestern nicht mehr zeitig geklappt, hier der Auszug aus dem Log. Ich bekomme immer paarweise die beiden Fehlermeldungen.
        Bei erhöhung der Cycle-Time läuft es - wie vorausgesagt - fehlerfrei.

        Eine Erhöhung der Modbus-Kommunikationen / Sekunde würde ich sehr begrußen. Was in dem Zusammenhang schön sein würde, wäre eine Angabe dieser Werte (Zeit zwischen zwei Abfragen bzw. Abfragen / Sekunde) in der Bedienungsanleitung. Sicherlich auch bei http, etc. nicht uninteressant für die Anwender ;-)

        Auf jeden Fall allerbesten Dank für die stets schnelle und gut sehr gut nachvollziehbarer Beantwortung der Fragen hier im Forum!

        Kommentar


          #5
          Hi,

          habe es für die beiden Funktionen angepasst.
          Zitat von Latias1990 Beitrag anzeigen
          in der Bedienungsanleitung
          Zitat von Latias1990 Beitrag anzeigen
          Auf jeden Fall allerbesten Dank für die stets schnelle und gut sehr gut nachvollziehbarer Beantwortung der Fragen hier im Forum!

          Kommentar


            #6
            Mahlzeit

            Zitat von foobar0815 Beitrag anzeigen
            habe es für die beiden Funktionen angepasst.
            Zitat von Latias1990 Beitrag anzeigen
            in der Bedienungsanleitung


            Dankeschön 😀


            Zitat von foobar0815 Beitrag anzeigen
            Die Festlegung auf 0.5s zwischen zwei Abfragen ist kein festes Limit des Gerätes. Bei Http-Requests haben wir die Zeit mittlerweile reduziert, können wir für kommende Versionen auch hier umsetzen.
            Gibt es eine grobe Richtung, wann das ca. verfügbar sein könnte (also die neue FW mit der verkürzten Zeit beim Modbus)? Mein Batteriewechselrichter kommt Ende des Monats 😅

            Kommentar


              #7
              Zitat von Latias1990 Beitrag anzeigen
              Ende des Monats
              Sollte machbar sein

              Kommentar


                #8
                Wir haben neue Versionen von EibStudio und EibPC2-Firmware veröffentlicht:
                https://enertex.de/d-downloads.html#eibpc2-np

                Die Anzahl der Modbus Master-Abfragen wurde auf 10 pro Sekunde erhöht.

                Kommentar


                  #9
                  Zitat von foobar0815 Beitrag anzeigen
                  Wir haben neue Versionen von EibStudio und EibPC2-Firmware veröffentlicht:
                  https://enertex.de/d-downloads.html#eibpc2-np

                  Die Anzahl der Modbus Master-Abfragen wurde auf 10 pro Sekunde erhöht.
                  Auf der Webseite steht 4.107, download bekomme ich nur 4.106 ? Webseite falsch, Cache im Browser ? oder Webserver voll ? :-)

                  Kommentar


                    #10
                    EibStudio oder Firmware?

                    Webseite richtig, Download getestet, Zeitstempel vom Server ist auch aktuell - Cache?

                    Kommentar


                      #11
                      Zitat von foobar0815 Beitrag anzeigen
                      EibStudio oder Firmware?

                      Webseite richtig, Download getestet, Zeitstempel vom Server ist auch aktuell - Cache?
                      Sorry Firmware. Da bekomme ich nur die 4.106 ?

                      Kommentar


                        #12
                        Ja da steht 25.9.2020 4.106 und nicht 4.107 wir auf der Webseite steht.

                        Kommentar


                          #13
                          Dann passt's ja:
                          version.png

                          Kommentar


                            #14
                            Zitat von foobar0815 Beitrag anzeigen
                            neue Versionen von EibStudio und EibPC2-Firmware veröffentlicht
                            😍 die wird gleich ausprobiert, allerbesten Dank

                            Kommentar


                              #15
                              Wer die Modbus TCP-Integration lieber in der Logik statt dem Experten konfigurieren möchte:

                              Wir haben ein neues Video zum Modbus TCP-Master-Logikknoten hochgeladen.

                              https://www.youtube.com/watch?v=evwpVcf5Ats

                              Darin wird unter anderem auch gezeigt, wie mit Hilfe der Logik ein Visu-Button zur Alarmierung inkl. manuellem Rücksetzen verwendet wird.

                              Kommentar

                              Lädt...
                              X