Jump to content

Ablaufproblem beim Aktivieren einer Fahrstraße


WalterW

Recommended Posts

Ich habe ein Ablaufproblem beim Aktivieren von Fahrstraßen.

Wenn eine Fahrstraße mit einem Signal-Kontakt beginnt, dann kann festgelegt werden, was beim Aktivieren der Fahrstraße mit dem Signal geschehen soll: In eine bestimmte Stellung zum Abfahren schalten oder nichts. Und jetzt beginnt mein Ablaufproblem, wenn das Signal auf Abfahrt schaltet. Direkt mit dem Aktivieren der Fahrstraße wird das Signal auf Abfahrt gestellt und der Zug setzt sich mit entsprechender Signalgeschwindigkeit in Bewegung. Es bleibt also keine Zeit z.B. vor Abfahrt die Türen zu schließen!
Im Betriebsablauf ohne Fahrstraße(n) habe ich eine Signal-Ablaufsteuerung, die den Zug bei Signalstellung auf Fahrt nicht sofort startet, sondern mit dem Mittel der Zeitverzögerung vorher noch andere Aufgaben erledigt (Fahrlicht schalten, Türen schließen, Pantographen ausfahren etc.) und erst dann die Fahrgeschwindigkeit für die Lok setzt. Sieht auch sehr realistisch aus, dass der Zug bei Signalstellung Fahrt nicht sofort losfährt.
Jetzt könnte man ja sagen, dann starte doch die Fahrstraße und stelle die Signalaktivität auf "Nichts tun" und verwende dann die vorhandene Signal-Ablaufsteuerung. OK, wäre mit entsprechendem Aufwand machbar, aber schwierig umzusetzen, wenn die Fahrstraße nicht direkt aktiviert werden kann, sondern erst reserviert wird. Und vielleicht gibt es noch anderen Hürden, die ich z.Zt. noch gar nicht sehe.
Ist so etwas wie eine variable „Zeitverzögerung für Abfahrt“ bei dem automatischen Fahrstraßenablauf vorstellbar und gegebenenfalls auch umsetzbar?
Fahrstraße aktivieren, Signal auf Fahrt stellen, Zeitverzögerung berücksichtigen und dann Fahrgeschwindigkeit der Lok aktivieren.
Vielleicht gibt es ja bereits Überlegungen in diese Richtung.

Freundliche Grüße Walter

 

Link to comment
Share on other sites

Bin zwar nur Eisenbahner-Laie, meine aber auch hier mehrfach gelesen zu haben, dass
"Abfahrt aus Bahnhof" und "Streckenabschnitt frei bzw. besetzt" unabhängig voneinander sind.
D.h. der Zug wird abfahrbereit gemacht, fährt dann los, fordert die nächste Fahrstraße an, und muss dann eben ev. wieder anhalten, wenn die F.S. nicht frei ist.

Gruß
Eggu

Link to comment
Share on other sites

vor 46 Minuten schrieb WalterW:

Direkt mit dem Aktivieren der Fahrstraße wird das Signal auf Abfahrt gestellt und der Zug setzt sich mit entsprechender Signalgeschwindigkeit in Bewegung.

Aber nur, wenn der Zug auch tatsächlich auf dem Gleiskontakt des Signals steht.

Das ist nützlich auf der Strecke an Blocksignalen, wo eh keine Türen geöffnet werden.

Im Bahnhof sollte der aktuelle Zug in einer Signal-Variablen z.B. „Zug vor Signal“ gespeichert sein.

Wenn das Signal per Fahrstraße geschaltet wird, dann kannst du dem Zug auch über diese Variable in der EV eine verzögerte Abfahrt zuweisen, um vorher die Zeit zum Schließen der Türen zu ermöglichen.

@Neo, es gab doch schon von verschiedenen Seiten den Wunsch,

die Verzögerungszeit der Abfahrt eines Zuges direkt im Signal einstellen zu können.

VG,

Hawkeye

 

Edited by Hawkeye
Link to comment
Share on other sites

vor 1 Stunde schrieb WalterW:

