Development:Überarbeitung Skripting

Aus StellSi-Hilfewiki
Version vom 28. Oktober 2015, 16:41 Uhr von Suedwest (Diskussion | Beiträge) (→‎Leitungen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Grundlagen

  • Einführung eines zustandsbasierten Skriptsystems (im folgenden vorläufig SimpleScript genannt) als Ergänzung zu AngelScript
    • Hinweis: Ein SimpleScript genanntes System steht schon in den Tischfeldern zur Verfügung. => Womöglich aber neu impentieren.
  • Bessere Verknüpfung des zu steuernden Objekts (Relaisgruppe, Tischfeld, ...) mit dem Skripting

Anforderungen

Datentypen

Leitungen

  • integer => Infinitive-Loop-Liste von Integerwerten? (Blinken)
  • Gleitkomma => Wechselstrom: Komplexe Zahlen??? (eher nicht, oder?)
  • String
  • Bool? => Infinitive-Loop-Liste von Bool-Werten? (Blinken)
  • VHDL-inspirierter Datentyp? ( http://www.cs.sfu.ca/~ggbaker/reference/std_logic/1164/std_logic.html )
  • Blinken von Elementen in der Außenanlage ist noch mal eine Geschichte für sich!

Ereigniss

  • void (für die allermeisten Ereignisse ausreichend.)
  • ??? string (Ist bis jetzt für Fehlermeldungen an den Stelltisch in Gebrauch.)
  • ??? Vielleicht sogar alle, die es auch für Leitungen gibt? (Aber habe gerade keinen Anwendungsfall dafür)

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 (oder nach einer Verzögerungszeit => 150 ms Relaisansprechzeit ???)
  • Analog dazu auch von Tastern, Zuständen (brauchen wir die noch??), ...
  • TODO: Enthält geeignete Strukturen, um Relaisschaltungen zu simulieren
  • Operatoren (+, -, &&, ||, ...)
  • Bereitstellung von Kennlinien? (Idee aus dem Soundthesizer)
  • 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)
  • \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
  • \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.

Aktueller Diskussionsstand

  • Zustände := SimpleScripts in Abhängigkeit von (Zustände, die vorher in der Liste definiert wurden, siehe Punkt 2; Automaten)
    • Welches Script: via AS auswählbar
    • Verwendung von Zyklenverhinderung statt Zyklenerkennung, wo möglich.
  • Automaten, die für die Verarbeitung von Ereignissen zuständig sind.
  • Alle Werte in TischfeldGrafiken Scriptierbar, ob man sie später auch auslesen kann, ist noch zu diskutieren. Möglicherweise kann man diese zwei Punkte aber auch erst einmal verschieben, nur Konzeptionell muss es bedacht werden.