TestAndSet : BOOL

TestAndSet : BOOL 1:

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