Variablen / Register / Array #V
Befehlsgruppe um interne Rechnungen und logische Operationen auszuführen. Mit Hilfe der Stringfiles kann eine Mehrsprachigkeit realisiert werden. Es sind 500 Register vorhanden. Stringregister können bis zu 250 Zeichen aufnehmen, bei Festkommaregistern wird mit signed 32 Bit, bei Fließkommaregistern wird mit 23 Bit Mantisse, 8 Bit Exponent, 1 Bit signed gerechnet.
Stringfiles / Mehrsprachigkeit
Stringfile laden (Variable stringFile Load) |
StringfileName> |
|
Stringfile löschen (Variable stringFile Delete) |
<StringfileName> (alle) |
|
Anzahl an geladenen Stringfiles senden (Variable stringFile Count) |
Stringregister
Stringregister setzen (Variable Stringregister Set) |
String-ID, "String"; "String" [ID+1]; ... |
|
Stringregister ab Position setzen (Variable Stringregister Postion) |
String-ID, Offset, "New String"; |
|
Stringregister ab Position ersetzen (Variable Stringregister Replace) |
String-ID, Offset, "New String"; |
|
Teilstring aus Stringregister ausschneiden und ersetzen (Variable Stringregister Truncate) |
String-ID, Offset, Anzahl(bis Ende) |
|
Teilstring aus Stringregister kopieren (Variable Stringregister Copy) |
String-ID Ziel, String-ID Quelle, Offset (0), Anzahl(bis Ende) |
|
Stringregister in Teilstrings aufteilen (Variable Stringregister dElimiter) |
String-ID Ziel Start, String-ID Quelle, Seperator, Register-ID (=String-ID Ziel Start) |
|
Stringregister mit Zeit/Datum setzen (Variable Stringregister Date) |
String-ID, "Datumsformat"; date (aktuelle Zeit); 1/100sec |
|
Formatiertes Stringregister setzen (Variable Stringregister Formated) |
String-ID, "Formatstring"; Wert1, Wert2, ...., WertN |
|
Objektsstrings auslesen (Variable Stringregister Object) |
String-ID, Obj-ID, ... |
|
Stringregister senden (ASCII) (Variable string Send Ascii) |
String-ID, ... |
|
Stringregister senden (Unicode) (Variable string Send Unicode) |
String-ID, ... |
|
Stringregister sortieren (Variable Quicksort Strings) |
String-ID Start, String-ID Ende, Anzahl (0), Offset(0) |
|
Codes im Stringregister sortieren (Variable Quicksort Codes) |
String-ID, Richtung (1), Anzahl (0), Offset (0) |
|
Letzte Fehlermeldung in Stringregister (Variable Stringregister Last error) |
String-ID, Löschen(1) |
|
Stringregister mischen (Variable Mix Strings) |
String-ID Start, String-ID Ende |
|
Codes im Stringregister mischen (Variable Mix Codes) |
String-ID, Anzahl (0), Offset (0) |
|
Definieren einer Regular expression (Variable String regular eXpression) |
RegEx-ID, "regular expression" |
Register
Register setzen (Integer) (Variable Register Integer) |
Register-ID, Wert, Wert1 [ID+1], ... |
|
Register setzen (Float) (Variable Register Float) |
Register-ID, Wert, Wert1 [ID+1], ... |
|
Objektstring umwandeln (Variable Register Object) |
Register-ID, Obj-ID, Obj-ID1[ID+1], ... |
|
Stringregister in Register umwandeln (Variable Register dElimiter) |
Register-ID Start, String-ID Quelle, Seperator, Register-ID Anzahl |
|
Register in RTC-RAM schreiben (Variable Register rtc Write) |
ID, Register-ID, Register-ID1, ... |
|
Register aus RTC-RAM lesen (Variable Register rtc Read) |
ID, Register-ID, Register-ID1, ... |
|
Stringregister als Kalkulation in Register umwandeln (Integer) (Variable Calculate Integer) |
Register-ID, String-ID, String-ID1[ID+1], ... |
|
Stringregister als Kalkulation in Register umwandeln (Float) (Variable Calculate Float) |
Register-ID, String-ID, String-ID1[ID+1], ... |
|
Register senden (Variable Register Send) |
Register-ID, ... |
|
Register sortieren (Variable Quicksort Register) |
Register-ID Start, Register-ID Ende |
|
Register mischen (Variable Mix Register) |
Register-ID Start, Register-ID Ende |
Array
Array definieren (Integer) (Variable Array Integer) |
Array-ID, Anzahl, Typ(0) |
|
Array definieren (Float) (Variable Array Float) |
Array-ID, Anzahl, Typ(0) |
|
Array definieren (Unicode String) (Variable Array Unicode) |
Array-ID, Anzahl, Stringlänge, Typ(0) |
|
Array löschen (Speicher freigeben) (Variable Array Delete) |
Array-ID |
|
Array füllen (Variable Array Set) |
Array-ID, Wert(0, alle Elemente), element index, ... |
|
Array-Elementen Werte zuweisen (mit Index) (Variable Array Value) |
Array-ID, Index, Wert, Wert[Index+1], ... |
|
Array-Elementen Werte zuweisen (mit aktuellem Schreib-Pointer) (Variable Array Write) |
Array-ID, Wert 1, Wert 2, ... |
|
Schreib- und/oder Lese-Pointer setzen (Variable Array Pointer) |
Array-ID, SchreibPointer(-1), LesePointer(-1), max. SchreibPointer |
|
Array sortieren (Variable Quicksort Arrays) |
Array-ID, StartIndex, EndIndex(letzter Index), Stringlänge(0), Stringoffset(0) |
|
Array mischen (Variable Mix Arrays) |
Array-ID, StartIndex, EndIndex(letzter Index) |
Stringfiles / Mehrsprachigkeit
Es werden in 4 unterschiedlichen Sprachen "Hallo World" platziert. Es muss darauf geachtet werden, dass der ausgewählte Font alle notwendigen Zeichen unterstützt. Im folgenden Beispiel wurde "Arial Unicode MS" eingesetzt. Die unten stehende Befehle setzten voraus, dass die Stringfiles (Chinese.txt, English.txt, Cyrillic.txt und German.txt) bereits auf der SD-Card im Projektpfad im Unterordner Strings vorhanden sind:
... #VFL <P:string/German.txt> #SSP 1,1,10,10,7,!HELLO!; #VFD #VFL <P:string/English.txt> #SSP 2,1,10,50,7,!HELLO!; #VFD #VFL <P:string/Cyrillic.txt> #SSP 3,1,10,90,7,!HELLO!; #VFD #VFL <P:string/Chinese.txt> #SSP 4,1,10,130,7,!HELLO!; #VFD ... |
#VFL |
<StringfileName> |
Einen Satz von Strings laden. Maximal können gleichzeitig 1000 Strings aus 8 verschiedenen Dateien geladen sein.
#VFD |
<StringfileName> (alle) |
Einen Satz von Strings bzw. alle löschen. Die Dateien bleiben physikalisch auf der SD Karte erhalten, sodass sie erneut geladen werden können
Anzahl an geladenen Strings senden
#VFC |
|
Stellt die Anzahl an geladenen Strings in den Sendepuffer. Die Rückmeldung ist folgendermaßen aufgebaut:
ESC |
V |
F |
C |
Anzahl |
... |
|
$1B |
$56 |
$53 |
$43 |
16-Bit Wert |
... #VFL ... #VFL ... #VFL ... #VFL ... #VFC ... |
Stringregister
#VSS |
String-ID, "String"; "String" [ID+1]; ... |
Der Befehl speichert den String im Registersatz (String-ID [0...499]) ab.
|
... #VSS 0,"Hello World";"Test "S0;S0" Test"; ... |
Stringregister ab Position setzen
#VSP |
String-ID, Offset, "New String"; |
Der String der Speicherstelle String-ID wird ab der Postion Offset gelöscht und die neuen Daten ("New String") werden angefügt.
|
... #VSS 0,"Hello World"; #VSP 0,6,"Test"; ... |
Stringregister ab Position ersetzen
#VSR |
String-ID, Offset, "New String"; |
Der String der Speicherstelle String-ID wird ab der Postion Offset mit den neuen Daten ("New String") ersetzt.
|
... #VSS 0,"Hello World"; #VSR 0,6,"Test "; ... |
Teilstring aus Stringregister ausschneiden und verschieben (ab V1.1)
#VST |
String-ID, Offset, Anzahl(bis Ende) |
Den "linken" Teil des Stringregisters löschen und den Teil von Offset bis Offset+Anzahl nach vorne schieben. Ist Anzahl negativ, wird Anzahl als zweiter Offset genommen. Es handelt sich also dann um eine Bereichsangabe.
|
... #VSS 0,"Hello World"; #VST 0,6,5 ... ... #VSS 0,"Hello World"; #VST 0,6-10 ... |
Teilstring aus Stringregister kopieren (ab V1.1)
#VSC |
String-ID Ziel, String-ID Quelle, Offset (0), Anzahl(bis Ende) |
Aus dem String (String-ID Quelle) einen Teilstring beginnend mit dem Offset und der Länge Anzahl kopieren und in ein anderes Stringregister (String-ID Ziel) einfügen.
|
... #VSS 0,"Hello World"; #VSC 1,0,6,5 ... ... #VSS 0,"Hello World"; #VSC 1,0,6-10 ... |
Stringregister in Teilstrings aufteilen (ab V1.1)
#VSE |
String-ID Ziel Start, String-ID Quelle, Seperator, Register-ID (=String-ID Ziel Start) |
Der String (String-ID Quelle) wird in Teilstrings zerlegt. Die Teilstrings werden ab String-ID Ziel Start abgelegt. Die Anzahl der Teilstrings wird in Register-ID abgelegt. Der Parameter Seperator gibt das Trennzeichen an.
|
... #VSS 0,"Entry1,Entry2,Entry3"; #VSE 1,0,?,,10 ... |
Stringregister mit Zeit/Datum setzen
#VSD |
String-ID, "Datumsformat"; date (aktuelle Zeit); 1/100sec |
Im Stringregister wird die Zeit als formatierter String abgelegt. Die Darstellungsweise richtet sich nach dem Datumsformat. Der Aufbau ist im Unterkapitel Datumsformate näher beschrieben.
|
... #VSD 1,"%h:%m:%s"; ... |
Formatiertes Stringregister setzen
#VSF |
String-ID, "Formatstring"; Wert1, Wert2, ...., WertN |
Eine formatierten Zeichenkette wird im Stringregister abgelegt (String-ID). Wird der Variablen Satz wiederholt, wird der Formatstring erneut angewendet und in String-ID+1 abgelegt
|
... #VSF 1,"Analog %d";(analog(0)) ... |
#VSO |
String-ID, Obj-ID, ... |
Objektstrings (Obj-ID) werden im Stringregister (String-ID) abgelegt. Diese Funktion wird vor allem für EditBoxen verwendet.
|
... #SED 1,"edit me" /**Default text for EditBox #VSO 1,1 ... |
#VSA |
String-ID, ... |
Den Inhalt des Stringregisters (ASCII formatiert) in den Sendepuffer stellen. Die Rückmeldung ist folgendermaßen aufgebaut:
ESC |
V |
S |
A |
String-ID |
Länge |
Char 1 |
Char 2 |
... |
Char n |
... |
|
$1B |
$56 |
$53 |
$41 |
16-Bit Wert |
16-Bit Wert |
8-Bit Wert |
8-Bit Wert |
8-Bit Wert |
8-Bit Wert |
... #VSS0,"str"; #VSA 0 ... |
Stringregister senden (Unicode)
#VSU |
String-ID, ... |
Den Inhalt des Stringregisters (Unicode formatiert) in den Sendepuffer stellen. Die Rückmeldung ist folgendermaßen aufgebaut:
ESC |
V |
S |
U |
String-ID |
Länge |
Char 1 |
Char 2 |
... |
Char n |
... |
$1B |
$56 |
$53 |
$55 |
16-Bit Wert |
16-Bit Wert |
16-Bit Wert |
16-Bit Wert |
16-Bit Wert |
16-Bit Wert |
... #VSS0,"str"; #VSU 0 ... |
Stringregister sortieren (ab V1.1)
VQS |
String-ID Start, String-ID Ende, Anzahl (0), Offset(0) |
Der Bereich des Stringregisters (String-ID Start bis String-ID Ende) wird sortiert. Anzahl gibt den Bereich an, welcher für die Sortierung beachtet wird, bei Anzahl=0 wird die gesamte Länge untersucht. Offset gibt die Stelle im String an ab der die Sortierung beginnt.
|
... #VSS 0,"Sort";"Test";"Entry";"Exit"; #VQS 0,3,2,0 ... |
Codes im Stringregister sortieren (ab V1.1)
VQC |
String-ID, Richtung (1), Anzahl (0), Offset (0) |
Codes innerhalb des Stringregisters (String-ID) werden sortiert. Anzahl gibt den Bereich an, welcher für die Sortierung beachtet wird, bei Anzahl=0 wird die gesamte Länge untersucht. Offset gibt die Stelle im String an ab der die Sortierung beginnt. Zudem kann die Richtung angegeben werden:
Richtung |
|
0 |
Absteigend |
1 |
Aufsteigend |
|
... #VSS 1,"Hello World" #VQC 1 ... |
Letzte Fehlermeldung in Stringregister (ab V1.3)
#VSL |
String-ID, Löschen(1) |
Die Fehlermeldungen aus dem Terminal zusätzlich in ein Stringregister (String-ID) speichern. Der Parameter Löschen gibt das Löschverhalten der Fehlermeldung an:
Löschen |
|
0 |
Nicht löschen |
1 |
Löschen |
Stringregister mischen (ab V1.3)
#VMS |
String-ID Start, String-ID Ende |
Der Inhalt der Register bleibt bestehen, nur die String-ID ändert sich. Damit ist eine neue Zuordnung String-ID ⇔ Inhalt vorhanden.
Codes im Stringregister mischen (ab V1.3)
#VMC |
String-ID, Anzahl (0), Offset (0) |
Der Inhalt eines Stringregister (String-ID) wird zufällig vertauscht.
Anzahl gibt die Anzahl der Stellen an (= 0 kompletter String), Offset den Startpunkt innerhalb des Registers.
Definieren einer Regular expression (from V1.6)
#VSX |
RegEx-ID, "regular expression" |
Eine regular expression definieren und in RegEx-ID[0..9] speichern. Dieses Kommando arbeitet mit vielen Kalkulationen zusammen, um in StringRegistern oder StringArrays vorkommen des Ausdrucks zu finden.
... #VAU 0, 14,24, 0 /**Definieren des UnicodeArrays #VAW 0, "Alabama Slammer"; "Bloody Mary"; "Cosmopolitan"; "Fireball"; #VAW 0, "Kamikaze"; "Mai Tai"; "Mojito"; "Long Island Iced Tea"; "Pina Colada"; #VAW 0, "Gin Fizz"; "Jim Beam"; "Smirnoff"; "Tequila"; "Zombie" #VSX 2, ".*am.*" /**RegEx in RegExp-ID 2 speichern /**Finde alle Vorkommnisse der Buchstabenkombination 'am' #VRI 3, -1 /**Register R3 wird als Indexregister genutzt. Mit -1 laden, da =-1 kein vorkommen bedeutet #MFM 1 /**Loop start #VRI 3, (strXA(2,0,++R3)) /**Kalkulation um naechsten Index mit wahrer RegEx zu finden. /**Suchindex start bei letztem gefunden Resultat + 1 #MFS (R3<0), 1 /**Naechste Zeile ueberspringen wenn kein Ergebnis mehr vorhanden ist #YPA A0I(R3) "\r\n" /**Ausgabe des ArrayString im Terminal window und neue Zeile einfuegen #MFJ(R3>=0) 1 /**loop Ende,Zurueck zum Loop-Start wenn RegEx ein Ergebnis hatte ansonsten verlassen ... |
Unterstützte RegEx Sonderzeichen:
^ String Anfang
$ String Ende
. ein beliebiges Zeichen
a? null- oder einmal der Ausdruck a , d.h. der Ausdruck ist optional
a+ mindestens einmal oder mehrfach der Ausdruck a
a* beliebig oft (auch keinmal)
[ ] Zeichenauswahl, z.B. [a-z]
[^ ] nicht vorkommende Zeichenauswahl, z.B. [^a-f]
( ) RegEx Unterbereich max. 9
| Oder
\ Sonderzeichen aufheben (normales Zeichen)
Register
#VRI |
Register-ID, Wert, Wert1 [ID+1], ... |
Der Befehl speichert im Registersatz (Register-ID [0...499]) einen Integerwert (32 Bit).
|
... #VRI 0,10,42,-8 ... |
Sollen die Werte binär übertragen werden (Kommunikation mit externem µC), kommt der Schalter "G" zum Einsatz.
#VRF |
Register-ID, Wert, Wert1 [ID+1], ... |
Der Befehl speichert im Registersatz (Register-ID [0...499]) einen Floatwert (32 Bit).
|
... #VRF 0,10.25,42.39,-8.19 ... |
Sollen die Werte binär übertragen werden (Kommunikation mit externem µC), kommt der Schalter "G" zum Einsatz.
#VRO |
Register-ID, Obj-ID, Obj-ID1[ID+1], ... |
Objektstrings werden in Register abgelegt. Der Objektstring wird dabei in einen Zahlenwert gewandelt (automatisch passend als Integer oder Float). Diese Funktion wird vor allem für EditBoxen verwendet.
|
... #SED 1,"42.5" /**Default text for EditBox #VRO 1,1 ... |
Stringregister in Register umwandeln (ab V 1.2)
#VRE |
Register-ID Start, String-ID Quelle, Seperator, Register-ID Anzahl |
Numerischen String (String-ID Quelle) in Register (Register-ID Start) wandeln. Separator gibt das Trennzeichen zwischen den Werten an. Im optionalen Parameter Register-ID Anzahl wird die Anzahl gültiger Werte nach der Wandlung angegeben
|
... #VSS 0,"10,42.39,-8"; #VRE 0,0,?,,10 ... |
#VRW |
ID, Register-ID, Register-ID1, ... |
Eine Register-ID im RAM der RTC puffern. ID [0...7] gibt den Speicherplatz an. Der Wert bleibt auch nach dem Ausschalten des Moduls erhalten.
#VRR |
ID, Register-ID, Register-ID1, ... |
Aus dem RTC-RAM (ID) einen Wert zurück lesen und in Register (Register-ID) übernehmen
Stringregister als Kalkulation in Register umwandeln (Integer)
#VCI |
Register-ID, String-ID, String-ID1[ID+1], ... |
Den Inhalt eines Stringregisters als Kalkulationsstring interpretieren. Das Ergebnis wird im Register (Register-ID) abgelegt
|
... #VSS 0,"R0+R1"; #VCI 2,0 ... |
Stringregister als Kalkulation in Register umwandeln (Float)
#VCF |
Register-ID, String-ID, String-ID1[ID+1], ... |
Den Inhalt eines Stringregisters als Kalkulationsstring interpretieren. Das Ergebnis wird im Register (Register-ID) abgelegt
|
... #VSS 0,"R0+R1"; #VCF 2,0 ... |
#VRG |
Register-ID, ... |
Den Inhalt des Registers in den Sendepuffer stellen. Die Rückmeldung ist folgendermaßen aufgebaut:
ESC |
V |
R |
G |
Register-ID |
Typ |
Wert |
... |
|
$1B |
$56 |
$52 |
$47 |
16-Bit Wert |
16-Bit Wert |
32-Bit Wert |
... #VRF 0,... #VRG 0 ... |
#VQR |
Register-ID Start, Register-ID Ende |
Der Bereich der Register (Register-ID Start bis Register-ID Ende) werden sortiert.
|
... #VRI 0,2,8,4,-5 #VQR 0,3 ... |
#VMR |
Register-ID Start, Register-ID Ende |
Der Inhalt der Register bleibt bestehen, nur die Register-ID ändert sich. Damit ist eine neue Zuordnung Register-ID ⇔ Inhalt vorhanden.
Array (ab V1.4)
#VAI |
Array-ID, Anzahl, Typ(0) |
Der Befehl definiert ein Integer Array (Array-ID [0...499]) mit der gegebenen Anzahl an Einträgen. Die maximale Länge des Arrays bzw. ob das Arrays mit der gewünschten Größe angelegt werden konnte kann mit der Kalkulation arE() überprüft werden. Der Typ gibt das Verhalten beim Schreiben am Ende des Arrays an.
|
#VAF |
Array-ID, Anzahl, Typ |
Der Befehl definiert ein Float Array (Array-ID [0...499]) mit der gegebenen Anzahl an Einträgen. Die maximale Länge des Arrays bzw. ob das Arrays mit der gewünschten Größe angelegt werden konnte kann mit der Kalkulation arE() überprüft werden. Der Typ gibt das Verhalten beim Schreiben am Ende des Arrays an.
Typ |
|
0 |
Am Ende abbrechen |
1 |
Am Ende umbrechen (Ringbuffer) |
Array definieren (Unicode String) (ab V1.6)
#VAU |
Array-ID, Anzahl, Stringlänge, Typ(0) |
Der Befehl definiert ein String Array (Array-ID [0...499]) mit der gegebenen Anzahl an Einträgen. Die maximale Länge des Arrays bzw. ob das Arrays mit der gewünschten Größe angelegt werden konnte kann mit der Kalkulation arE() überprüft werden. Der Parameter Stringlänge gibt die maximale Stringlänge pro Eintrag an. Der Typ gibt das Verhalten beim Schreiben am Ende des Arrays an.
Typ |
|
0 |
Am Ende abbrechen |
1 |
Am Ende umbrechen (Ringbuffer) |
Array löschen (Speicher freigeben)
#VAD |
Array-ID |
Der Befehl löscht ein Array (Array-ID [0...499]) und gibt den Speicher frei.
#VAS |
Array-ID, Wert(0), element index, ... |
Der Befehl füllt alle Elemente des Arrays (Array-ID [0...499]) mit dem gegeben Wert. Ist kein Wert angegeben wird das komplette Array gefüllt. Element index ermöglicht das füllen bestimmter Elemente des Arrays mit dem angegebenen Wert.
Array-Elementen Werte zuweisen (mit Index)
#VAV |
Array-ID, Index, Wert, Wert[Index+1], ... |
Der Befehl weist Array-Elementen, beginnend mit dem Array-Index neue Werte zu.
Array-Elementen Werte zuweisen (mit aktuellem Schreib-Pointer)
#VAW |
Array-ID, Wert 1, Wert 2, ... |
Der Befehl weist Array-Elementen, beginnend mit dem aktuellen Schreib-Pointer neue Werte zu.
Schreib- und/oder Lese-Pointer setzen
#VAP |
Array-ID, SchreibPointer(-1), LesePointer(-1), max. SchreibPointer |
Der Befehl setzt den Schreib- und/oder Lese-Pointer des Arrays (Array-ID [0...499]). Soll der Pointer unverändert bleiben muss der jeweilige Parameter auf -1 gesetzt werden.
#VQA |
Array-ID, StartIndex, EndIndex(letzter Index), Stringlänge(0), Stringoffset(0) |
Die Werte des Arrays (Array-ID [0...499]) werden im angegebenen Bereich (StartIndex bis EndIndex) sortiert. Die letzten beiden Parameter Stringlänge und Stringoffset werden nur verwendet wenn es sich um ein Stringarray (#VAU). Stringlänge (gesamt =0) gibt die Anzahl der Zeichen an, der Stringoffset die Zeichenposition die für die Sortierung beachtet werden sollen.
#VMA |
Array-ID, StartIndex, EndIndex(letzter Index) |
Der Befehl mischt die Werte des Arrays im angegebenen Bereich (StartIndex bis EndIndex). Die Werte bleiben dabei unverändert. Nur die Reihenfolge (Indexes) wird angepasst. Damit ist eine neue Zuordnung der Array-Indexes ⇔ Werte vorhanden....