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

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    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

      Bei mir scheint es zu funktionieren. Du solltest nur das Debug-Node eingeschaltet lassen, welches uns die Meldungen zu dem Function swap-Node zeigt.

      Bitte den Inhalt des swap-Nodes posten.

      Ich habe folgende Eintragungen vorgenommen:

      msg.payload.buffer.swap16();
      
      msg.payload = msg.payload.buffer.readFloatBE(0,1,2,3);
      
      return msg;
      
      1 Reply Last reply Reply Quote 0
      • J
        JXA last edited by

        Habe die Änderung vorgenommen…
        5860_swap2.png
        5860_swap_function.png

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

          Erstaunlich, dass es funktioniert, Normalerweise hättest Du das BE durch LE ersetzen müssen. Bisher jedenfalls hast Du immer Littel Endian ausgelesen.

          Hier mal die Grundlagen dazu: https://de.wikipedia.org/wiki/Byte-Reihenfolge

          Lt. Bedienungsanleitung von deinem X-320 lässt sich die Byte-Reihenfolge einstellen:

          ` > Big Endian

          32-bit data is treated as two individual 16-bit words using IEEE 754 floating point format. Floating

          point format is used for sensor, pulse counter, analog, and frequency data as well as for setting

          output pulse duration.

          If the checkbox is set, the X-320™ will use big-endian architecture, and the most significant 16-bit

          word (big end) is sent first. If the box is cleared, then the X-320™ will use little-endian architecture,

          and the least significant word (little end) is sent first. The default setting for this box is

          unchecked,

          use little-endian.

          For example, in little-endian format, a 32-bit floating point number represented by '1234 ABCD' is

          sent as 'ABCD 1234'. `

          Um Big Endian auslesen zu können verwendest Du die Funktion msg.payload.buffer.readFloatBE(0,1,2,3) und für Littel Endian die Funktion msg.payload.buffer.readFloatLE(0,1,2,3).

          Nicht, dass wir uns hier ständig im Kreis drehen. Vielleicht im X-320 Big Endian einstellen und dann mal schauen was in den Modbusregistern 1 und 2 steht. Es könnte dir das Auslesen evtl. vereinfachen.

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

            Hallo Graf,

            danke für den Hinweis!

            Hatte ich mit keinem Gedanken mehr daran gedacht…

            Und jetzt funktioniert es!!!!

            Danke für DEINE (Eure) Hilfe!
            5860_working.png

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

              Hier noch die Funktion…...
              5860_swap_working.png

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

                das ist ja Wahnsinn,

                was ihr hier zu dem Thema abliefert, ich bin begeistert, nun versuche ich mich

                damit auch zu befassen, bin jedoch wirklich auf diesem Gebiet ein Noob 😉

                Ich komme schon gar nicht so weit wie ihr…

                wenn ich die 32bit function von euch übernehme also:

                msg.payload.buffer.readFloatLE(0,1.2,3)

                erhalte ich folgende fehlermeldung:

                TypeError: Cannot read property 'readFloatLE' of undefined

                ist das eine zusätzliche Lib die ich übersehen habe, oder warum nimmt er meinem

                Code nicht an?

                Verwende einen Raspi mit Node Red drauf.

                Vielen Dank

                Pitu61

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

                  @pitu61:

                  msg.payload.buffer.readFloatLE(0,1.2,3) `

                  du hast ein Punkt zwischen 1.2 stehen es muss (0,1,2,3) sein und nicht vergessen die Funktion unten anzuknÜpfen damit du an die Buffer kommst.

                  Ober wird kein Buffer ausgegeben.

                  MfG

                  Jean

                  1 Reply Last reply Reply Quote 0
                  • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            498
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

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