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 A, B, C die INT-Werte 1, 2 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".

Keine Erkennung von mathematischen Fehlern

Falls Sie Ausdrücke in logi.CAD 3 zuweisen, ist es möglich, dass mathematische Fehler nicht erkannt und gemeldet werden.

Beispiele für Zuweisungen mit Ausdrücken im ST-Code, für die ein mathematischer Fehler nicht erkannt/gemeldet wird
Var1 := 0**0 = 1
Var2 := 0 / 0 = 1
Var3 := 0 MOD 0 = 1

Zusätzliche Information: Werden →konstante Ausdrücke bei der Initialisierung von Variablen verwendet, werden keine Fehler mehr erkannt.

Abhilfe: Prüfen Sie mit geeigneten Werkzeugen, ob der angegebene Ausdruck mathematisch ausgewertet werden kann.

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.