Development:Überarbeitung Skripting
Grundlagen
- Einführung eines zustandsbasierten Skriptsystems (im folgenden vorläufig SimpleScript genannt) als Ergänzung zu AngelScript
- Bessere Verknüpfung des zu steuernden Objekts (Relaisgruppe, Tischfeld, ...) mit dem Skripting
Anforderungen
AngelScript
Eingang von Daten von außen
Formulierung von SimpleScript-Ausdrücken in den Metadaten von Methoden. Ein Ausdruck pro Parameter. Wenn sich das Ergebnis des Ausdrucks ändert, wird die Methode aufgerufen. Dies ersetzt die Auswertung des Methodennamen vollständig (bis auf Abwärtskompatibilität)
Ausgabe von Daten
Der AngelScript-Klasse wird eine automatische generierte Klasse zur Verfügung gestellt, über die ein Zugriff auf die Daten des gesteuerten Tischfeldes, Relaisgruppe, ... zur Verfügung gestellt wird. Vorbild ist die "ui"-Membervariable von mit QT Designer erstellten Widgets.
Bei einem Tischfeld sind z.B. die Schnittstellen, aber auch die GUI-Elemente (Bitmap, SVG, Taster, ...) auf diese Weise erreichbar. Realisierbarkeit von Animationen bedenken!
TODO: Einbindung von SimpleScript auch zur Ausgabe der Daten. Beispiel: Die Daten, die auf einer Schnittstelle, an der ein Tischfeld angeschlossen werden kann, ausgegeben werden sollen, sollen auch per SimpleScript generierbar sein aus den internen Daten der Relaisgruppe.
Per AngelScript ist die Zuweisung von SimpleScript-Anweisungen an externe Elemente (z.B. eine Grafik) möglich. Damit kann z.B. in verschiedenen Phasen einer Animation die Berechnungsvorschrift für Position, Drehung o.ä. dynamisch angepasst werden. TODO Effizienz beachten - sollte nicht jedes mal ein erneutes Parsen verlangen...
SimpleScript
- Datenabruf von Leitungen einer SChnittstelle, reagiert auf Änderungen automatisch
- Analog dazu auch von Tastern, Zuständen (brauchen wir die noch??), ...
- TODO: Enthält geeignete Strukturen, um Relaisschaltungen zu simulieren
- Operatoren (+, -, &&, ||, ...)
- Bereitstellung von Funktionen inklusive return-Anweisung. TODO: Wo werden die Funktionen definiert? Müssen auch in stwb zur Verfügung stehen!
- Anwendung überall, wo Daten eingehen
- Ersetzt die Eingangslogik
- Bereitstellung eines grafischen Editors (als Alternative zur Texteingabe)
- Bereitstellung Syntaxprüfung/automatische Ergänzung bei Eingabe in Textfeldern
Realisierungsmöglichkeiten
SimpleScript: Entwurfsmuster "Interpreter" oder http://www.antlr.org/
Lose Gedankensammlung
- \exists Zustand
- Input1: SimpleScript, in Abhängigket von:
- Zustände
- Automaten
- Script-Interop-Automaten
- Eingangs-Adern
- Wert: Der Wert, den das Simple-Script berechnet hat. (Wird immer automaisch aktualisiert)
- Input1: SimpleScript, in Abhängigket von:
- \exists Automat
- Input1: Startwert
- Input2...n:
- Param1: Schnittstelle + Impulsname
- Param2: Eingangsfilter: So ähnlich wie ein SimpleScript, gibt jedoch ein bool zurück, kann zugreifen auf
- Zustände
- Automaten
- Script-Interop-Automaten
- Eingangs-Adern
- Den Wert des Signals
- Param3: Setzwert-Script: So ähnlich wie ein SimpleScript, gibt den int zurück, den der Automat am Ende haben soll. Zugriff auf Werte wie vorhergehend.
- Wert: Den zuletzt gesetzten Wert
- \exists Eingangs-Ader
- Input1: Schnittstelle + Adername
- Wert: Den Wert der Eingangs-Ader
- \exists Ausgangs-Ader
- Input1: Schnittstelle + Adername
- Input2: Ein Automat oder Zustand, dessen Wert die Ausgangs-Ader immer haben soll.
- Gibt keinen Wert zurück
- \exists Ausgangs-Impuls
- Input 1...n:
- Params: Analog zum Impuls. - Oder -
- Input n...m:
- Param1: Zustand oder Automat
- Param2: Eingangsfilter: So ähnlich wie SimpleScipt, ...
- Zustände
- Automaten
- Script-Interop-Automaten
- Eingangs-Adern
- Den alten Wert des Zustandes
- Den neuen Wert des Zustandes
- Param3: Wert des Impuleses: So ähnl... Zugriff auf Werte wie vorhergehend.
- Gibt keinen Wert zurück
- Input 1...n:
- \exists Script-Interop-Automat (nur Relaisanlage)
- Hat neben dem Getter und dem Changed-Event (siehe unten) auch noch einen setter.
- Wert: Der Wert, der als letztes vom Code im Setter gesetzt wurde
Alles was Werte hat, kann von einem Tischfeld abgefragt werden.
In der Relaisanlage haben alle Objekte mit Werten eine Changed(int old, int new)-Eigenschaft, zudem haben sie einen Getter.