Direkt mit dem Aktivieren der Fahrstraße wird das Signal auf Abfahrt gestellt und der Zug setzt sich mit entsprechender Signalgeschwindigkeit in Bewegung.

Das tut er dann, wenn im Signalkontakt festgelegt ist, dass der Zug bei Fahrtstellung eine bestimmte Geschwindigkeit zugewiesen bekommen soll.
Diese Einstellung ist optional und für deine Zwecke ungeeignet. Du kannst sie deaktivieren. Dann bleibt der Zug auch bei Stellung "Fahrt" stehen.

Der nächste Schritt ist dann, den Zug nach Ablauf einer gewissen Zeit in Bewegung zu setzen. Hierfür hast du mehrere Alternativen

  1. Du kannst den Zug auf dem Kontakt per EV direkt ansprechen und ihm eine Geschwindigkeit zuweisen.
  2. Du kannst die "Automatische Beschleunigung" im Signalkontakt kurzzeitig aktivieren und gleich darauf (noch bevor das Signal auf "Halt" zurück fällt) wieder deaktivieren.

Ich bevorzuge die zweite Methode

Demoanlage:    verzögerte Abfahrt.mbp

Viele Grüße
Götz

Edited by Goetz
Link to comment
Share on other sites

Hallo @WalterW,

hier noch meine Version. Bei mir ist an Bahnsteiggleisen die Beschleunigung am Signal für HP2 und HP1 Grundsätzlich ausgeschaltet, der Zug wird per EV entweder  mit den Signal Zs9 oder althergebracht mit Pfeife und Kelle gestartet. Ausnahme ist bei der Verwendung von Formsignalen, hier ist auch beim evtl. Aufgestellten Rangiersignal die Beschleunigung für Sh1 auch ausgeschaltet. Bei der "Großen Bahn" ist das Schalten des Ausfahrsignales nicht der Abfahrbefehl, sondern die Zustimmung des Fahrdienstleiters zur Abfahrt. Den eigentlichen Abfahrbefehl erteilt der Zugführer oder die Gleisaufsicht in Absprache mit den Zugführer. Schau Dir mal auf YT die Videos von peterle sky an. Der ist von Beruf TFz bei DB Regio und macht tolle Erklärvideos zur Bahn und den Bahnbetrieb. Da habe ich mir auch schon Einiges abgekuckt, was mir mein verstorbener Vater (er war Sipo im Bahnbetriebsdienst und ist Anfang der 90er in Pension gegangen) nicht beigebracht hat, oder es zu seiner Zeit noch nicht gab (zB. LZB oder KS-Signale)

Link to comment
Share on other sites

  • 5 months later...

Hallo Götz,

bei deiner Anlage "Verzögerte Abfahrt" ist nur ein Bahnsteig rechts und ein Signal und die Fahrzeuge sind in der gleichen Richtung angeordnet. Wie kann man den ganzen

Ablauf auf mehrere Situationen anwenden, z. B. Wagen vorwärts und rückwärts oder mehrere Signale universell mit einem EV-Eintrag bedienen?

Viele Grüße

Frank

Link to comment
Share on other sites

vor 7 Stunden schrieb oberrrrroller:

Wie kann man den ganzen Ablauf auf mehrere Situationen anwenden, z. B. Wagen vorwärts und rückwärts oder mehrere Signale universell mit einem EV-Eintrag bedienen?

Hallo Frank,

dafür sind die Objektvariablen gedacht. Damit kannst du jedem Fahrzeug, jedem Signal etc. die individuellen Daten geben, damit ein universeller EV Eintrag jeweils die individuellen Daten findet, die gerade benötigt werden.

Viele Grüße
Götz

Link to comment
Share on other sites

Im Ereignis Bahnhofsausfahrt, die Animationen zweiteilen und weitere Verzögerung hinzufügen:

