Janitza 604 pro Modbus Register auslesen Codesys

Enkarta

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgende Thematik:

Ich verwende ein Janitza 604 pro und möchte per Modbus TCP die Spannung L1-N auslesen. Das ist das Register 1317 und 1318 (DWord)

Wenn ich das per ModbusPoll mache, bekomme ich die "Rohdaten" raus, stelle es danach um auf "32-bit Float - Big endian", danach habe ich meine gewünschten 230 V als Wert da stehen.

Im Screenshot sind die Words [0] und [1] die betreffenden zwei.

Wenn ich das mit meiner Wago 750-8212 auslesen möchte, funktioniert das auch soweit, dass ich die "Rohdaten" empfange, aber ich komme nicht auf den Code, wie ich das in diesen Real Wert umwandle und die 230 V erhalte.

Ich hoffe es kann mir jemand helfen, im Forum hatte schon jemand ein sehr ähnliches Problem, aber er hat die Lösung leider nicht dazu geschrieben.

VG
 

Anhänge

  • Screenshot 2025-11-10 090830.png
    Screenshot 2025-11-10 090830.png
    25,7 KB · Aufrufe: 11
Register 1 laden 16 mal nach links schieben und mit Register 2 ODER_DWORD verknüpfen und Ergebnis in REAL wandeln

Beispiel:
register_1,register_2:WORD;
messwert:REAL;

messwert:=DWORD_TO_REAL(SHL(WORD_TO_DWORD(register_1),16) OR WORD_TO_DWORD(register_2));

mfg.
Rayk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann man in der Wago 750 nicht die 2 Register gleich direkt als REAL oder DWORD deklarieren? Weil umwandeln muss man nicht wirklich.
Achtung: bei Codesys 2 kann man nicht DWORD zu REAL wandeln. Das geht nur per Pointer oder ab Codesys 3 per UNION.
 
Danke euch, ich habe es via UNION hinbekommen:


Code:
TYPE UT_Real32 :
UNION
    rr  : REAL;
    dw : DWORD;
    w  : ARRAY[0..1] OF WORD;
END_UNION
END_TYPE

PROGRAM PLC_PRG

VAR
    raw : ARRAY[0..53] OF WORD; // Modbus 1317/1318
    u   : UT_Real32;           
    U_L1N : REAL;
END_VAR

u.w[0] := raw[1];   // Low-Word zuerst
u.w[1] := raw[0];   // High-Word danach
U_L1N  := u.rr;
 
Zurück
Oben