Xero Macro: Unterschied zwischen den Versionen
Han (Diskussion | Beiträge) (→Schleife - loop / loop_end) |
Han (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
+ | {{todo|Conditional Macros}} | ||
+ | |||
+ | |||
+ | === Normnamen === | ||
+ | |||
+ | Jedes Modul einer Anlage (=Arena) ist eindeutig über seinen hierarchischen aufgebauten (Norm-)Namen identifizierbar. | ||
+ | Alle Module des Hauptfensters (=Root) sind direkt über ihren Namen adressierbar ("RootModul"). | ||
+ | |||
+ | Ein Modul "innherhalb" eines Root-Moduls wird über "<tt>RootModul.SubModul</tt>" adressiert. | ||
+ | |||
+ | Da auch jeder "Wert" bzw. "Parameter" eines Moduls von einem Modul repräsentiert wird, werden diese Werte ebenfalls durch einen Punkt vom übergeordneten "Parent" Modul getrennt. | ||
+ | |||
+ | |||
+ | ==== Beispiel: ==== | ||
+ | |||
+ | Eine Arena besteht aus einem FID und einem FlowController (FC). | ||
+ | |||
+ | Der FID besitzt eine Messkomponente TCH. | ||
+ | |||
+ | Dieser wiederum hat einen Wert für das Spangas (=Kalibriergas); somit kann dieser Spangaswert über | ||
+ | :<tt>FID.THC.Spangas</tt> | ||
+ | angesprochen werden. | ||
+ | |||
+ | Bei der [Macroprogrammierung] gilt zusätzlich die Vereinbarung, dass das "eigene" Modul (also das Modul welches das Macro speichert) über das Prefix "<tt>this.</tt>" angesprochen werden kann. | ||
+ | Ist also beim Modul THC (im FID) ein Macro gespeichert, so kann obiger Spangaswert in diesem Macro mit | ||
+ | :<tt>this.Spangas</tt> | ||
+ | angesprochen werden. | ||
+ | Von einem Macro das im FID gespeichert ist, kann dieser Wert mit | ||
+ | :<tt>this.THC.Spangas</tt> | ||
+ | erreicht werden. | ||
+ | |||
+ | Für Macros im Root-Modul gilt die Ausnahme, dass hier ''kein'' "<tt>this.</tt>" vorangestellt werden darf. | ||
+ | D.h. in obigem Beispiel wäre die Referenz | ||
+ | :<tt>this.FID.THC.Spangas</tt> | ||
+ | für ein Macro im Hauptfenster ungültig! (Richtig wäre hier <tt>FID.THC.Spangas</tt>) | ||
+ | |||
+ | |||
+ | === Macronamen und -aufruf === | ||
+ | |||
+ | Ein Macro wird über | ||
+ | <code> | ||
+ | macro MacroName() | ||
+ | ... | ||
+ | ... | ||
+ | macro_end | ||
+ | </code> | ||
+ | definiert. | ||
+ | |||
+ | Falls der MacroName ein Präfix enthält (z.B. "FID.") so legt dieses fest, in welchem Modul das Macro angezeigt wird. | ||
+ | Die Macrodefinition | ||
+ | <code> | ||
+ | macro FID.Ready() | ||
+ | ... | ||
+ | </code> | ||
+ | würde also bewirken, dass dieses Macro im Modulfenster des FID dargestellt wird. | ||
+ | Ausgeführt werden kann das Macro kann allerdings von jeder beliebigen Stelle aus über "<tt>FID.Ready()</tt>". | ||
+ | |||
+ | |||
=== Grundlegende Macrobefehle === | === Grundlegende Macrobefehle === | ||
Zeile 19: | Zeile 77: | ||
*<tt>hideif</tt> | *<tt>hideif</tt> | ||
− | :Sichtbarkeit in | + | :Sichtbarkeit in Abhängigkeit des Modulstatus (Status) |
*<tt>showif</tt> | *<tt>showif</tt> | ||
− | :Sichtbarkeit in | + | :Sichtbarkeit in Abhängigkeit des Modulstatus (Status) |
*<tt>Access</tt> | *<tt>Access</tt> | ||
− | :Sichtbarkeit in | + | :Sichtbarkeit in Abhängigkeit des Zugriffslevel |
*<tt>Process</tt> | *<tt>Process</tt> | ||
Zeile 55: | Zeile 113: | ||
==== Empfohlene Standard Macronormnamen für Prüfstandautomatisierung, allg. Messtechnik, Analysatoren und Messanlagen ==== | ==== Empfohlene Standard Macronormnamen für Prüfstandautomatisierung, allg. Messtechnik, Analysatoren und Messanlagen ==== | ||
− | *<tt>Ready() | + | *<tt>'''Ready()'''</tt> bzw. <tt><Modulnormname>.'''Ready()'''</tt> |
:→ Standby, Bereitschaft (erforderlich bei Gasanalysesystemen) | :→ Standby, Bereitschaft (erforderlich bei Gasanalysesystemen) | ||
− | *<tt>ECO_Mode()</tt> bzw. <tt><Modulnormname>.ECO_Mode()</tt> | + | *<tt>'''ECO_Mode()'''</tt> bzw. <tt><Modulnormname>.'''ECO_Mode()'''</tt> |
:→ Pause, Stromsparmodus | :→ Pause, Stromsparmodus | ||
− | *<tt>Sample()</tt> bzw. <tt><Modulnormname>.Sample() </tt> | + | *<tt>'''Sample()'''</tt> bzw. <tt><Modulnormname>.'''Sample()''' </tt> |
:→ Messen, (erforderlich bei Gasanalysesystemen) | :→ Messen, (erforderlich bei Gasanalysesystemen) | ||
− | *<tt>SampleZero()</tt> bzw. <tt><Modulnormname>.SampleZero()</tt> | + | *<tt>'''SampleZero()'''</tt> bzw. <tt><Modulnormname>.'''SampleZero()'''</tt> |
:→ Messen Nullwert, Nullgas messen | :→ Messen Nullwert, Nullgas messen | ||
− | *<tt>SampleSpan()</tt> bzw. <tt><Modulnormname>.SampleSpan()</tt> | + | *<tt>'''SampleSpan()'''</tt> bzw. <tt><Modulnormname>.'''SampleSpan()'''</tt> |
:→ Messen Endwert, Endgas messen | :→ Messen Endwert, Endgas messen | ||
− | *<tt>Clean()</tt> bzw. <tt><Modulnormname>.Clean()</tt> | + | *<tt>'''Clean()'''</tt> bzw. <tt><Modulnormname>.'''Clean()'''</tt> |
:→ Spülen, allgemeine Reinigung der Systems (erforderlich bei Gasanalysesystemen) | :→ Spülen, allgemeine Reinigung der Systems (erforderlich bei Gasanalysesystemen) | ||
− | *<tt>Adjust()</tt> bzw. <tt><Modulnormname>.Adjust()</tt> | + | *<tt>'''Adjust()'''</tt> bzw. <tt><Modulnormname>.'''Adjust()'''</tt> |
:→ Justierung Gerat/Komponente (erforderlich bei Gasanalysesystemen) | :→ Justierung Gerat/Komponente (erforderlich bei Gasanalysesystemen) | ||
− | *<tt>AdjustZero()</tt> bzw. <tt><Modulnormname>.AdjustZero()</tt> | + | *<tt>'''AdjustZero()'''</tt> bzw. <tt><Modulnormname>.'''AdjustZero()'''</tt> |
:→ Justierung Nullwert | :→ Justierung Nullwert | ||
− | *<tt>AdjustSpan()</tt> bzw. <tt><Modulnormname>.AdjustSpan()</tt> | + | *<tt>'''AdjustSpan()'''</tt> bzw. <tt><Modulnormname>.'''AdjustSpan()'''</tt> |
:→ Justierung Endwert | :→ Justierung Endwert | ||
Version vom 7. November 2014, 13:28 Uhr
Inhaltsverzeichnis
- 1 Normnamen
- 2 Macronamen und -aufruf
- 3 Grundlegende Macrobefehle
- 3.1 'this' Operator
- 3.2 'parent' Operator
- 3.3 Macro - macro / macro_end
- 3.4 Empfohlene Standard Macronormnamen für Prüfstandautomatisierung, allg. Messtechnik, Analysatoren und Messanlagen
- 3.5 Bedingte Ausführung - if / if_else / if_end
- 3.6 Wartezeit - delay
- 3.7 Bedingtes Warten - wait(for)
- 3.8 Schleife - loop / loop_end
- 4 Default Macroaufrufe
- 5 Zuweisung
- 6 Default Aliasnamen
Normnamen
Jedes Modul einer Anlage (=Arena) ist eindeutig über seinen hierarchischen aufgebauten (Norm-)Namen identifizierbar. Alle Module des Hauptfensters (=Root) sind direkt über ihren Namen adressierbar ("RootModul").
Ein Modul "innherhalb" eines Root-Moduls wird über "RootModul.SubModul" adressiert.
Da auch jeder "Wert" bzw. "Parameter" eines Moduls von einem Modul repräsentiert wird, werden diese Werte ebenfalls durch einen Punkt vom übergeordneten "Parent" Modul getrennt.
Beispiel:
Eine Arena besteht aus einem FID und einem FlowController (FC).
Der FID besitzt eine Messkomponente TCH.
Dieser wiederum hat einen Wert für das Spangas (=Kalibriergas); somit kann dieser Spangaswert über
- FID.THC.Spangas
angesprochen werden.
Bei der [Macroprogrammierung] gilt zusätzlich die Vereinbarung, dass das "eigene" Modul (also das Modul welches das Macro speichert) über das Prefix "this." angesprochen werden kann. Ist also beim Modul THC (im FID) ein Macro gespeichert, so kann obiger Spangaswert in diesem Macro mit
- this.Spangas
angesprochen werden. Von einem Macro das im FID gespeichert ist, kann dieser Wert mit
- this.THC.Spangas
erreicht werden.
Für Macros im Root-Modul gilt die Ausnahme, dass hier kein "this." vorangestellt werden darf. D.h. in obigem Beispiel wäre die Referenz
- this.FID.THC.Spangas
für ein Macro im Hauptfenster ungültig! (Richtig wäre hier FID.THC.Spangas)
Macronamen und -aufruf
Ein Macro wird über
macro MacroName() ... ... macro_end
definiert.
Falls der MacroName ein Präfix enthält (z.B. "FID.") so legt dieses fest, in welchem Modul das Macro angezeigt wird.
Die Macrodefinition
macro FID.Ready() ...
würde also bewirken, dass dieses Macro im Modulfenster des FID dargestellt wird. Ausgeführt werden kann das Macro kann allerdings von jeder beliebigen Stelle aus über "FID.Ready()".
Grundlegende Macrobefehle
'this' Operator
Der this Operator wird bei der Macroabarbeitung durch den Normnamen des aktuellen Moduls ersetzt
'parent' Operator
Der parent Operator wird bei der Macroabarbeitung durch den Normnamen des Übergeordneten Moduls ersetzt
Macro - macro / macro_end
- macro [Macroname]()
- Beginn eines Macros
- endmacro
- Ende des Makroblocks
- hideif
- Sichtbarkeit in Abhängigkeit des Modulstatus (Status)
- showif
- Sichtbarkeit in Abhängigkeit des Modulstatus (Status)
- Access
- Sichtbarkeit in Abhängigkeit des Zugriffslevel
- Process
- Process = direct → Macro wird sofort aufgerufen - ohne Rückfrage, falls ein Macro bereits läuft
- Process
- Process = simultaneous → Macro wird parallel zu einem bereits laufenden Macro ausgeführt
- macroend
- Ende des Makroblocks
Beispielmacro: Standby
macro Standby() ... ... macro_end
Es wird dringend empfohlen, dass das Ready()-Macro in jedem Modul inkl. Hauptfenster (Main) zu integrieren.
Das 'Ready()'-Macro des Hauptfenster (Main) wird im Fehlerfall standardmäßig aufgerufen (wenn es nicht implementiert ist, kann es auch nicht aufgerufen werden!).
Es empfiehlt sich auch bei umfangreichen Macroabläufen (Testsequenzen) am Beginn bzw. am Ende dieser Macrosequenz das 'Ready()'-Macro des Hauptfenster (Main)aufzurufen, damit ein definierter Zustand am Beginn der Macroabarbeitung bzw. ein definierter Zustand am Ende der Macroabarbeitung herrscht.
Grundsätzlich sollte das 'Ready()'-Macro des Hauptfenster (Main) einen definierten Zustand des Hauptfensters herstellen bzw. die 'Ready()'-Makros der Untermodule aufrufen (→ hierarchische/rekursive Abarbeitung), die Untermodule rufen wiederum die 'Ready()'-Macros deren Untermodule auf, usw.
Empfohlene Standard Macronormnamen für Prüfstandautomatisierung, allg. Messtechnik, Analysatoren und Messanlagen
- Ready() bzw. <Modulnormname>.Ready()
- → Standby, Bereitschaft (erforderlich bei Gasanalysesystemen)
- ECO_Mode() bzw. <Modulnormname>.ECO_Mode()
- → Pause, Stromsparmodus
- Sample() bzw. <Modulnormname>.Sample()
- → Messen, (erforderlich bei Gasanalysesystemen)
- SampleZero() bzw. <Modulnormname>.SampleZero()
- → Messen Nullwert, Nullgas messen
- SampleSpan() bzw. <Modulnormname>.SampleSpan()
- → Messen Endwert, Endgas messen
- Clean() bzw. <Modulnormname>.Clean()
- → Spülen, allgemeine Reinigung der Systems (erforderlich bei Gasanalysesystemen)
- Adjust() bzw. <Modulnormname>.Adjust()
- → Justierung Gerat/Komponente (erforderlich bei Gasanalysesystemen)
- AdjustZero() bzw. <Modulnormname>.AdjustZero()
- → Justierung Nullwert
- AdjustSpan() bzw. <Modulnormname>.AdjustSpan()
- → Justierung Endwert
Bedingte Ausführung - if / if_else / if_end
- if ([Bedingung])
- Beginn einer bedingten Ausführung
- → wenn die [Bedingung] in den Klammern wahr (true) ist, dann werden die Macroanweisungen von hier bis zum Ende der bedingten Ausführung bzw. zur if_else-Anweisung ausgeführt, andernfalls übersprungen bzw. wenn ein else Zweig deklariert ist dieser ausgeführt.
- if_else
- Wenn die [Bedingung] in den Klammern unwahr (false) ist, dann werden die Macroanweisungen von hier bis zum Ende der bedingten Ausführung ausgeführt
- if_end
- Ende der bedingten Ausführung
Beispiel für die Bedingung, dass Temperaturen des Sensor 'TI_1' grösser 100 °C
if (TI_1 > 100) ... ... if_end
Beispiel für die Bedingung, dass Temperaturen des Sensor 'TI_1' grösser 100 °C (mit if_else)
if (TI_1 > 100) ... ... if_else ... if_end
Wartezeit - delay
- delay([Verzögerung])
- Verzögerung im Macroablauf
- → die angegebene Verzögerung warten und danach mit der Macroabarbeitung fortfahren.
Beispiele für eine Verzögerung von 1 Stunde
delay(3600) delay(3600s) delay(60m) delay(1h)
Bedingtes Warten - wait(for)
- wait(for = ([Bedingung]), timeout = [max. Wartezeit])
- Begin bedingtes Warten
- → solange die [Bedingung] in den Klammern unwahr (false) ist, wird mit die Macroabarbeitung unterbrochen.
- Wird die [Bedingung] in den Klammern wahr (true), dann wird mit der nächsten/folgenden Macroanweisung fortgefahren.
- Nach Ablauf der angegebenen max. Wartezeit wird auch, ohne dass die [Bedingung] wahr (true) wird, fortgefahren.
wait(for = (TI_1 > 100), timeout = 200s))
Schleife - loop / loop_end
- loop([Durchläufe])
- Beginn einer Schleifen-Bedingung
- → die Macroanweisungen innerhalb der Schleife wird [Durchläufe] mal ausgeführt
- loop_end
- Ende der Schleife
Beispiel für eine Schleife mit 10 maligem Durchlauf
loop (10) ... ... loop_end
Default Macroaufrufe
Standardaufruf beim Starten der XERO Software
macro Main.Ready() ... ... macro_end
Standardaufruf beim Beenden der XERO Software
macro Main.Exit() ... ... macro_end
Standardaufruf bei Aktivierung eines Modules
macro Main.Activate() ... ... macro_end
Standardaufruf bei Deaktivierung eines Modules
macro Main.Deactivate() ... ... macro_end
Zuweisung
- Id
- Id ohne Gruppierung verweist auf Main.Id
- → siehe Abschnitt ??
Beispiel für die Zuweisung der Main.Id [Zielvariable] = Id
- &[Modulname]
- Zugriff auf einen Zahlenwert über eine Textreferenz [Modulname] innerhalb einer Textanweisung
- Beispiel für die Zuweisung eines Endgaswertes über den Referenznamen;
- THC.Spangas = 932ppm
[Zielvariable] = EGAK K0 &THC.Spangas; → wird zu 'EGAK K0 923'
Default Aliasnamen
- On → Ein
- Off → Aus
- Ready → Standby
- ECO_Mode → Pause
- Ignite → Zünden
- Clean → Spülen
- Sample → Messen
- SampleZero → Messen Nullwert
- SampleSpan → Messen Endwert
- Adjust → Justierung
- AdjustZero → Justierung Nullwert
- AdjustSpan → Justierung Endwert
- AdjustCuvette → Justierung Küvette