Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. 16 bit signed Float einlesen über den Node-red Modbus

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    16 bit signed Float einlesen über den Node-red Modbus

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      Garf last edited by

      @atelmblcd:

      Ober wird kein Buffer ausgegeben. `
      Donnerwetter, gute erkannt. Ist mir gar nicht so direkt aufgeallen.

      Ich habe mich vielmehr gefragt was will er überhaupt wo und in welchem Format auslesen. Integer- oder Flioatwert, Big Endian oder Littel Endian usw.

      Aber vielleicht ist es ja schon genau dieser kleine Tippfehler gewesen.

      Aber schön, dass du hier wieder etwas gepostet hast, ich hatte deine Wortmeldungen in den letzten Tagen schon vermisst.

      1 Reply Last reply Reply Quote 0
      • A
        atelmblcd last edited by

        Ich bin am Hausbauen, und die Handwerker haben diese Woche wieder angefangen zu arbeiten, da kann ich nicht immer online sein.

        Ich habe noch eine Methode gefunden.

        return [{ payload: msg.payload.buffer.readFloatBE(0,4)},

        { payload: msg.payload.buffer.readFloatBE(0,4) }];

        Habe mal den Modbussimulator hergenommen

        https://sourceforge.net/projects/modrssim/

        Die Wert habe ich aus dem Screenshot Buffer 0002 41a2

        und in die Kolonne +0 41a2 und in der Kolonne +1 0002 in den Simulator eingegeben,

        dann kommt genau der Wert 20,25….. heraus

        Die Klammer ()wird anders ausgewertet bei den Floats wenn ich richtg liege.

        (0,4) 0 ist wo ich anfange zu lesen und 4 die Anzahl

        lese ich z.b 3Stück 32 bit Floats ein und ich will das das 3te 32 bit Float haben so schreibe ich (8,4)

        wenn ich nur ein Float habe kann ich die Klammer sogar leer lassen.

        gebe ich in der Kolonne +0 0002 und in der Kolonne +1 41a2 in den Simulator kommt -2.6157436202396862e-18

        Was komisch ist das es egal ist ob ich LE oder BE angebe die Werte sind immer gleich.

        Ist es ein Fehler im Simulator?

        Man müsste testen ob das obengenannte Beispiel an dem x320 funktioniert.

        Es ist alles so schlecht dokumentiert so dass es nur mit try und error geht, ich hasse das.

        MfG

        Jean

        1 Reply Last reply Reply Quote 0
        • J
          JXA last edited by

          Guten Abend!

          Ich habe noch 2 Fragen

          zum Modbus Read

          Kann man mit einer FC3 Abfrage auch Register abfragen die nicht zusammenhängen?

          z.B 272-278,528-530…... oder muss man jeden Block einzeln abfragen...

          Zur Datenanzeige.

          Wie kann ich die Anzahl der angezeigten Stellen einstellen?
          5860_feuchtigkeit.png
          5860_readout.png

          1 Reply Last reply Reply Quote 0
          • A
            atelmblcd last edited by

            Ja kann man, die Werte sollten jedoch nicht zu weit auseinanderliegen weil man sonst sehr grosse Arrays hat.

            bis 50 dürfte kein Problem sein.

            Es gibt Modbus Hardware wo ein Limit gesetzt ist, ab einen gewissen Anzahl werden falsche Werte ausgegeben, so steht es jedenfalls in der Anleitung von Klaus ( Authos der Modbus Software) und das sagt er auch in seinem Youtube Video.

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

            Man muss nur die richtige Array oder Buffer Nummer angeben.

            MfG

            Jean

            1 Reply Last reply Reply Quote 0
            • A
              atelmblcd last edited by

              Um die stellen in der Gauge zu limitieren einfach

              folgendes in der Gauge eingeben

              {{value | number:1}}

              eingeben 1 steht für 1 Nachkommastelle 2 für 2 Nachkommastellen usw.

              1 Reply Last reply Reply Quote 0
              • J
                JXA last edited by

                Hallo Jean,

                danke für deine Antwort!

                Ich lese diesen Wert als 32Bit float direkt aus.

                In der Hardware kann ich die Anzahl der Stellen nicht begrenzen.

                1 Reply Last reply Reply Quote 0
                • J
                  JXA last edited by

                  Hallo atelmblcd,

                  perfect!!

                  Danke!

                  1 Reply Last reply Reply Quote 0
                  • A
                    atelmblcd last edited by

                    du ziehst ja die gauge in den float, mit einem Doppelklick kannst du die gauge konfigurieren.

                    es ist das 5 Feld was du abändern must

                    Value Format

                    kopiere die Zeile die ich gepostet habe einfach rein.

                    Wenn du bessere Anzeigen haben willst du sende mir per PN deine Emailadresse ich sende dir dann einen Downloadlink mit den Instrumenten und einer Anleitung wie es installiert wird.

                    Siehe 1 Seite Instrument.pdf was ich eingestellt habe um zu sehen welche Instrumente du dann zur Verfügung hast.

                    MfG

                    jean
                    5726_canvas.png
                    5726_canvas2.png

                    1 Reply Last reply Reply Quote 0
                    • J
                      JXA last edited by

                      Hallo Jean,

                      deine Anzeigen sehen richtig "Cool" aus!

                      Gefällt mir!

                      Hast du meine PN erhalten?

                      Danke!

                      1 Reply Last reply Reply Quote 0
                      • J
                        JXA last edited by

                        Ich habe noch eine Frage

                        zum Modbus Read

                        ****Kann man mit einer FC3 Abfrage auch Register abfragen die nicht zusammenhängen?

                        z.B 272-278,528-530…... oder muss man jeden Block einzeln abfragen..****.

                        Danke!

                        1 Reply Last reply Reply Quote 0
                        • A
                          atelmblcd last edited by

                          Wenn du z.b von 272-278 auslesen willst dann gibst du 272 als Adresse an und 6 als Quantity.

                          Leider ist keine Mail als private Nachricht eingetroffen.

                          mfG

                          Jean

                          1 Reply Last reply Reply Quote 0
                          • J
                            JXA last edited by

                            Hallo Jean,

                            soweit ist es klar, wenn ich jedoch noch zusetzlich die Register 528-530 einlesen möchte.

                            Also 272-278 + 528-530 mit einem FC Read ist das möglich?

                            Im FC Setup kann ich ja nur eine Range angeben. Als A-B.

                            Ich probiere es mit der PN noch einmal!

                            Danke!

                            1 Reply Last reply Reply Quote 0
                            • G
                              Garf last edited by

                              @JXA:

                              ****Kann man mit einer FC3 Abfrage auch Register abfragen die nicht zusammenhängen?

                              z.B 272-278,528-530…... oder muss man jeden Block einzeln abfragen..****. `
                              Mit etwas Programmieraufwand könnte ich mir vorstellen, dass man es über das Flex Getter https://www.youtube.com/watch?v=G4p-Af1olo8 , https://flows.nodered.org/node/node-red-contrib-modbus hinbekommen könnte. Aber übersichtlicher wird es dadurch sicher nicht. Ich würde für jeden Registerbereich ein eigenes Read-Node und das Response Node verwenden.

                              1 Reply Last reply Reply Quote 0
                              • J
                                JXA last edited by

                                Hallo "Graf",

                                danke für deine Antwort!

                                Sicher mit einer einzelnen Abfrage für jeden Block bleibt es übersichtlicher.

                                Ich frage mich halt wie es mit dem timing aussieht.

                                Wenn ich für 1 Device 3x FC03 ausführen muss und dann noch die anderen FC1 ;FC2; FC5.

                                Dachte daher 1x Read FC03 -> alle Register

                                1x Read FC01 -> alle Register

                                usw

                                Hat jemand Erfahrung ab das sauber läuft? (Dauerbetrieb)

                                Danke.

                                1 Reply Last reply Reply Quote 0
                                • G
                                  Garf last edited by

                                  Ich verstehe immer noch nicht so ganz worauf Du hinaus willst. Jeden Anfrage im Modbusfeld wird nacheinander abgearbeitet. Und dass was Du abfragen willst ist in einer Größenordnung, die man als überschaubar klein bezeichnen kann. Überfordern kann man solche Bussysteme jedoch schnell mit zu klein eingestellten Abtastraten. Darüber sollte man sich im Vorfeld Gedanken machen. Eine Raum- oder Außentemperatur wird sich im Gegensatz zu Betriebszuständen kaum schlagartig verändern. Wenn ich z.B. Temperaturwerte in einem Trend erfasse, so lasse ich nur alle 10-15 Minuten einen Wert aufzeichnen.

                                  Für den Fall, dass Du immer zum gleichen Zeitpunkt z.B. alle FC03 für eine Device auslesen möchtest, so nimmst Du das Modbus Node Flex Getter und schaltest dem ein Funnction und ein Inject Node vor. Wird aber zeitlich kaum anders sein wie mit dem Modbus Read-Node, denn nach einem Deploy werden die Nodes ja zeitgleich neu gestartet.

                                  Garf

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    pitu61 last edited by

                                    Hallo Forum, nochmals vielen Dank, empfange nun die richtigen Werte 😉

                                    ` > Die Klammer ()wird anders ausgewertet bei den Floats wenn ich richtg liege.

                                    (0,4) 0 ist wo ich anfange zu lesen und 4 die Anzahl

                                    lese ich z.b 3Stück 32 bit Floats ein und ich will das das 3te 32 bit Float haben so schreibe ich (8,4)

                                    wenn ich nur ein Float habe kann ich die Klammer sogar leer lassen. `

                                    jedoch möchte ich noch weitere Register auslesen und habe damit so meine Probleme…

                                    für:

                                    msg.payload = msg.payload.buffer.readFloatBE(0,2);
                                    

                                    erhalte ich die Spannung von L1

                                    für:

                                    msg.payload = msg.payload.buffer.readFloatBE(8,4);
                                    

                                    erhalte ich die Spannung von L2

                                    und nun verstehe ich von "atelmblcd" noch nicht den Auslese Algorithmus.

                                    Warum …readFloatBE(8,4); also die 8 verstehe ich nicht. :roll:

                                    welche Parameter benötige ich nun für das auslesen von L3

                                    hier mal ein aktueller ausschnitt:
                                    5869_testbild.jpg
                                    aus den beiden letzten Werten im Response müsste sch ja L3 ermitteln lassen.

                                    Hoffe ihr könnt mir da nochmal auf die Sprunge helfen

                                    Vielen Dank

                                    Pitu61

                                    1 Reply Last reply Reply Quote 0
                                    • G
                                      Garf last edited by

                                      @pitu61:

                                      Hoffe ihr könnt mir da nochmal auf die Sprunge helfen `
                                      In deinem Screenshot kann man erkennen, dass Du sechs Modbusregister ausliest. Im Buffer werden diese als 8bit Werte dargestellt und zwar in Summe zwölf Stück.

                                      Nach der bisherigen Schreibweise verwendet man für:

                                      das erste Modbus-Register-Pärchen: readFloatBE(0,1,2,3) –--> vermutlich L1

                                      das zweite Modbus-Register-Pärchen: readFloatBE(4,5,6,7) ----> vermutlich L2

                                      das dritte Modbus-Register-Pärchen: readFloatBE(8,9,10,11) ----> vermutlich L3

                                      In der neuen Schreibweise:

                                      readFloatBE(0,4) ----> vermutlich L1

                                      readFloatBE(4,4) ----> vermutlich L2

                                      readFloatBE(8,4) ----> vermutlich L3

                                      So jedenfalls habe ich es verstanden.

                                      Garf

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        atelmblcd last edited by

                                        Genau so wie Garf es beschrieben hat habe ich es verstanden.

                                        Siehe dir auf youtube folgendes Video an.

                                        https://www.youtube.com/watch?v=eXP0gxD … FNbJOW_-gH

                                        interessant ist 0:58 dort erklärt Klaus Landsdorf es. Und er ist der Author der Auslesesoftware.

                                        er liest 50 Register gleichzeitig aus und filtert die benötigte Ausgabe mit z.b (8,4)

                                        es ist sehr gut auf dem Youtube Video zu erkennen.

                                        https://flows.nodered.org/node/node-red-contrib-modbus

                                        Alle Beispiele die Klaus auf youtube zeigt kannst du hier runterladen.

                                        https://github.com/biancode/node-red-contrib-modbus

                                        MfG

                                        Jean

                                        1 Reply Last reply Reply Quote 0
                                        • J
                                          JXA last edited by

                                          @Garf:

                                          Ich verstehe immer noch nicht so ganz worauf Du hinaus willst. Jeden Anfrage im Modbusfeld wird nacheinander abgearbeitet. Und dass was Du abfragen willst ist in einer Größenordnung, die man als überschaubar klein bezeichnen kann. Überfordern kann man solche Bussysteme jedoch schnell mit zu klein eingestellten Abtastraten. Darüber sollte man sich im Vorfeld Gedanken machen. Eine Raum- oder Außentemperatur wird sich im Gegensatz zu Betriebszuständen kaum schlagartig verändern. Wenn ich z.B. Temperaturwerte in einem Trend erfasse, so lasse ich nur alle 10-15 Minuten einen Wert aufzeichnen.

                                          Für den Fall, dass Du immer zum gleichen Zeitpunkt z.B. alle FC03 für eine Device auslesen möchtest, so nimmst Du das Modbus Node Flex Getter und schaltest dem ein Funnction und ein Inject Node vor. Wird aber zeitlich kaum anders sein wie mit dem Modbus Read-Node, denn nach einem Deploy werden die Nodes ja zeitgleich neu gestartet.

                                          Garf `
                                          Hallo Graf,

                                          ich werde die Sache austesten, wie es am stabilsten läuft.

                                          Danke.

                                          Gruß

                                          JXA

                                          1 Reply Last reply Reply Quote 0
                                          • G
                                            Garf last edited by

                                            Hi Jean,

                                            und schon wieder ist es passiert. Deinen Links zu Klaus Landsdorf gefolgt, gepaart mit meiner Neugier habe ich mir von Klaus Landsdorf ein Beispielflow in mein Testsystem (Windowslaptop) kopiert. Ich wusste schon als die Nodes nicht auf dem Bildschirm auftauchten, jetzt wird es blöd. Und was soll ich dir sagen, Node-Red war abgestürzt und ließ sich auch nicht mehr wegen der fehlerbehafteten Json-Datei neu starten. Abhilfe brachte hier nur die Datei flows_xxxxxx.json (xxx = Platzhalter) im Unterordner .node-red zu löschen. Nun startete Node-Red zwar wieder, aber alle Flows waren natürlich weg. Den Ordnerinhalt hatte ich letztmalig in der 1.KW 2018 gesichert. Somit war nun die Arbeit der letzen 4-6 Wochen mit einmal weg.

                                            Dann fiel mir allerdings noch die Datei mit der Bezeichnung .flows_xxxxxx.json.backup vom 18.02.2018 ins Auge. Da ich eh nichts mehr zu verlieren hatte, habe ich der Backupdatei dann die Dateibezeichnung der gelöschten Datei gegeben. Und tatsächlich alles wieder da.

                                            Ab sofort werde ich regelmäßig, und immer bevor ich mir einen Flow von irgendwoher ins System kopiere, den Inhalt des .node-red Ordners sichern.

                                            Mir ist dies nun schon mindestens das zweite Mal passiert, dabei einmal sogar auf einem laufenden System (RevPi). Seitdem nutze ich ausschließlich meinen Windowslaptop als Testsystem. Aber auch hier sammeln sich über Zeit wichtige Dinge an, die man noch nicht in das Wirksystem übertragen hat

                                            Garf

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            694
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            67
                                            10719
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo