OR_ELSE

Der Operator ist eine Erweiterung der Norm IEC 61131-3.

Der Operator OR_ELSE ist nur für die Programmierung im Strukturiertem Text erlaubt: OR-Operation von Operanden des Typs BOOL und BIT, mit Kurzschluss-Auswertung.

Das bedeutet:

Wenn mindestens einer der Operanden TRUE ist, ist das Ergebnis der Operation ebenfalls TRUE, ansonsten FALSE.

Im Unterschied zur Verwendung des IEC-Operators OR, werden bei OR_ELSE, sobald einer der Operanden mit TRUE ausgewertet wurde, die Ausdrücke an allen weiteren Operanden nicht mehr ausgeführt.

Beispiel:

Function_Block FB_Sample
VAR
    nCounter : INT;
END_VAR

METHOD TestMethod : BOOL
nCounter := nCounter + 1;
TestMethod := TRUE;

PROGRAM MAIN
VAR
    fbSampleOr : FB_Sample;
    fbSampleOrElse : FB_Sample;
    bResult : BOOL;
    bVar : BOOL;
END_VAR

bResult : bVar OR fbSampleOr.TestMethod();
// Counter of fbSampleOr increases as the method is executed

bResult := bVar OR_ELSE fbSampleOrElse.TestMethod();
//Counter of fbSampleOrElse does not increases as the method is not executed

bVar ist TRUE, somit ist das Ergebnis bResult sowohl bei der Verwendung von OR als auch bei der Verwendung OR_ELSE ebenfalls TRUE.

Der Unterschied zwischen den beiden Operatoren liegt darin, dass der zweite Operand (der Aufruf der Methode) nur bei der Verwendung von OR ausgeführt wird. In diesem Fall wird der Zähler der FB_Instanz fbSampleOr inkrementiert.

Da der erste Operand bVar1 bereits TRUE liefert, wird bei der Verwendung von OR_ELSE der zweite Operand nicht mehr ausgeführt, sodass die Methode der FB_Instanz fbSampleOrElse nicht aufgerufen und er Zähler somit nicht hochgezählt wird.

Siehe auch: