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

      Hallo wendy2702,

      deine Frage ist durchaus nachvollziehbar, wenn man ioBroker verwendet.

      Mache ich aber nicht. Ich bin in diesem Forum was ioBroker betrifft nur lesend unterwegs.

      Angemledet habe ich mich hier dann letztendlich um mich mit anderen Usern in Bezug auf die Node-Red Programmierung auszutauschen.

      Wie User Jean bereits schon geschrieben hat im deutschsprachigen Raum findet man nicht nur zur Modbus-Node Anwendung nicht allzuviel. Auch zu Node-Red im Allgemeinen ist leider kaum etwas zu finden.

      @Jean

      Ich habe meinen Fehler gefunden. Ich hatte einfach das Function-Node am falschen Knoten angebunden. Auf dem Bild mit dem Response Node kann man dies gut erkennen. Am oberen Knoten werden keine Buffer Werte zur Verfügung gestellt werden. Den unteren Knoten mit dem Funktion-Node verbunden und schon werden die Messwerte angezeigt und können weiterverarbeitet werden. Einen weiteren Teiler musste ich jetzt nicht einsetzen. Aber vielleicht liegt es auch daran, dass ich keinen Integerwert, sondern einen Floatwert einlesen. Dies hat jedoch zur Folge, dass mir zuviele Nachkommastellen angezeigt werden. Die habe ich dann mit einer Aufrundenfunktion, auf eine Stelle hinter dem Komma, korrigiert.

      Dies sieht dann jetzt so aus:

      msg.payload = Originalwert ; msg.payload2 = aufgeundeter Wert
      3639_pic5.jpg

      Tausend Dank für den Supertipp und so einfach kann es manchmal sein. Waaaahnsinn. :lol:

      Ich hoffe, wir lesen wieder voneinander.

      Gruß

      Garf

      Edit:

      Da haben wir wohl alle parallel geschrieben. :mrgreen:

      Super Anleitung von dir, damit hätte ich meinen Fehler sicher deutlich schneller gefunden.

      Die Instrumente sehen absolut spitzenmäßig aus, so etwas hätte ich wohl auch sehr gerne. 😮

      Deshalb frage ich mal ganz schüchtern, wie macht man denn so etwas in Node-Red. Bisher habe ich so etwas nur im Scargill's Tech Blog gesehen.

      1 Reply Last reply Reply Quote 0
      • wendy2702
        wendy2702 last edited by

        Ok.

        Dann weiterhin viel Erfolg!

        Gesendet von iPhone mit Tapatalk Pro

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

          Hier einmal wie ich die Instrumente gemacht habe.

          habe alles in einen Rar ordner gepackt.

          es müssen Java scripte in den Node-Red ordner kopiert werden.

          um einen einfachen Zugriff zu haben habe ich einen share angelegt.

          MfG

          Jean

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

            @atelmblcd:

            Hier einmal wie ich die Instrumente gemacht habe. `

            Tausend Dank dafür, irgendwie fällt heute wohl für mich Weihnachten und Ostern auf einen Tag.

            Du scheinst dich ja sehr sehr gut mit Node-Red auszukennen.

            Garf

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

              Sorry falsches Rar angehängt dies ist das richtige

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

                Geht leider nicht durch weil zu gross

                sende mir per PN deine Mailadresse, sende dir dann einen Downloadlink.

                MfG

                Jean

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

                  wenn du apache laufen hast dann findest du wenn alles installiert ist unter myjs Steeelseries-Canvas-Master html demos

                  Unter Rgraph sind auch demos.

                  Viel Spaas

                  du must eine Template zur Visualisierung nehmen und keine gauge.

                  die 2 ersten Zeilen geben dem Weg zu Messinstrument an.

                  Siehe mein smarty flow.

                  Deine Lösung würde mich interessieren, es ich sicher Code dabei den ich gebrauchen kann, alleine kann man nicht alles wissen.

                  MfG

                  Jean

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

                    Ist angekommen. Vielen Dank dafür.

                    Sieht aber jetzt nicht danach aus, als dass ich damit in 10 Minuten durch wäre. Ich vermute mal, da werde ich wohl noch einige Fragen zu haben.

                    Ich bringe jetzt erst einmal das Thema mit dem Aulesen der Messwerte zu Ende, visulisiere diese dann mit den Standard-Dashboard-Nodes und wage mich dann an die Profidarstellung.

                    Ich hoffe, Du stehst mir da dann wieder ein wenig mit Rat und Tat zur Seite.

                    Meinst Du die Lösung für das Aufrunden? So etwas bringt Javascript ja leider von Haus aus nicht mit.

                    Sieht so aus:

                    ! // Funktion Runden auf drei Nachkommastellen 10=1, 100=2, 1000=3,…
                    ! function extround(zahl,n_stelle) {
                    ! zahl = (Math.round(zahl * n_stelle) / n_stelle);
                    ! return zahl;
                    ! }
                    ! msg.payload = msg.payload.buffer.readFloatBE(0,1,2,3);
                    ! msg.payload2 = extround(msg.payload, 1000);
                    ! return msg;

                    Gruß

                    Garf

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

                      nein nicht für aufrunden sondern wie du versucht hast den signed float in Dezimal umzurechnen.

                      Runden geht viel einfacher

                      Einfach in der Gauge {{value | number:1}} eingeben 1 steht für 1 Nachkommastelle 2 für 2 Nachkommastellen usw.

                      Die Instrumente sind in 5 minuten reinkopiert dann kannst du damit loslegen.

                      einfach im Terminal die Befehle eingeben copy paste.

                      MfG

                      Jean

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

                        @wendy2702:

                        Die Instrumente sehen gut aus.

                        Kannst du die Widgets als Export einstellen?

                        Gesendet von iPhone mit Tapatalk Pro `

                        ich nehme an daas die Instrumente auch bei dem ioBroker funktionieren würden.

                        Es sind nur Java scripte. Und man kann sie auch in html Seiten anzeigen

                        Node-red verwendet Node JS als Basis.

                        Sende mir per PN deinen Mailadresse.

                        Ich sende die scripte dann zu.

                        MfG

                        Jean

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

                          Vielen Dank für die hilfreiche Info!

                          Ich habe ein ganz ähnliches Problem einen Sensor über Modbus TCP auszulesen.

                          Der Wert wird als 32-bit float ausgegeben. Ich habe den Sketch angepasst,

                          komme aber nicht zum gewünschten Ergebnis.

                          Wie zu sehen ist, hat Sensor-1 einen Wert von 21,7 °C

                          Über einen Hinweis würde ich mich sehr freuen!

                          Beschreibung und Screenshoot habe ich beigefügt.
                          5860_modbus_info.png
                          5860_true_readout.png
                          5860_modbus_setting.png
                          5860_main.png

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

                            Mich würde interessieren was in der Funktion steht.

                            füge mal ein Modbus response ein damit man die Werte sieht.

                            am besten den Node expotieren und hier einstellen so kann ich ihn importieren und mir ansehen.

                            Wenn ich Schwierigkeiten habe Modbus auszulesen oder verwirrende daten bekomme nutze ich zur überprüfung die gratis Software modbus doctor

                            http://www.kscada.com/modbusdoctor

                            Die Webseite ist auf französich aber Software kann man umstellen.

                            ist es überhaupt ein signed float und nicht ein normaler float?

                            ich habe nichts in der Anleitung vom x320 gefunden dass es ein signed float ist.

                            auf der Seite 38 steht dass man von little auf big Endian umschaltung kann mittels einer Checkbox

                            https://www.controlbyweb.com/x320/x-320 … manual.pdf

                            Prüfe das mal mit dem Modbusdoctor

                            mfG

                            Jean

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

                              Hallo JXA,

                              ich habe ein ähnliches Problem und erhalte unerklärliche werte, jedoch bastel ich noch ein bisschen eigenständig rum.

                              Sollte ich zu einer Lösung kommen, poste ich meinen Funktion code - selbstverständich.

                              könntest du den Code deiner Funktion mit uns teilen?

                              dann können wir dir evtl. besser helfen.

                              Gruß

                              Pitu61

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

                                Guten Abend Jean,

                                vielen Dank für deine Hilfe.

                                Die Software "Modbus Doctor" ist sehr hilfreich und läuft auch noch ohne Installation! SUPER!

                                Das Auslesen der Register funktioniert mit der Software ohne Probleme und ja es ist kein Int. sondern 32Bit Float.

                                So wie es aussieht ist mein Problem die "richtige Übersetzung" der Werte im Array also die Funktion!

                                Der X320 ist momentan Little Endian eingestellt.

                                Hier der aktuelle Code:

                                [{"id":"44292168.ff1788","type":"modbus-read","z":"bd65fff.1e8bb8","name":"X320_Read","topic":"","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"272","quantity":"2","rate":"1","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"2b52835b.4790cc","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":120,"y":272.66663360595703,"wires":[[],["579e2814.4277a"]]},{"id":"579e2814.4277a","type":"function","z":"bd65fff.1e8bb8","name":" 32bit","func":"msg.payload=msg.payload.buffer.readInt32LE;\nreturn msg;\n","outputs":1,"noerr":0,"x":286,"y":281.3333435058594,"wires":[["3b5d9dcf.0f7372"]]},{"id":"3b5d9dcf.0f7372","type":"debug","z":"bd65fff.1e8bb8","name":"","active":true,"console":"false","complete":"false","x":480.5,"y":279,"wires":[]},{"id":"2b52835b.4790cc","type":"modbus-client","z":"","name":"X320","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"tcpHost":"192.168.0.48","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectTimeout":"2000"}]

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

                                  Sorry aber ich kann keine Screenshots hochladen

                                  "Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt."

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

                                    teste mal diesen Flow dieser müsste funktionieren laut

                                    https://nodejs.org/api/buffer.html#buff … t_noassert

                                    buf.readFloatBE(offset[, noAssert])

                                    buf.readFloatLE(offset[, noAssert])

                                    Added in: v0.11.15

                                    offset <integer>Number of bytes to skip before starting to read. Must satisfy: 0 <= offset <= buf.length - 4.

                                    noAssert <boolean>Skip offset validation? Default: false

                                    Returns: <number>Reads a 32-bit float from buf at the specified offset with specified endian format (readFloatBE() returns big endian, readFloatLE() returns little endian).

                                    Setting noAssert to true allows offset to be beyond the end of buf, but the resulting behavior is undefined.

                                    (0,1,2,3) liest die Register aus dem Buffer jeweils 8 bit.

                                    [{"id":"6f92b84.0ef3ac8","type":"modbus-read","z":"7d4de8d.1542118","name":"X320_Read","topic":"","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"272","quantity":"2","rate":"1","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"741a094c.1340b8","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":330,"y":260,"wires":[[],["3de8b140.13ce2e","cca0874c.f3d76"]]},{"id":"3de8b140.13ce2e","type":"function","z":"7d4de8d.1542118","name":" 32bit","func":"msg.payload=msg.payload.buffer.readFloatLE(0,1,2,3);\nreturn msg;\n","outputs":1,"noerr":0,"x":510,"y":400,"wires":[["f6427835.8241b"]]},{"id":"f6427835.8241b","type":"debug","z":"7d4de8d.1542118","name":"","active":true,"console":"false","complete":"false","x":690,"y":540,"wires":[]},{"id":"cca0874c.f3d76","type":"modbus-response","z":"7d4de8d.1542118","name":"","registerShowMax":20,"x":600,"y":260,"wires":[]},{"id":"741a094c.1340b8","type":"modbus-client","z":"","name":"X320","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"tcpHost":"192.168.0.48","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectTimeout":"2000"}]</number></boolean></integer>

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

                                      Hallo Jean,

                                      vielen Dank für deinen Flow,

                                      Über den Modbus Response werden die Daten jetzt angezeigt.

                                      Die Ausgabe ist jedoch noch nicht korrekt.

                                      Ausgegeben wird aktuell : -1.7142884334298003e-13

                                      Gruß

                                      Bastian

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

                                        Ich denke das ich den Grund für die fehlerhafte Anzeige gefunden habe.

                                        Die Funktion nutzt 4 x 8 bit (0,1,2,3)

                                        "32-bit sensor values are read from 16-bit register pairs. Consequently, senors addresses and registers

                                        must be even numbers"

                                        Es werden 2 Register ausgelesen die jedoch je 16 bit haben .

                                        Gibt es eine Möglichkeit die Funktion anzupassen?

                                        Gruß

                                        Bastian

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

                                          @JXA:

                                          Ich denke das ich den Grund für die fehlerhafte Anzeige gefunden habe.

                                          Die Funktion nutzt 4 x 8 bit (0,1,2,3)

                                          "32-bit sensor values are read from 16-bit register pairs. Consequently, senors addresses and registers

                                          must be even numbers"

                                          Es werden 2 Register ausgelesen die jedoch je 16 bit haben . `

                                          genau wie du richtig erkannt hast

                                          wenn du die ersten 16 Bit einlesen willst dann (0,1)

                                          für die zweiten 16 bit (2,3)

                                          Es gibt noch interessante Gratis Werkzeuge

                                          ist schon 10 Jahre alt ob es mit win 10 läuft weis ich nicht

                                          http://store.chipkin.com/products/tools … us-scanner

                                          oder hier ein Modbus Simulator

                                          https://sourceforge.net/projects/modrssim

                                          in diesem Forum wird genau dein Problem besprochen

                                          https://groups.google.com/forum/#!topic ... t_Y7egwuio

                                          Csongor Varga hat die Antwort gepostet und einen Link reingeschrieben wo man einen Beispiel Flow laden kann.

                                          https://flows.nodered.org/flow/75a4715f ... 92abc493e4

                                          unten auf dem Forum hat Michael Hogan folgendes gepostet.

                                          I have done a fair amount of this for interfacing to some brushless motor control stuff.

                                          I initially used the Typed Array classes for my stuff, but then reverted to using the slightly older Buffer functions like buffer.readFloatLE() and so forth. Here's one reference:

                                          https://millermedeiros.github.io/mdoc/e ... ffers.html

                                          The reason that I did that is that we are using a Raspberry Pi as an edge gateway. While you can upgrade the Pi to use more recent versions of node.js and node-red, I found that it was dicey enough that it was better to use the versions that get installed with default Raspbian. Those versions do not support the typed array classes .. but they do support the various buffer.read* methods.

                                          At any rate, figured I'd put that out there for whatever it might be worth to folks converting raw bytes to typed values.

                                          Wenn du alte Software Versionen auf dem Raspi hast und die nicht geupdatet sind kann es sein dass die Array Methode nicht funzt.

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

                                            Guten Abend Jean,

                                            vielen Dank für die umfangreichen Informationen!

                                            Du "steckst" ja richtig in der Materie! WoW!

                                            Ich werde die Programme zeitnah testen, zuvor muss ich mir jedoch erst ein Win Rechner aufsetzen.

                                            Node Red läuft bei mir auf einem Debian Rechner, und (noch) nicht auf einem Raspi.

                                            15 Feb 19:47:25 - [info] Node-RED version: v0.17.5

                                            15 Feb 19:47:25 - [info] Node.js version: v9.5.0

                                            15 Feb 19:47:25 - [info] Linux 4.9.0-5-amd64 x64 LE

                                            15 Feb 19:47:27 - [info] Loading palette nodes

                                            15 Feb 19:47:37 - [info] Dashboard version 2.8.0 started at /ui

                                            Mit dem geposteten Sketch komme ich aktuell nicht wirklich weiter….

                                            Habe nochmal die beiden Register[272] für die Temperatur ausgelesen und über Modbus Response angezeigt.

                                            Ausgabe: 32771,16806 diese 32bit float Zahl sollte einer Temperatur von 20,8xx°C entsprechen

                                            Gruß

                                            Bastian

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            911
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            67
                                            10716
                                            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