mit einem RevPi Compact möchte ich Werte aus einem ABB B21 Stromzähler über Modbus RTU auslesen. Testweise hatte ich dafür node-red verwendet und bekam die erwarteten Werte angezeigt.
Nun habe ich über PiCtory einen virtuellen Modbus RTU master angelegt und lese Register mit verschiedenen Datentypen aus. Der Wert der Frequenz (1 Register, unsigned short) bereitet keine Probleme. Sobald der Wert allerdings zwei oder vier Register belegt, bekomme ich ein byte-order Problem: aus [00 00 08 fc] wird bspw. [00 00 fc 08].
Im Einzelnen: In node-red bekomme ich für die Spannung in Zehntel Volt (2 Register, unsigned integer) als Antwort einen buffer mit [00 00 08 fc], also 2300.
Lese ich via "piTest -r voltage_l1_2" nur das zweite Register aus, erhalte ich: "2 Byte-Value of voltage_l1_2: 2300 dez (=08fc hex)"
Lese ich jedoch die 4 Bytes des Werts mit "piTest -r 48,4,h" aus, so erhalte ich [00 00 fc 08]. High byte und low byte sind hier also miteinander vertauscht.
Diese Reihenfolge taucht dann auch in revpimodio2 auf. Dort habe ich die Byteorder verändert (little/big), die bezieht sich aber offenbar auf die Wortfolge, nicht auf die Bytes innerhalb eines Worts.
Was mache ich falsch? (Das gleiche Problem taucht glaube ich hier einmal auf: https://revolutionpi.de/forum/viewtopic ... der#p10754)
Bin für alle Hinweise dankbar…
P.S.: Die Anleitung des ABB B21 schreibt zum Thema: "For quantities that are represented as more than 1 register, the most significant byte is found in the high byte of the first (lowest) register. The least significant byte is found in the low byte of the last (highest) register." Das deckt sich mit dem, was ich in node-red und auf der seriellen Schnittstelle sehe:
Code: Select all
> 2021/10/15 14:02:37.654294 length=8 from=40 to=47
02 03 5b 00 00 02 d7 1c ..[.....
--
< 2021/10/15 14:02:37.693937 length=8 from=45 to=52
02 03 04 00 00 08 fc ce ........