MPM3PM per Modbus: bekomme Register nicht entpackt

Begonnen von MichaelO, 29 Februar 2024, 16:56:57

Vorheriges Thema - Nächstes Thema

MichaelO

Moin zusammen,
ich versuche seit einiger Zeit, den Wert "Active_Power_Total" aus meinem MPM3PM per Modbus auszulesen. Ich habs geschafft für die Register h2 "Import_Active_kWh_Total" und h4 "Active_Power_Total", da kommen plausible Werte, die auch im Display des Zählers angezeigt werden.

Ab Register h26 soll der Wert "Active_Power_Total" kommen. Laut Anleitung des Zählers sind es 2 Register, 4 Bytes, signed 32. Ich hab jetzt schon mit allen möglichen unpack- und revReg-Werten rumgespielt, bekomme aber nur Murks zurück.

Kann mir wer sagen, mit welchen Parametern ich diesen Wert entpackt bekomme?

Danke
Michael

Aurel_B

Kennst du QModMaster (https://sourceforge.net/projects/qmodmaster/)? Ich würde es zuerst mit diesem ausprobieren ob du damit einen vernünftigen Wert erhältst. Wenn ja, welche Einstellungen brauchst du dort (müsste eigentlich "Dec", 2 Register, Signed und Little Endian (Einstellungen) sein)?

MichaelO

Danke für den Tip, leider hab ich keinen Windows PC. Ich hab z. B. für die importierte Energiemenge folgendes im Device:

(laut Hersteller Register 0x0002, 2 Register, 4 Byte, unsigned32):
dev-type-I_R2u-len 2
dev-type-I_R2u-revRegs 0
dev-type-I_R2u-unpack N

obj-h2-expr $val / 100
obj-h2-format %.2f
obj-h2-len 2
obj-h2-poll 1
obj-h2-reading Import_Active_kWh_Total
obj-h2-type I_R2u

Das passt, ebenso für das Register für die exportierte Energiemenge 0x0004.

Das Register für die aktuelle Leistung ist laut Hersteller 0x0026, 2 Register, 4 Byte, signed32. Hier hab ich bislang das Lesen versucht mit:
dev-type-R2s-len 2
dev-type-R2s-revRegs 0
dev-type-R2s-unpack L

obj-h26-len 2
obj-h26-poll 0
obj-h26-reading Active_Power_Total
obj-h26-type R2s

Das unpack-Argument ist vom letzten Versuch. Es kommen Werte, aber die springen und sind nicht plausibel. Am Zähler selbst ist der Wert im Display stabil. Ich kriege es nicht hin.

Aurel_B

Ich denke, da stimmt etwas mit der Byte-Reihenfolge nicht. Ich würde mal >l versuchen für unpack. Komisch ist, dass du das Register 2 mit dem Datentyp "N" ausliest. Was passiert, wenn du dort "L" verwendest? (siehe perl Doku für pack)