TIA Lo-Word + Hi-Word in eine Real Zahl konvertieren Swap Befehl?

ModbusDani1995

Level-2
Beiträge
73
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bin gerade dabei REAL Werte über Modbus RTU von einem Flexim FLUXUS F502 auszulesen.

Wenn ich den REAL Wert bei Startadresse 40001 (Siemens Halteregister lesen) + 1000 für Kanal 1 + 112 (Volumenstrom) + Offset 1 2Wörter auslese bekomm irgendwelche zahlen daher. Siehe unten am Bild.
Wenn ich den REAL Wert bei Startadresse 40001 (Siemens Halteregister lesen) + 1000 für Kanal 1 + 112 (Volumenstrom) + Offset 2 2Wörter auslese bekomm ich einen vernünftigen aber nicht den exakten Wert vom Gerät.

Ich lese ja zuerst das Low und dann das High Word aus.
Eigentlich sollte ja das High Wort Rechts und das Low Word links in der Zahl stehen.
Wie bekomm ich da dann einen vernünftigen 32 Bit Real Wert raus?
Funktioniert das mit dem Swap Befehl?

1723131593486.png
1723131620649.png

1723132523366.png
1723132255419.png
 
Glaube ich nicht. Im Modbus-Word ist das H-Byte links, bei dem komischen Gerät kommt das L-Word aber zuerst/links.

Vielleicht wird diese Frage noch beantwortet, dann wissen wir es:

Wenn ich die Werte als Doppelwort auslese bekomm ich folgendes daher:

16#AF7D_448D sollten +87324968,6 sein
16#2CC9_4907 sollten +2116292,92 sein
 
Zuviel Werbung?
-> Hier kostenlos registrieren
16#AF7D_448D sollten +87324968,6 sein
16#2CC9_4907 sollten +2116292,92 sein
Die Hex-Werte und Real-Werte passen gar nicht zusammen. Wurden die falschen Register gelesen?

87324968.6 = 16#4C_A6_8F_25
2116292,92 = 16#4A_01_2B_14

Es sieht allerdings sehr danach aus, als ob nur H-Word und L-Word getauscht werden müssen. Das würde ergeben:
16#448DAF7D = 1133.484
16#49072CC9 = 553676.56
 
Die Hex-Werte und Real-Werte passen gar nicht zusammen. Wurden die falschen Register gelesen?

87324968.6 = 16#4C_A6_8F_25
2116292,92 = 16#4A_01_2B_14

Es sieht allerdings sehr danach aus, als ob nur H-Word und L-Word getauscht werden müssen. Das würde ergeben:
16#448DAF7D = 1133.484
16#49072CC9 = 553676.56
Hab die Geräte vertauscht:

2116292,92 = 16#2B13_4A01
87324968.6 = 16#8E7B_47AA

Mit dem Code funktioniert jetzt alles:

"12_ModbusDatenDB".ModbusMaster1[1].%W0 := "12_ModbusDatenDB".ModbusMaster1[0].%W1;
"12_ModbusDatenDB".ModbusMaster1[1].%W1 := "12_ModbusDatenDB".ModbusMaster1[0].%W0;

"12_ModbusDatenDB".Test := DWORD_TO_REAL("12_ModbusDatenDB".ModbusMaster1[1]);

Sind diese zwei Zeilen die einfachste Lösung oder kann man die Wörter im Doppelwort auch anders vertauschen?
 
Zurück
Oben