CoDeSys V3 Word in Struct um bitweise auszulesen

mthali

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Miteinander

Ich habe ein kleines Problem. Ich würde gerne einen FU über Modbus steuern. Dazu empfange ich ein Statuswort von diesem. Jedoch möchte ich die Einzelnen Bits des Wortes auslesen (z.B. Statuswort.Einschaltbereit). Habe mir dafür auch einen Struct angelegt. Nun meine Frage. Kann ich den Struct irgendwie definieren, dass er als Wort "erkannt" wird und so am Ende meine einzelnen Bits habe? Weil jetzt habe ich das Problem, dass er mir Das Wort einfach in die ersten beiden Bool schreibt und so natürlich dort steht, dass der Wert nicht angezeigt werden kann. Was verständlich ist, da ich ja ein Wort nicht in zwei bool schreiben kann.

Besten Dank

Marco
 
Hallo Marco,

Grundsätzlich belegen in CODESYS BOOL-Variablen ein Byte. In CODESYS V3 gibt es jedoch auch die Möglichkeit den Datentyp BIT zu verwenden.
Der Standardweg für dein Problem ist eine Union. Ich demonstrier das mal mit einem Byte:

Code:
TYPE Bits :
STRUCT
	bit0 : BIT;
	bit1 : BIT;
	bit2 : BIT;
	bit3 : BIT;
	bit4 : BIT;
	bit5 : BIT;
	bit6 : BIT;
	bit7 : BIT;
END_STRUCT
END_TYPE
TYPE BitByteUnion :
UNION
	byte0 : BYTE;
	bits0_7 : Bits;
END_UNION
END_TYPE

PROGRAM PLC_PRG
VAR
	myUnion : BitByteUnion;
	test: BOOL;
END_VAR
myUnion.byte0 := 16#55;
test := myUnion.bits0_7.bit0;

Alternativ sparst du dir die Union und schreibst einfach mit einem Pointer in deine Bit-Struktur


Code:
PROGRAM PLC_PRG
VAR
	myBits : Bits;
	pbyte : POINTER TO BYTE;
	test: BOOL;
END_VAR
pbyte := ADR(myBits);
pbyte^:= 16#55;
test := myBits.bit0;
 
Zurück
Oben