Jump to content

Wie man Animationen im Zugverbund mit der EV schaltet


Empfohlene Beiträge

Im ersten Schritt wird die relative Fahrtrichtung ermittelt. Was ist aber damit gemeint? Die relative Fahrtrichtung bezieht sich immer relativ zur Fahrtrichtung des auslösenden Fahrzeugs, daher die Bezeichnung relativ. Wenn der Wagen in dieselbe Richtung wie der Auslöser zeigt (die vordere Kupplung des Wagens zeigt in dieselbe Richtung wie die vordere Kupplung des Auslösers/ die hintere Kupplung des Wagens zeigt in dieselbe Richtung wie die hintere Kupplung des Auslösers) dann wir die absolute Fahrtrichtung des Auslösers übernommen. Zeigen die Kupplungen von Wagen und Auslöser in entgegengesetzte Richtung wird die Fahrtrichtung umgekehrt.

1839208383_3_4_WiewirddierelativeFahrtrichtungbestimmt.jpg.c21fdba8b025150968d5eae6f7b70e48.jpg

Grafik 3/4: Wie wird die relative Fahrtrichtung bestimmt

Die relative Fahrtrichtung wird in einem neuen Ereignis „GK Bahnsteig betreten --> relative Fahrtrichtung bestimmen“ ermittelt. Das Schlagwort „Merker neg. Geschw.“ verkörpert die absolute Geschwindigkeit des Auslösers.

  • Schlagwort vorhanden → negative absolute Geschwindigkeit
  • Schlagwort fehlend → positive absolute Geschwindigkeit

Mit dem Schlagwort „gedreht“ beschreibt man wie der Wagen im Bezug zum Auslöser ausgerichtet ist.

  • Schlagwort vorhanden → Wagen zeigt in entgegengesetzte Richtung
  • Schlagwort fehlend → Wagen zeigt in gleiche Richtung.

 

Im nächsten Schritt wird der boolesche Wert der Variablen in Fahrtrichtung links vom Gleiskontakt auf das auslösende Fahrzeug übertragen:

  • True → Ausstieg in Fahrtrichtung links
  • False → Ausstieg in Fahrtrichtung rechts

535783700_3_5_TrseitensteuerungberrelativeFahrtrichtung.thumb.jpg.f55653561391158779adf03a12bc25a9.jpg

Grafik 3/5: Türseitensteuerung über relative Fahrtrichtung

Wenn die beiden booleschen Variablen „Ausstieg in Fahrtrichtung links“ und „positive Fahrtrichtung“ identisch sind (false == false oder true == true) dann wird die linke Tür geöffnet, andernfalls die rechte Tür. Der Vorteil gegenüber dem 2. Lösungsvorschlag besteht hierin, dass wir die Skript Bedingung wieder durch eine grafische Bedingung ersetzen können, was die Übersichtlichkeit erhöht.


Die beiden untenstehenden Bilder geben einen Einblick, wie sich die Variablen für die absolute Fahrtrichtung (Merker neg. Geschw.) und relative Fahrtrichtung (positive Fahrtrichtung) bei unterschiedlicher Einfahrt verhalten. Der Umbauwagen W1 wurde im Bezug zur Diesellok um 180° gedreht.

1097744260_3_6_DB212fhrtmitnegativerGeschwindigkeitein.thumb.jpg.174139baa64511ceb4057678c16513eb.jpg

Grafik 3/6: DB 212 fährt mit negativer Geschwindigkeit ein

Die Diesellok schiebt den Zug und fährt mit absolut negativer Fahrtrichtung in den Bahnhof ein.

 

1176207536_3_7_DB212fhrtmitpositiverGeschwindigkeitein.thumb.jpg.4b170f74f52b483f49f88dc85343ddf6.jpg

Grafik 3/7: DB 212 fährt mit positiver Geschwindigkeit ein

Die Diesellok zieht den Zug und fährt mit absolut positiver Fahrtrichtung in den Bahnhof ein.


Anbei die zweite Version:

3. Lösungsvorschlag - Version 2.mbp

 

Um keinen Hehl daraus zu machen. Die Anlage ist noch immer nicht fehlerfrei. Die Verbesserungen hebe ich mir dann für den nächsten Beitrag auf.

  1. Bei lokbespannten Zügen (z.B.: DB 212 mit drei Umbauwagen) wirft die EV einen Fehler im Ereignis „Wenn das KS Hauptsignal schaltet“ bei der Fahrtrichtungsumkehr aus, weil sie bisher nur Züge mit zwei Auslösern anstatt einem Auslöser mit berücksichtig.
  2. Bei Zügen mit zwei Auslösern, die in die entgegengesetzte Richtung zeigen wie der ICE, öffnen/schließen sich die Türen nicht immer auf der richtigen Seite.

 

PS: Ich soll euch ganz liebe Grüße von Markus ausrichten. Er hatte mehrere Trauerfälle und war längere Zeit nicht mehr im Forum.

Viele Grüße
Tim

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...
Am 18.8.2022 um 18:28 schrieb tim-fischertechnik:

