Makros #M
Einzelne oder mehrere Befehlsfolgen können als sogenannte Makros zusammengefasst und auf der Mikro SD-Karte fest abgespeichert werden. Diese können dann mit den Befehlen gestartet werden. Ein Makro (*.emc) kann auch eine komplette Bildschirmseite aufbauen und ggfls. zuvor alle alten Objekte löschen (#ODI0). |
Makros ausführen / Bildschirmseite bzw. Screen wechseln
Normalmakro ausführen (Macro Run Normal) |
<Makroname> |
|
Normalmakro bedingt ausführen (Macro Run Conditionally) |
(Bedingung), <MakronameTrue>, <MakronameFalse> |
|
Normalmakro verzögert ausführen (Macro Run Delayed) |
Verzögerung-Nr., Zeit, <Makroname> |
|
I/O-Portmakro manuell ausführen (Macro Run Port) |
Port |
|
I/O-Bitmakro manuell ausführen (Macro Run Bit) |
Portpin, Flanke |
|
Analogmakro manuell ausführen (Macro Run Analogue) |
Kanal, Typ |
|
Touchmakro manuell ausführen (Macro Run Touch) |
Obj-ID, Typ, Point-Nr.(0) |
Makros definieren
Touchmakro definieren (Macro Define Touch) |
Obj-ID, <MakronameDown>, <MakronameUp>; <MakronameDrag> |
|
Makro-Prozess definieren (Macro Process Define) |
Prozess-Nr, Zeit, <Makroname>, Startnummer(keine), Endnummer (Startnummer), Typ(1) |
|
Bedingten Makro-Prozess definieren (Macro Process Conditionally) |
Prozess-Nr, Zeit, (Bedingung), <Makroname>, Startnummer(keine), Endnummer (Startnummer), Typ(1) |
|
Automatischen Makro-Prozess definieren (Macro Process Autochange) |
Prozess-Nr, Zeit, (Berechnung), <Makroname>, Startnummer(keine), Endnummer (Startnummer), Typ(1) |
|
Zeit von Makro-Prozess ändern (Macro Process Time) |
Prozess-Nr, Zeit |
|
Action-Endmakro definieren (Macro Define Actionend) |
Obj-ID, <Makroname> |
|
I/O Portmakro definieren (Macro Hardware Port) |
Port |
|
I/O Bitmakro definieren (Macro Hardware Bit) |
Portpin, Flanke, <Makroname> |
|
Analogmakro definieren (Macro Hardware Analogue) |
Kanal, Typ, <Makroname> |
|
RS232 Empfangsmakro definieren (Macro Hardware RS232 master) |
Bufferanzahl,<Makroname> |
|
Sekundenmakro (RTC) definieren (Macro Define Second) |
<Makroname> |
|
Sound-Endmakro definieren (Macro Hardware Soundend) |
<Makroname> |
|
Backlight Autodimmmakro definieren (Macro Define Led) |
<Makroname> |
|
Gesten Makro definieren (Macro Define touch Gesture) |
Obj-ID, <MakronameDoubleClick>, <MakronameLongClick> |
|
Makrodefinitionen löschen (Macro Clear Defines) |
Maske |
Befehle innerhalb von Makros
Befehle überspringen (Macro File Skip) |
(Bedingung), Befehlen(1) |
|
Sprung zu Ziel (Macro File Jump) |
(Bedingung), Marker-Nr(0), Löschen(0) |
|
Sprungziel setzen (Macro File Marker) |
Marker-Nr(0) |
|
Sprung zu Ziel mit Rücksprung (Macro File Call) |
(Bedingung), Marker-Nr(0), Löschen(0) |
|
Rücksprung zu Aufruf (Macro File Return) |
(Bedingung) (true) |
|
Makro verlassen (Macro File Exit) |
(Bedingung) (true), <Makroname> |
|
Marker löschen (Macro File Delete) |
Marker-Nr |
Makros ausführen
Normalmakro ausführen / Seite starten
#MRN |
<Makroname> |
Der Befehl führt das Makro (<Makroname>) aus.
... #MRN <P:macro/macro.emc> ... |
... #MRN "macro"; ... |
Alternativ startet dieser Befehl eine komplette Bildschirmseite.
... #MRN <P:macro/screen/Screen1.emc> ... |
... #MRN "screen/Screen1"; ... |
#MRC |
(Bedingung), <MakronameTrue>; <MakronameFalse> |
Wenn die Bedingung wahr ist wird <MakronameTrue> ausgeführt, ansonsten <MakronameFalse>.
... #MRC (R0<10),<P:macro/macroTRUE.emc>;<P:macro/macroFALSE.emc> ... |
... #MRC (R0<10),"macroTRUE";"macroFALSE"; ... |
Normalmakro verzögert ausführen
#MRD |
Verzögerung-Nr., Zeit, <Makroname> |
Der Befehl führt das Makro (<Makroname>) verzögert aus. Es können gleichzeitig bis zu 10 Makros verzögert gestartet werden (Verzögerung-Nr 1...10). Die Zeit wird in 1/100 s angegeben. Wird vor dem Ausführung der Befehl erneut, jedoch ohne Zeit und Makroname ausgeführt, so wird das der Verzögerungs-Nr. zugeordnete Makro nicht mehr gestartet (z.B. #MRD 1) . Auch ein Re-Trigger ist möglich. Bei erneutem Ausführen des Befehls beginnt die angegebene Verzögerungszeit von vorne. Wird die Zeit 0 angegeben, so startet das Makro sofort.
... #MRD 1,100,<P:macro/macro.emc> ... |
... #MRD 1,100,"macro"; ... |
oder
...
#MRD 1,100,<P:macro/screen/Screen2.emc>
...
I/O-Portmakro manuell ausführen
#MRP |
Port |
Der Befehl führt manuell ein Portmakro aus (Port 0...15).
I/O-Bitmakro manuell ausführen
#MRB |
Portpin, Flanke |
Der Befehl führt manuell ein Bitmakro aus (Portpin 0...127).
Flanke |
|
0 |
Fallend |
1 |
Steigend |
#MRA |
Kanal, Typ |
Der Befehl führt manuell ein Analogmakro aus (Kanal 0...3). Die Parametrisierung des Analogeingangs (Grenzen, Hysterese) werden mit der Befehlsgruppe 'Analog Input' eingestellt.
Typ |
|
0 |
Bei jeder Änderung |
1 |
Dekrement |
2 |
Inkrement |
3 |
Kleiner als Grenze 1 |
4 |
Größer als Grenze 1 |
5 |
Kleiner als Grenze 2 |
6 |
Größer als Grenze 2 |
7 |
Fenster verlassen |
8 |
Fenster eingetreten |
#MRT |
Obj-ID, Typ, Point-Nr.(0) |
Der Befehl führt manuell ein Touchmakro aus (Objekt Obj-ID). PointNr (0...4) gibt den Finger an: 0=erster, 1=zweiter usw. Berührpunkt.
Typ |
|
1 |
Normal |
2 |
Gedrückt |
3 |
Drag |
Makros definieren
#MDT |
Obj-ID, <MakronameDown>; <MakronameUp>; <MakronameDrag> |
Der Befehl definiert ein Touchmakro. Das Makro <MakronameDown> wird aufgerufen wenn die Taste gedrückt wird, <MakronameUp> beim Loslassen, <MakronameDrag> bei Ziehen (vor allem für Bargraphen und Instrumente sinnvoll). Bei einem Leerstring ("";) wird das entsprechende Makro gelöscht.
Module mit kapazitiven Touchpanel unterstützen auch Mehrfingerbedienung. Es werden bis zu 5 Punkte erkannt. Die ersten drei Makronamen gelten dann für den ersten Punkt, die nächsten drei für den zweiten usw. Ist kein spezielles Makro für den Punkt definiert, werden immer die Makros für den ersten Punkt aufgerufen.
... #MDT 1,<P:macro/macroDOWN.emc>;<P:macro/macroUP.emc>,<P:macro/macroDRAG.emc> ... |
... #MDT 1,"macroDOWN";"macroUP";"macroDRAG"; ... |
#MPD |
Prozess-Nr, Zeit, <Makroname>; Startnummer(keine), Endnummer (Startnummer), Typ(1) |
Makroprozesse definieren einen automatischen, zeitlich getriggerten Ablauf von Makros. Der Prozess (Nr 1...10) ruft automatisch in (Zeit in 1/100s) ein Makro (<Makroname>) auf. Es können auch mehrere Makros nacheinander aufgerufen werden (Startnummer bis Endnummer). Dazu müssen die entsprechenden Ziffern an den Makronamen angefügt werden. Der Typ gibt die Reihenfolge an:
Beispiel 1:
Beispiel 2:
|
Bedingten Makro-Prozess definieren
#MPC |
Prozess-Nr, Zeit, (Bedingung), <Makroname>; Startnummer(keine), Endnummer (Startnummer), Typ(1) |
Bedingte Makroprozesse definieren einen automatischen, zeitlich getriggerten Ablauf von Makros, wenn eine Bedingung erfüllt (wahr) ist. Der Prozess (Prozess-Nr 1...10) ruft automatisch in (Zeit in 1/100 s) ein Makro (<Makroname>) auf.
Es können auch mehrere Makros hintereinander aufgerufen werden. Siehe Beispiel 2.
Der Typ gibt die Aufrufreihenfolge an:
Typ |
|
1 |
Zyklisch |
2 |
Zyklisch rückwärts |
3 |
PingPong |
4 |
PingPong rückwärts |
5 |
Einmalig |
6 |
Einmalig rückwärts |
Beispiel 1:
... #MPC 1,100,(R1<10),<P:macro/Macroname.emc> ... |
... #MPC 1,100,(R1<10),"Macroname"; ... |
Beispiel 2:
... #MPC 1,100,(R1<10),<P:macro/Macroname.emc>;1,3 ... |
... #MPC 1,100,(R1<10),"Macroname";1,3 /** definiert einen Makroprozess /** Nr.1 wenn R1 kleiner 10 wird und startet dann nacheinander /** Macroname1, Macroname2 und Macroname3 ... |
Automatischen Makro-Prozess definieren
#MPA |
Prozess-Nr, Zeit, (Berechnung), <Makroname>; Startnummer(keine), Endnummer (Startnummer), Typ(1) |
Automatische Makroprozesse definieren einen automatischen, zeitlich getriggerten Ablauf von Makros, wenn sich der Wert der Berechnung geändert hat. Der Prozess (Prozess-Nr 1...10) ruft dann automatisch in (Zeit in 1/100 s) ein Makro (<Makroname>) auf. Es können auch mehrere Makros hintereinander aufgerufen werden. Siehe Beispiel 2.
Der Typ gibt die Aufrufreihenfolge an:
Typ |
|
1 |
Zyklisch |
2 |
Zyklisch rückwärts |
3 |
PingPong |
4 |
PingPong rückwärts |
5 |
Einmalig |
6 |
Einmalig rückwärts |
Beispiel 1:
... #MPA 1,100,(R1),<P:macro/Macroname.emc> ... |
... #MPA 1,100,(R1),"Macroname"; ... |
Beispiel 2:
... #MPA 1,100,(R1),<P:macro/Macroname.emc>;1,3 ... |
... #MPA 1,100,(R1)"Macroname";1,3 /** definiert einen Makroprozess /** Nr.1 sobald R1 sich ändert und startet dann nacheinander /** Macroname1, Macroname2 und Macroname3 ... |
#MPT |
Prozess-Nr, Zeit |
Die Zeit (1/100 s) für den Makroprozess (Prozess-Nr =0 alle) wird geändert.
Zeit |
|
-1 |
Mit alter Zeit neu beginnen |
0 |
Stoppen |
>0 |
Zeit neu setzen |
#MDA |
Obj-ID, <Makroname> |
Nach dem Ende einer Objekt-Animation (Obj-ID) wird das Makro (<Makroname>) aufgerufen.
... #MDA 1, ... |
... #MDA 1,"Macro"; ... |
#MHP |
Port |
Das Portmakro wird aufgerufen wenn sich der Status des Ports (0...15) ändert.
... #MHP 0,<P:macro/Macro.emc> ... |
... #MHP 0,"Macro"; ... |
#MHB |
Portpin, Flanke, <Makroname> |
Das Bitmakro wird aufgerufen wenn eine Flanke am Portpin (0...127) registriert wird.
Flanke |
|
0 |
Fallend |
1 |
Steigend |
2 |
Beide Flanken |
... #MHB 16,2,<P:macro/Macro.emc> ... |
... #MHB 16,2,"Macro"; ... |
#MHA |
Kanal, Typ, <Makroname> |
Einem A/D-Eingang (Kanal 0...3) wird ein Makro (<Makroname>) zugewiesen. Typ:
Typ |
|
0 |
Bei jeder Änderung |
1 |
Dekrement |
2 |
Inkrement |
3 |
Kleiner als Grenze 1 |
4 |
Größer als Grenze 1 |
5 |
Kleiner als Grenze 2 |
6 |
Größer als Grenze 2 |
7 |
Fenster verlassen |
8 |
Fenster eingetreten |
Die Parametrisierung des Analogeingangs (Grenzen, Hysterese) werden mit der Befehlsgruppe 'Analog Input' eingestellt.
... #MHA 0,0,<P:macro/Macro.emc> ... |
... #MHA 0,0,"Macro"; ... |
RS232 Empfangsmakro definieren
#MHR |
Bufferanzahl,<Makroname> |
Das Makro (<Makroname>) wird aufgerufen wenn die Bufferanzahl (0=disable) im Master RS232 Empfangsbuffer erreicht wird.
... #MHR 42,<P:macro/Macro.emc> ... |
... #MHR 42,"Macro"; ... |
Sekundenmakro (RTC) definieren
#MDS |
<Makroname> |
Das Makro (<Makroname>) wird jede Sekunde aufgerufen.
... #MDS <P:macro/Macro.emc> ... |
... #MDS "Macro"; ... |
#MHS |
<Makroname> |
Das Makro (<Makroname>) wird aufgerufen wenn das Soundfile zu Ende gespielt ist. Die Definition muss vor dem Abspielen des Sounds erfolgen. Bei automatisch abgespielten Sounds (z.B. Button) wird das Makro nicht aufgerufen (nur bei manuellem Starten #HTP)
... #MHS <P:macro/Macro.emc> ... |
... #MHS "Macro"; ... |
Backlight Autodimmmakro definieren
#MDL |
<Makroname> |
Die automatische Dimmfunktion des Backlights ruft bei Änderung des Zustand das angegebene Makro (<Makroname>) auf. Siehe den Befehl #XAL für Parametereinstellungen, wie Helligkeit und Zeit.
... #MDL <P:macro/Macro.emc> ... |
... #MDL "Macro"; ... |
#MDG |
Obj-ID, <MakronameDoubleClick>; <MakronameLongClick> |
Der Befehl definiert ein Gestenmakro. Das Makro <MakronameDoubleClick> wird bei einem Doppelklick, das Makro <MakronameLongClick> bei einem langen Klick aufgerufen.
... #MDG 1,<P:macro/MacroDoubleClick>;<P:macro/MacroLongClick> ... |
... #MDG 1,"MacroDoubleClick";"MacroLongClick"; ... |
#MCD |
Maske |
Der Befehl löscht Makrodefinitionen nach dem Typ:
Maske |
|
0 |
Sekunden Makros (RTC) |
2 |
Prozess Makros |
4 |
Port Makros |
8 |
Bit Makros |
16 |
Analog Makros |
32 |
Touch/Gesten Makros |
64 |
Action Makros |
128 |
Verzögerte Makros |
256 |
Backlight Makro |
512 |
RS232 Empfangsmakro |
1024 |
Sound Endmakro |
Die einzelnen Typen können addiert werden, z.B. alle Makros löschen: Maske = $FFFF
Befehle innerhalb von Makros
#MFS |
(Bedingung), Befehlen(1) |
We0nn die Bedingung wahr ist, überspringt der Befehl die definierte Anzahl an Befehlen (Leerzeilen und Kommentare werden ignoriert) im Makro.
#MFJ |
(Bedingung), Marker-Nr(0), Löschen(0) |
Wenn die Bedingung wahr ist, springt der Befehl zum Marker (Marker-Nr. 0..99) im Makro. Ein Marker kann in einem Makro mehrmals vorkommen. Der Parameter Löschen löscht den letzten gefundenen Marker und sucht in dem Makro den nächsten Marker mit der gleichen ID.
#MFM |
Marker-Nr(0) |
Der Befehl setzt ein Sprungziel (Marker-Nr. 0..99) im Makro.
Sprung zu Ziel mit Rücksprung (ab V1.1)
#MFC |
(Bedingung), Marker-Nr(0), Löschen(0) |
Wenn die Bedingung wahr ist, springt der Befehl zum Marker (Marker-Nr. 0..99) im Makro. Ein Marker kann in einem Makro mehrmals vorkommen. Für den Rücksprung zum Aufruf ist zwingend ein Return (#MFR) notwendig. Der Parameter Löschen löscht den letzten gefundenen Marker und sucht in dem Makro den nächsten Marker mit der gleichen ID.
#MFR |
(Bedingung) (true) |
Wenn die Bedingung wahr ist, springt der Befehl zum Aufruf (Call).
#MFE |
(Bedingung) (true), <Makroname> |
Wenn die Bedingung wahr ist, wird das Makro verlassen. Optional kann ein weiteres Makro (<Makroname>) aufgerufen werden.
#MFD |
Marker-Nr |
Der Befehl löscht den letzten Marker mit der Marker-Nr.
Vergleich zwischen C-Code und Makro-Code
In unserer uniTFTAcademy finden Sie ein Trainingsvideo, welches genau den Sachverhalt der If-Abfragen beleuchtet. |
if-Abfrage einzeilig |
|
C-Code |
Makro-Code |
if(R1<10) |
#MFS (R1>=10),3 #??? /**Command #MFS (R1<10),1 #??? /**Command |
if-Abfrage mehrzeilig |
|
C-Code |
Makro-Code |
if(R1<10) //Command 2 //Command 2 |
#MFJ (R1>=10),1 #??? /**Command 1 #??? /**Command 2 #MFJ (1),2 #MFM 1 #??? /**Command 1 #??? /**Command 2 #MFM 2 |
In unserer uniTFTAcademy finden Sie ein Trainingsvideo, welches genau den Sachverhalt der Schleifen beleuchtet. |
for-Schleife |
|
C-Code |
Makro-Code |
for(int i=0;i<10;i++) //Command 2 |
#VRI 0,0 #MFM 1 #??? /**Command 1 #??? /**Command 2 #MFJ (++R0<10),1 |
do-Schleife |
|
C-Code |
Makro-Code |
do //Command 2 |
#MFM 1 #??? /**Command 1 #??? /**Command 2 #MFJ (R0<10),1 |
Funktionsaufruf |
|
C-Code |
Makro-Code |
... //Command 1 //Command 2 //Function Command 2 |
#MFC 1,1 #??? /**Command 1 #??? /**Command 2 #MFE /**---------------subfunction--------------- #MFM 1 #??? /**Function Command 1 #??? /**Function Command 1 #MFR |