Probleme mit Modbus Auslesen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • elDiablo
    Azubi
    • 15.10.2025
    • 7

    #1

    Probleme mit Modbus Auslesen

    Hallo alle zusammen. Ich befasse mich seit einiger Zeit mit Modbus Werten auslesen über Loxone.
    Ich habe nun aber das Problem das ich von einem Externen Gerät einen 32bit unsignes Integer Wert auslesen solle, dies ist mir aber nicht so ganz vergönnt.#
    Egal was ich ausprobiere und einstelle, er gibt mir entweder einen Falschen Wert aus, oder nur von dem niederwertigeren Wort, aber nie den richtigen gesamtwert.
    Das Gerät funktioniert jedoch, denn wenn ich den Wert über QModMaster auslese bekomme ich ihn richtig angezeigt.

    Hat irgendjemand eine Idee für mich? Anzeigen sollte er mir Aktuell eigentlich einen Wert von 141000 ca. Es fehlt also die 2 vom zweiten 16bit Wort.


    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image.png
Ansichten: 217
Größe: 61,4 KB
ID: 479032
  • Benjamin Jobst
    Lox Guru
    • 25.08.2015
    • 1211

    #2
    Grundsätzlich gibt es bei Modbus verschiedene Stolpersteine, an denen das liegen kann:

    - Register-Adressen: Manche Geräte arbeiten mit Base 0, manche mit Base 1 - dann ist die Register-Adresse um 1 verschoben. Hast du schon mal versucht, den Datenpunkt über Register 13 oder Register 15 abzufragen, ob dann der korrekte Wert kommt? Bei Fronius-Wechselrichtern ist es teils noch mehr verschoben musste ich die Erfahrung machen und keiner kann das so wirklich erklären...

    - Wort- und Byte-Reihenfolge: Wenn du den Wert mit QModMaster auslesen kannst, siehst du da die Byte-und Wort-Reihenfolge? Mit 2byte-Datenpunkten gibt es ja insgesamt 4 Hex-Ziffern - die Reihenfolge variiert je nach Hersteller. Bei Modbus Tools gibt es dann die Einstellungen "ABCD", "CDBA", "DCBA"... - in Loxone musst du das über Wortreihenfolge und Byte-Reihenfolge anpassen, welcher Haken was macht kann ich aber nicht immer nachvollziehen. Wenn du sagst, du hast schon viel ausprobiert, dann auch die verschiedenen Kombinationen dieser beiden Haken?

    - Datentyp: Dass es definiitv ein unsigned Int ist, weißt du sicher? Ich hatte schon Hersteller, die schreiben unsigned Int, aber es ist dann doch ein signed oder sogar ein float...

    - Befehl: Einige packen alle Daten in Holding Register, auch wenn es nicht beschrieben werden kann. Wenn du hier über Input Register schon Werte bekommst, dann sollte das aber denke ich passen.

    Pauschal würde ich jetzt mal ein Offset in der Register-Adresse vermuten, also der erste Vorschlag wäre hier auch mein Tipp
    MfG Benny

    Kommentar

    • elDiablo
      Azubi
      • 15.10.2025
      • 7

      #3
      Hallo, danke für die schnelle Antwort. Ja, unsigned Integer ist es mit sicherheit.
      Ich habe mir auch eine eher diletantische Lösung zusammengepflastert indem ich es als 2 16 bit Werte abfrage und diese dann über eine Formel wieder als ganzes Weitergebe (I1*65536)+I2 in dem Falle, und dann habe ich ja auch Tatsächlich den richtigen Wert. Nur sollte dies doch eigentlich die Funktion als Unsigned 32 Bit Integer machen, oder? Ich habe sowohl Wort als auch Byte folge Probiert, bei Byte Folge kommt irgendwas völlig falsches raus, und bei Wort Folge nur der erste 16 bit Wert.

      Und ich habe alle Haken schon in jeder Kombination probiert

      Kommentar

      • Benjamin Jobst
        Lox Guru
        • 25.08.2015
        • 1211

        #4
        okay das ist dann wirklich komisch, wenn du die beiden 16bit-Werte mit den Adressen 14+15 korrekt ausgelesen bekommst, dann sollte der 32bit-Wert in der Richtigen Kombination Wort- und Byte-Reihenfolge auch stimmen. Ja, das ist die Funktion des 32bit Integer. Ich habe bei Loxone noch immer keine Dokumentation gefunden, welche Wort Reihenfolge standardmäßig angewendet wird - du solltest ja High Word Low Word haben und vermutlich Big Endian. Mehr als diese beiden Haken durchprobieren fällt mir da gerade spontan auch nicht mehr ein...
        Was hast du denn für ein Gerät zum Abfragen?
        MfG Benny

        Kommentar

        • Labmaster
          Lox Guru
          • 20.01.2017
          • 2744

          #5
          Zitat von elDiablo
          Ich habe mir auch eine eher diletantische Lösung zusammengepflastert indem ich es als 2 16 bit Werte abfrage und diese dann über eine Formel wieder als ganzes Weitergebe (I1*65536)+I2 in dem Falle, und dann habe ich ja auch Tatsächlich den richtigen Wert....
          Welche beiden 16bit Register Adresse verwendest du denn hierzu ? 13 + 14 oder 14 + 15 ?
          Hast du auch nach ändern der Haken (Word und Byte Reihenfolge) jedes mal das Programm auf den MS geladen ?
          Ich weis, ne doofe Frage, aber damit hab ich mich selbst schon mal total selbst verarscht und dachte ich bekomme es einfach nicht hin ;-)

          Könntest auch mal die Modbus Beschreibung zum Gerät hier posten (Link oder Anhang) , und ebenso ein Screenshot von QModbus mit der Ansicht so wie es funktioniert.





          Zuletzt geändert von Labmaster; 13.02.2026, 14:18.

          Kommentar

          • Jan W.
            Lox Guru
            • 30.08.2015
            • 1546

            #6
            Das finde ich auch merkwürdig. Signed oder Unsigned spielt nur einen Rolle, wenn die Zahl > 0x8000 0000 wäre. Die Abfrage einer 32-Bit Zahl erfolgt immer über 2 Register, die dann kombiniert ausgewertet werden. Typisch ist der Haken bei "Wortreihenfolge" (Big-Endian, das höherwertige Wort kommt zuerst). Hattest Du als Register zur Abfrage des 32-Bit Wertes die IO-Adresse 13 verwendet? (wenn Du das "i1" mit dem höherwertigen Wort über dieses Register abfragst).

            Ansonsten kannst Du es auch mit Wireshark genau prüfen, siehe hier.
            Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
            Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
            Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
            Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
            Node-RED: IKEA Tradfri

            Kommentar

            • Bogenhaus
              LoxBus Spammer
              • 24.05.2020
              • 288

              #7
              hallo, was mir auffällt, ich verwende bei den meisten ModBus Geräten den Befehl „3 - Read Holding Register“, einzig meine Wärmepumpe liefert Input Register „4“

              der Rest wurde schon erwähnt, teilweise ist Register -1 nötig , und die korrekte Wahl von Wortreihenfolge und Bytereihenfolge



              Kommentar

              • loxGigi
                Dumb Home'r
                • 21.09.2025
                • 13

                #8
                Ich würde mal die angrenzenden Register davor und danach testweise auslesen und deren Bitmuster ansehen. Hat eines der Bytes das passende um Deinen korrekten Wert zu ergänzen? Ansonsten fallen mir noch die Einstellungen der Validierung und/oder der Wertebereichskorrektur ein. Vielleicht ist da was falsch…

                Kommentar

                • elDiablo
                  Azubi
                  • 15.10.2025
                  • 7

                  #9
                  Problem gelöst, und es war eigentlich richtig dumm würde ich sagen.
                  Habe mich darauf versteift das es eine bestimmte Reihenfolge braucht, aber ohne Anhaken von Big oder Little Endian funktioniert es. Wobei ich einfach nicht verstehe wieso, denn wenn ich nichts Anhake müsste er doch eine Voreingestellte Reihenfolge nehmen welche einem der beiden Entspricht, oder nicht?

                  Kommentar

                  • Benjamin Jobst
                    Lox Guru
                    • 25.08.2015
                    • 1211

                    #10
                    Sehr schön! Das meinte ich mit Alle Kombinationen ausprobieren...

                    Wenn man weiß, was die Haken machen, ist es gar nicht so kompliziert: Du hast byte-Werte (Hex), immer paarweise gruppiert als 16-bit-Wort. Dabei kann sowohl die Reihenfolge der beiden Worte untereinander getauscht werden als auch die beiden Bytes je Wort. Daraus ergeben sich 4 verschiedene Kombinationen:
                    ab cd
                    dc ba
                    cd ba
                    ba cd​

                    Die Haken Wort-Reihenfolge und Byte-Reihenfolge tauschen also jeweils die beiden Worte oder die Bytes je Wort, sodass man damit alle 4 Kombinationen darstellen kann. Standardmäßig ist bei Modbus Big Endian in der Byte-Reihenfolge, d.h. das höherwertige Byte steht hinten. Ebenso ist bei der Word Reihenfolge Big Endian üblich.

                    Loxone verwendet meine ich Big Endian bei der Byte-Reihenfolge, aber Little Endian bei der Word-Reihenfolge. Wenn du also keinen Haken setzt, wird diese Standardreihenfolge verwendet. Aber so richtig dokumentiert ist das nicht und ich probiere auch regelmäßig herum, bis der Wert passt...
                    MfG Benny

                    Kommentar

                    • Grestorn
                      MS Profi
                      • 11.07.2022
                      • 621

                      #11
                      Naja, die eine Einstellung heißt "Byte-Reihenfolge" und die andere "Wort-Reihenfolge". Das ist schon ziemlich eindeutig.

                      Kommentar

                      Lädt...