Um keinen Hehl daraus zu machen. Die Anlage ist noch immer nicht fehlerfrei. Die Verbesserungen hebe ich mir dann für den nächsten Beitrag auf.

  1. Bei lokbespannten Zügen (z.B.: DB 212 mit drei Umbauwagen) wirft die EV einen Fehler im Ereignis „Wenn das KS Hauptsignal schaltet“ bei der Fahrtrichtungsumkehr aus, weil sie bisher nur Züge mit zwei Auslösern anstatt einem Auslöser mit berücksichtig.

Hallo zusammen,


in diesem Beitrag zeige ich euch einen Lösungsweg für den oben genannten Fehler auf. Ich habe die EV an einigen Stellen aufgeräumt. Dabei sind folgende Änderungen vorgenommen worden:

  • Die Bezeichnung einiger Ereignisse wurde zum besseren Verständnis geringfügig erweitert.
  • Die Variable "Austieg in Fahrtrichtung links" wurde in "Ausstieg in Fahrtrichtung" korrigiert.
  • Die Ermittlung der Ausstiegseite in Form der Variable "Ausstieg in Fahrtrichtung links" erfolgt nicht mehr über zwei Zuweisungen, sondern einer. Zuvor wurde die Aussiegseite vom Gleiskontakt auf das auslösende Fahrzeug übertragen und im Anschluss wurde im Ereignis: "Bahnsteigs-Gleiskontakt wird betreten bei der Einfahrt --> Türen öffnen" als Auslöser das Fahrzeug verwendet, um die richtige Türseite zu ermitteln. Nun wird in diesem Ereignis direkt auf den Gleiskontakt als Auslöser zugegriffen.
  • Die Zuweisung des Zugs und des Bahnsteig-Gleiskontakts zum Signal wurde in das Ereignis: "Bahnsteigs-Gleiskontakt betreten --> relative Fahrtrichtung bestimmen/ Fahrtrichtungsumkehr" verschoben.
  • Die Überarbeitung der Fahrtrichtungsumkehr, die ich im Folgenden vorstellen werden.

Um die Änderungen zwischen dieser und der vorherigen Version nachvollzuziehen, empfehle ich die beiden EV-Einträge miteinander zu vergleichen.

 

Wie mit der neuen Fahrtrichtungsumkehr auch Züge mit nur einer Lok richtig umkehren:

EV für die Fahrtrichtungsumkehr

Grafik 3/8: EV für die Fahrtrichtungsumkehr

Überall dort, wo eine Aktion nummeriert wurde, befindet sich ein Lua-Skript. Leider sind wir an dieser Stelle an einem Punkt angekommen, wo sich der Einsatz von Lua nur schwer vermeiden lässt, weil sich nur durch Lua der EV-Umfang begrenzen lässt. Ich werde dann immer den passenden Code hier einstellen.