if not deferredCall then
  if signal.state == 1 then
    local t = layout:getVehiclesOn(signal)
    for i, Fahrzeug in ipairs(t) do
      local t, t2 = layout:getVehicleGroup(Fahrzeug, 3)
      for i, Wdh in ipairs(t) do
        local Ori = t2[i]
        Wdh.animations["01-Sperre 1 Oeffnen"]:play(-1, -1)
        Wdh.animations["02-Sperre 2 Oeffnen"]:play(-1, -1)
         -- Wdh.animations["03-Tuer 1 Oeffnen"]:play(-1, -1)
         -- Wdh.animations["04-Tuer 2 Oeffnen"]:play(-1, -1)

      end
    end
  defer(2, "Verzögerung_p2")
  end

elseif deferredCall == "Verzögerung_p2" then
  if signal.state == 1 then
    local t = layout:getVehiclesOn(signal)
    for i, Fahrzeug in ipairs(t) do
      local t, t2 = layout:getVehicleGroup(Fahrzeug, 3)
      for i, Wdh in ipairs(t) do
        local Ori = t2[i]
        -- Wdh.animations["01-Sperre 1 Oeffnen"]:play(-1, -1)
        -- Wdh.animations["02-Sperre 2 Oeffnen"]:play(-1, -1)
          Wdh.animations["03-Tuer 1 Oeffnen"]:play(-1, -1)
          Wdh.animations["04-Tuer 2 Oeffnen"]:play(-1, -1)
      end
    end
  defer(2, "Verzögerung")
  end

elseif deferredCall == "Verzögerung" then
  signal.trackContact.autoAcceleration = true
  defer(2, "Verzögerung (2)")
elseif deferredCall == "Verzögerung (2)" then
  signal.trackContact.autoAcceleration = false
end

 

Link to comment
Share on other sites

  • 1 month later...

Hallo MBS-Fans,

bei dem o. g. Tipp von Eggu waren alle Wagen gleiche Bauart und gleiche Richtung. Wie funktioniert das, wenn unterschiedliche Wagentypen zum Einsatz kommen und vorwäts und rückwärts  im Zugverband fahren? Ich habe auf meiner Anlage:

4-Achs-Fernverkehrswagen: "04 Einstiegstüren links"; "05 Einstiegstüren rechts"

Nahverkehrswagen (Umbauwagen): "01 Tueren 1"; "02 Tueren 2"

Nahverkehrstriebwagen (ET 85 und Regio Shuttle): "Türen links"; "Türen rechts"

Kann mir jemand Hilfe geben, wenn erst das Signal öffnet, dann die unterschiedlichen Animationen zum Türen schließen ablaufen und dann die Züge abfahren sollen?

Vielen Dank schon mal im Voraus für Unterstützung.

Gruß Oberrrrroller

Link to comment
Share on other sites

kurze Antwort:
Die verschiedenen Animationsnamen müssen jeweils in einer Objektvariablen abgelegt werden,
und der Zugriff erfolgt dann indirekt über diese Variablen, die dann aber einheitliche Namen haben.
Die Richtung kann auch abgefragt werden und kann entsprechend als Unterscheidung dienen.
Gruß Eggu

Link to comment
Share on other sites

vor 47 Minuten schrieb Eggu:

Die verschiedenen Animationsnamen müssen jeweils in einer Objektvariablen abgelegt werden ...

zu Fuß ist das erstens viel Arbeit und zweitens fehlerträchtig.

Wie wäre es mit einer kleinen Hilfskonstruktion?

Türnamen vereinheitlichen.mbp

TrnamenHilfskonstruktion.thumb.jpg.ee7b3ed2f2b39f0d5a5cb14a4676cafc.jpg

  • stell einen Waggon auf das blaue Gleis
  • bewege die rechten Türen -> der Achsenname wird in der Objektvariablen "Tür rechts" gespeichert
  • stell ihn auf das grüne Gleis
  • bewege die linken Türen -> der Achsenname für diese Türen wird in der Objektvariablen "Tür links" gespeichert

da die Variable immer wieder überschrieben wird, kann man sich ruhig mal irren. Die letzte Aktion ist die, deren Namen erhalten bleibt.

Ist immer noch Handarbeit (Waggon aufgleisen, Türanimation starten, weiterschieben, andere Türseite ...), aber bequemer als alles manuell einzutragen.

