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

    #16
    Vielen Dank für den Thread hier inklusive dem neuen Video. Hat mir schon sehr geholfen.
    Was bedeutet eigentlich 10 Modbus Master Abfragen pro Sekunde? Basierend auf dem Video habe ich eine Logik mit dem Modbus Logik Knoten erzeugt die alle 10s 36 Werte liest (Leseintervall) und max 8 Werte schreibt. Ich bekomme jedenfalls die gleichen Fehler
    und das mehrfach zur exakt gleichen Zeit. In der Webdarstellung werden nach ca. 1-2h nur noch die ersten 12 Werte aktualisiert. Wie sollte ggf. die Logik geändert werden, dass ich am Ende ca. 50 Werte alle 5-10s von einem Modbus Slave lesen kann.
    Auf einen kleinen Schönheitfehler möchte ich noch hinweisen. Die Adresse im Lese-/Schreibzugriff kann man nur dezimal angeben, wäre schön wenn man sie auch in hex Schreibweise angeben könnte. Und die Pfeil auf/ab Symbole, die in diesem Feld auftauchen, können nur bis 9999 zählen was zumindest in meinen Fall zu wenig ist (wenn man diesem Fall z.B. Pfeil auf anklickt, wird der schon vorhandene Wert genullt).

    Kommentar


      #17
      Hi,

      zur Anzahl der Abfragen: zwischen zwei Modbus-Abfragen wird 100 ms gewartet. Je nachdem, wie lange die Ausführung einer Anfrage dauert (also bis das Gerät geantwortet hat) können so bis zu max 10 Anfragen/Sekunde abgearbeitet werden.

      Werden mehr angefordert, zB hier aktuell knapp 50 Werte, kann es sein, dass im Laufe der zeit die Warteschlange vollläuft und deshalb keine Anforderungen mehr eingereiht werden können. Dies würde erklären, warum nach einer gewissen Zeit keine neuen Werte mehr kommen.

      Ändern kannst du an der Logik dabei nichts, außer das Abfrageintervall zu vergrößern, es wird eine einzige Warteschlange für alle Modbus-Master-Knoten (und Funktionen) verwendet.

      Was für ein Gerät sprichst du an, wenn die Adressen nicht reichen? Laut Modbus-Spezifikation (https://modbus.org/docs/Modbus_Appli...col_V1_1b3.pdf) sollte es pro Bereich (Function Code) nur max 2000 Adressen geben. Oder was hab' ich übersehen?

      Kommentar


        #18
        Danke für die superschnelle Antwort. Bei dem Gerät handelt es sich um die PDU Gude 8035. 2000 Adressen sind völlig ok. Ich werde dann mal das Abfrageintervall sukzessive erhöhen bis ich alle Werte die ich haben möchte, erhalte ohne diese Fehlermeldungen zu bekommen.

        Kommentar


          #19
          Moin,

          ich habe bei mir z.B. die Modbus-Abfragen über 1 min verteilt und stelle alle 10 sec neue ein (da ich cnith weiß wie viele Anfragen die Warteschlange maximal einreihen kann).
          Das ganze mache ich im Experten über die Abfrage der aktuellen Sekunde. So laufe ich nciht gefahr, dass die Warteschlange auf einmal überläuft (wobei ich dank der neuen Firmware auch alle 15 Werte die ich aktuell zu verschiedenen zeitslots abhole sicher auf einmal reinwerfen könnte):

          ----------------------------------------------------------------

          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_U_ZK_Status = readmodbus(WR_PV_Handle, MB_INPUT_REGISTER, 30975u16, WR_PV_U_ZK, BIG_ENDIAN, BIG_ENDIAN); /* Zwischenkreisspannung, 2 Nachkommastellen */
          } endif

          Kommentar

          Lädt...
          X