Für die Ermittlung des gegenüberliegenden Triebkopfs am anderen Zugende wird nicht mehr die Variable "andere Triebkopf" benötigt, sondern die Bestimmung erfolgt automatisch mithilfe des ersten Lua-Skripts.

  1. -- Lua Skript Nr. 1
    
    local t = layout:getVehicleGroup(vehicle,1) -- 1 bedeutet: filtere alle Fahrzeuge in einem Zug mit einem Antrieb
    
    -- ermittle gegenüberliegenden Triebkopf im Zugverbund
    if t[1] == vehicle then
      andererTriebkopf = t[#t]  -- letzte Element/ letzter Wagon
    else
      andererTriebkopf = t[1]   -- erste Element/ erster Wagon
    end

    Dabei werden zunächst alle Fahrzeuge mit einem Antrieb aus dem Zugverbund einer Tabelle t zugeordnet.  Wenn das erste Element/ erster Wagon der Tabelle t[1] gleichzeitig das auslösende Fahrzeug (vehicle) ist, wird das letzte Element/ letzter Wagon t[#t] aus der Tabelle der Variablen andererTriebkopf zugeordnet, andernfalls das erste Element. Die Raute # in Lua ermittelt immer die Anzahl an Elementen einer Tabelle. Somit kann mit t[#t] immer auf das letzte Elemente einer Tabelle zugegriffen werden, egal wie viele Elemente die Tabelle besitzt. 

    Mithilfe der Bedingung Fahrzeug steht auf einem Gleiskontakt wird ermittelt, ob der Auslöser den Zug zieht oder schiebt. Ein Auslöser zieht immer einen Zug, wenn das Fahrzeug [Auslöser] gleichzeitig auf dem Gleiskontakt [Auslöser] steht und ein Auslöser schiebt einen Zug, wenn er selbst nicht auf dem Gleiskontakt steht. Wenn also der Auslöser den Zug schiebt und die Variable "Fahrtrichtungsumkehr" wahr ist, dann wird der Antrieb des Auslösers deaktiviert und dafür der Antrieb des gegenüberliegenden Antriebs aktiviert. (Der Auslöser zeigt in diesem Fall ja in Richtung Prellbock und soll bei der Abfahrt nicht angetrieben werden).
     

  2. -- Lua Skript Nr. 2
    
    print("Auslöser ("..vehicle.name..") zieht Zug")    

    Hier wird das auslösende Fahrzeug, welches den Zug zieht, in der EV-Protokollierung ausgegeben.
     

  3. -- Lua Skript Nr. 3
    
    local v = andererTriebkopf -- gegenüberliegende Triebkopf
    if v:hasEngine() then
      v.engine.active = true  -- aktiviere Antrieb vom gegenüberliegenden Triebkopf
    end

    Das Skript wurde fast vollständig aus der Aktion "Antrieb ausschalten/einschalten" durch Umwandeln extrahiert. Die einzige Veränderung besteht in der ersten Zeile, bei der die Variable andererTriebkopf der Variable v zugeordnet wurde. Die Variable andererTriebkopf kennen wir ja schon vom ersten Skript.

    Wenn der Auslöser den Zug schiebt, wird der Antrieb vom gegenüberliegenden Triebkopf zuerst deaktiviert und im Anschluss daran der Auslöser zur Sicherheit nochmal aktiviert. Die Skripte 4 und 5 ähneln den beiden vorherigen sehr.

  4. -- Lua Skript Nr. 4
    
    print("Auslöser ("..vehicle.name..") schiebt Zug") -- lediglich andere Bezeichnung 'schiebt'

     

  5. -- Lua Skript Nr. 5
    
    local v = andererTriebkopf
    if v:hasEngine() then
      v.engine.active = false  -- deaktiviere Antrieb vom gegenüberliegenden Triebkopf
    end

    False deaktiviert in diesem Fall den Antrieb.

 

 

Zitat

Wenn ein Zug nur aus einer Lok besteht, wird keine Fehlermeldung mehr ausgegeben, weil dann der Auslöser gleichzeitig auch der gegenüberliegende Triebkopf ist. Deswegen ist es erforderlich, dass immer zuerst ein Antrieb deaktiviert und anschließend erst aktiviert wird und nicht umgekehrt, weil sonst der Antrieb deaktiviert bliebe und der Zug nicht losfahren würde.

EV-Fahrtrichtungsumkehr für das Anfahren

Grafik 3/9: EV-Fahrtrichtungsumkehr für das Anfahren

Im Ereignis "Wenn das  KS Hauptsignal schaltet --> Türen schließen" werden ausschließlich nur alle Fahrzeuge mit aktiven Antrieb in einer Wiederholung angesprochen! Das habe ich so bewusst gewählt, da ich ja zuvor die Antriebe deaktiviere und aktiviere und somit sicherstelle, dass immer nur ein Antrieb aktiviert ist. Wenn der Zug beispielsweiße in einem Kopfbahnhof die Fahrtrichtung umkehren soll (Fahrtrichtungsumkehr = True), dann wird allen Fahrzeugen mit aktivem Antrieb eine negative Geschwindigkeit relativ zur Fahrtrichtung vergeben, andernfalls eine positive Geschwindigkeit.

Anbei die dritte Version:
3. Lösungsvorschlag - Version 3.mbp
Viel Spaß damit. :)

Viele Grüße
Tim

Bearbeitet von tim-fischertechnik
Formatierung und Rechtschreibung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

im Folgenden möchte ich euch Lösungsvorschläge für dieses Problem aufzeigen.

Am 18.8.2022 um 18:28 schrieb tim-fischertechnik:

Bei Zügen mit zwei Auslösern, die in die entgegengesetzte Richtung zeigen wie der ICE, öffnen/schließen sich die Türen nicht immer auf der richtigen Seite.

Dazu werde ich im ersten Beitrag eine Lösung ohne Lua und im zweiten eine Lösung mit Lua präsentieren.

 

relative Fahrtrichtung bestimmen - Lösung ohne Lua:
Erweiterung für relative Fahrtrichtungsbestimmung
Grafik 3/10: Erweiterung für relative Fahrtrichtungsbestimmung

Beschreibung der EV:

Zuerst wird in der mehrfachen Bedingung geprüft, ob:

  1. im Auslöser eine Objektvariable mit dem Namen "anderer Triebkopf" existiert.
  2. der andere Triebkopf als Wert in dieser Objektvariablen eingetragen ist. Das Objekt soll ja nicht leer sein.
  3. im Gleiskontakt die Variable Fahrtrichtungsumkehr wirklich true ist.

Wenn alle dieser 3-Bedingungen erfüllt sind (UND-Logik), wird geschaut, ob der gegenüberliegende Triebkopf gleich oder umgekehrt zum Auslöser positioniert ist. 

  • Schlagwort "gedreht" vorhanden: → Der andere Triebkopf (nicht der Auslöser) zeigt in die entgegengesetzte Richtung wie das auslösende Triebfahrzeug. Bei einer Fahrtrichtungsumkehr in Kopfbahnhöfen etc. muss die die Ausrichtung (in Form des Schlagworts: "gedreht) aller Wagen umgekehrt werden, da jetzt nun die andere Lok wieder aus dem Bahnhof fährt, und zwar mit entgegengesetzter Geschwindigkeit wie die auslösende Lok zuvor.
    entgegengesetzte Ausrichtung zweier Loks
    Grafik 3/11: entgegengesetzte Ausrichtung zweier Loks
     
  • Schlagwort "gedreht" fehlend: → Der andere Triebkopf (nicht der Auslöser) zeigt in die gleiche Richtung wie das auslösende Triebfahrzeug. Alles bleibt wie beim Alten. Die auslösende Lok fährt in die gleiche Fahrtrichtung weiter weswegen die Ausrichtung aller Wagen beibehalten wird und nichts Weiteres in der EV unternommen werden muss.

Wie die Ausrichtung im Zugverbund umgekehrt wird! Für jeden Wagon (auch Lok) wird die Ausrichtung umgekehrt:

  • Wenn zuvor das Schlagwort "gedreht" in einem Wagon vorhanden war, wird es gelöscht.
  • Wenn das Schlagwort "gedreht" zuvor gefehlt hat, wird es nun vergeben.

 

Konfiguration des Schlagworts "gedreht":

Wenn man einen neuen Zug anlegt, geht man am besten anhand folgender Schritte vor.

Konfigurierung Schlagwort gedreht
Grafik 3/12: Konfigurierung Schlagwort gedreht

  1. Suche im Zugverbund eine Lok aus, die später losfahren soll. 
    1. Wenn die vordere Kupplung dieser Lok in Fahrtrichtung zeigt, dann lösche das Schlagwort "gedreht", falls schon vergeben.
    2. Wenn die hintere Kupplung dieser Lok in Fahrtrichtung zeigt, dann vergebe das Schlagwort "gedreht".
  2. Prüfe bei allen übrigen Wagen, ob diese in die gleiche oder in die entgegengesetzte Richtung wie die ausgewählte Lok zeigen.
  • gleiche Ausrichtung: Schlagwort löschen
  • entgegengesetzte Richtung: Schlagwort vergeben


Diesmal stelle ich neben der großen Beispielanlage auch eine kleine Mini-Demo ein, die sich auf das Wesentliche beschränkt. Die EV-Ergänzung aus der Mini-Demo wurde auf die größere Beispielanlage eins zu eins übertragen ;):
MINI-Demo für 3. Lösungsvorschlag - Version 4a.mbp
3. Lösungsvorschlag - Version 4a.mbp

Viele Grüße 
Tim

Fortsetzung folgt in Kürze

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 36 Minuten schrieb tim-fischertechnik:

Hallo zusammen,

im Folgenden möchte ich euch Lösungsvorschläge für dieses Problem aufzeigen.

 

Dazu werde ich im ersten Beitrag eine Lösung ohne Lua und im zweiten eine Lösung mit Lua präsentieren.

 

relative Fahrtrichtung bestimmen - Lösung ohne Lua:
Erweiterung für relative Fahrtrichtungsbestimmung
Grafik 3/10: Erweiterung für relative Fahrtrichtungsbestimmung

Beschreibung der EV:

Zuerst wird in der mehrfachen Bedingung geprüft, ob:

  1. im Auslöser eine Objektvariable mit dem Namen "anderer Triebkopf" existiert.
  2. der andere Triebkopf als Wert in dieser Objektvariablen eingetragen ist. Das Objekt soll ja nicht leer sein.
  3. im Gleiskontakt die Variable Fahrtrichtungsumkehr wirklich true ist.

Wenn alle dieser 3-Bedingungen erfüllt sind (UND-Logik), wird geschaut, ob der gegenüberliegende Triebkopf gleich oder umgekehrt zum Auslöser positioniert ist. 

  • Schlagwort "gedreht" vorhanden: → Der andere Triebkopf (nicht der Auslöser) zeigt in die entgegengesetzte Richtung wie das auslösende Triebfahrzeug. Bei einer Fahrtrichtungsumkehr in Kopfbahnhöfen etc. muss die die Ausrichtung (in Form des Schlagworts: "gedreht) aller Wagen umgekehrt werden, da jetzt nun die andere Lok wieder aus dem Bahnhof fährt, und zwar mit entgegengesetzter Geschwindigkeit wie die auslösende Lok zuvor.
    entgegengesetzte Ausrichtung zweier Loks
    Grafik 3/11: entgegengesetzte Ausrichtung zweier Loks
     
  • Schlagwort "gedreht" fehlend: → Der andere Triebkopf (nicht der Auslöser) zeigt in die gleiche Richtung wie das auslösende Triebfahrzeug. Alles bleibt wie beim Alten. Die auslösende Lok fährt in die gleiche Fahrtrichtung weiter weswegen die Ausrichtung aller Wagen beibehalten wird und nichts Weiteres in der EV unternommen werden muss.

Wie die Ausrichtung im Zugverbund umgekehrt wird! Für jeden Wagon (auch Lok) wird die Ausrichtung umgekehrt:

  • Wenn zuvor das Schlagwort "gedreht" in einem Wagon vorhanden war, wird es gelöscht.
  • Wenn das Schlagwort "gedreht" zuvor gefehlt hat, wird es nun vergeben.

 

Konfiguration des Schlagworts "gedreht":

Wenn man einen neuen Zug anlegt, geht man am besten anhand folgender Schritte vor.

Konfigurierung Schlagwort gedreht
Grafik 3/12: Konfigurierung Schlagwort gedreht

  1. Suche im Zugverbund eine Lok aus, die später losfahren soll. 
    1. Wenn die vordere Kupplung dieser Lok in Fahrtrichtung zeigt, dann lösche das Schlagwort "gedreht", falls schon vergeben.
    2. Wenn die hintere Kupplung dieser Lok in Fahrtrichtung zeigt, dann vergebe das Schlagwort "gedreht".
  2. Prüfe bei allen übrigen Wagen, ob diese in die gleiche oder in die entgegengesetzte Richtung wie die ausgewählte Lok zeigen.
  • gleiche Ausrichtung: Schlagwort löschen
  • entgegengesetzte Richtung: Schlagwort vergeben


Diesmal stelle ich neben der großen Beispielanlage auch eine kleine Mini-Demo ein, die sich auf das Wesentliche beschränkt. Die EV-Ergänzung aus der Mini-Demo wurde auf die größere Beispielanlage eins zu eins übertragen ;):
MINI-Demo für 3. Lösungsvorschlag - Version 4a.mbp
3. Lösungsvorschlag - Version 4a.mbp

Viele Grüße 
Tim

Fortsetzung folgt in Kürze

HI Tim,

sehe ich das richtig das du die Türsteuerung separat behandeln tust? (Lösungsvorschlag-Version 4a.mbp)

Derzeit funktioniert die Türsteuerung bei mir nicht richtig.

Finde es klasse das du dich weiter damit beschäftigen tust Danke schön.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 36 Minuten schrieb Markus4.1:

sehe ich das richtig das du die Türsteuerung separat behandeln tust? (Lösungsvorschlag-Version 4a.mbp)

Ja, sowohl Version 4a als auch Version 4b behandeln die Türsteuerung. Es geht hierbei konkret darum, dass die beiden Loks eines Zuges auch in die entgegengesetzte Richtung mit ihrer "Schnauze" zeigen können und es dann nicht zu Fehlern kommen sollte. Die Version 4a setzt diese Fehlerbehebung komplett grafisch um, während die Version 4b diese mittels Lua-Skript umsetzt und darüber hinaus hoffentlich viel anwendungsfreundlicher ist. Hierbei muss keine händische Konfiguration vorgenommen werden. Alles läuft automatisch ab.


relative Fahrtrichtung bestimmen - Lua-Skript-Baustein:

Lua-Skript-Baustein / Reihenfolge der Aktionen - sequenzielle Abfolge
Grafik 3/13: Lua-Skript-Baustein / Reihenfolge der Aktionen - sequenzielle Abfolge

Der Lua-Skript Baustein, der hier im obigen Bild zu sehen ist, übernimmt dieselbe Aufgabe wie die EV-Erweiterung im vorherigen Beitrag. Mit dem Baustein wird nämlich die relative Fahrtrichtung eines kompletten Zuges automatisch bestimmt. Der Vorteil dabei ist, dass:

  • die Objektvariablen "andererTriebkopf" bzw. "andere Triebkopf" nicht mehr benötigt werden.
  • man die Konfigurierung der Ausrichtung mittels des Schlagworts "gedreht" nicht mehr händisch vornehmen muss. Dies geschieht jetzt automatisch in Form der Variablen "Ausrichtung".
  • man sich Frust und Ärger vermeidet, wenn die händische Konfigurierung nicht so richtig funktionieren will. :D

Für alle Interessierten gibt es einen Vorher-nachher-Vergleich meines Lua-Skripts.

  • Erstentwurf: Allein die Bestimmung der relativen Fahrtrichtung beinhaltet in etwa 105-Lua-Codezeilen. Der größte Teil an Kommentaren ist davon ausgenommen.
     
  • verbesserte Version:
    function orientationOfNextWagon(_wagon, _nextWagon) -- Funktion prüft, ob der nächste Wagon im Zugverbund im Bezug auf den aktuellen Wagon in die gleiche oder entgegengesetzte Richtung zeigt
      if _nextWagon.couplers[0].connectedCoupler ~= nil then -- vK ist gekuppelt
        if _nextWagon.couplers[0].connectedCoupler.vehicle == _wagon then
          return 1
        end
      end
      if _nextWagon.couplers[1].connectedCoupler ~= nil then -- hK ist gekuppelt
        if _nextWagon.couplers[1].connectedCoupler.vehicle == _wagon then
          return 0
        end
      end
    end
    
    local t = layout:getVehicleGroup(vehicle) -- Zugverbund
    vK = t[1].couplers[0].connectedCoupler -- vordere Kupplung
    hK = t[1].couplers[1].connectedCoupler -- hintere Kupplung
    
    if vK ~= nil then
      t[1].variables["Ausrichtung"] = 0  --> vordere Kupplung [1. Wagon im Zugverbund] belegt
    else
      t[1].variables["Ausrichtung"] = 1  --> hintere Kupplung [1. Wagon im Zugverbund] belegt
    end
    
    for i, wagon in ipairs(t) do
      if i >= #t then
      print("ABBRUCH DER SCHLEIFE: Ab "..#t..". Position ("..t[#t].name..") sind keine zu bestimmenden Wagen vorhanden")
        break
      end
    
      nextWagon = t[i+1]
      nextWagon.variables["Ausrichtung"] = orientationOfNextWagon(wagon, nextWagon)
    end
    
    if vehicle.currentSpeed > 0 then  -- Geschwindigkeitsbestimmung des Auslösers [Triebfahrzeug]
      posGeschwindigkeit = true
    else
      posGeschwindigkeit = false
    end
    
    for k, v in ipairs(t) do -- Fahrtrichtung für alle Wagen im Zugvebund bestimmen (Fahrtrichtung bezieht sich auf dei Fahrtrichtung des Auslösers!)
      if v.variables["Ausrichtung"] == vehicle.variables["Ausrichtung"] then
        v.variables["positive Fahrtrichtung"] = posGeschwindigkeit     -- übernehme Fahrtrichtung bei gleicher Ausrichtung
      else
        v.variables["positive Fahrtrichtung"] = not posGeschwindigkeit -- drehe Fahrtrichtung um bei entgegengesetzter Ausrichtung
      end
    end

    Hier seht ihr meinen modifizierten Code, der aus insgesamt 46 Zeilen besteht.

    Ich habe nur eine Bitte. Versucht erst gar nicht, den Code zu verstehen, wenn ihr nicht Lua lernen wollt! Wichtig ist eigentlich nur, was so ein Baustein ausspuckt! Der Lua-Skript-Baustein funktioniert wie eine Schnittstelle und überträgt in diesem Falle eine Variable "positive Fahrtrichtung". Auf diese Variable kann nämlich später die grafische EV zurückgreifen. Ich freue mich wie immer über Anregungen unserer Lua-Experten, wenn man den Code noch schlanker machen könnte. B|


Dann habe ich eine Frage an euch. Welche der Versionen sagt euch mehr zu? Die mit oder ohne dem Lua-Skript-Baustein? Markus hatte ja geschrieben, dass derzeit seine Türsteuerung nicht funktioniert, was vermutlich an der äußert komplizierten Konfigurierung (Version 4a ohne Lua-Skript-Baustein) liegt.

... und eine Frage an @Goetz.
In der obigen Grafik habe ich eine Randbemerkung geschrieben. An der markierten Stelle wollte ich eigentlich zuerst den Skript-Baustein einfügen, doch dann traten undefinierte Zustände auf. Der ICE zum Beispiel öffnete bei jeder zweiten Runde die Türen auf der falschen Seite. Nun habe ich das natürlich verbessert, sodass sich die Türen auf der richtigen Seite öffnen. Abhilfe schafft dann immer eine nachgestellte Verzögerung. Gibt es eine Faustregel, wann man eine Verzögerung nach einem Lua Skript benötigt und wann nicht? Nach meinem Verständnis werden ja alle Ereignisse von oben nach unten (sequenziell) abgearbeitet.

Anbei die Version 4b:
3. Lösungsvorschlag - Version 4b.mbp

Viele Grüße
Tim

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Minuten schrieb tim-fischertechnik:

Nach meinem Verständnis werden ja alle Ereignisse von oben nach unten (sequenziell) abgearbeitet.

Hallo Tim,

alle Befehle werden von oben nach unten sequenziell an das Studio übermittelt.
Ausgeführt werden sie erst im Anschluss. Wenn du also anschließend prüfen möchtest, wie der neue Zustand ist, musst du etwas Zeit verstreichen lassen.

Ich habe dein ganzes Posting nur überflogen und kann nicht einschätzen, ob dir diese Antwort schon weiterhilft?

Viele Grüße
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb Goetz:

Ausgeführt werden sie erst im Anschluss. Wenn du also anschließend prüfen möchtest, wie der neue Zustand ist, musst du etwas Zeit verstreichen lassen.

Danke Götz, das hilft mir weiter. Nun weiß ich beruhigt, woran es lag. Die Variable "positive Fahrtrichtungsumkehr" wird ja vom Lua-Skript bereitgestellt und dann in der grafischen EV ausgelesen. Meine Tests mit der EV-Protokollierung ergaben, dass die Fahrtrichtung schon ausgelesen wurde, ehe sie durch das Lua-Skript verändert wurde. Das ergab dann natürlich immer eine fehlerhafte Fahrtrichtung. Jetzt habe ich natürlich den Lua-Skript-Baustein ganz nach oben über die eh schon vorhandene Verzögerung gezogen. Das fehlerhafte Verhalten lässt sich also in der beigeführten Anlage nicht mehr nachvollziehen, weil ich es zuvor schon behoben hatte.

Viele Grüße
Tim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 17.6.2022 um 08:33 schrieb neuLich:

4. Spitzenbeleuchtung entsprechend der Fahrtrichtung!

Hallo

Ich habe einen herrenlosen schwebenden Fahrzeugführer vorsichtig auf die Bahnsteigkante gesetzt. Er war sich nicht sicher welche der Loks seine ist.....

bis neuLich

Hallo @neuLich,

du hattest in einer deiner Beispielanlagen gezeigt, wie man eine Spitzenbeleuchtung entsprechend der Fahrtrichtung für genau eine Zuggattung umsetzen kann. Ich habe mich dem Wunsch angenommen und eine generische Spitzenbeleuchtung für alle Zuggattungen entworfen.

Funktionsbeschreibung:

Die meisten Aktionen habe ich mit Kommentaren versehen. Dennoch möchte ich hier kurz darauf eingehen, wie das allgemeine Prinzip hinter der Spitzenbeleuchtung funktioniert.

  1. Wann müssen überhaupt die Spitzen- und Schlusslichter eines Zuges wechseln? Eigentlich nur dort, wo der Zug seine Fahrtrichtung umgekehrt, also in Kopfbahnhöfen. Deswegen prüfe ich zuerst, ob der Zug die Fahrtrichtung wechselt (Variable Fahrtrichtungsumkehr == True).
    EV für Spitzenlichtbeleuchtung
    Grafik 3/14: EV für Spitzenlichtbeleuchtung

     
  2. Dann werden alle vier Lichter (Spitzenlichter/ Schlusslichter, je vorne/ hinten) für jeden Wagon innerhalb des Zugverbunds ausgeschaltet. Zuvor wird geprüft, ob der Texteintrag und die Tabelle überhaupt existiert. Nicht jede Lok/ Wagon muss zwangsläufig zwei Spitzenlichter haben. Da kann dann mal das hintere Spitzenlicht fehlen.
  3. Nach einer kurzen Verzögerung von 0,5 Sekunden werden die Lichten unter bestimmten Kriterien eingeschaltet. Ein Licht wird nur eingeschaltet, wenn die Kupplung auf derselbe Seite wie das Licht frei ist, d.h. nicht mit anderen Wagen gekuppelt. Die Fahrtrichtung entscheidet über die Farbe (weißes Spitzenlicht oder rotes Schlusslicht).
    • Wagen, die mitten im Zugverbund eingereiht sind: Beide Kupplungen sind belegt, weswegen überhaupt kein Licht eingeschaltet wird.
    • Wagen am Zugende: Hierbei ist eine Kupplung frei und ein Licht wird eingeschaltet. 
    • Loks ohne Wagen: Hierbei sind beide Kupplungen frei. Folglich werden zwei Lichter eingeschaltet.


Ein konkretes Beispiel:

Beispiel hintere rote Schlusslicht wird eingeschaltet
Grafik 3/15: Beispiel hintere rote Schlusslicht wird eingeschaltet

Die Diesellok DB 212 fährt mit drei Umbauwagen mit negativer Geschwindigkeit (hintere Kupplung zeigt Richtung Prellbock) in das Stumpfgleis ein. Hierbei ist die hintere Kupplung frei und die hiergezeigte Bedingung ist erfüllt. Das weiße Spitzenlicht wird zuvor in dem oben beschriebenen Teil ausgeschaltet und nach einer kurzen Verzögerung leuchtet das rote Schlusslichte auf.


Konfigurierung:
Konfigurierung der Namen für Spitzen- und Schlusslicht
Grafik 3/16: Konfigurierung der Namen für Spitzen- und Schlusslicht

Anbei die 5. Version:

3. Lösungsvorschlag - Version 5.mbp

 

fertig. Das Tutorial ist zu Ende. 9_9

Viele Grüße
Tim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Tim,

Am 18.8.2022 um 18:28 schrieb tim-fischertechnik:

Bei Zügen mit zwei Auslösern, die in die entgegengesetzte Richtung zeigen wie der ICE, öffnen/schließen sich die Türen nicht immer auf der richtigen Seite.

Ja, das ist ein nicht zu unterschätzendes Problem. :)

Aber bei deiner Analyse fehlen noch zwei Situationen.

vor 5 Stunden schrieb tim-fischertechnik:

entgegengesetzte Ausrichtung zweier Loks

 Du betrachtest hier nur zwei mögliche Kombinationen für die Ausrichtung des ersten und letzten Fahrzeuges. Bei symmetrischen Fahrzeugen gibt

es vier Kombinationsmöglichkeiten.  

794752424_Screenshot2022-09-17204636.thumb.jpg.e47e18f3f5fddf0510edd0833ac02e58.jpg

Betrachtet hast du bisher 2. und 3., funktioniert dein Türcode auch bei den Kombinationen 1. und 4. ?   

Würde mich mal interessieren.

Viele Grüße,

Hawkeye

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Hawkeye:

Betrachtet hast du bisher 2. und 3., funktioniert dein Türcode auch bei den Kombinationen 1. und 4. ?   

Ja, mein Lua-Skript aus Version 4b ist sogar in der Lage, die Position/Richtung sowohl von Loks als auch von Wagen in einem Zugverbund zu bestimmen und zwar vollautomatisch. Der Erstentwurf funktionierte zuerst nur bei Zügen mit maximal zwei Loks richtig. Diese durften auch nur an den Zugenden platziert sein. In meinem modifizierten Skript werden beliebig viele Züge [Auslöser] berücksichtig, die sich auch an beliebig vielen Stellen, also auch mittig im Zug, befinden können. Die Bilder dienten zur Veranschaulichung der manuellen Konfiguration für die Version 4a und da die anderen beiden Fälle dem Standardverhalten entsprachen, habe ich sie nicht nochmal aufgeführt. 

Mir war es immer zu mühselig, die Ausrichtung von jedem einzelnen Wagon zu prüfen und dann händisch in Form von Variablen einzutragen. Man kann also Wagen einfach auf die Platte ziehen und muss sich keine Gedanken über eine richtige Ausrichtung machen. Lediglich die beiden Animationsnamen der Türen für links/rechts müssen in einer Tabelle eingetragen werden. Bei meinem Skript nehme ich mir die Kupplungsbelegungen zur Hilfe, um die relative Ausrichtung im ersten Schritt zu bestimmen. Du hattest ja auch schon ein paar erste Tests mit Kupplungsbelegungen gemacht. Ist schon eine tolle Sache! Im zweiten Schritt wird die Ausrichtung/Position auf die Fahrtrichtung gemünzt. Wenn die Ausrichtung eines Wagons identisch zur Ausrichtung der auslösenden Lok ist, wird die Fahrtrichtung des Auslösers übernommen, andernfalls umgekehrt. 

 Beim Stöbern einiger Beiträge bin ich auf diesen Beitrag gestoßen. :D Interessant ...

Ich muss schmunzeln, da die Türsteuerung über fast gleiche Grundkonzepte verfügt. Beispielsweise bestimmst du die Türseite auch über die Fahrtrichtung oder du hast ja auch eine Fahrtrichtungsumkehr, indem du die Zug Geschwindigkeit mit der Zug Ausfahrtrichtung multiplizierst. Natürlich hat da jeder seine eigene Struktur. Ob man jetzt die Ausstiegseite "BahnsteigSeite==links/rechts" [Hawkeye] oder "Ausstieg in Fahrtrichtung rechts == "true/false" [Tim] nennt, ist völlig egal. Vielleicht kannst du ja etwas von der automatischen Fahrtrichtungsbestimmung adaptieren und ich schaue mal, ob ich noch ein Gimmick von dir verwenden kann. Beim Erstellen meines Tutorials wollte ich es vermeiden, Lua einzusetzen und stattdessen den Schwerpunkt auf die grafische EV legen. Und ich muss sagen, ich bin kläglich gescheitert. ;) An zwei Stellen in der EV bin ich um Lua nicht herumgekommen. Es ist also eine ganz schöne Herausforderung, einen Kompromiss zwischen komplexen realistischen Betriebssituationen, die sich nur gut über Lua abbilden lassen und Verständlichkeit auf der anderen Seite mittels überschaubarer grafischer EV, zu finden. 

Viele Grüße
Tim

Bearbeitet von tim-fischertechnik
inhaltliche Logik, Ergänzungen und Formulierung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Tim,

vor 41 Minuten schrieb tim-fischertechnik:

Mir war es immer zu mühselig, die Ausrichtung von jedem einzelnen Wagon zu prüfen und dann händisch in Form von Variablen einzutragen. Man kann also Wagen einfach auf die Platte ziehen und muss sich keine Gedanken über eine richtige Ausrichtung machen.

Genau, das ist das Ziel. Allgemeingültig für jede beliebige Konstellation (Ausrichtung) von Loks und Wagen.

vor 42 Minuten schrieb tim-fischertechnik:

Bei meinem Skript nehme ich mir die Kupplungsbelegungen zur Hilfe, um die relative Ausrichtung im ersten Schritt zu bestimmen.

Diese Idee habe ich mittlerweile auch schon in den optimierten Code von Götz integriert und damit die Vorgabe der Variablen „Wagenrichtung“ eingespart. Diese wird jetzt im Code intern ermittelt.

vor 50 Minuten schrieb tim-fischertechnik:

Beim Erstellen meines Tutorials wollte ich es vermeiden, Lua einzusetzen und stattdessen den Schwerpunkt auf die grafische EV legen. Und ich muss sagen, ich bin kläglich gescheitert.

Die grafische EV hat ihre Grenzen, daher ist der Einsatz von Lua in vielen komplexen Bereichen unerlässlich.

Hast du doch toll hingekriegt.👍

Viele Grüße,

Hawkeye

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...