In diesem Kapitel werden tiefergehende Erläuterungen zu Makro und Accessory beschrieben.
Ein Makro dient zur Steuerung von Abläufen auf einer BiDiB-Baugruppe, wie z.B. der LightControl. Dazu werden mehrere Makroschritte in der konfigurierten Reihenfolge ausgeführt.
Die nachfolgende Abbildung zeigt den Makros-Reiter im BiDiB-Wizard.
Startbedingung
Jedes Makro kann zu einer konfigurierten Zeit durch die Modellbahn-Uhr gestartet werden. Dazu muss die Checkbox aktiviert werden und die Uhrzet ausgewählt werden. Zudem muss das Steuerungsprogramm regelmässig die aktuelle Modellbahn-Zeit senden.
Verzögerungsfaktor
Mit Anpassung des Verzögerungsfaktor
kann die Ausführgeschwindigkeit des Makro angepasst werden. Dieser Verzögerungsfaktor gilt für alle „Verzögerungen“ (Eintrag in Spalte Wartezeit sowie in Schritten mit Port Typ „Verzögerung“) im aktuellen Makro. Ein Wert von 2 führt zu einer Verdoppelung der Wartezeit während der Ausführung.
Hinweis: Die Wartezeit wird in Ticks angegeben. Normalerweise (bei Verzögerungsfaktor 1) dauert ein Tick 20ms.
Durchläufe
Der Wert im Schieber Durchläufe
bestimmt, wie oft ein Makro durchläuft, nachdem es gestartet wurde. Der Standardwert ist 1, wodurch ein gestartetes Makro 1-mal ausgeführt wird. Wird die Anzahl Durchläufe auf unendlich (∞) gesetzt, dann läuft das Makro bis es wieder gestoppt wird.
In den folgenden Abschnitten werden die Optionen der Spalte Porttyp
beschrieben.
Bei einigen Porttypen
ist die Spalte Verzögerung
aktiviert. Ein Verzögerungswert wird verwendet, um zu warten, bevor der Schritt ausgeführt wird. Wenn Sie vor dem Schritt eine Verzögerung hinzufügen möchten, müssen Sie den Port Typ Verzögerung
verwenden.
Bei den Ticks
handelt es sich um eine Zeitangabe für die Wartezeit bis zur Ausführung der Aktion. Die Grundeinheit ist ein Makro-Tick und beträgt 20 ms.
Der Porttyp Makro
ermöglicht das Starten
oder Stoppen
eines anderen Makros aus dem ausgewählten Makro. Dies ist erforderlich, wenn mehrere Makros ausgeführt werden, die dieselben Ports steuern.
Der Porttyp Eingang
ermöglicht es, die aktuelle Makroausführung in diesem Schritt zu blockieren, bis die ausgewählte Option in der Spalte Action
erfüllt ist.
Wenn Sie Warten bis Wert=0
wählen, wird das Makro in diesem Schritt blockiert, bis der ausgewählte Eingabeport einen Wert von 0 (aus) hat.
Wenn Sie Warten bis Wert=1
wählen, wird das Makro in diesem Schritt blockiert, bis der ausgewählte Eingabeport den Wert 1 (ein) hat.
Die nachfolgende Abbildung zeigt die Konfguration um das Makro im Schritt 2 so lange anzuhalten bis der Input_0 den Wert 0 hat.
Die anderen einfachen Porttypen wie
Lichtausgang
Servoausgang
Schaltausgang
Schaltausgang-Paar
ermöglichen die Ausführung einer Aktion am ausgewählten Port.
Für Servoausgang
muss der Zielwert
in der Spalte Extra
eingegeben werden. Dieser Wert wird in diesem Schritt als Zielwert für das Servo verwendet.
Der Typ Servo-Bewegung abwarten
blockiert das aktuelle Makro in diesem Schritt, bis das ausgewählte Servo den Zielwert erreicht hat.
Der Typ Verzögerung
ermöglicht es, in diesem Schritt auf die konfigurierte Verzögerung zu warten.
Die Zufällige Verzögerung
ermöglicht das Warten auf eine zufällige Verzögerung mit maximal der in diesem Schritt konfigurierten Verzögerung.
Bei den Ticks
handelt es sich um eine Zeitangabe für die Wartezeit bis zur Ausführung der Aktion. Die Grundeinheit ist ein Makro-Tick und beträgt 20 ms.
In das Eingabefeld Wartezeit
kann man nur einen Wert von 0-255 eintragen. Benötigt man eine größere Wartezeit, kann man die Ticks mit einem Verzögerungsfaktor verändern. Dafür gibt es den Verzögerungsfaktor-Schieber am oberen Bildrand des Aktionsfensters (siehe oben). Dieser Faktor wirkt jedoch auf alle Wartezeiten in diesem Makro.
Alternativ kann man auch mehrere Schritte vom Typ Verzögerung
im Makro benutzen.
Der Typ Flag
wird zum Löschen
, Abfragen
oder Setzen
eines Flags verwendet. Ein Flag ist ein baugruppenweiter Merker und wird von allen Makros gemeinsam genutzt. Wenn Sie das Flag in einem Makro setzen
oder löschen
, sehen alle anderen Makros denselben Flag-Wert.
Dies kann verwendet werden, um ein Makro warten zu lassen (in diesem Schritt blockieren), bis ein Flag-Wert 0
(abfragen 0
) oder 1
(abfragen 1
) vor dem Makro erhält geht weiter.
Flags sind nur intern im Knoten verfügbar und der aktuelle Wert kann nicht von außerhalb einer Makroausführung abgefragt oder festgelegt werden.
Der Typ Kritischer Bereich
wird verwendet, um die Schritte zwischen dem Schritt Kritischer Bereich
, Aktion Start
und dem Schritt Kritischer Bereich
, Aktion Ende
vor Unterbrechung oder Abbruch zu schützen .
Der Schritt
Kritischer Bereich
ist eine Hülle um einige Schritte und daher müssen Sie einen Schritt Start
und einen Schritt Ende
haben, um korrekt zu funktionieren.
Der Typ Accessory notify
darf nur verwendet werden, wenn das Accessory das Ergebnis senden soll, bevor das Accessory fertig (wirklich fertig) ist.
Normalerweise wird die „Accessory fertig durchgelaufen“-Meldung immer nach dem Ende der Ausführung des Accessory gesendet (Normalfall: wenn das zugewiesene Makro beendet ist). Dies dient dazu den kritischen Vorgang der Accessory-Ausführung überwachen zu können. Falls nämlich ein Fehler auftritt wird der Fehler zurückgemeldet und nicht ok. Diese „Ende“-Mitteilung wird pro Ausführung eines Accessory genau 1x gesendet.
Falls man erreichen will, dass diese Benachrichtigung schon vor dem eigentlichen Ende der Ausführung des Accessory an das Steuerungs-Programm gesendet wird (weil z.B. alle kritischen Schaltvorgänge schon durchgeführt sind), dann kann man den Befehl „Accessory notify“ verwenden. Wenn man das „Accessory notify“ mehr als 1x im Makro drin hat, dann hat es keine Auswirkung mehr nachdem das 1. „Accessory notify“ gesendet wurde, denn der „Befehl“ wird nicht mehr gesendet.
Denken Sie z.B. an den Fall, dass das Makro die Tore eines Bahnübergangs schließt. Die Signalleuchten beginnen zu blinken, die Schranken werden mit dem Servo nach unten bewegt, erreichen ihre Endposition und die Signalleuchten sollten einige Zeit blinken. Das folgende Bild zeigt die erforderlichen Makros.
Wenn Sie den Aspekt des Zubehörteils zuweisen und die Testtaste drücken, befindet sich das Accessory im Status Ausstehend
(das Uhrensymbol im Assistenten), bis der Eingang mit dem Namen Servoende rechts erreicht
(oder links erreicht) den Wert 1
(ich habe es mit einer Verknüpfung auf GPIO 0 getestet, das ist Port 25) und erreicht dann den Status Fertig
(das grüne Markierungssymbol im Assistenten). Wenn dieser Eingangsport nicht den Wert 1
erhält, wird das Zubehör nicht als fertig gemeldet und bleibt im Status Ausstehend
.
Bei dieser Beschreibung handelte es sich um die normale Ausführung eines Accessory.
Wenn Sie signalisieren möchten, dass das Accessory früher fertig ist, weil Sie beispielsweise einen Ton hinzugefügt haben, der von Anfang an und während des Absenkens der Schranken abgespielt wird, und 20 Sekunden nachdem die Schranken (das Servo) die Endposition erreicht haben, sollte der Ton ausgeschaltet werden, dann könnten Sie die Accessory notify
-Aktionen verwenden.
Sie können hier Accessory notify
verwenden, da es dem Zug egal ist, ob der Ton aufgehört hat zu spielen, sondern nur, dass die Schranken unten sind und der Eingang 'Servo rechts/links umschalten erreicht' 'glücklich' ist.
In diesem Fall können Sie einen Schritt Accessory notify
verwenden, nachdem die Endposition erreicht wurde (bestätigt durch die Eingabe), bevor der Ton beendet ist (und damit das Makro beendet ist).
Im folgenden Makro wird das Zubehör immer mit einem Fehler beendet, da in Schritt 4 der Eingang 24: Servo-Ende links erreicht
wartet, bis er 1
wird, und einige ms später die Prüfung in Schritt 6 auf denselben Eingang mit einem Wert = ' erfolgt. 0' wird durchgeführt.
Daher sollte die Aktion als 'Ergebnis zurückgeben, okay, wenn Wert = '0' und andernfalls ein Fehler' interpretiert werden.