Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Modbus Sentron3200 Node-Red

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Modbus Sentron3200 Node-Red

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

      hey danke das werde ich mir morgen mal anschauen, und versuchen auch auf dem Blattpapier zu dem Ergebnis zugelangen,

      wenn das klappen sollte, bin ich mal auf die Umsetzung in NodeRed gespannt 😄

      Ich melde mich morgen wieder 😉

      @ Graf, könntest du evtl. deinen rechen weg uns online zur Verfügung stellen?

      Vielen Dank

      Fizzo361

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

        @Fizzo361:

        …... bin ich mal auf die Umsetzung in NodeRed gespannt.... 😄 ` Ich bin schon seit gestern dran. Ganz grob betrachtet sieht es für den 1. Wurf gar nicht so schlecht aus. Im Moment suche ich noch eine Lösung um von Binär nach Dezimal umrechnen zu können. Ob eine allgemein brauchbare Lösung dabei heraus kommt, kann ich als Programmierlaie nicht versprechen.

        Den Rechenweg auf Papier könnte ich sicher einscannen und hochladen. Darin sehe ich jedoch wenig Sinn. Da kommt man auch selber drauf, wenn man meinen Links folgt und dann mal selber macht.

        Hier das Zwischenergebnis aus NodeRed. Ist aber alles noch im Schritt für Schritt Teststadium.

        3639_zw_ergebnis.jpg

        Edit:

        Jetzt habe ich noch den Binärwert in ein Dezimalzahl umgewandelt und auf zwei Stellen hinter dem Komma eingekürzt. Aber wie bereits geschrieben, ist dies keine finale und fertige Lösung, sondern zeigt nur, dass es machbar wäre. Um zu einem Ergebnis zu kommen habe ich an einigen Stellen Hilfsbrücken eingebaut. Somit also nur eine Teillösung, die aus den beiden Modbuswertegegister für den Messwert L1 wieder eine verständliche Dezimalzahl macht.

        Sieht dann so aus:

        3639_testergebnis.jpg

        Zur Erläuterung:

        1. string[1] = Vorzeichen

        2. string[8] = Charakteristik (Exponent)

        3. string[24] = Mantisse

        4. number = Messwert L1 in [V]

        Garf

        1 Reply Last reply Reply Quote 0
        • F
          Fizzo361 last edited by

          Hey @Graf,

          das sieht doch schon super aus 😮 :shock: 😉

          ich verzweifle immer noch etwas beim rechnenweg, aber ich bleibe am ball 😉

          kannst du evtl. doch deinen rechnenweg einscannen (wenn es nicht zuviel Aufwand ist natürlich) oder deinen NodeRed Flow mir mal

          zu schicken oder hier posten? würde mir das von dir erarbeitete gern mal anschauen.

          Vielen Dank

          Fizzo361

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

            Hi Fizzo,

            ich will dich ja nicht entmutigen, aber wenn dir der Rechenweg noch nicht klar geworden ist, dann wird dass wahrscheinlich nichts. Ich kann dir nur raten schau dir die Videos bei Youtube an, die Herren erklären es dort Schritt für Schritt. Besser geht es wirklich nicht. Das Beispiel einfach mitmachen und wenn es verstanden ist dann mit deinen Werten weitermachen. Dies alles macht aber nur Sinn, wenn Du dich mit der Javascriptprogrammierung auskennst, um dann die Funktion-Nodes von NodeRed programmieren zu können. Ich muss da leider passen.

            Ich habe mich gestern Abend noch einmal intensiver mit deinen Modbus-Zahlenwerten und meinem Flow beschäftigt, dabei sind mir folgende Dinge aufgefallen.

            1. Der ausgerechnete Wert für L1 kommt nur zustande weil ich mehrmals händisch in den Javascripts eingegriffen habe. Dies bedeutet, dass bei Eingabe der anderen Messwerte (L2, L3, L1-L2 usw.) aus deiner Exceltabelle nicht der richtige Wert ausgerechnet wird. Damit hatte ich aber auch nicht gerechnet. D.h. hier müsste programmiertechnisch noch erhebliche nachgebessert werden. Für jemanden der sich in der Javascriptprogrammierung sehr gut auskennt ist es sicher ein Kinderspiel. Ich muss da leider aus zeitgünden und fehlenden Programmierkenntnisse passen. Ich weiß nicht wie es um deine Programmierkenntnisse steht.

            2. Das Zahlenpaar für L2 kann nach meinem Verständnis nicht stimmen. Für L2 steht im zweiten Modbusregister ein negativer Wert. Die Zahlen müssten eigentlich immer ohne Vorzeichen sein.

            Mein Schmierpapier mit dem Rechenweg einzuscannen und hier hochzuladen halte ich weiterhin für sinnlos. Selbst ich komme nicht immer auf Anhieb mit den Handaufzeichnungen klar. Da ich nicht immer händisch ein ganzes DINA4 Blatt ausfüllen wollte, habe ich gestern damit begonnen den Rechenweg in deiner Exceldatei abzubilden. Mich würde nämlich noch interessieren, warum in den Modbusregister Negativwerte stehen, bzw. was dort gemäß dem erlenten Rechenweg stehen müsste.

            Garf

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

              Hallo Fizzo361,

              bist du mit deinem Projekt für die Umrechnung weiter gekommen?

              Ich musste mich auch noch einmal mit dem Thema auseinander setzen. Ich habe mir Ende letzten Jahres noch div. Wasserzähler mit Impulsausgang einbauen lassen. Jetzt stand ich vor dem Problem die Zählerstände per Modbus übertragen zu können. Im Moment reicht ein 16 bit Register noch aus, aber spätestens bei einem Zählerstand von größer 65535 wäre dann Schluß. Da die Zähler auch den Literverbrauch anzeigen, müssen ebenfalls noch drei Nachkommastellen mit verarbeitet werden. Und schon war ich wieder Mitten drin im Thema IEEE 754 und der Konvertierung von Fließpunktzahlen. Allerdings muss ich die Messdaten im 32 bit Format in die Modbus Register schreiben und nicht auslesen.

              Dies habe ich heute soweit hinbekommen. Für ganz große Zahlen auch im 64 bit Format verteilt auf vier Modbus Register. Ganz so einfach wie gedacht war es nicht, denn die Programmierung in Javascript hat schon so seine Tücken. Aber nun funktioniert es soweit erst einmal fehlerfrei.

              Heute Nachmittag habe ich mich dann noch einmal deinem Auslesproblem gewidmet. Auch hier gab es, Dank Javascript, zwei Stolperstellen zu überwinden. Für das Rückrechnen der binären Nachkommastellen konnte ich keine fertigen Funktionen finden und für das Abrunden der Fließpunktnachkommastellen auf drei Stellen ebenfalls nicht. Hierdurch bedingt ging dann noch der ganze Nachmittag für die Programmierung drauf.

              Jetzt scheint aber auch dies fehlerfrei zu funktionieren.

              Garf

              3639_flow_ieee.jpg 3639_flow_ieee_werte.jpg 3639_flow_ieee_werte2.jpg

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

                Hallo, hatte ein ähnliches Problem mit einem 16 bit signed float.

                Habe die Lösung gepostet siehe Beitrag

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

                MfG

                Jean

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

                  @Garf:

                  Jetzt scheint aber auch dies fehlerfrei zu funktionieren. `
                  Na ja, so ganz fehlerfrei hat es dann doch nicht funktioniert. Ich lese seit dem Wochenende den Außentemperaturmesswert aus einem Regler ein. Dabei musste ich leider feststellen, dass es mir bei Zahlenwerte < 1 falsche oder gar keine Werte mehr in Node-Red angezeigt wurden. Da musste ich noch einmal ran und im Programm noch so einiges nachbessern.

                  Jetzt scheint es soweit zu funktionieren.

                  Aber vielmehr würde mich mal interessieren was User Jean hier http://forum.iobroker.net/viewtopic.php?f=32&t=11518 für eine Javascript-Funktion verwendet.

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

                    Es ist so dass man in deutschsprachigen Foren nichts dazu findet.

                    Ich habe 2 Tage lang gesucht, und mindestens 16 Stunden damit verbracht, und dabei habe ich immer was übersehen.

                    Geht man auf diese Webseite steht eigentlich alles da, und auch nichts.

                    Klaus Lansdorf der Author von node-red-contrib-modbus, hat einem Teilnehmer in englisch sprachigen Forum https://github.com/biancode/node-red-co … /issues/42 geantwortet dass man den Buffer nehmen muss..

                    biancode commented on 19 Oct 2017 •

                    see Wiki and you need to know how to work with buffers ...

                    Have fun!

                    Unten steht auch wie man 2 16 bit zu einem 32 bit addiert.

                    Das ist der einzige Hinweis den ich gefunden habe

                    In diesem Forum https://groups.google.com/forum/#!topic ... t_Y7egwuio und in diesem Forum https://groups.google.com/forum/#!topic ... xl1ZrsSTVQ habe ich zuerst Hinweise gefunden.

                    Geht man auf die Github Seite von Klaus findet man die Beispiele, jedoch keins mit einem signed Float.

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

                    Das SDM630 enthält jedoch die Antwort. Man muss sich nur den code ansehen.

                    Iregendwo habe ich dann wieder den entscheidenden Link auf diese Seite gefunden

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

                    Kombiniert man alles funktioniert es auf Anhieb, man muss nur drauf kommen und das ist nicht einfach.

                    Ich habe aber noch einiges installiert ob man das braucht weis ich nicht

                    npm install node-red-contrib-binary

                    bei npm install kam ein Fehler, in einem anderen Forum habe ich dann gefunden dass man initialiesieren muur weis aber nicht mehr wo.

                    stell mal deinen Node rein damit ich ihn importieren kann, ich sehe es mir an.

                    MfG

                    Jean

                    1 Reply Last reply Reply Quote 0
                    • M
                      marclauer last edited by

                      Hallo, ich habe ein sehr ähnliches Problem. Ich will von IEEE in Dec umwandeln. Bspw IEEE = 100 sodass der Dec = 17096 ist.

                      Ich würde mich freuen, wenn mir da jmd ggf einen Quellcode schicken könnte von Node Red, da ich einfach nicht weiter komme. Wäre mega Dankbar.

                      Cheers Marc

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

                        @marclauer:

                        Ich will von IEEE in Dec umwandeln. Bspw IEEE = 100 sodass der Dec = 17096 ist.

                        I `
                        Ist das ein konkretes Beispiel, oder nur irgendwelche dahin geschriebene Zahlen.

                        Die Dezimalzahl 17096 (Integerwert) würde in IEEE-754 den Wert 01000110100001011001000000000000 ergeben.

                        Konverter: https://www.h-schmidt.net/FloatConverter/IEEE754de.html

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        995
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        6
                        25
                        6222
                        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