TestAndSet : BOOL
Mit der Funktion TestAndSet kann eine Flag nicht unterbrechbar geprüft und gesetzt werden.
VAR_IN_OUT
VAR_IN_OUT
Flag : BOOL; (* Flag to check if TRUE or FALSE *)
END_VAR
Flag: Ist ein boolsches Flag, das geprüft wird
- war es FALSE, dann war das Flag frei und wird gesetzt (blockiert von nun an), die Funktion liefert TRUE
- war es TRUE, dann war das Flag bereits belegt (blockiert), die Funktion liefert FALSE
Beispiel
VAR_GLOBAL
bGlobalTestFlag : BOOL;
END_VAR
VAR
iLocalBlockedCounter : DINT;
END_VAR
IF TestAndSet(bGlobalTestFlag) THEN
(* bGlobalTestFlag was FALSE, nobody was
blocking, NOW bGlobalTestFlag is set to TRUE and blocking others*)
(* ... *)
;
(* remove blocking by resetting the flag*)
bGlobalTestFlag := FALSE;
ELSE
(* bGlobalTestFlag was TRUE, somebody is blocking *)
iLocalBlockedCounter := iLocalBlockedCounter + 1;
(* ... *)
;
END_IF