# Node Red REAL Datentyp verwenden.



## ralf125 (20 November 2020)

Moin,
kann mir einer erklären wie ich ein REAL Datentyp  über Modbus in Node-Red verwenden kann?
Ich möchte einen Dimm Wert setzen. (Dimmer1_rFeedback)


----------



## Thomas_v2.1 (20 November 2020)

Welchen node für Modbus verwendest du denn? Vermutlich musst du den Real aus zwei Registern zusammensetzen, wenn die Bibliothek das nicht hergibt.


----------



## ralf125 (21 November 2020)

ich benutze Modbus-Write und Modbus-Read.
bei e-Cockpit habe ich zum testen je ein Ausgang (Register 6 Bit 0)und ein Eingang (Register 32004 Bit 0)
Es kommt auch ein Wert an nur leider verstehe ich diesen nicht wirklich (0.1768.0.0 usw...)
Wandel ich in e-Cockpit REAL zu INT habe ich in Node-Red einen richtigen Wert.
ich möchte jedoch gerne einen REAL Wert (20-100) in Node-Red über Modbus an die Wago geben.


----------



## ralf125 (21 November 2020)

Ich versuche den Baustein (WagoAppBuilding.FbDimSingleButton)
den Eingang : rFeedback Mit einen REAL Wert zu steuern was auch bedingt funktioniert...
nur sobald ich einen Wert über Modbus: 
INT => REAL Auf den Eingang rFeedback gebe, wird zwar das Licht gedimmt aber der Baustein lässt sich dann über den Taster nicht mehr richtig dimmen.


----------



## Thomas_v2.1 (22 November 2020)

Meine Frage ging eher dahin, welchen Modbus-Node du in Node-Red verwendest, denn da gibt es in der Library mehrere verschiedene.
Der Node "node-red-contrib-modbustcp" der nur für Modbus-TCP ist, kann dir z.B. direkt 2 oder 4 Register in eine Gleitkommazahl Single/Double wandeln.


----------



## ralf125 (22 November 2020)

Danke mit deinem Tipp ("node-red-contrib-modbustcp") bin ich ein Stück weiter gekommen!
Ich kann nun REAL von der SPS Lesen aber Schreiben funktioniert leider noch nicht.


----------



## ralf125 (27 November 2020)

Moin, kann mir einer erklären wie ich ein REAL Datentyp von Node-Red an die Wago übergeben kann


----------



## Thomas_v2.1 (27 November 2020)

Es gibt Module wie node-red-contrib-buffer-parser, allerdings gibt dieser ein ArrayBuffer heraus, und z.B. der Node modbustcp will ein "normales" Array. Das müsstest du dann erst wieder umkopieren, dann kannst du aber gleich alles selber machen. Mit einem Funktionsblock mit folgendem Code:


```
var f = new Float32Array(1);
f[0] = msg.payload;
var w = new Uint16Array(f.buffer); 
msg.payload = Array.from(w);
return msg;
```
Muss halt sehen ob dann die Endianess für die Wago passt, evtl. geht das auch einfacher aber das kannst du als Ansatz hernehmen. Als Eingangswert gibst du dem Node deine Gleitkommazahl, und den Ausgang gibst du an den modbustcp-write weiter, den du auf Multiple Holding Register stellst.

Diese Frickelei ist eines der Dinge die ich an Node-Red nicht mag. Da schreibe ich lieber alles direkt in einem richtigen Programm, anstatt rumzuprobieren was die einzelnen Nodes denn wohl haben möchten, und dann trotzdem selber Code in Nodes schreiben zu müssen.


----------



## ralf125 (20 Februar 2021)

Moin Thomas ,
du hast mir sehr geholfen DANKE!


----------

