NEWS
Modbus Sentron3200 Node-Red
-
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
-
…... 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.
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:
Zur Erläuterung:
1. string[1] = Vorzeichen
2. string[8] = Charakteristik (Exponent)
3. string[24] = Mantisse
4. number = Messwert L1 in [V]
Garf
-
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
-
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
-
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
-
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
-
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.
-
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
-
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
-
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