Zwei Modbus Register als ein Hex-Wert in Gleitkomma
Verfasst: Freitag 5. Juni 2020, 21:27
Hallo,
folgendes Aufgabe:
Auslesen zweier Modbusregister in Liste, Darstellung der Registerinhalte als Gleitkommazahl (Ergebnis wird im Bereich 11.547,000 +- 5% liegen).
Zwei Drittel der Aufgabe kann ich umsetzen. Nur habe ich ein Problem in der Mitte.
Auslesen:
Das Auslesen ergibt eine int-Liste "regs" mit z.B.: [17977, 26788]
Debug ergibt: Rx [D2 25 00 00 00 07 01] 03 04 46 39 68 A4 --> 0x 463968A4 --> 11866,1601562 (check mit https://www.h-schmidt.net/FloatConverter/IEEE754.html ) --> zu erwartender Wert, --> OK
Ich muss also die Int-Werte 17977 in hex 0x4639 und 26788 in hex 0x68A4 wandeln.
Das ist auch nicht das Problem mit:
Die Frage ist, wie bekomme ich die beiden Werte aus der int-Liste in einen hex-Wert der Form 0x xxxxxxxx oder in einen String der From 'xxxxxxxx'? Komme trotz intensiver google Suche und try&error nicht weiter. Ich denke aber, dass das nicht wirklich schwierig umzusetzen ist. Wahrscheinlich habe ich nur nicht den Richtigen Suchbegriff gefunden.
Als Test habe ich mal die den String "regs_hex" definiert um die Aufgabe weiter zu verfolgen:
Ausgabe: 11866.16015625 --> i.O.
Für eine Lösungsvorschlag des mittleren Teils der Aufgabe wäre ich dankbar.
Danke im Voraus.
folgendes Aufgabe:
Auslesen zweier Modbusregister in Liste, Darstellung der Registerinhalte als Gleitkommazahl (Ergebnis wird im Bereich 11.547,000 +- 5% liegen).
Zwei Drittel der Aufgabe kann ich umsetzen. Nur habe ich ein Problem in der Mitte.
Auslesen:
Code: Alles auswählen
regs = c.read_holding_registers(19000,2)
Debug ergibt: Rx [D2 25 00 00 00 07 01] 03 04 46 39 68 A4 --> 0x 463968A4 --> 11866,1601562 (check mit https://www.h-schmidt.net/FloatConverter/IEEE754.html ) --> zu erwartender Wert, --> OK
Ich muss also die Int-Werte 17977 in hex 0x4639 und 26788 in hex 0x68A4 wandeln.
Das ist auch nicht das Problem mit:
Code: Alles auswählen
hex (regs[0]) # 0x4639
hex (regs[1]) # 0x68A4
Als Test habe ich mal die den String "regs_hex" definiert um die Aufgabe weiter zu verfolgen:
Code: Alles auswählen
regs_hex = '463968A4'
print(struct.unpack('!f', bytes.fromhex(regs_hex))[0])
Für eine Lösungsvorschlag des mittleren Teils der Aufgabe wäre ich dankbar.
Danke im Voraus.