Jump to content

EV-Schleife zum Abfrage einer Weichenstraße


AndreasWB

Empfohlene Beiträge

Hallo,

um das Vorsignal einer Bahnhofs-Einfahrt gemäß eines per geschalteter Fahrstraße erreichbaren gestellten Ausfahrtsignals schalten zu können, müssen natürlich die Stellungen aller an einer Fahrstraße beteiligen Weichen geprüft werden. Dazu möchte ich in der EV-Gestaltung das Element "Wiederholungen" zum durchprüfen der Weichenliste und zugehöriger Stellungen (Liste) nutzen.

Bei jedem Ausfahrtsignal habe ich jeweils die Liste der beteiligten Weichen und deren Stellungen, womit diese von der Einfahrt her erreichbar sind, hinterlegt. Ebenso die Objekte als Zeiger für das Einfahrtsignal und bei diesem den Zeiger auf das "angehängte" Vorsignal.
Nun geht es um das Verständnis der einzelnen Parameter im EV-Wiederholungen Element. Dazu habe ich ein paar Screenshots angehängt.

Fragen:

  1. Ist "@wdh" der Index, mit dem durchgezählt wird?
  2. Ich hadere wieder einmal mit den Auswahlen beim letzten "Signal Einstellen" Eintrag. Eigentlich sollte hier das Ergebnis dieser LUA-Script Zeile

signal.variables["Vorgaenger"].variables["KombVorSigHell"].state = signal.stateCount

entsprechen.
Hier auch noch die Problematik wie .state und .stateCount gewertet wird.

Ich schätze mal, die angehängte Bilder sind nicht in der richtigen Reihenfolge für obigen Text, es wird aber hoffentlich trotzdem einigermaßen klar.

Gruß

Andreas

AusfahrtSignal_FS-WeichenListe.jpg

AusfahrtSignal_FS-Listen.jpg

Bhf-Einfahrt_Sig-Steuerung_Logik.jpg

Bhf-Einfahrt_Sig-Steuerung.jpg

Liste abfragen.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb AndreasWB:

Ist "@wdh" der Index, mit dem durchgezählt wird?

Leider nein.

Das ist der Zelleninhalt. Den Index (oder Schlüssel, bei einer Tabelle) bekommst du in der grafischen EV leider nicht zu fassen. 
Da wirst du auf Lua umschwenken müssen. Lua liefert dir mit in ipairs() die Wertepaare key, value (Index, Wert) zu jeder Zelle.

Bitte beachten: es gibt in pairs() und in ipairs()

Aber eine Liste sollte reichen, wenn du in dieser Liste Wertepaare ablegst. Dann geht es auch grafisch. 
Dann kannst du Wdh.Weiche.Stellung mit Wdh.Sollstellung vergleichen

 

Gruß
Götz

 

Hier ist eine Beispielanlage, die ich eben aus einer früheren Demo für dich gebaut habe..
Die GBS Signale lassen sich in dieser Version nur dann auf Fahrt schalten, wenn die Weichen korrekt für die Ausfahrt gestellt sind.
Weichenstrasse pruefen.mbp

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Goetz,

danke.
Jetzt muß ich es erst schrittweise verstehen. ;)

Ich sehe eine Liste von Tabellen. - OK
Woher stammt der Name "Elementepaar"? Kann ich in den Variablen / Listen / Tabellen nicht finden. Oder ist das in diesem Zusammenhang ein Schlüsselwort?

Ich hätte es nach Deinem (vor-)letzten Hinweis einfach mal als LUA-Skript versucht.

Gruß

Andreas

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 59 Minuten schrieb AndreasWB:

Woher stammt der Name "Elementepaar"?

Den habe ich ersatzweise für Wdh gewählt, um deutlicher zu machen, was hier übergeben wird.

Wdh ist nur der default Name für die lokale Variable. Du kannst da jeden beliebigen Namen reinschreiben.

 

Es passiert folgendes:

  • Das GBS Signal hat eine Variable für das zugehörige Hauptsignal.
  • Im Hauptsignal steht die Liste mit den Weichen und ihren Sollstellungen. (Diese Liste kann theoretisch überall stehen)
  • Das Hauptsignal hat eine Variable für das zugehörige GBS Signal. (beide kennen also ihren "buddy")
  • Interessant ist für dich in der EV nur "Signal schaltet (2)" (bitte entschuldige, dass ich vergessen habe das besser zu bezeichnen)
  • Wenn ein GBS Signal schaltet, dann holt die EV aus dem zugehörigen Signal die Liste mit den Weichenstellungen zu diesem Signal.
  • Die Weichenstellungen werden geprüft. Stimmen sie überein, wird das Hauptsignal geschaltet. Andernfalls geht das GBS Signal zurück auf "Halt".
Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Goetz,

vielen Dank für Dein Beispiel. So konnte ich die Eigenheiten von "Tabelle" hier in der grafischen EV-Erstellung besser verstehen. Das ist wohl eher nur jeweils eine Tabellen-Zeile. Erst durch das vorgebaute Zeilen-Konstrukt wird daraus eine Tabelle, wie wir sie allgemeinhin kennen.
Bei "Index" muß also das jeweilige Attribut / Spaltenname eingetragen werden.

Klar, dann funktioniert der ganze Mechanismus natürlich einwandfrei. :) Mal abgesehen vom 2-begriffigen gekoppelten FormHauptSignal. :(

Gruß

Andreas

Bearbeitet von AndreasWB
kurze Ergänzung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ne, mit dem "Zeilen-Konstrukt" verrennst du dich gedanklich, Andreas.

Was du da siehst, ist eine durchnummerierte Liste.
Und in der Liste stecken wiederum Tabellen.

Unterschied zwischen Liste und Tabelle:

  • die Liste hat nummerierte Plätze
  • die Tabelle hat Plätze mit Bezeichnern.

Ich hätte ebenso gut in der Liste weitere Listen (anstelle von Tabellen) anlegen können. Aber mit Bezeichnern fand ich das Konstrukt lesbarer. 

Letztlich ist es eine mehrdimensionale Tabelle.
Äh, Liste ...

Das ist vielleicht etwas verwirrend, weil die Bezeichnungen durcheinander geraten, wenn man mehrere Programmiersprachen mischt. Lua kennt nämlich nur Tabellen, unterscheidet aber trotzdem klar zwischen nummerierten Plätzen und solchen mit Bezeichnern. Du kannst nur über den lückenlos durchnummerierten Teil einer Tabelle iterieren.

Vielleicht noch wichtiger ist aber, dass die Objektvariablen zunächst nichts mit Lua zu tun haben. Lua läuft nur nebenher und gewährt mir Zugriff auf diese Dinge. Deshalb werden im MBS Listen und Tabellen unterschieden.

Gruß
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...