Makros #M

Einzelne oder mehrere Befehlsfolgen können als sogenannte Makros zusammengefasst und im internen FLASH fest abgespeichert werden. Diese können dann mit verschiedenen 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)

#MRN

<Makroname>

Normalmakro bedingt ausführen

(Macro Run Conditionally)

#MRC

(Bedingung), <MakronameTrue>, <MakronameFalse>

Normalmakro verzögert ausführen

(Macro Run Delayed)

#MRD

Verzögerung-Nr., Zeit, <Makroname>

I/O-Portmakro manuell ausführen

(Macro Run Port)

#MRP

Port

I/O-Bitmakro manuell ausführen

(Macro Run Bit)

#MRB

Portpin, Flanke

Analogmakro manuell ausführen

(Macro Run Analogue)

#MRA

Kanal, Typ

Touchmakro manuell ausführen

(Macro Run Touch)

#MRT

Obj-ID, Typ, Point-Nr.(0)

Makros definieren

Touchmakro definieren

(Macro Define Touch)

#MDT

Obj-ID,  <MakronameDown>, <MakronameUp>; <MakronameDrag>

Makro-Prozess definieren

(Macro Process Define)

#MPD

Prozess-Nr, Zeit, <Makroname>, Startnummer(keine), Endnummer (Startnummer), Typ(1)

Bedingten Makro-Prozess definieren

(Macro Process Conditionally)

#MPC

Prozess-Nr, Zeit, (Bedingung), <Makroname>, Startnummer(keine), Endnummer (Startnummer), Typ(1)

Automatischen Makro-Prozess definieren

(Macro Process Autochange)

#MPA

Prozess-Nr, Zeit, (Berechnung), <Makroname>, Startnummer(keine), Endnummer (Startnummer), Typ(1)

Zeit von Makro-Prozess ändern

(Macro Process Time)

#MPT

Prozess-Nr, Zeit

Action-Endmakro definieren

(Macro Define Actionend)

#MDA

Obj-ID, <Makroname>

I/O Portmakro definieren

(Macro Hardware Port)

#MHP

Port

I/O Bitmakro definieren

(Macro Hardware Bit)

#MHB

Portpin, Flanke, <Makroname>

Analogmakro definieren

(Macro Hardware Analogue)

#MHA

Kanal, Typ, <Makroname>

RS232 Empfangsmakro definieren

(Macro Hardware RS232 master)

#MHR

Bufferanzahl,<Makroname>

Sekundenmakro (RTC) definieren

(Macro Define Second)

#MDS

<Makroname>

Sound-Endmakro definieren

(Macro Hardware Soundend)

#MHS

<Makroname>

Backlight Autodimmmakro definieren

(Macro Define Led)

#MDL

<Makroname>

Gesten Makro definieren

(Macro Define touch Gesture)

#MDG

Obj-ID, <MakronameDoubleClick>, <MakronameLongClick>

Makrodefinitionen löschen

(Macro Clear Defines)

#MCD

Maske

Befehle innerhalb von Makros

Befehle überspringen

(Macro File Skip)

#MFS

(Bedingung), Befehlen(1)

Sprung zu Ziel

(Macro File Jump)

#MFJ

(Bedingung), Marker-Nr(0), Löschen(0)

Sprungziel setzen

(Macro File Marker)

#MFM

Marker-Nr(0)

Sprung zu Ziel mit Rücksprung

(Macro File Call)

#MFC

(Bedingung), Marker-Nr(0), Löschen(0)

Rücksprung zu Aufruf

(Macro File Return)

#MFR

(Bedingung) (true)

Makro verlassen

(Macro File Exit)

#MFE

(Bedingung) (true), <Makroname>

Marker löschen

(Macro File Delete)

#MFD

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";

...


Normalmakro bedingt ausführen

#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...16).


I/O-Bitmakro manuell ausführen

#MRB

Portpin, Flanke

Der Befehl führt manuell ein Bitmakro aus (Portpin 0...136).

Flanke

0

Fallend

1

Steigend


Analogmakro manuell ausführen

#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


Touchmakro manuell ausführen

#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


Touchmakro 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";

...


Makro-Prozess definieren

#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:

Typ

1

Zyklisch

2

Zyklisch rückwärts

3

PingPong

4

PingPong rückwärts

5

Einmalig

6

Einmalig rückwärts

Beispiel 1:

...

#MPD 1,50,<P:macro/Macroname.emc>



...

...

#MPD 1,50,"Macroname" /** definiert einen Makroprozess Nr.1

/** und startet das Makro 2x pro Sekunde (50/100s)

...



Beispiel 2:

...

#MPD 1,50,<P:macro/Macroname.emc>;1,3



...

...

#MPD 1,50,"Macroname";1,3 /** definiert einen Makroprozess

/** Nr.1 und startet nacheinander Macroname1, Macroname2

/** und Macroname3

...



Bedingten Makro-Prozess definieren

#MPC

Prozess-Nr, Zeit, (Bedingung), <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:

...

#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)


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

...



Zeit von Makro-Prozess ändern

#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


Action-Endmakro definieren

#MDA

Obj-ID, <Makroname>

Nach dem Ende einer Objekt-Animation (Obj-ID) wird das Makro (<Makroname>) aufgerufen.

...

#MDA 1,

...

...

#MDA 1,"Macro";

...


I/O Portmakro definieren

#MHP

Port

Das Portmakro wird aufgerufen wenn sich der Status des Ports (0...15) ändert.

...

#MHP 0,<P:macro/Macro.emc>

...

...

#MHP 0,"Macro";

...


I/O Bitmakro definieren

#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";

...


Analogmakro definieren

#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";

...


Sound-Endmakro definieren

#MHS

<Makroname>

Das Makro (<Makroname>) wird aufgerufen wenn der Notenstring zu Ende gespielt ist. Die Definition muss vor dem Abspielen der Notenfolge erfolgen. Bei automatisch abgespielten Tönen (z.B. Button) wird das Makro nicht aufgerufen (nur bei manuellem Starten #HTN)

...

#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";

...


Gesten Makro definieren

#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";

...


Makrodefinitionen löschen

#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

Befehle überspringen

#MFS

(Bedingung), Befehlen(1)

Wenn die Bedingung wahr ist, überspringt der Befehl die definierte Anzahl an Befehlen (Leerzeilen und Kommentare werden ignoriert) im Makro.

...

#MFS (R1<10),2

  #??? /**Command 1

  #??? /**Command 2

#??? /**Command 3

...


Sprung zu Ziel

#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.

...

#MFJ (R1<10),1

  #??? /**Command 1

  #??? /**Command 2

MFM 1

#??? /**Command 3

...



Sprungziel setzen

#MFM

Marker-Nr(0)

Der Befehl setzt ein Sprungziel  (Marker-Nr. 0..99) im Makro.


Sprung zu Ziel mit Rücksprung

#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.

...

#MFC (R1<10),1

#??? /**Command 1

#??? /**Command 2

#MFE


#MFM 1

  #??? /**Command 3

#MFR

...


Rücksprung zu Aufruf

#MFR

(Bedingung) (true)

Wenn die Bedingung wahr ist, springt der Befehl zum Aufruf (Call).


Makro verlassen

#MFE

(Bedingung) (true), <Makroname>

Wenn die Bedingung wahr ist, wird das Makro verlassen. Optional kann ein weiteres Makro (<Makroname>) aufgerufen werden.


Marker löschen

#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)
  //Command
else
  //Command

#MFS (R1>=10),3

  #??? /**Command

#MFS (R1<10),1

  #??? /**Command

if-Abfrage mehrzeilig

C-Code

Makro-Code

if(R1<10)
{
  //Command 1

  //Command 2
}
else
{
  //Command 1

  //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 1

  //Command 2
}

#VRI 0,0

#MFM 1

  #??? /**Command 1

  #??? /**Command 2

#MFJ (++R0<10),1

do-Schleife

C-Code

Makro-Code

do
{
  //Command 1

  //Command 2
}while(R1<10)

#MFM 1

  #??? /**Command 1

  #??? /**Command 2

#MFJ (R0<10),1

Funktionsaufruf

C-Code

Makro-Code

...
{
  subfunction();

  //Command 1

  //Command 2
}
void subfunction()
{
  //Function Command 1

  //Function Command 2
}

#MFC 1,1

  #??? /**Command 1

  #??? /**Command 2

#MFE


/**---------------subfunction---------------

#MFM 1

  #??? /**Function Command 1

  #??? /**Function Command 1

#MFR