Viele Grüße
Götz 

Link to comment
Share on other sites

Die Kreativität der Modellbauer bei Animationsnamen ist nachvollziehbar, stellt aber Anlagenbauer vor Probleme.

Um die möglichen Animationen für Bahnfahrzeuge zu vereinheitlichen, habe ich mal eine Mini-Anlage erstellt (Animationen für Bahnfahrzeuge ID 4879AD06-54F0-4533-B9A3-A1B96EBAB35D ). Die ursprüngliche Idee und erste Umsetzung fand ich im Forum, habe aber leider den Namen vergessen.

Diese "Mini-Anlage" beinhaltet die EV sowie ein Gleis mit Gleiskontakten, die einen automatischen Eintrag der Animationen von Bahnfahrzeugen als Variable bewirken sowie Funktionen und Kontakte, um diese Animationen auszuführen. Beinhaltete Animationen sind:
- Innenbeleuchtung
- Türen öffnen/schließen
- Fahrlicht/Rücklicht
- Pantograf
Schlagworte von Gleiskontakten, auf welche die EV reagiert, sind:
 Innenbeleuchtung ein
 Innenbeleuchtung aus
 Fahrlichter setzen
 Fahrlichter ausschalten
 Pantograf vorne hoch (als Vorlage)
 Türen rechts auf
 Türen rechts zu
 Türen links auf
 Türen links zu
 Animationen reset
Die Gleiskontakte rufen jeweils ein benutzerdefiniertes Ereignis auf, das natürlich auch von anderen Stellen genutzt werden kann.

Einfach die Anlage importieren und die nicht benötigten Elemente (Boden, Gleise , Kontakte und Beschriftungen) entfernen.

Den Gleiskontakt für die Ermittlung der Animationstexte wird bei Ausfahrten aus SBFs oder Depots eingesetzt. Alternativ kann die Ermittlung auch bei einer Start-Prozedur zum Starten des Betriebs erfolgen. Hier wäre ein einheitliches Schlagwort für Triebfahrzeuge notwendig.

Wer ein ähnliches Verfahren für Straßenfahrzeuge (Blinker, Fahrlicht, Bremslicht, Türen (nur bei Bussen) ) benötigt, findet dies neben vielen anderen EVs in der Anlage "Basissteuerungen" ID 741AF992-2B29-48ED-B6B8-6C416AF9A1EC.

Viele Grüße,
    Wolfgang

Link to comment
Share on other sites

Hallo @oberrrrroller,

vor 16 Stunden schrieb oberrrrroller:

und vorwärts und rückwärts  im Zugverband fahren

Um auch diese Frage noch zu beantworten. Wenn Du die Animationsnamen in eine Variable gepackt hast (bei mir: "Doors at right side" und "Doors at left side"), dann machst Du die Türen mit diesem Code auf:

local t, t2 = layout:getVehicleGroup(Vehicle)
for i, Iter in ipairs(t) do
  local Ori = t2[i]
  if OpenOnRightSide == true then
    if Ori == 1 then
      if Iter.variables["Doors at right side"] ~= nil then
        Iter.animations[Iter.variables["Doors at right side"]]:play(-1, 1)
      end
    else
      if Iter.variables["Doors at left side"] ~= nil then
        Iter.animations[Iter.variables["Doors at left side"]]:play(-1, 1)
      end
    end
  else
    if Ori == 1 then
      if Iter.variables["Doors at left side"] ~= nil then
        Iter.animations[Iter.variables["Doors at left side"]]:play(-1, 1)
      end
    else
      if Iter.variables["Doors at right side"] ~= nil then
        Iter.animations[Iter.variables["Doors at right side"]]:play(-1, 1)
      end
    end
  end
end

und mit diesem wieder zu:

local t, t2 = layout:getVehicleGroup(Vehicle)
for i, Iter in ipairs(t) do
  local Ori = t2[i]
  if Iter.variables["Doors at right side"] ~= nil then
    Iter.animations[Iter.variables["Doors at right side"]]:play(-1, -1)
  end
  if Iter.variables["Doors at left side"] ~= nil then
    Iter.animations[Iter.variables["Doors at left side"]]:play(-1, -1)
  end
