Formeln
Wichtig: Bei Verwendung von ; in den Formeln muss die Formel mit „ “ eigefasst werden. Zudem muss das letzte Zeichen innerhalb der " ein ; sein.
Zugriff auf Items:
- X.0
Zugriff auf die Itemvariablen. 0= ID des Items
Zugriff auf System-Variablen:
- $.SYS
$.SYS.TIME Systemzeit in Sekunden
$.SYS.TIME_MS Systemzeit in Millisekunden - $.PARAM.xxx
Zugriff auf die Parameter des einzelnen Subdevices. - $.GPARAM.xxx
Zugriff auf die Parameter des Hauptdevices.
z.B. $.GPARAM.MANUFACTURER - URL: erzeugt einen URL Aufruf. Dieser kann dann dem $.GPARAM.URL übergeben werden und dann als Link in der App aufgerufen werden.
$.GPARAM.URL:=XXX.URL;
Zugriff auf Temporäre Variablen:
- Wird der Name der Funktion nicht gefunden wird dies als TEMP Variable verwendet. Variablen gelten nur innerhalb des Devices(Slave)
Zugriff auf Kommunikationsmethoden:
- NNN.xxx
- NNN= ALIAS der Methode.
- xxx= Abhängig vom Protokoll
Generelle Variablen:
- F=Forcen/Changed (GET/SET)
- L=Datenlänge
- Q=Qualität
- EC=Errorcounter (GET/SET)
- EN=Error-Nummer
- T=Timesstamp (GET/SET)
- P=Pausieren für x Sekunden (GET/SET)
Modbus:
- xxx.FORMAT
- xxx=Start-Register
- FORMAT: Konvertierung WORD/UINT/DWORD/DUINT/LWORD/LUINT/INT/DINT/LINT/FLOAT/DOUBLE
Sercom(Ascii)
- GET/LESEN
- xxx.yyy.FORMAT
xxx=Start-Byte, yyy=Länge,FORMAT=Format
FORMAT: INT,FLOAT,BYTESUM(Summe aller Bytes) - xxx.zzz
xxx=Byte
zzz=String-Enumliste zb. NNN.8.NO,YES,MAYBEE
Ist der String ab dem 8.Byte gleich mit „NO“ , dann ist Wert 0
YES=1, MAYBEE=2, Anders =0
- xxx.yyy.FORMAT
- SET/SCHREIBEN
- ARG.xxx
xxx = ALIAS des Argumentes der Funktion
- ARG.xxx
Rest(JSON)
- GET/LESEN
xxx - xxx = VALUE
Wert des Objektes
VAL.NNN.NNN.NNN
NNN= Name des Objektes - xxx = ARRAY
Zugriff auf eine Arrary mit den Folgefunktionen
ARRAY.MEDIA.NNN.NNN.NNN = Mittelwert
ARRAY.MAX.NNN.NNN.NNN = Maxwert
ARRAY.MIN.NNN.NNN.NNN = Minwert
ARRAY.LEN.NNN.NNN.NNN = Länge des Arrays
NNN= Name des Objektes - xxx = FIND
Vergleichen des Wertes mit dem folgenden String
FIND.STRING.NNN.NNN.NNN
Sucht den STRING im Objektwert
NNN= Name des Objektes - Abfragevariable bei JSON Objekten:
ARRAY-Wert: mit xxx.xxx[0].sdas[1].das; Mit []. - ASLIST: Damit können Werte aus Arrays in eine Liste mit ' getrennt umgewandlet werden.
zb. XXX.ASLIST.Item[1].subitem[].variable;
listet die Werte aus dem Array Item[1].subitem der Variable variable auf. - xxx.EXIST.yyy.yyy.yyyy
xxx: DATA
yyy.yyyy… =JSON Item
liefert 1 wenn Json/XML Item gefunden wird. - xxx.URL
liefert den URL String des aktuellen Aufrufs - xxx.HTTP_CODE
liefert den http-CODE - xxx.HTTP_DATA
liefert die http-RAW-Daten
- xxx = VALUE
- SET/SCHREIBEN
ARG.xxx - xxx = ALIAS des Argumentes der Funktion
- GET/LESEN
Aufbau der Formel:
Die Formeln müssen in „ eingeschlossen sein, da sie ; als Befehlszeichen verwenden. Auch newLine ist anwendbar. (tab in Formel “ " erlaubt)
Aufbau:
- Beinhaltet alle Möglichkeiten der aktuellen Formelberechungen. Für die richtige Ausführung ist die konsequente Anwendung von Klammern () wichtig.
Operationen:*
MUL
/
DIV
+
ADD
-
SUB
^
POT
>
GR
>=
GGL
<
KL
<=
KGL
!=
UGL
==
GL
>>
SHR
<<
SHL
&&
AND
||
OR
&
BAND
|
BOR
:=
RESULT
Strukturfunktionen: IF THEN ELSE ENDIF;IF THEN Anweisungen dürfen nicht verschachtelt werden. Jedoch können mehrere IF THEN ELSE IF THEN ELSE IF THEN ELSE ENDIF; angelegt werden.
Beispiel:
"IF X.0 > 100 THEN X.1 := X.1 + 1; ELSE IF X.0 > 10 THEN X.1:=X.1+10; TESTVAR:=(X.1+X.2)*(10-9); DEBUG(TESTVAR,X.2,X.0); ELSE X.1:=X.1+1000; ENDIF; IF X.1 > 1000 THEN X.2:=10; ELSE IF X.1 >200 THEN X.2:=100; ELSE X.2:=1000; ENDIF; X.2:=X.2+10;"
Variablenzugriff:
- Siehe oben.
Funktionsaufrufe in Formeln:
In Formeln ist es möglich Funktionen zu verwenden. Die Funktionen können mehre Parameter haben.
Die gesamte Funktion darf keine Operationszeichen wie +-/…. enthalten
Zb. DEBUG( TEST, TEST); geht nicht, DEBUG(TEST,TEST); ist OK
Aufbau: NNN(XXX,XXX,XXX,XXXX)
- NNN= Name der Funktion
- XXX= Parameter der Funktion. Diese müssen Variablennamen sein und nicht direkt numerische Werte. In dem Fall müssen die Werte zuerst in eine Variable geschrieben werden und dann dieses al Parameter übergeben.
- Wichtig: Die Funktion darf kein Leerzeichen enthalten und auch keine Operationszeichen wie +-/….
- Beispiel:
X.1:=DATE_DAY($.SYS.TIME);
Schreibt in X.1 den Monatstag der aktuellen Uhrzeit rein.
UHRZEIT:=$:SYS.TIME-86000; X.1:=DATE_DAY(UHRZEIT);
Schreibt in X.1 den Monatstag des Vortages.
Funktionen:
- Bei den Funktionen müssen die Paramter als Variablen übergeben werden. Direkt Werte gehen nicht. (Grund: bei einer Zahl mit punkt kommt das Aufsplitten durcheinander.)
Beispiel: PARAM_TIME:=10000; X.1:= DATE_MONTH(PARAM_TIME);
- Datumsfunktionen:
PARAM_TIME= VARIABLE mit TIME WERT (Zeit in Sekunden) - DATE_MONTH(PARAM_TIME)
- DATE_YEAR(PARAM_TIME)
- DATEWDAY(PARAM_TIME)
- DATE_YDAY(PARAM_TIME)
- DATE_HOUR(PARAM_TIME)
- DATE_MIN(PARAM_TIME)
- DATE_SEC(PARAM_TIME)
- Zeitfunktionen:
- TIME_FROM_YDAY(PARAM_YEAR, PARAM_YEARDAY)
- TIME_FROM_DATE (YEAR,MON, DAY)
- TIME_FROM_DATE (YEAR,MON, DAY,HOUR,MIN,SEC);
- TIMEFROMISO8601(isostring)
- Math-Funktionen :
- LOG(VALUE,BASE)
- DEC(val) ... GANZZAHL der Zahl
- DEC(val, div) .... GANZZAHL der Division in Int und real
- MOD(val, div) ... REST der Division in Int und real.
- ROUND(val, div) ... GERUNDETER WERT der Division in Int und real
- ROUND(val) ... GERUNDETER WERT der real zahl
val und div sind die real-werte
- SINEFROMTIME(frequency, amplitude, phase=0) frequency in Hz, amplitude, phase in radiant all item oder number
- Help-Funktionen:
- DEBUG(VAR1,VAR2,VAR2,..);
Die Funktion DEBUG gibt im Log des Device die Namen der Variablen mit dem aktuellen Wert aus.
Zb. IF .. THEN DEBUG(VAR1,VAR2,X.10); …
Erscheint im Log: 10:12:30:VAR1=6,VAR2=3,X.10=10.2);
- DEBUG(VAR1,VAR2,VAR2,..);
- String-Funktionen:
- X.1:=‘HALLO‘;
- LEN(X.1);
- ISEQUAL(X.1,X.2);
Andere Operationen wie +-/.. sind nicht möglich. Parameter dürfen hier auch direkte Strings sein zB ISEQUAL(TEST,‘HALLO‘);
- ISEQUAL(string1, string2, [len]) len= Anzahl der zu vergleichenden Zeichen
- SUBSTRING(string, start, [len]) len= Anzahl der Zeichen
- CONCAT(string1, string2,...) string item oder string
- SYSTEMINFO(xxx);
xxx=NAME Liefert den Hostnamen
xxx=ID Liefert die Gekko ID - RANDOMSTRING(xxx);
xxx= Länge des Strings als Zahl: zb RANDOMSTRING(16);
Liefert einen Zufallsstring mit 16 Zeichen. - STRING_TO_NUMBER (string, start, len, type) type=INT8, INT16, INT32, INT64, FLOAT, DOUBLE
- HEXSTRING_TO_NUMBER(STRING,START,LEN,TYPE)
STRING: VARIABLE oder String’
START ab 0 des Substrings zum umwandeln
LEN des Substrings TYPE: INT8(1Byte),INT16(2Byte),INT32(4Byte),INT64(8Byte),FLOAT(4 Byte(,DOUBLE(8 Byte)
Beispiel: TEST:='fl_09818121'; IF ISEQUAL(TEST,'fl_',3) THEN VAL:=HEXSTRING_TO_NUMBER(TEST,3,8,FLOAT); ELSE IF ISEQUAL(TEST,'u6_',3) THEN VAL:=HEXSTRING_TO_NUMBER(TEST,3,8,INT64); ELSE .... ENDIF;
- STRING_TO_NUMBER(STRING,START,LEN,TYPE)
Idem HEXSTRING_TO.. - SUBSTRING(STRING,START)
- SUBSTRING(STRING,START,LEN)
- REPLACEWITHASCII(Text,Suchtext,ASCIIZeichen);
TEXT:='HALLO $ANFTEST$ANF';
TEXT2:=REPLACEWITHASCII(TEXT,'$ANF',34);
- Speichern:
- SAVE_JSON(x,y,c,v,v);
Speichert Werte in einer Sicherungsdatei, die beim Neustart wieder geladen werden
Nicht dauernd aufrufen. Achtung.
- SAVE_JSON(x,y,c,v,v);
- DECIMAL_TO_STRING(number)
- FLOAT_TO_STRING(number)
- SETVALUE(prefix, suffix, index, value1, value2,...) prefix as string or variable, suffix part of Variable, index as number or variable, value1..N as number or variable Variable=prefix.index.suffix -> SETVALUE('GET','INT', 10, 30.0); Variable=GET.10.INT;
- ISO8601(time,type)
time in sec
type=0, ISO mit localtime
1=ISO mit UTC(hinten Z). TIMESEC:=TIME(0); ISO:=ISO8601(TIMESEC,0); DEBUG(ISO); ISOZ:=ISO8601(TIMESEC,1); DEBUG(ISOZ);
- JSONGETVALUEFROMARRAY(json,arrayname, returnvaluename,LOGIC,TYPE,name,compare,comparevalue[,LOGIC,TYPE,name,compare,comparevalue]);
- PID(INSTANCE,SOLL,IST,P,I,D,N)
