Ethercat dword in 32 bools konvertieren

mkd

Well-known member
Beiträge
196
Punkte Reaktionen
28
Falls es nichts fertiges gibt, dann Bau dir doch einfach eine kleine Funktion.
Man müsste einzelne Bits aus dem DWORD so lesen können

Code:
bit_x:= meineDWORDVariable.x

Sonst ganz Old School über Bitmasken oder vorher bitweise schieben usw.

Wenn es um die Verknüpfung im Sys Manager geht, kannst du sicher auch eine Struktur mit 32 Bits erstellen und eine Variable diesen Typs deklarieren. Diese Variable dann einfach mit dem DWORD der Klemme verknüpfen.

Gruß
 

witkatz

Well-known member
Beiträge
194
Punkte Reaktionen
52
Das liegt daran, dass der Typ BOOL in der PLC ein Byte im Speicher belegt. Eine Struktur mit 32 BOOL belegt 32 Byte und lässt sich nicht direkt mit DWORD verknüpfen. Die einzelnen BOOLS lassen sich auf das DWORD verknüpfen: für jedes BOOL beim Verknüpfen den Dialog öffnen, Overlapped auf 1 und Offset auf 0 bis 31 setzen. Das ist machbar aber sehr aufwendig.
Da ist der Bit-Vereinzelung über eine Funktion in der PLC viel einfacher. Z.B. so
Code:
TYPE T_32bool : ARRAY[0..31] OF BOOL;
END_TYPE
Code:
FUNCTION F_DWORD_TO_BOOLARR : T_32bool
VAR_INPUT
    dwInput: DWORD;
END_VAR
VAR
    Mask: DWORD;
    i: INT;
END_VAR
Mask:= 1;
FOR i:= 0 TO 31 DO
    F_DWORD_TO_BOOLARR[i]:= (dwInput AND Mask) = Mask;
    Mask:= SHL(Mask, 1);
END_FOR

Gruß
witkatz
 
Oben