Ausdrücke für Objektanimationen verwenden
Mit Hilfe von Ausdrücken können logische oder mathematische Operationen für HMI-Tagwerte, Variablen, usw. durchgeführt werden. Ein Ausdruck ist die Kombination von Operanden (Variablen, HMI-Tags, Konstanten, usw.), die über entsprechende Operatoren (+ * -) verknüpft werden. Das bietet Ihnen die Möglichkeit, Daten mit anderen Werten zu vergleichen oder diese mit anderen zu kombinieren. Mit einem Ausdruck können Sie so z.B. die Bedingung für die Animation eines Objekts basierend auf dem Auswertungsergebnis definieren.
Ein Ausdruck liefert nach der Auswertung immer einen einzelnen Wert zurück. So wird beispielsweise der Ausdruck MyVar > 10 als TRUE ausgewertet, wenn der Wert der Variablen MyVar größer als 10 ist.
Ausdrücke sind in PLCnext Engineer immer dort erlaubt, wo eine Variable oder ein HMI-Tag erwartet wird. Ein Ausdruck kann dabei mit folgenden Elementen gebildet werden:
Operanden werden durch Operatoren logisch miteinander verknüpft. In einem Ausdruck wird der Operator mit der höchsten Priorität als erster ausgeführt, gefolgt vom Operator mit der nächst niedrigeren Priorität (siehe die Auswertungsreihenfolge unten).
Ausdrücke mit Zugriff auf Multielement-Variablen
In einem Ausdruck kann auf Elemente von Multielement-Variablen (Feldern und Strukturen) zugegriffen werden. Der Zugriff auf die Datenelemente eines Felds (Arrays) erfolgt durch Angabe des Feldnamens gefolgt von der Elementnummer in eckigen Klammern. Der Zugriff auf die Datenelemente einer Struktur erfolgt durch Angabe des Strukturnamens gefolgt von einem Punkt und dem Namen des Strukturelements in eckigen Klammern.
Beispiele
Ausdruck mit Zugriff auf Feldelement: | graph[1] > 10
(Zugriff auf Element 1 des Felds graph. Der Ausdruck ist TRUE, wenn der Wert des Array-Elements 1 größer 10 ist.) |
Ausdruck mit Zugriff auf Strukturelement: | Machine.[x_pos] < 5
(Zugriff auf Strukturelement x_pos der Struktur Machine. Der Ausdruck ist TRUE, wenn der Wert des Strukturelements kleiner 5 ist.) |
Teilweiser Zugriff auf ANY_BIT-Variablen in Ausdrücken
Der Zugriff auf bestimmte Teile einer ANY_BIT-Variable (BYTE, WORD, DWORD, LWORD) in Ausdrücken wird unterstützt. Sie programmieren den teilweisen Zugriff auf eine Variable durch Anfügen eines Punktes (.) an den Variablennamen gefolgt von einem '%'-Zeichen, dem Präfix für die Größe und einer Ganzzahl (von 0 bis max).
Beispiel: MyByteVar.%X3
Operatoren
Die folgenden Operatoren können in einem Ausdruck verwendet werden:
Arithmetische Operatoren
Arithmetische Operatoren führen Rechenoperationen mit Zahlen (Konstanten oder Variablen) durch und liefern einen numerischen Wert als Ergebnis. Die folgenden arithmetischen Operatoren werden unterstützt:
Symbol | Operator |
+ | Addition |
- | Subtraktion |
* | Multiplikation |
/ | Division (siehe hierzu die Beschreibung im Anschluss an diese Tabelle) |
MOD | Modulo (Divisionsrest) |
** | Exponent |
Rundungsregeln für ganzzahlige Divisionen
Die arithmetischen Operationen führen nur vorzeichenbehaftete Gleitkommaoperationen aus. Es gibt keine ganzzahlige Division. Daher ergibt 3 geteilt durch 2 1,5. Der Datentyp, der sich aus einem Ausdruck mit einem Divisions- ('/') oder Potenzierungsoperator ('**') ergibt, ist immer 'LREAL'.
Bei einer Textdynamik können Sie das Ergebnis auf-/abrunden, indem Sie den Wert '0 Nachkommastellen' aus dem Listenfeld 'Format' auswählen, wie in der folgenden Abbildung gezeigt. Wenn Sie kein Datenformat einstellen oder die Anzeige von mehr Ziffern zulassen, wird Ihnen ein genaueres Ergebnis angezeigt.
Vergleichsoperatoren
Vergleichsoperatoren vergleichen die Werte zweier numerischer Werte und liefern TRUE (1) oder FALSE (0) als Ergebnis. Die folgenden Vergleichsoperatoren werden unterstützt:
Symbol | Operator |
= | Gleich |
<> | Nicht gleich |
< | Kleiner als |
> | Größer als |
<= | Kleiner oder gleich |
>= | Größer oder gleich |
Logische Operatoren
Logische Operatoren kombinieren Boolesche Werte und liefern TRUE oder FALSE als Ergebnis. Die folgenden logischen Operatoren werden unterstützt:
Symbol | Operator |
NOT | Logische Negation NOT |
AND | Logische Konjunktion AND |
OR | Logische Disjunktion OR |
XOR | Logisches XOR (exklusives ODER) |
Auswertungsreihenfolge der Operatoren
Operatoren in Klammern werden als erste ausgewertet. Wenn keine Klammern verwendet werden, werden die Operatoren auf Grundlage der folgenden Reihenfolge ausgewertet:
Symbol | Auswertungsreihenfolge |
( ) | 1 (höchste Priorität) |
-, NOT | 2 |
** | 3 |
*, /, MOD | 4 |
+, - | 5 |
<, >, <=, >= | 6 |
=, <> | 7 |
AND | 8 |
XOR | 9 |
OR | 10 (niedrigste Priorität) |
String-Funktionen in Ausdrücken verwenden
PLCnext Engineer stellt standardmäßig Funktionen zur Verfügung, die in Ausdrücken zur Auswertung von String-Werten verwendet werden können. Eine String-Funktion verarbeitet die als Parameter übergebenen String-Werte und gibt einen String oder numerischen Wert zurück.
Die als Parameter übergebenen Strings können ein Ausdruck vom Typ STRING, ein anwenderdefinierter String-Typ oder ein Parameter des Typs ANY_STRING sein. Parameter, die als numerische Werte übergeben werden, können ein Ausdruck vom Typ ANY_NUM sein.
Alle String-Funktionen können ineinander geschachtelt werden. Das bedeutet, eine Funktion kann als Parameter in einer anderen Funktion verwendet werden. Beispiel:
substring(TestString, indexOf(TestString,'_'))
Diese Funktion gibt den Teilstring des TestString zwischen dem ersten Vorkommen des Zeichens "_" innerhalb des TestString zurück. Wenn TestString z.B. den Wert 'abcd_12345' enthält, wird der Teilstring '12345' zurückgegeben.
Anwendungsbeispiel
Im folgenden Beispiel extrahieren wir mit der Funktion substr() die Zahl '12345' aus dem String 'FBName_12345'. 'FBName_12345' ist dabei der Initialwert der Variablen 'MyExampleFB'. Der zurückgegebene Wert (String-Wert) dient als Name für eine Schaltfläche auf der Seite 'Details'.
Abbildung (1) zeigt die Deklaration der Variablen 'MyExampleFB' in der Datenliste der Steuerung.
Abbildung (2) zeigt die Konfiguration der Schallfläche auf der HMI-Seite. Die Schaltfläche besitzt eine 'Text'-Dynamik mit dem Ausdruck substr(MyExampleFB, 7) als Variablenwert. Der Ausdruck gibt die Zeichen ab Zeichenposition 7 bis zum Ende des Strings zurück (der Index des ersten Zeichens ist 0).
Der Ausdruck wird zur Laufzeit ausgewertet und das Ergebnis als Name für die Schaltfläche verwendet (siehe Abbildung (3)).
Abbildung (1):
Abbildung (2):
Abbildung (3):
Folgende String-Funktionen sind verfügbar:
concat()
Beschreibung | Verbindet zwei oder mehr Strings (bis zu 80) zu einem gemeinsamen String und gibt das Ergebnis zurück. |
Syntax | concat(<text1>, <text2>, ..., <textN>)
Dabei ist:
<text1> ... <textN> sind String-Werte. |
Rückgabewert | Gibt den String zurück, der aus der Verkettung der String-Werte entsteht. |
Beispiel | concat(TestString1, TestString2)
Dabei ist:
TestString1 enthält "abc" und TestString2 "de".Ergebnis: "abcde" |
indexOf()
Beschreibung | Gibt den Index des ersten Vorkommens des zu suchenden Wertes innerhalb des angegebenen Strings zurück. Der String wird vorwärts von Anfang bis Ende gesucht. Die erste Position im String ist 0. Der optionale, numerische start-Wert gibt an, von welcher Position angefangen wird, im String zu suchen. Wenn der gesuchte Wert nicht gefunden wurde, wird der Wert -1 zurückgegeben. |
Syntax | indexOf(<string>, <searchvalue>, <start>)
Dabei ist:
<string>: zu durchsuchender String.
<searchvalue>: zu suchender String.
<start>: optionaler Parameter, der angibt, ab welcher Position im String gesucht werden soll. Wird kein Wert angegeben, wird der ganze String durchsucht. |
Rückgabewert | Gibt einen numerischen Wert zurück. |
Beispiel | indexOf(TestString1, TestString2)
Dabei ist:
TestString1 enthält "abcde" und TestString2 "cd"Ergebnis: 2 (Zeichenfolge "cd" beginnt bei Position 2) |
lastIndexOf()
Beschreibung | Gibt den Index des letzten Vorkommens des zu suchenden Wertes innerhalb des angegebenen Strings zurück. Der String wird rückwärts vom Ende bis zum Beginn gesucht. Die erste Position im String ist 0. Der optionale, numerische start-Wert gibt an, von welcher Position angefangen wird, im String zu suchen. Wenn der gesuchte Wert nicht gefunden wurde, wird der Wert -1 zurückgegeben. |
Syntax | lastIndexOf(<string>, <searchvalue>, <start>)
Dabei ist:
<string>: zu durchsuchender String.
<searchvalue>: zu suchender String.
<start>: optionaler Parameter, der angibt, ab welcher Position im String gesucht werden soll. Wird kein Wert angegeben, wird der ganze String durchsucht. |
Rückgabewert | Gibt einen numerischen Wert zurück. |
Beispiel | lastIndexOf(TestString1, TestString2)
Dabei ist:
TestString1 enthält "abcdabcd" und TestString2 "b"Ergebnis: 5 (letztes Vorkommen des Zeichens "b" beginnt bei Position 5) |
left()
Beschreibung | Gibt die angegebene Anzahl an Zeichen beginnend vom Anfang des Strings zurück. Wenn der Wert größer als die Anzahl von Zeichen im String ist, wird der gesamte String zurückgegeben. Wenn der Wert kleiner als 0 ist, wird ein leerer String zurückgegeben. |
Syntax | left(<string>, <number>)
Dabei ist:
<string>:: String, aus dem Zeichen extrahiert werden sollen.
<number>.: Numerischer Wert, der angibt, wie viele Zeichen aus dem String extrahiert werden sollen. |
Rückgabewert | Gibt einen String zurück. |
Beispiel | left(TestString, 3)
Dabei ist:
TestString enthält "abcdabcd"Ergebnis: "abc" |
right()
Beschreibung | Gibt die Anzahl von Zeichen beginnend von der reichten Seite des Strings zurück. Wenn der Wert größer als die Anzahl von Zeichen im String ist, wird der gesamte String zurückgegeben. Wenn der Wert kleiner als 0 ist, wird ein leerer String zurückgegeben. |
Syntax | right(<string>, <number>)
Dabei ist:
<string>:: String, aus dem Zeichen extrahiert werden sollen.
<number>.: Numerischer Wert, der angibt, wie viele Zeichen aus dem String extrahiert werden sollen. |
Rückgabewert | Gibt einen String zurück. |
Beispiel | right(TestString, 3)
Dabei ist:
TestString enthält "abcdabcd"Ergebnis: "bcd" |
substr()
Beschreibung | Gibt die Zeichen eines Strings beginnend ab der mit start angegebenen Position zurück. Die erste Position im String ist 0. Der optionale, numerische length-Wert gibt die Anzahl der Zeichen an, die extrahiert werden sollen. Wenn length nicht angegeben wird, werden alle Zeichen bis zum Ende des Strings extrahiert. |
Syntax | substr(<string>, <start>, <length>)
Dabei ist:
<string>:: String, aus dem Zeichen extrahiert werden sollen.
<start>:: Position im String, an der mit dem Extrahieren der Zeichen begonnen wird. Wenn der Wert größer als oder gleich der Länge des Strings ist, wird ein leerer String zurückgegeben.
<length>: Optionaler Parameter, der angibt, wie viele Zeichen extrahiert werden sollen. |
Rückgabewert | Gibt einen String zurück. |
Beispiel | substr(TestString, 3, 2)
Dabei ist:
TestString enthält "abcdabcd"Ergebnis: "da" |
substring()
Beschreibung | Gibt einen Teilstring eines Strings beginnend ab der Position start bis zur Position end zurück. Die erste Position im String ist 0. Der optionale, numerische end-Wert gibt an, bis zu welcher Position (nicht eingeschlossen) extrahiert werden soll. Wenn end nicht angegeben wird, wird der gesamte String extrahiert. |
Syntax | substring(<string>, <start>, <end>)
Dabei ist:
<string>:: String, aus dem Zeichen extrahiert werden sollen.
<start>:: Position im String, an der mit dem Extrahieren der Zeichen begonnen wird.
<end>: optionaler Parameter, der angibt, bis zu welcher Position (nicht eingeschlossen) extrahiert werden soll. |
Rückgabewert | Gibt einen String zurück. |
Beispiel | substring(TestString, 2, 5)
Dabei ist:
TestString enthält "abcdabcd"Ergebnis: "cda" |