Jump to content

Einfahrt mit zufälligen Fahrstraßen


bigrala

Empfohlene Beiträge

Hallo Götz und alle anderen ....

ich versuche gerade einiges mit Deinem Vorschlag für zufällige Einfahrt zu realisieren.

Bei Deinem Vorschlag wird immer gleich eine verfügbare Fahrstraße aktiviert und somit das Einfahrsignal auf Fahrt gestellt.
Damit geht meine Absicht leider nicht. Ich wollte beim betreten des Einfahrsignals Abfragen ob es sich um einen Güterzug handelt und im dann das Durchfahrtsgleis freigeben.
Nur wenn es sich nicht um einen Güterzug handelt, dann soll Deine Einfahrtroutine abgearbeitet werden.

Hast Du da einen Tipp ?

 

Danke Ralf

Screenshot 2022-10-09 143627.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 16 Minuten schrieb bigrala:

Hast Du da einen Tipp ?

Leider nein.
In dem Ausschnitt, den du mir zeigst, scheint alles in Ordnung zu sein.
Damit müsste das, was du bezweckst, funktionieren.

Wenn es nicht funktioniert, liegt die Ursache an einer Stelle, die ich nicht sehe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nur eine Idee hierzu:

In der Schleife ("Alle Fahrstraßen mit Schlagwort") werden evtl. alle Fahrstraßen mit diesem Schlagwort aktiviert und blockieren sich gegenseitig.

Evtl. vor der Schleife eine Variable "gefunden" des Gleiskontaktes auf false setzen. In der Schleife die Fahrstraße nur aktivieren, wenn diese frei ist (hast Du schon gemacht) und wenn die Variable "gefunden" der Gleisvariable auf false steht. Dann neben dem Aktivieren die Variable "gefunden" auf true setzen.

Ansonsten sieht das gut aus.

Grüße,

Wolfgang

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier mal mein Versuch ........

Immer wenn bei der Einfahrt eine Fahrstraße frei gegeben wird (letzte Weiche verlassen), wird sofort eine neue Fahrstraße aktiviert und das Einfahrsignal auf Fahrt gestellt - obwohl noch kein Zug am Einfahrsignal steht.

Normal sollte aber doch erst ine Fahrstraße ausgewählt/aktiviert werden, wenn ein Zug das Einfahrsignal betritt.

Ich finde einfach keinen Fehler :(

 

 

Fahrstraßen Einfahrt.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb prinz:

Nur eine Idee hierzu:

Jetzt hat es bei mir "klick" gemacht.

@bigrala

Mit meiner Methode wird eine Fahrstraße aktiv und gleichzeitig gehen alle anderen in Bereitschaft.
Die in Bereitschaft aktivieren sich dann bei nächster Gelegenheit selbst. Das willst du unterbinden.

Dafür musst du eine weitere Prüfung einfügen:

268982873_Fahrstraenichtvormerken.jpg.74dc2dfa085863852f97f06f88667e6a.jpg

Ich vermute, dass deine Zustandsprüfung an dieser Stelle demselben Zweck dienen sollte.
Aber die nützt dir nichts. Denn der Zustand ändert sich nicht sofort. Aber die erste aktivierte Fahrstraße stellt sofort und ohne Verzögerung eine Blockade für alle übrigen Fahrstraßen mit Konfliktpotential dar. Deshalb ist mit der "kann aktiviert werden" Prüfung sichergestellt, dass immer nur eine FS gestellt wird. Ohne Bereitschaft für die übrigen.

Viele Grüße und Dank an @prinz für den richtigen Schubs
Götz

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Jahr später...

Hallo Zusammen,

leider funktioniert das mit den Wiederholungen bzw erkennen ob die Fahrstrasse frei ist dadurch nicht.

Ich nutze diese Wiederholungen eigentlich auch,  aber beim Stresstest des neuen Bahnhofs, den ich mit fast derselben EV die Götz hier gerade als "Problemlösung" anbietet betreibe ohne LUA das kann ich nicht :) ist folgendes passiert

Grundsätzlich funktioniert es super aber nur solange mindestens eine der Fahrstassen frei ist dann sucht sich der Zug genau diese aus also eigentlich perfekt.......

Aber wenn alle möglichen Fahrstrassen gerade besetzt sind und der neue Zug kommt an, sollte eigentlich nach meinem Verständnis der Wiederholungen die Lok dann warten bis eine frei ist und dann einfahren.

Macht sie aber nicht ich war schon verzweifelt und dachte an meiner EV stimmt was nicht und habe im Forum gesucht und diesen Threat gefunden und die "Problemlösungsdemo" von Götz da konnte ich schnell meine Sitation nachstellen

Ich habe auf Eurer Demo mal alle "Schlagwortsfahrstrassen" besetzt und der Zug wartet  wenn jetzt ein Ausfahrtsignal geschaltet wird egal ob per Fahrstrasse oder manuell färt dieser Zug aus, die Fahrstrasse wäre jetzt eigentlich frei, aber NIX passiert im Gegenteil manchmal ignoriert der ankommende Zug sogar das Stoppsignal bei der Einfahrt wenn alle FS noch besetzt sind.

Ich fürchte da stimmt was an der Programmierung der Funktion nicht und NEO muß das überprüfen.

 

Stresstest Wiederholungen.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @ActiveMike ,

ich habe mir Deine Stresstest-Anlage mal angeschaut.

Folgende Probleme sind aufgetaucht:

1. Im Ereignis "HBF->Einfahrt->HBF Einfahrt betreten" werden alle freien Fahrstraßen nacheinander aktiviert. Dies kann zu Problemen führen, zumal der Schalter "Anforderung vormerken" gesetzt ist.
2. Wenn ein Zug den Bahnhof verlässt (Ereignis "Strecke->SBL Ausfahrt verlassen"), wird ein neuer Zug aus dem Depot abgerufen, auch wenn noch ein Zug am Einfahrtsignal steht.
3. Sind alle Bahnhofsgleise belegt, "stirbt" der Zug am Einfahrtsignal.

Deshalb habe ich folgende Änderungen durchgeführt:

Neues Benutzerereignis "HBF->Einfahrt->Fahrstraße ermitteln": Diese setzt zunächst eine Modulvariable "Fahrstraße gefunden" auf falsch (False). Dann wird die Wiederholung ausgeführt mit dem Unterschied, dass eine Fahrstraße nur aktiviert wird, wenn die Variable auf False steht. Dann wird die Variable auf Wahr (True) geändert. Ist nach Durchlauf der Wiederholungen die Variable immer noch False, so wird ein Timer "EinfahrtTimer" gestartet, bei dessen Ablauf dieses Ereignis wieder aufgerufen wird.

In der Methode "Strecke->SBL Ausfahrt verlassen" wird nur dann ein Zug aus dem Depot gestartet, wenn keine am Einfahrtsignal wartet.

Ebenso wird ein Zug aus dem Depot gestartet, wenn ein Signal mit Schlagwort "HBF Sig" erreicht wird und kein Zug am Einfahrtsignal wartet.

Vor Start der Anlage bitte Ereignisprotokoll öffnen. Dort kann man das verfolgen.

Viele Grüße,
    Wolfgang

 

Stresstest Wiederholungen-2.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @ActiveMike,

vor 3 Stunden schrieb ActiveMike:

sollte eigentlich nach meinem Verständnis der Wiederholungen die Lok dann warten bis

Das ist ein Missverständnis des Begriffs "Wiederholungen". Die "Wiederholung" hat keine zeitliche Komponente, vielmehr rauscht das Programm einmal durch die Schleife. Wie man eine zeitliche Komponente in die Logik hineinbekommt, hat Wolfgang gerade beschrieben.

Beste Grüße

Phrontistes

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank Ihr beiden das war mir nicht bewußt, das die Wiederholungen "sterben" ich dachte die laufen solange bis sie erfüllt sind

Das mit mit der "true" Abfrage ist dann natürlich eine geniale lösung dafür und das Du die Anlage von Götz von Fehlern bereinigt hast, wird ihn sicher auch freuen :) ich habe seine Anlage ja nur dazu benutzt und eine Lok reingestellt um alle Fahrstrassen als besetzt zu melden, damit konnte ich schon den Fehler nachstellen der auf meiner Anlage aufgetreten war den Rest der Anlage hatte ich nicht weiter angeschaut :)

Viele Grüße

Mike

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wolfgang kannst Du mir evtl dabei helfen wie ich aus der einzel "True" Abfrage eine Listeabfrage machen kann, weil ich selbst habe ca 15 bis 20 verschiedene Schlagwort-Fahrstrassen auf der Anlage mit Wiederholungen und für jede einzeln die True abfrage zu machen, gibt einen irrsinnigen rattenschwanz ich hoffe das funktioniert mit einer Liste aber ich weiß leider gerade nicht wie ich die sinnvoll dafür erstellen kann

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

weil so sieht das eigentlich bei mir aus also mindestens 2 Schlagwort Fahrstrassen pro Einfahrtssignal die mit Wiederholungen versorgt wurden

Den untersten Eintrag bitte ignorieren den hatte ich aus Verzweiflung gemacht, damit meine Züge dann nicht sterben und am Eingangssignal hängen bleiben :)

 

EV Einfahrt Baldham rechts.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @ActiveMike,

vor einer Stunde schrieb ActiveMike:

Wolfgang kannst Du mir evtl dabei helfen wie ich aus der einzel "True" Abfrage eine Listeabfrage machen kann, weil ich selbst habe ca 15 bis 20 verschiedene Schlagwort-Fahrstrassen auf der Anlage mit Wiederholungen und für jede einzeln die True abfrage zu machen, gibt einen irrsinnigen rattenschwanz

Ich bin zwar nicht Wolfgang und ich habe mir auch nicht alles angeschaut, kann Dir aber sagen, wie Du Wolfgangs "Fahrstraße ermitteln" verallgemeinerst:

Screenshot2023-11-24223209.thumb.jpg.7342cf1d6c43742d2465dbd86ff34cba.jpg

Statt eines fest verdrahteten Fahrstraßen-Keywords innerhalb von "Fahrstraße ermitteln" übergibst Du das Fahrstraßen-Keyword als Parameter vom Typ Text und in der Schleife gibst Du dieses Fahrstraßen-Keyword als Trigger an. Diese Routine kannst Du dann mit jedem beliebigen Fahrstraßen-Keyword aufrufen.

Entsprechend abgeändertes mbp unten. Natürlich musste ich die beiden Aufrufe auch ergänzen und zwar um den Parameter "HbfEinfahrtOst". Funktional hat sich nichts geändert, aber "Fahrstraße ermitteln" ist jetzt allgemeingültig und wird auch mit anderen Fahrstraßen-Keywords funktionieren.

Stresstest Wiederholungen-3.mbp

Beste Grüße

Phrontistes

Nachtrag: Du musst Dir aber noch Gedanken über die Zwischenvariable und den Timer machen. Leider gibt es keine lokale Variable, d.h. man muss eine Modulvariable nehmen und läuft Gefahr, dass die sich gegenseitig überschreiben. Noch problematischer ist der Timer, der darf nicht in der Routine bleiben und als Zwischenvariable brauchst Du je eine für jedes Fahrstraßen-Keyword. Meine Lösung ist also noch nicht fertig im Sinne von wirklich allgemeingültig.

Bearbeitet von Phrontistes
Nachtrag
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @ActiveMike,

und für das Timer-Problem habe ich jetzt auch eine Lösung: Kein Timer was sowieso anzustreben ist, denn Timer sind tückisch, weil nicht alle Effekte immer beherrschbar sind. Warum nicht einfach "Fahrstraße ermitteln" (auch) immer aufrufen, wenn ein Zug das Ausfahrsignal verlässt? "Ausfahrsignal wird verlassen" war kein Problem, denn passende Schlagwörter hatten die Ausfahrsignale sowieso schon.

Stresstest Wiederholungen-4.mbp

Jetzt haben wir nur noch die (sehr theoretische, aber eben vorhandene) Möglichkeit, dass die Zwischenvariable von zwei parallelen Aufrufen durcheinander gebracht wird.

In "Fahrstraße ermitteln" habe ich beim Aktivieren der Route (letzte Anweisung) vorsichtshalber noch den Haken bei der verzögerten Ausführung rausgenommen, da Fahrstraßen keinesfalls doppelt aktiviert werden dürfen.

Beste Grüße

Phrontistes

Bearbeitet von Phrontistes
typo
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

ich hatte vor einiger zeit auch diese Aufgabenstellung.
Eine mögliche Lösung ist in der angehängten Anlage hinterlegt. (EV: Fahrstraße aktiviert Folgefahrstraßen).
Allerdings ist die Auswahl nicht zufällig, sondern kann ja nur der Reihenfolge der hinterlegten Liste folgen. Um mal dem Titel dieses Threads zu folgen.

Gruß

Andreas

FS-Auswahl-Test 2.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Phrontistes,

danke für die weiter überarbeitete Version die ich jetzt eigentlich schon für alle Bahnhöfe, die bei mir Wiederholungen verwenden, einbauen wollte aber dann macht mir das ein wenig Angst

Am 24.11.2023 um 22:37 schrieb Phrontistes:

Jetzt haben wir nur noch die (sehr theoretische, aber eben vorhandene) Möglichkeit, dass die Zwischenvariable von zwei parallelen Aufrufen durcheinander gebracht wird.

Weil ich habe derzeit ca 10-15 Bahnhöfe ,am Ende werden es 20-25 sein, wennn die FPS rate es zuläßt, die letztlich mit den Wiederholungen versorgt werden sollen, da wird diese theoretische schnell zur ständig vorhandenen Möglichkeit das zwei parallele Aufrufe stattfinden, was passiert dann und meinst Du ich kann Dein geniales Script trotzdem verwenden ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

weil im Moment habe ich zwar eine unschöne aber funktionierende Lösung und ist ja nur dann unschön wenn der ankommende Zug auf einen voll gefüllten Bahnhof trifft was eher seltem passiert, dann kann es bei meiner Lösung eben "unschön" passieren das der amkommende Zug bis auf den letzten Zug wartet der den Bahnhof verläßt während 3 andere Gleise frei wären.

Wie gesagt unschön in dieser Situation aber wenigstens funktioniert es sehr verläßlich

Liebe Grüße

Mike

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @ActiveMike,

vor einer Stunde schrieb ActiveMike:

dann macht mir das ein wenig Angst

Wenn Du auch theoretisch auf der sicheren Seite sein willst, dann musst Du die Fahrstraße mit folgendem Lua-Code ermitteln:

local found = false
local t = layout:getRoutesByKeyword(Keyword)
for i, route in ipairs(t) do
  if route:canActivate() then
    if found == false then
      found = true
      route.active = true
    end
  end
end

Dieser ist hier implementiert:

ActiveMike Stresstest Wiederholungen-5.mbp

Ich fände es ja auch schöner, wenn man in der graphischen Oberfläche eine lokale Variable definieren und benutzen könnte und habe diesen Feature-Wunsch bei @Neo auch schon vorgebracht:

Beste Grüße

Phrontistes

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @ActiveMike,

vor 1 Stunde schrieb ActiveMike:

was passiert dann

um diese Fragen auch noch zu beantworten: Aufruf #2 (der spätere, aus welchen Gründen auch immer schneller ablaufende) stellt die Variable auf true, weshalb sie für Aufruf #1 (der frühere, welcher aus welchen Gründen auch immer lahmt) zu Unrecht nicht mehr auf false steht, sodass Aufruf #2 die Fahrstraße zu Unrecht nicht aktiviert. Der Schaden hält sich also in engen Grenzen. Und wie gesagt: Das Problem ist ein theoretisches, praktisch wird es vermutlich nie passieren.

Beste Grüße

Phrontistes

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 18 Minuten schrieb Phrontistes:

Das Problem ist ein theoretisches, praktisch wird es vermutlich nie passieren.

ja das hatte ich mir schon so gedacht und da kommt es eben darauf an wie schnell die EV arbeitet und einen Reset durchführt, wenn die Berechnungen nur im Millisekundenbereich sind, dann würde es wohl nie zu Problemen kommen, aber wenn die EV auf irgendeine Rückmeldung wartet (zB ob der Zug anfährt oder eine Weiche geschaltet wird etc. ), bevor sie eine neue Anfrage bearbeiten kann, sind wir schnell im Sekundenbereich, dann kann es bei 15-20 Bahnhöfen schnell kritisch werden, weil da ständig irgendwo ein Zug einfährt parallel zum anderen Zug auf einem der anderen Bahnhöfe

 

Danke für das LUA Script, wenn das das Problem lösen kann, ist es auch Ok und mit diesem winzigen Script kann ich mich anfreunden, weil ich daran ja dann nie was ändern muß :)

Liebe Grüße

Mike

 

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