Interpretation von Modbus Antwort

OP #7006278
Lesenswert?
• ▲
▼
Hallo,

ich lese mehere Register über Modbus TCP an einen Energiezähler aus.
von Adresse 0 bis 84. Dafür Verwende ich pyModbusTCP mit der Funktion 
read_holding_registers(0, 84).
Ich erhalte folgende Antwort:
1
[3, 30433, 0, 0, 0, 0, 3, 31120, 0, 0, 3, 30803, 2, 20641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49990, 0, 2]

Im Datenblatt steht:
1
Dezimale | Adresse Hexadezimale | Adresse Anzahl Register | Beschreibung  | Einheit  | Teiler | Datentyp
2
0 | 0x0000 | 2 | Spannung Leiter gegen N U1       | V | 1000 | UInt32
3
2 | 0x0002 | 2 | Spannung Leiter gegen N U2       | V | 1000 | UInt32
4
4 | 0x0004 | 2 | Spannung Leiter gegen N U3       | V | 1000 | UInt32
5
6 | 0x0006 | 2 | Spannung Leiter gegen Leiter U12 | V | 1000 | UInt32
6
...

Es ist kein Verbraucher angeschlossen, daher die Nullen. Aber ich 
verstehe die Werte nicht.
Die ersten Werte lauten als Hex 03 76 E1 00 00 00...
E1 wären 225 das könnte, die Netzspannung 230V sein. Aber laut 
Datenblatt soll diese 2 Byte groß sein, E1 00 oder 76 E1 passt nicht. 
Und auch das Tauschen der Bytes E1 76 bringt auch nichts.
Ich hatte in einer Beschreibung zu lib gelesen das der rückgabe Wert 
sich zusammen setzt aus Anzahl und Daten...
kann mir jemand bei der Interpretation helfen.

Die 49990 sind die 50Hz...
Gast #7006283
Lesenswert?
• ▲
▼
3 * 2^16 + 30433 ergibt 227041, das durch 1000 sollte die Spannung in 
Volt sein, also 227,041V. So würd ich das interpretieren.

Leider ist bei modbus nicht wirklich definiert wie 32 Bit Werte auf 
Register abgebildet werden, angeblich kommt da auch jede permutation die 
denkbar ist in der freien Wildbahn vor.
(Firma: egal) #7006375
Lesenswert?
• ▲
▼
Fox X. schrieb:
> 03 76 E1...

rµ schrieb:
> 3 * 2^16 + 30433 ergibt 227041, das durch 1000 sollte die Spannung in
> Volt sein, also 227,041V. So würd ich das interpretieren.

Dem würde ich mich anschliesen, aber dann müsste es eher "00 03 76 E1" 
sein. Das der erste Wert 8 Bit ist und der zweite 16 Bit wäre 
merkwürdig.

- 0x76E1 ist ja dez. 30433, dass passt.
- UInt32: 0x000376E1 => 227041 / 1000 = 227.041V
Gast #7006761
Lesenswert?
• ▲
▼
Irgend W. schrieb:
> Fox X. schrieb:
>> 03 76 E1...
>
> rµ schrieb:
>> 3 * 2^16 + 30433 ergibt 227041, das durch 1000 sollte die Spannung in
>> Volt sein, also 227,041V. So würd ich das interpretieren.
>
> Dem würde ich mich anschliesen, aber dann müsste es eher "00 03 76 E1"
> sein. Das der erste Wert 8 Bit ist und der zweite 16 Bit wäre
> merkwürdig.
>
> - 0x76E1 ist ja dez. 30433, dass passt.
> - UInt32: 0x000376E1 => 227041 / 1000 = 227.041V

wenn das pymodbus als ersten wert 3 ausgibt wurde auch 3 übertragen als 
16 bit wert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren