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.

Neuron Power Engineer 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.

  • 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-Bausteins 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 Neuron Power Engineer 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.