Alle informel Programme verwenden als Script Sprache die Angabe von Ausdrücken gemäß der hier beschriebenen Syntax.
Die Syntax der Ausdrücke erfolgt weitestgehend gemäß IEC 61131-3 Strukturierter Text (ST). Im Gegensatz zu diesem wird hier ein Interpreter verwendet um die Ausdrücke zu bearbeiten. Wir sprechen deshalb hier von ST-Script.
Eine Besonderheit ist, dass die Ausdrücke auch in Meldetexte einzufügen werden können. Um sie vom eigentlichen Text unterscheiden zu können ist es notwendig, dass sie in doppelte geschweifte Klammern {{ und }} eingeschlossen werden. Texte können somit zur Laufzeit berechnete dynamische Werte enthalten.
Es stehen folgende Sprachelemente zur Verfügung
Operatoren |
Konstanten |
DDE-Werte |
OPC-Werte |
Digitale Ein-/Ausgänge |
Systemvariablen |
Umgebungsvariablen |
Funktionen |
Die Ausdrücke können folgende Operatoren beinhalten:
Arithmetische Operatoren: | +, -, *, /, MOD, ** (Potenzierung) |
Boolesche Operatoren: | AND, OR, XOR, NOT |
Vergleichsoperatoren: | =, >, <, >=, <=, <> |
Außer diesen Operatoren kann eine Klammerung von Teilausdrücken erfolgen.
Rangfolge der Operatoren
Bei der Auswertung der Ausdrücke werden die Operatoren in folgender Rangfolge bearbeitet:
Rangstufe | Operator | Operation |
---|---|---|
1 | ( ) | Klammerung |
2 | ** | Potenzierung |
3 | - | Negation |
4 | NOT | Komplement |
5 | * | Multiplikation |
6 | / | Division |
7 | MOD | Modulo |
8 | + | Addition |
9 | - | Subtraktion |
10 | <, >, >=, <= | Vergleich |
11 | = | Gleichheit |
12 | <> | Ungleichheit |
13 | AND, & | boolesches UND (bitweise Verknüpfung) |
14 | XOR | exklusives ODER (bitweise Verknüpfung) |
15 | OR | boolesches ODER (bitweise Verknüpfung) |
numerische Konstanten
Die Ausdrücke können numerische Konstanten (Literale) in unterschiedlicher Kodierung
enthalten:
Typ | Beispiel |
---|---|
Ganzzahlige Konstanten: | 5 10 |
Gleitkomma-Konstanten (mit oder ohne Exponent): | 7.33 10.5E-2 |
Binäre Konstanten: | 2#1010 2#11111111 (Basis 2, Binär) 8#12 8#377 (Basis 7, Oktal) 16#a 16#FF (Basis 16, Hexadezimal) |
Außerdem können die booleschen Werte TRUE (=1) und FALSE (=0) direkt angegeben werden.
Textuelle Konstanten
Textkonstanten bestehen aus beliebigen in einfachen Anführungsstrichen eingeschlossen
Zeichen.
Beispiele | 'kommend' |
'gehend' | |
'Dies ist eine Textkonstante' |
Die Zeichenketten können folgende Steuerzeichen enthalten
IEC 61131 Steuerzeichen |
Beschreibung |
---|---|
$L oder $l | Zeilenvorschub (Line Feed) |
$P oder $p | Seitenvorschub (Form Feed) |
$R oder $r | Wagenrücklauf (Carrige Return) |
$N oder $n | Neue Zeile (New Line, Wagenrücklauf und Zeilenvorschub) |
$' | Einfaches Anführungszeichen |
In den Ausdrücken können auch Werte von einem DDE-Server verwendet werden. Auf diese Weise können aktuelle Werte in Meldungstexten angegeben werden.
Die Angabe der Werte erfolgt wie ein Funktionsaufruf mit
den Parametern Server, Topic, Item.
Werte an externe Server können durch einfache Zuweisung übergeben werden.
DDE(Server, Topic, Item)
Server | Name der DDE Anwendung |
Topic | Bezeichnung des DDE Themas |
Item | Bezeichnung des DDE Wertes |
Es wird weiterhin der bis September 2001 gültige alte Syntax unterstützt.
Beispiel
Angabe eines Temperaturwertes in einem Meldetext.
Meldetext:
Die Kesseltemperatur beträgt
{{FORMAT(DDE('DdeServer','Werte','Temperatur'), '###.#')}}
Beispiel
Überwachung einer Excel Zelle (Zeile 1, Spalte 1).
Ausdruck:
DDE('Excel','Mappe1','Z1S1') >
50
Beispiel
Übergabe eines Wertes an Excel.
Ausdruck:
DDE('Excel','Mappe1','Z1S1') :=
1050;
In den Ausdrücken können auch Werte von einem OPC-Server verwendet werden. Auf diese Weise können aktuelle Werte in Meldungstexten angegeben werden.
Die Angabe der Werte erfolgt in wie ein Funktionsaufruf mit den Parametern Server und Item.
OPC(Server, ItemPath)
Server | Name des OPC Servers |
ItemPath | Voller Pfad des Wertes |
Es wird weiterhin der bis September 2001 gültige alte Syntax unterstützt.
Beispiel
Angabe eines Temperaturwertes in einem Meldetext.
Meldetext:
Die Kesseltemperatur beträgt {{OPC('Advantech.ADAM','Device1.Group1.Temp1')}}
Beispiel
Überwachung eines Wertes aus einer SIMATIC S7.
Ausdruck:
OPC('OPC.SimaticNET','S7:[CPU|DB|CP_L2_1:]E1')
<> 0
Zur Steuerung externer Geräte oder Übernahme externer Signale können direkt digitale Ein- und Ausgänge angegeben werden.
%INummer | Digitaler Eingang Nummer (1..n) |
%QNummer | Digitaler Ausgang Nummer (1..n) |
Beispiele
(* PageControl Zyklusprogramm *)
%Q1 := $JOBCOUNT > 0; (* Ausgangssignal wenn Rufe anstehen *)
%Q1 := $DEVICESTATE / 2 MOD 2 (* Ausgangssignal bei Modemfehler *)
Hinweis
siehe auch Funktion QIMPULSE zur Ausgabe von Ausgangsimpulsen
Um zusätzliche Informationen bereitstellen zu können, sind Systemvariablen verfügbar, die in den Ausdrücken verwendet werden können. Alle Systemvariablen sind schreibgeschützt.
Es sind folgende Systemvariablen definiert:
Name | Beschreibung | Beispiel | Verfügbar in |
---|---|---|---|
$TIME | Aktuelle Uhrzeit | 09:15 | allen Programmen |
$DATE | Aktuelles Datum mit vierstelliger Jahreszahl | 11.06.1997 | allen Programmen |
$HOUR | Aktuelle Stunde im 24 Stunden Format (00 .. 23) | 09 | allen Programmen |
$MINUTE | Aktuelle Minute (00 .. 59) | 15 | allen Programmen |
$SECOND | Aktuelle Sekunde (00 .. 59) | 09 | allen Programmen |
$WEEKDAY | Aktueller Wochentag (0-Montag .. 6-Sonntag) | 2 | allen Programmen |
$WEEK | Kalenderwoche (1 .. 53) | 02 | allen Programmen |
$DAY | Aktueller Tag (01 .. 31) | 11 | allen Programmen |
$MONTH | Aktueller Monat (01 .. 12) | 06 | allen Programmen |
$YEAR | Aktuelles Jahr (vierstellig) | 1997 | allen Programmen |
$ERROR | Beschreibung (englisch) des letzten aufgetretenen Laufzeitfehlers. | allen Programmen (ab April 2004) | |
$INPORT | Meldungsquelle | Seriell1 | MessageControl |
$MSGSRC | Meldungsquelle | MsgJuli | RemoteControl |
$MESSAGE | Originaltext einer Meldung | Alarm Anlage 1 | PageControl, MessageControl |
$SIGNCODE | Quittungscode der aktuellen Meldung | 123 | PageControl |
$TRIGGER | Auslöser der Meldung ("DDE" oder Signalname) | DDE | PageControl |
$GROUP | Bezeichnung der Meldungsgruppe | Service | PageControl (6.40.017) |
$RECEIVER | Bezeichnung des Meldungsempfängers | Schmidt | PageControl |
$PRIORITY | Priorität der Meldung | 5 | PageControl |
$ESCALATIONLEVEL | Eskalationsstufe der Meldung | 2 | PageControl (7.30.001) |
$DEVICESTATE | Aktueller Status der Schnittstelle und des Modems (Bitcodiert) | 2 | PageControl |
$BARRINGACTIVE | Aktueller Status der extern gesteuerten Rufsperre | 1 | PageControl |
$JOBSTATE | Aktueller Sendestatus | 10 | PageControl |
$JOBCOUNT | Anzahl der Rufe in der Sendeliste | 2 | PageControl |
$LOGCOUNT | Anzahl der Einträge im Logbuch | 50 | PageControl |
$CALLID | Eindeutige ID eines Rufs | 3976DEC93BD631 | PageControl |
$STATIONNAME | Bezeichnung der PageControl Station | Pumpwerk 2 | PageControl, RemoteControl |
$STATIONNUMBER | Nummer der PageControl Station | 0721 9414208 | PageControl, RemoteControl |
$MSGLIST | Liste der aktiven Meldungen (begrenzt auf 20 Meldungen) |
Störung Pumpe 1 Übertemperatur Motor |
PageControl |
$CURRENTSHIFT | Nummer der momentan eingestellten Schicht | 2 | PageControl |
$PARAMETER | Parameter eines Fernwirkbefehls | SetVal=55 | PageControl (6.40.027) |
$EXTAPPINSTALLED | Installierte externe Anwendungen (Bitcodiert) | 3 | PageControl (7.10.001) |
$EXTAPPSTATE | Status der externen Anwendungen (Bitcodiert) | 3 | PageControl (7.10.001) |
$LASTCHOICE | Letzte Auswahl | 55 | PhoneControl |
$RECORDEDFILE | Dateiname der letzten Aufzeichnung | C:\REC\AB_R10001.WAV | PhoneControl |
$CALLINGNUMBER | Nummer des Anrufers, wenn bekannt (CLI) | PhoneControl | |
$CALLEDNUMBER | Nummer die angerufen wurde (DNIS) | PhoneControl | |
$LINE | Nummer der Leitung auf der der Anruf geführt wird | PhoneControl | |
$PATH | Verzeichnis des momentanen Ablaufplans | PhoneControl | |
$TRANSFERRESULT | Ergebnis einer Weitervermittlung | PhoneControl | |
$EXECUTERESULT | Ergebnis eines extern ausgeführten Programms | PhoneControl | |
$ITEMNAME | Name des aktuellen Elements (Meldung oder Wert) | RemoteControl |
Wird bei der Auswertung einer Variable keine entsprechende Variable gefunden, so wird versucht eine entsprechende Umgebungsvariable zu finden, die den geforderten Wert liefern kann.
Beispiel
Meldung von Station {{COMPUTERNAME}}