Bahnhof Ausfahrt Reihenfolge LUA

!!! Please ensure, that your contribution or question is placed into the relevant section !!!
Questions about rolling stock, for example, do not belong in "Questions about the Forum". Following is perhaps the right area where your question will be better looked after:
General questions to EEP , Splines, rolling stock, Structures in EEP, landscape elements, Signalling system and controlling, designers, Europe-wide EEP meetings , Gossip
Your cooperation to keep the forum clear is appreciated.
In the case of pictures that are attached to the article, the source must also be stated. This also applies to your own pictures, which were taken by you. Pictures without source information will be deleted!
  • Hallo EEP Freunde,

    auch auf die Gefahr hin, dass mir gesagt wird, „dass hatten wir schon im Beitrag xx“, möchte ich mich mit meinem Problem an Euch wenden. Ich habe lange unter den verschiedensten Stichworten gesucht, und Beiträge gelesen, bis die Pupillen eckig wurden. Alle 65 Seiten von „Signale, Lua und Schalttechniken“ durchgeblättert, nichts gefunden!

    Ich steuere meine Anlagen mit LUA.(siehe Korona-Anlage veröffentlicht 11.2.2021). Den Aufenthalt im BF steuere ich mit zeitverzögerter Ausfahrt-Anforderung für die jeweilige Ausfahrt Fahrstraße mit jeweils einem Sound-Kontakt (anmelden(xx,Zugname). Jeweils auch wieder das Abmelden über Soundkontakt nach Ausfahrtsignal (mit Hilfe von Benny´s Codeschnipsel). In der main erfolgt dann der Reihenfolge nach, die Abfrage, ob für eine Fahrstraße eine Anforderung vor liegt.

    ( if EEPLoadData(168) then EEPSetSignal(168,2) end --Ausfahrt ost Gleis 5 )

    Ist das Ausfahrtgleis von einer anderen FS belegt, bleibt die Anforderung eben bestehen. Das funktioniert so weit auch gut.



    Bei größeren Bahnhöfen und regem Zugverkehr, kann es aber vorkommen, dass während das Ausfahrtgleis belegt ist, schon wieder neue Anforderungen zur Ausfahrt vorliegen. Wenn diese neuen Anforderungen in der main in der Reihenfolge vor den schon vorhandenen Anforderungen stehen, dann werden diese zuerst bedient. So kann es vorkommen, dass ein Zugverband in einem Gleis stehen bleibt und nicht an die Reihe kommt.

    Wurde das schon mal angesprochen? Wäre dankbar für einen Hinweis, oder direkt eine Möglichkeit, wie man die Abfrage Reihenfolge vom Zeitpunkt der Anforderung abhängig machen kann. Ist „first in first out“ ohne zusätzlich 2 Seiten LUA möglich?

    Danke und Gruß bena

    EEP16, EEP15 , EEP 13, Win10/64 intel core i5-9400, 2,9 GHz, 16GB RAM, Nvida GTX 1050, mit SSD

  • Wie man sehen kann, hast Du 14 Ausfahrten, die der Reihe nach abgefragt und je nach Bedarf abgefertigt werden.

    Dies geschieht natürlich bei jedem Durchlauf.

    Diese Reihenfolge könnte man ändern, wenn man einen Zähler einbindet und jeder Ausfahrt im LUA eine Zahl zuweist.


    Beispiel:

    1. if zähler==1 and EEPLoadData(168) then EEPSetSignal(168,2) end --Ausfahrt ost Gleis 5
    2. if zähler==2 and EEPLoadData(169) then EEPSetSignal(169,2) end --Ausfahrt ost Gleis 6
    3. if zähler==3 and EEPLoadData(170) then EEPSetSignal(170,2) end --Ausfahrt ost Gleis 7

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • Du benutzt 7 Ausfahren nach West und 7 Ausfahrten nach Ost, also wären für das obige Beispiel 2 Zähler sinnvoll.

    Da Du aber (wie ich denke) eine gewisse Reihenfolge beibehalten möchtest, also in diesem Falle immer von 1 bis 7 für Ausfahrten Ost und von 8 bis 14 für West und es Dir vermutlich nichts bringt, dass jedes Mail eine zufällige Ausfahrt per Zählerstand erfolgen soll, wäre es sinnvoll, den Zähler bei jedem Durchlauf von 1 bis 7 (bzw. 1 bis 14) wieder auf 1 bzw. auf einen x-Wert zu setzen.


    Hierzu solltest Du aber diese Abfragen NICHT im EEP Main belassen, sondern eine gesonderte FUNCTION aufrufen, die dann je Aufruf alle 7 bzw, 14 Ausfahrten abfragt.

    (if zähler==15 then zähler=1 oder zähler=x : gefolgt von erneuten FUNKTION Aufruf)


    Mit zähler=x könntest Du sicher stellen, dass niemals 2 Ausfahrten aufeinanderfolgend abgefertigt werden, bevor nicht eine andere Ausfahrt gesetzt wurde.


    Falls Du mehr dazu erfahren möchtest, einfach nachfragen.

    Ansonsten könnte ich mir vorstellen, dass es von anderen EEPlern auch noch einige andere Lösungsvorschläge geben könnte, denn dies war einfach nur so eine spontane Idee von mir.

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • Hallo

    Ich bin mal auf Beispiele gespannt...


    -Auf Gleis 4 kommt als erstes ein Zug rein...dann Gleis 12-


    Zug auf Gleis 4: Ich darf aber vor Gleis 12 ausfahren


    -Zwischenzeitlich kommt auf Gleis 1 und kurz hinterher noch auf Gleis 8 ein neuer Zug rein-


    Da schreit Gleis 12 von hinten: Nach Gleis 4 aber noch vor Gleis 1


    Gleis 8: Ich muß auch noch auf Gleis 1 warten


    usw.


    Gruß Joachim

  • Hallo

    Ich bin mal auf Beispiele gespannt...

    Falls Du Dich auf das Problem von bena beziehst... Da gibt es meines Wissens kein Gleis 12 :)

    Des weiteren sollte man natürlich die Ausfahrten nach Ost und West trennen, also unabhängig von einander abarbeiten, da beide sich nicht in die Quere kommen können.

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • Wenn diese neuen Anforderungen in der main in der Reihenfolge vor den schon vorhandenen Anforderungen stehen

    Ich denke mal, dass es sich dabei um Bahnhofsausfahrten handelt, bei denen Züge zuvor entsprechende Haltezeiten bekommen, bevor sie den Befehl zur Ausfahrt bekommen.

    Wenn also z.B. zwei auf einander folgende Züge aus dem gleichen Gleis vorrangig Ausfahrt bekommen, dann sollte man die Haltezeiten verlängern, um Zügen auf anderen Gleisen ebenfalls die Ausfahrt zu gewähren.

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • -Zwischenzeitlich kommt auf Gleis 1 und kurz hinterher noch auf Gleis 8 ein neuer Zug rein-

    Man könnte z.B. für jede Ausfahrt-Anforderung fortlaufende Nummern vergeben, die der Reihenfolge entsprechen, aber dann wird es schwerer, Zügen mit Priorität (z.B. Personenzug vor Güterzug) den Vorrand zu lassen.

    Es bliebe also die Frage, ob Züge nach Prioritätenliste (also nach einer vorgegebenen Reihenfolge), oder nach Zufall oder nach Anforderung abgefertigt werden sollen.

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • Mein Beispiel der Ausfahrten war evtl. etwas überzogen, aber es ging um Anforderungreihenfolgen der Ausfahrten.


    Ein Gleis (Zug) stellt eine Anforderung zur Ausfahrt die aber z.Z. weil besetzt nicht gegeben werden kann, so muß das irgendwo gespeichert werden.

    Wenn die Ausfahrt nämlich frei kann es sein das eben nicht dieser Zug als nächstes ausfährt sondern ein Anderer...und genau das war die Frage.

    Dabei ist es egal welche Wartezeiten die Züge im Bahnhof haben und wieviel Gleise (Fahrstrassen) es im Endeffekt sind.


    Gruß Joachim

  • Wenn die Ausfahrt nämlich frei kann es sein das eben nicht dieser Zug als nächstes ausfährt sondern ein Anderer

    Und dies kannst Du nur dann gewährleisten, wenn Du wie beim Arztbesuch oder Arbeitsamt Nummern vergibst, um genau diese Reihenfolge der Anmeldungen abzuarbeiten :)

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • Eine weitere Möglichkeit wäre, die FS zwischen dem Ausfahrtsignalen und den Kollisionspunkten so kurz wie möglich zu halten, so dass andere FS früher geschalten werden können.

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

  • Hallo und guten Abend,

    danke, dass Ihr Euch mit diesem Problem mal aus ein ander setzt. Die Idee mit den Wartenummern vergeben trifft den Kern des Problems. Das müssten aber fortlaufende Nummern sein, da ja der Zähler nicht im laufenden Betrieb resettet werden kann. Wer die niedrigste Nummer hat, wird gefragt ob er kann. Wenn der nicht kann kommt eben der Nächste dran. Bei der nächsten Abfrage wird wieder der mit der niedrigsten Nummer zuerst gefragt. Prioritäten ergeben sich schon durch unterschiedlich langen Aufenthalt (verzögerte Anforderung) das braucht also nicht beachtet werden. Wenn mal ein Zug vor dem anderen ausfährt ist das ja auch nicht weiter tragisch, nur wenn z.B. der an 6. Stelle gar nicht mehr dran kommt, das möchte ich verhindern.

    Mit einem Zähler die Reihenfolge fest zu legen, hilft so weit ich das überschaue ja auch nicht, denn ob eine Fahrstraße geschaltet wird, ist ja auch abhängig ob das Ausfahrtgleis frei ist.

    Wie kann man bei Anforderung (anmelden) von einem Zähler den Wert in eine Variabele schreiben und diesen Wert der Variabelen als Kriterium für die Abfragereihenfolge nutzen?.

    Einen wirklichen Lösungsansatz hab ich noch nicht.

    Um das Problem noch mal zu verdeutliche: Auf Gleis 1 bis 6 stehen Züge mit gleichberechtigten Ausfahrt- Anforderungen. Zug von Gleis 1 fährt aus, 2 fährt aus, 3 fährt aus, während 4 ausfährt ist aber auf Gleis 1 wieder eine neue Ausfahrt-Anforderung. Bei der nächsten Abfrage fährt wieder der Zug von Gleis 1 zuerst. usw. Der Zug auf Gleis 6 kommt nur drann wenn keine neuen Anforderungen mehr da sind.

    EEP16, EEP15 , EEP 13, Win10/64 intel core i5-9400, 2,9 GHz, 16GB RAM, Nvida GTX 1050, mit SSD

    The post was edited 1 time, last by bena ().

  • Hallo

    Als Denkanstoß...

    Ich würde, wenn ich für mich eine Lösung erarbeiten wollte, die Nicht zustandekommenden Anfragen speichern und zwar mit einem Zeitstempel . Die Anfragen die zustande kommen fahren ja sofort aus und müssen nicht berücksichtigt werden.

    Wenn ich meine nächsten Anfragen starten würde könnte ich so nach Zeit abfragen.

    Da ist es auch egal wieviel Wartezeit ein Zug hat, die Anfrage für eine Fahrstrasse kommt eh erst wenn der Zug ausfahren will.


    Gruß Joachim

  • Hallo Ela,

    ja, das klingt logisch. Die Abfrage ist aber kontinuierlich im main takt vorhanden. Wenn eine Erfolgreiche Abfrage einen Zeitstempel unnütz bekommen hätte wäre das ja nicht schlimm. diese Anforderung erlischt ja sofort. Nur wie frage ich nach einem Zeitstempel ab?

    Wenn ich nur mit Tabellen mich besser auskennen würde. Die EEPLoadData müssten bei vorhandener Anforderung in eine Tabelle geschrieben werden, als am Ende anfügen. Dann bei jedem main Zyklus eine Funktion aufrufen die die Tabelle von jeweils der 1. Position abfragt. Bei jedem Erfolg den Eintrag aus der Tabelle löschen.

    EEP16, EEP15 , EEP 13, Win10/64 intel core i5-9400, 2,9 GHz, 16GB RAM, Nvida GTX 1050, mit SSD

    The post was edited 1 time, last by bena ().

  • Hallo zusammen,

    ich kann nur bedingt mitreden weil ich die Codeschnipsel nicht verwende sondern auf ein anderes System setze.

    Kurz gesagt ist bei mir die führende Größe immer der Datensatz des Zuges. Der wird erzeugt wenn der Zug das Depot verlässt und wieder gelöscht wenn der Zug in das Depot fährt.

    Wenn entschieden wird das ein Zug in einem Bahnhof halten soll wird geprüft ob überhaupt ein Gleis frei ist. Wenn ja wird auf Grund der Routeninfos und der Info woher der Zug kommt eine Wartezeit im Bahnhof berechnet. Ist die Wartezeit abgelaufen und eine Ausfahrt ist frei bekommt der Zug Ausfahrt. Ist die Fahrstrasse gesperrt und der Zug kann nicht ausfahren kommt er auf eine Warteliste, das ist nichts anderes als ein Array. ist die erste Position schon belegt kommt er eben auf Position 2, ist die schon belegt auf Position 3 usw.

    Das Array wird immer der Reihe nach abgearbeitet, also kommen auch die Züge der Reihe nach drann wie sie einen "Antrag" auf Ausfahrt gestellt haben. Ich muss auch nicht nach Ausfahrtrichtung unterscheiden, die Fahrtrichtung des Zuges ist in seinem Datensatz gespeichert.

    Grüße aus dem Badischen :bg_1:
    Peter


    EEEC 2.43 (Ehrenplatz im Schrank), EEP5 (Platz im Schrank), EEP 6 voll ausgebaut, EEP12.1 expert, EEP 16.4 + PlugIns
    Windows 10 64bit, Intel Core i7-4790K, 32 GB RAM, 1 TB SSD, Nvidia GeForce 970 GTX

  • Hallo

    Die Zeit die man in eine Variable schreiben kann bekommt man mit EEPTime, zwar nur im Sekundentakt, dies sollte aber reichen.

    Wohin man das ganze speichert, da gibt es mehrere Optionen.


    Da ich mich nicht so leicht mit Lua auskenne kann ich Dir auch kein Beispiel aufzeigen.

    Hier im Forum gibt es Andere für die es ein leichtes ist dies runterzuprogrammierenn und noch ne Erklärung zu geben.


    Ich wollte Dir eigentlich nur einen Denkanstoss geben der eigentlich zum Ziel führen sollte.


    Gruß Joachim

  • eine Warteliste, das ist nichts anderes als ein Array. ist die erste Position schon belegt kommt er eben auf Position 2, ist die schon belegt auf Position 3 usw.

    Das Array wird immer der Reihe nach abgearbeitet,

    Hallo Peter, das was Du sagst klingt nach meiner Lösung. Kannst du mir info zu Array geben bzw. ein Ausschnitt aus einem Script wo ein array eingelesen und ausgelesen wird.

    ich werde mich sofort nach array schlau lesen, danke

    EEP16, EEP15 , EEP 13, Win10/64 intel core i5-9400, 2,9 GHz, 16GB RAM, Nvida GTX 1050, mit SSD

  • Hallo WoKaBe2008, hast du eine Idee das zu realisieren?

    Ich habe mir die anderen Vorschläge auch mal durchgelesen und denke, dass eine Lösung mit Tabellen wohl das beste wäre.

    Jede FS-Anforderung wird in eine Tabelle geschrieben, immer schön ein Eintrag nach dem anderen.

    Dann benötigt man auch keinerlei Zeitangaben, denn die Einträge werden dann nacheinander abgearbeitet und aus der Tabelle wieder gelöscht.

    Somit ist der erste Eintrag immer der aktuell nächste, der abgearbeitet wird.


    Ein Beispiel habe ich auf die Schnelle nicht zur Hand, aber zum Thema LUA-Tabellen gibt es ja auch schon einige Beiträge hier im Forum, sowie als Videos bei YT.


    Mein Tipp: Schau mal auf der Homepage vom User Parry36 rein, da gibt es auch Code-Schnipsel zum Thema Tabellen, die Dir garantiert weiterhelfen werden.

    Seit EEP 2.43 dabei, alle Folge-Versionen plus Plugins (außer EEP 8) bis EEP 16, über 88.000 Modelle, fast alle im Shop angebotenen Anlagen ab EEP7.

    Aktuell in Nutzung: EEP 16.4 + Plugin 1, 2, 3, 4.


    AMD FX Quad-Core 4,20 GHz, 32 GB RAM, 250 GB SSD, 1 TB SSD, insgesamt 10 TB HDD,

    NVIDIA GeForce GTX 960, 2x 24" FullHD Monitor, 64 Bit Windows10 Home & Pro

    The post was edited 1 time, last by WoKaBe2008 ().

  • denn die Einträge werden dann nacheinander abgearbeitet und aus der Tabelle wieder gelöscht.

    Mal ne Frage...wenn die erste Stelle abgearbeitet ist und gelöscht von z.B. 3 und es kommt die 4. Anfrage, wird die dann wieder an Pos 1 geschrieben und so früher abgearbeitet oder rücken die ganzen abzuarbeitenen Stellen in der Tabelle auf?