Parameter für Bibliotheksbauer
Die folgende Seite soll ein paar Details zu Parametern für Bibliotheksbauer darstellen.
Logik
- Hat ein Zustand kein SimpleScript und ist der Parameter als "Übergabe an Scriptengine" markiert (womöglich muss die Logik noch eine "klassische Logik" sein, weiß ich nicht aktuell auswendig) so wird der Startwert des Zustands auf den Wert des Parameters gesetzt.
Zusatzgruppen
- Ist eine Zusatzgruppe definiert, haben die Relaisgruppe und die Zusatzgruppe die selben Parameter. Die Zusatzgruppe bekommt also alle Parameter der Relaisgruppe mit, als wären sie dort selbst definiert worden.
Parametereditor
- Sofern die Gruppe einen Namen hat, setzt der Parametereditor diesen Namen beim Speichern auch an alle Parameter mit dem namen programeStellSiInternalGroupNameTextEdit. Dies kann explizit auch ein "nix"-Parameter sein.
- Themenbereich Kombiwähler
- Enhtält der Name eines Parameters ein ; wird der Parameter nicht als echter Parameter für die dahinter stehenden Logik interpretiert, sondern als Möglichkeit, mehrere Optionen des Parametereditors als Gruppenauswahl setzen zu können.
- Kombiwähler müssen derzeit Coboboxen oder Schnittstellen sein.
- Schnittstellen
- Der Name muss "*ersteZuSetzendeSchnittstelle;*zweiteZuSetzendeSchnittstelle[=geheZu1[.geheZu2[.geheZu3[...]],geheZu1B...][;...]" lauten. Im Einzelnen:
- Der Name besteht aus Parametern, dem Namen des Parameters wird ein * vorangestellt.
- Die Parameter sind durch ; getrennt. Es müssen mindestens 2 angegeben sein.
- Der erste Parameter muss eine Schnittstelle direkt angeben.
- Alle weiteren können auch ein mit = angegebenes indirektes Ziel darstellen.
- Das indirekte Ziel wählt stattdessen die andere angegebene Schnittstelle der Logik aus.
- .geheZu2 wechselt zum Ziel, mit dem geheZu1 verbunden ist und wählt anschließend die Schnittstelle geheZu2 der dortigen Logik aus.
- *fahrstr=spureing.tischfeld wählt also die Schnittstelle "tischfeld" der Gruppe aus, die an "spureing" angeschlossen ist.
- Existiert die Schnittstelle mit dem angegebenen Namen nicht oder ist nichts angeschlossen und sind durch , getrennt mehrere indirekte Ziele angegeben wird das nächste indirekte Ziel neu ausgewertet.
- *fahrstr=spureing.tischfeld,spurEing.tischfeld wählt also entsprechend unabhängig von Groß- und Kleinschreibung von spurEing.
- Comboboxen
- Der Name muss "*ersterParam=wert1[,wert2[,...]];*zweiterParam..." lauten. Im Einzelnen:
- Die Anzahl der Zuweisungen (wert1,wert2,...) muss der Anzahl der Einträge der Combobox entsprechen.
- Der Zuweisung des 1. Parameters darf nur Werte enthalten, die nicht doppelt vorkommen. Alle anderen Zuweisungen dürfen auch doppelt vorkommen.
- Die Werte der Einträge werden der Combobox werden ignoriert, sind aber für die Funktionen "Kopieren" und "Einfügen" weitherin wichtig.
- Gültige Ziele (derzeit)
- Schnittstellen
- Eingangssignale (wird i.d.R. nur mit Comboboxen funktioneren)
- Ausgangssignale (dito)
- Textboxen
- Cobmboxen
- Ausgangssignale gibt es zusätzlich *parametername.schnittstelle, auf die eine Schnittstelle gesetzt werden kann. Setzen über Comboboxen wird derzeit Probleme beim wideröffnen des Parametereditors machen.
- Ausgangssignale und Eingangssingale gibt es zusätzlich *parametername.text. Er gibt den Namen des Signals des (bei mehreren des letzen) Ein/Ausgangssignals an. Schließende Klammern am Ende des Ausdrucks (für das Eingangssignal) werden automatisch behandelt und sollten daher nicht angegeben werden.
Übergabe von Parametern
- Beginnt der Text nicht mit einem * wird der Text 1:1 übernommen.
- Beginnt der Text mit einem * wird der Parameter mit dem angegebenen Namen expandiert.
- Beginnt der Text mit einem * und enthält er weitere * wird der Text so zusammengebaut: *KonstatnerText*WertDesParametersMitDiesemNamen[*Konstanter[*Wert...]]
- Beginnt der Text mit ****select* wird ein Modus zur Ersetzung von Parameterwerten aufgerufen. Syntax: ****select*parameter1[,parameter2...];[*][!]wert1a[|wert1b][,wert2...]=Rückgabewert[;wert1b...]
- Die angegeben parametrisierbaren Werte parameter1, parameter2, ... werden Untersucht.
- Im Normalfall wird das also ein *parametername sein.
- Enthält der Wert eines Parameter ein : wird nur der Text hinter dem letzten : ausgewählt. ( und ) werden entfernt.
- Der erste Vergleichswert, der zutrifft, wird ausgewählt.
- Die Vergleichswerte (wert1, wert2, ...) sind wie folgt definiert:
- Ein einzelnes *: Immer wahr
- Beginnt mit !: Wahr wenn nicht enthalten
- Sonnst: Wahr wenn enthalten
- Mehrere gleichrangige Vergleichswerte werden durch | getrennt
- Die Rückgabewerte können parametrisiert werden.
- , und ; und \ können mit \ escaped werden, um geschachtelte Aufrufe zu realisieren.
- Die angegeben parametrisierbaren Werte parameter1, parameter2, ... werden Untersucht.
- Beginnt der Text mit ****special* und enthält der Text ein <!--$special.%1--> wird %1 zurück gegeben. Kann in ****select* weiter verarbeitet werden, vorläufige Syntax.
- Beginnt der Text mit ****add* wird ein Modus zur Addition von Parameterwerten aufgerufen. Syntax: ****add*wert[;wert...] Werte müssen Ganzzahlen sein, es können escapebare Parameter verwendet werden.
Altnames von Parametern
- Wie alle anderen altnames durch ; getrennt
- Durch , hinter dem Namen können optional weitere Optionen angegeben werden: Ein Präfix, ein Sufix, ein Übergabeausdruck, weitere Parameter für den Übergabeausdruck
- Der Übergabeausdruck funktioniert wie unter Übergabe von Parametern beschrieben. Es wird dabei der alte Parameter simuliert. %1 expandiert zu dessen Name. Die weiteren Variablen behalten ihren Namen, können aber auch mit %2..%3 angesprochen werden. Die weiteren Parameter werden |-getrennt. Sie werden nicht auf Existenz geprüft, können aber einen durch = getrennten Defaultwert erhalten. , muss durch %k, ; durch %s escapted werden, %% durch %.
- Wird der erste nicht gefunden wird der nächste genommen usw.
Beispiele für Parameterübergaben
Um die sehr komplexe Notation der Altnames besser zu verstehen, sollen hier Beispiele gesammelt werden. Bibliotheksbauer sind angehalten, diese Beispiele mit weiteren geeigneten Varianten zu erweitern.
Übernahme einer Schnittstelle in ein Ausgangssignal
Ausgangssituation: eine Schnittstelle "bsp" soll übernommen werden in einen neuen Ausgangssignal-Parameter. Dabei sind keine weiteren Parameter von Bedeutung, der für diesen Fall benötigte Tastenname war vorher fest eingestellt und muss daher bei der Konvertierung nicht verändert werden.
Der Altname sieht wie folgt aus: bsp,,:fstrsptaste
Hier findet der Suffix Anwendung (2 Kommata), indem der Parameterersetzung der Text ":fstrsptaste" angehängt wird.
Übernahme einer Schnittstelle in ein Eingangssignal
Ausgangssituation: eine Schnittstelle "bsp" soll übernommen werden in einen neuen Eingangssignal-Parameter. Dabei sind keine weiteren Parameter von Bedeutung, da der für diesen Fall benötigte Signalname für den Leuchtmelder vorher fest eingestellt war. Dennoch ist aus technischen Gründen die Select-Notation notwendig.
Der Altname sieht wie folgt aus: bsp,,,****select**%1%s*=*(max\%s*bsp*:fstrsperr),bsp
Hier findet ein Übergabeausdruck Anwendung (3 Kommata). Hier findet ein Select über den Parameter %1, also bsp, Anwendung, %s wird ersetzt zum Semikolon. Das darauf folgende Sternchen trifft alle möglichen Konfigurationsmöglichkeiten für bsp, egal was vorher eingestellt war. Dabei wird der Inhalt hinter dem Gleichheitszeichen bis zum nächsten Komma für die Parameterersetzung genutzt, also *(max\%s*bsp*:fstrsperr). Mit %s wird auch hier ein Semikolon erzeugt.