end

Beiden Routinen muss Du das Fahrzeug (bei mir: "Vehicle") übergeben und der Routine zum Türen öffnen auch noch die Seite (bei mir: "OpenOnRightSide"; true = rechte Seite, false = linke Seite.

Die Bedingungen könnte man beim Türen öffnen auch kürzer formulieren, aber so ist es auch für Nichtprogrammierer besser nachvollziehbar: Erst die Frage rechts oder links aufmachen (auf welcher Seite ist der Bahnsteig?), dann jeweils die Frage, steht das Fahrzeug vorwärts oder rückwärts auf dem Gleis.

Beim Türen schließen ist die Seite egal, man macht einfach alle Türen zu.

vor 16 Stunden schrieb oberrrrroller:

Hilfe geben, wenn erst das Signal öffnet, dann die unterschiedlichen Animationen zum Türen schließen ablaufen und dann die Züge abfahren sollen?

Das grundsätzliche Vorgehen für eine verzögerte Abfahrt ist:

  • Fahrzeug im (Signal-)Kontakt merken, wenn er betreten wird und das Signal geschlossen ist,
  • bei Umschalten des Signals auf eine Stellung ≠ 0 erst erledigen, was sonst noch zu tun ist und danach das (gemerkte) Fahrzeug (verzögert) in Bewegung setzen.

Die automatische Beschleunigung muss man im Signal natürlich abschalten, sonst setzt sich der Zug deshalb gleich in Bewegung.

Das ist nicht ganz banal, weil weitere Fälle zu bedenken sind, z.B. der Fall, dass das Signal kurz vor Eintreffen geöffnet wird, der Zug aber schon am bremsen ist.

Beste Grüße

Phrontistes

Link to comment
Share on other sites

Hallo MBS-Fans,

durch eure Hilfe habe ich alle Bahnhofshalte so umgestellt, dass bei allen Personenwagen die Türen erst kurz bevor die Züge abfahren geschlossen werden. Vorher war eine Verzögerung nach dem Eintreffen am Bahnsteig eingestellt, egal ob der Zug abfährt oder warten muss bis die Fahrstraße frei ist. 

Vielen Dank an alle Helfer. 

Gruß Frank 

Link to comment
Share on other sites

  • 3 months later...

Hallo LUA-Experten,

ich brauche noch mal euere Hilfe. Habe jetzt einen Schmalspurzug mit 750 mm Schmalspur Personenwagen (mit Türen) und 750 mm Schmalspur Aussichtswagen (ohneTüren). Deshalb habe ich das Script (Bild 1) ergänzt (Bild 2). Bis zur roten Linie funktioniert alles einwandfrei (Sperren schließen und Türen nach Verzögerung). Aber dann geht es nicht weiter.

defer(3, "Verzögerung (2)")
elseif deferredCall == "Verzögerung (2)" then
  signal.trackContact.autoAcceleration = true
  defer(4, "Verzögerung (3)")
elseif deferredCall == "Verzögerung (3)" then
  signal.trackContact.autoAcceleration = false

findet nicht statt, obwohl das Script keine Fehlermeldung anzeigt. Wo habe ich da einen Fehler gemacht.

 

Schon mal vielen Dank für euere Hilfe.

Gruß Frank

Bild 1.jpg

Bild 2.jpg

Link to comment
Share on other sites

vor 9 Stunden schrieb oberrrrroller:

Wo habe ich da einen Fehler gemacht

Vermutlich liegt es daran:

Screenshot2024-08-20102018.jpg.9c1370fe6f22e8b8276de6f00e75ba73.jpg

Schick Code künftig damit:

Screenshot2024-08-20101032.thumb.jpg.4b72087d2df4fec44c26944d0aa46cd4.jpg

dann man u.a. leichter prüfen, ob die Verschachtelungen stimmen. Das ist anhand eines Screenshots sehr mühsam. V.a. wenn, wie bei Dir, die Einrückungen nicht stimmen.

Den Signalstatus zweimal zu prüfen, ist im Übrigen auch nicht sinnvoll. Und ich würde ihn auf "Signal ist nicht 'rot'" prüfen, also so:

if not deferredCall then
  if not (signal.state == 0) then
    --- Anmimationen hier ablaufen lassen
    defer(3, "Deferred execution")
  end
elseif deferredCall == "Deferred execution" then
  signal.trackContact.autoAcceleration = true
  defer(1, "Deferred execution (2)")
elseif deferredCall == "Deferred execution (2)" then
  signal.trackContact.autoAcceleration = false
  defer(3, "Deferred execution (3)")
elseif deferredCall == "Deferred execution (3)" then
  -- Signal zurückstellen
  signal.state = 0
end

Testanlage:

20240820 oberrrrroller.mbp

Edited by Phrontistes
Testanlage hinzugefügt
Link to comment
Share on other sites

vor 5 Stunden schrieb Phrontistes:

Den Signalstatus zweimal zu prüfen, ist im Übrigen auch nicht sinnvoll.

Aber notwendig, wenn wie bei Dir zwischen zwei Animationen ein weiterer Zeitversatz sein soll. Dass Du das möchtest, hatte ich übersehen.

Edited by Phrontistes
Komma hatte gefehlt
Link to comment
Share on other sites

Hallo Phrontistes,

vielen Dank für deine schnelle Hilfe. Habe deinen Code ausprobiert. Habe die zweite Verzögerung wie von dir eingezeichnet eine Zeile nach oben verschoben. Hat noch nicht funktioniert, aber sehr geholfen den Fehler zu beseitigen, mit einem zusätzlichen 'end' darüber. So sieht das Ganze jetzt aus:

if not deferredCall then
  if not (signal.state == 0) then
    local t = layout:getVehiclesOn(signal)
    for i, Fahrzeug in ipairs(t) do
      local t, t2 = layout:getVehicleGroup(Fahrzeug, 3)
      for i, Wdh in ipairs(t) do
        local Ori = t2[i]
        Wdh.animations["01-Sperre 1 Oeffnen"]:play(-1, -1)
        Wdh.animations["02-Sperre 2 Oeffnen"]:play(-1, -1)
      end
    end
  defer(2, "Verzögerung (1)")
  end
elseif deferredCall == "Verzögerung (1)" then
if not (signal.state == 0) then
    local t = layout:getVehiclesOn(signal)
    for i, Fahrzeug in ipairs(t) do
local t, t2 = layout:getVehicleGroup(Fahrzeug, 3)
for i, Wdh in ipairs(t) do
  local Ori = t2[i]
  if Wdh.variables["Türen Hinten"] ~= nil then
    Wdh.animations[Wdh.variables["Türen Hinten"]]:play(-1, -1)
    Wdh.animations[Wdh.variables["Türen Vorn"]]:play(-1, -1)
      end
    end
  end
  defer(4, "Verzögerung (2)")
  end
elseif deferredCall == "Verzögerung (2)" then
  signal.trackContact.autoAcceleration = true
  defer(3, "Verzögerung (3)")
elseif deferredCall == "Verzögerung (3)" then
  signal.trackContact.autoAcceleration = false
  end

Die Anweisung zum Schließen von Signalen habe ich weggelassen, weil die durch die Einstellungen der Fahrstraßen automatisch geschlossen werden.

Nochmals Danke.

Gruß Frank

Link to comment
Share on other sites

  • 1 month later...

Hallo MBS-Fans,

wie bekomme ich das hin, dass am Bahnsteig die Türen bzw. Sperren auf beiden Seiten öffnen, weil bei der Schmalspur ein Bahnhof am mittleren Gleis rechts und links einen Bahnsteig hat. Die Türen und Sperren sollen sich auf beiden Seiten öffnen, so dass die Fahrgäste in die rechts und links wartenden Züge umsteigen können.

Viele Grüße Frank

Umsteige-Bahnhof.jpg

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...