Ausdrücke in ST

Ein Ausdruck ist ein Sprachkonstrukt, das aus einer definierten Kombination von Operanden (z.B. →Literale→Variablen→Aufrufe) und Operatoren (z.B. +, -, *, /) besteht und einen Wert eines bestimmten Datentyps ergibt.

logi.CAD 3  wendet die folgenden Regeln zur Auswertung von Ausdrücken an:

  • Die Rangfolge des Operators bestimmt die Reihenfolge, in der die Operationen angewendet werden: Der Operator mit der höchsten Rangfolge in einem Ausdruck wird zuerst angewendet, dann der mit der nächst-niedrigeren Rangfolge usw., bis der Ausdruck ausgewertet ist. Bei gleichwertigen Operatoren wird von links nach rechts ausgewertet.
    Beispiel: Falls ABC die INT-Werte 12 bzw. 4 haben, wird der Ausdruck A+B-C*(C / B) so ausgewertet:
    1. Die Klammerung (C / B) wird aufgrund der höchsten Rangfolge zuerst ausgewertet: Sie entspricht (4 / 2) und liefert den Wert 2.
    2. Die Multiplikation C*(2) wird aufgrund der nächst-niedrigeren Rangfolge ausgewertet: Sie entspricht 4*(2) und liefert den Wert 8.
    3. Die Addition A+B und Subtraktion B-8 sind gleichwertige Operatoren. Da die Addition links von der Subtraktion steht, wird zuerst die Addition angewendet. Die Addition entspricht 1+2 und liefert den Wert 3.
    4. Zuletzt wird die Subtraktion 3-8 angewendet: Somit hat der Ausdruck den Wert -5 als Ergebnis und wird implizit auf den Datentyp INT typisiert.
  • Falls ein Ausdruck zwei Operanden enthält, wird der ganz linke Operand zuerst ausgewertet.
    Beispiel: Für den Ausdruck EQ(A,B)=AND(A,B) wird der Aufruf des EQ-Bausteins EQ(A,B) zuerst ausgewertet, dann der Aufruf des AND-Baustein AND(A,B) und zuletzt wird die Gleichheits-Operation (aufgrund Operator =) ausgewertet.
  • →Boolesche Ausdrücke werden nur so weit ausgewertet, wie dies für die Auswertung des Ergebnisses inkl. evtl. Nebeneffekte erforderlich ist.
    Beispiel: Sofern A<=B, ist für den Ausdruck (A>B)&(C<D) die Auswertung von (A>B) bereits ausreichend, damit feststeht, dass das Ergebnis des Ausdrucks der Wert FALSE (oder eine Entsprechung) ist.
  • Ausdrücke ohne einen konkreten Datentyp werden typisiert. Erläuterungen dazu finden Sie unter "Typisierung von Ausdrücken".

Vermeiden Sie die Verwendung von Ausdrücken mit über 20 Operanden/Operatoren, um erhebliche Performance-Einbußen beim Speichern oder beim Importieren zu vermeiden.  Lesen Sie den Troubleshooting-Artikel "C/C++ Indexer wird nicht abgeschlossen und verhindert das Speichern oder Importieren eines Objekts" für Details.