Kann in Lua überprüft werden, ob eine Fahrstrasse geschaltet werden kann

Achte bitte darauf, dass Du mit deinem Thema bzw. mit deiner Frage im richtigen Bereich bist.
Die Bereiche sind: Einstellungen im Forum, EEP aktuell ab EEP7 , Splines, Rollmaterialien, Immobilien, Landschaftselemente, Signale und Schaltung, Anlagenvorstellungen, Schnappschüsse Konstrukteure, EEP Treffen , Laberecke, Online - Handbuch EEP Vielen Dank für die Unterstützung das Forum übersichtlich zu halten.
Bilder/Fotos aus dem Internet sind nur als Link gestattet. Eigene Fotos, also Fotos aus dem realen Leben, sind erstens mit Eigenes Bild als Quellenangabe zu kennzeichnen und zweitens nur als Dateianhang im Beitrag zulässig. Bilder ohne Quellenangaben und Bilder dessen Quelle das Internet wie z. B. Google ist, werden gelöscht.
  • Hallo mitenand,

    nach längerer Teilabstinenz von EEP und nur teilweisem Mitlesen im Forum muss ich mich nun mit einer Frage an euch wenden, für deren Lösung ich partout keine Lösung und trotz Suche auch keine Antwort im Forum finde.

    Ausgangslage: Bahnhof sollte mit Fahrstrassen versehen werden. Neun Bahnsteiggleise und auf einer Seite vier Ein-/Ausfahrtgleise und auf der anderen Seite derer jeweils fünf. Damit der jeweilige gut einen Kilometer lange Ein-/Ausfahrtbereich nicht komplett durch ein- bzw. ausfahrende Züge (40-60 Km/h wegen Weichen) blockiert wird, sind FS vom Einfahrtsignal bis zum jeweiligen Bahnsteighalt und umgekehrt recht unpraktikabel. Darum habe ich für jeden möglichen Weg von Einfahrtsignal bis zum Bahnsteighalt drei bis sechs Fahrstrassen in Reihe angelegt (jeweils bis kurz hinter beide Stränge einer abzweigenden Weiche, Ausfahrt analog), damit bereits überfahrene Weichen bzw. Streckenabschnitte wieder für andere Fahrstrassen freigegeben werden können.

    Nun habe ich aber das Problem, dass wenn ich solch eine Reihe von Fahrstrassen schalten will, beispielsweise erst die dritte Fahrstrasse nicht geschaltet werden kann. Dann sind aber in jenem Durchlauf der main, in dem die FS-Signale effektiv geschaltet werden, bereits die ersten beiden Fahrstrassen aktiviert worden und Rückgängig machen kann ich das erst frühestens im nächsten Durchlauf der main. Mein Ziel ist aber, das jede einzelne Fahrstrasse einer Reihe von Fahrstrassen, z.B vier FS hintereinander von Einfahrtgleis 4 bis Bahnsteiggleis 2, nur dann geschaltet wird, wenn auch tatsächlich alle FS dieser Reihe auch tatsächlich aktiviert werden können. Wenn auch nur eine einzige FS der Reihe nicht aktiviert werden kann, dann soll auch keine andere FS der Reihe aktiviert werden. Prinzip für jede solcher FS-Reihen: Alle oder keine.
    Ich benötige also eine Abfragemöglichkeit, ob z.B EEPSetSignal(22,4) überhaupt möglich wäre, bevor EEP/Lua versucht das Signal bzw. diese Fahrstrasse zu schalten. Als Beispiel: FS-Reihe FS-Signal21 dann FS-Signal22 dann etc. - bevor FS-Signal21 überhaupt geschaltet wird (weil es möglich ist) soll überprüft werden, ob überhaupt FS-Signal24 wie gewünscht geschaltet/aktiviert werden kann. Wenn FS-Signal24 nicht geschaltet/aktiviert werden kann, dann soll bitteschön von vornherein FS-Signal21 auch nicht geschaltet/aktiviert werden - und zwar bevor EEP/Lua erstmalig versucht, dies zu tun aufgrund eines request für diese Fahrstrasse.

    EEPOnSignal nützt mir hier sicher nichts, da diese Abfrage d.h. der Rückgabewert ja erst im nächsten Durchlauf der main für Lua sichtbar wird und dann die (ungewollte Schaltung mindesten einer FS der jeweiligen Reihe bereits erfolgt wäre, obwohl nicht alle FS dieser Reihe geschaltet werden (können). Nach meinem Verständnis als quasi Lua Anfänger hilft mir die callback Funktion, z.B, EEPSetSignal(22.4.1) nachdem das Signal registriert wurde, aus gleichem Grund auch nicht weiter.

    Habe ich irgendwo einen Denkfehler? Bin halt leider eher Lua Anfänger. Kann mir eventuell einer der Spezialisten weiter helfen oder mich zumindest in eine gangbare Richtung dirigieren, in der ich mein o.g. Ziel allfällig erreichen kann?

    Als Notlösung käme mir bisher lediglich in den Sinn, sämtliche FS-Reihen in de Schattenbereich zu spiegeln, also dorthin wo keine Züge fahren , und die Überprüfung ob eine Reihe von FS komplett von Anfang bis Ende durchgeschaltet werden könnte dort vorzunehemen, und erst im positiven Falle dies auch im sichtbaren Bahnhof vorzunehmen. Erscheint mir aber ein mega aufwendiges und kompliziertes Unterfangen, weil ich ja sicherlich nicht nur die aktiven und angefragten FS monitoren müsste, sondern auch für jedes einzelne betroffene Gleis im sichtbaren Bahnhof ob es allfällig besetzt oder gar nur von einer aktiven FS quasi reserviert ist. Diese Möglichkeit sehe ich sehr, sehr weit entfernt vom Machbaren.

    Herzlichen Dank für eure Hilfe!

    LG, Matthias

    EEP 8-15, EEP 16.4. PlugIn 1-2, EEP 17.1 Plugin 1
    i7-6700 @4.2, 32GB, Nvidia GTX 1070 4GB, Windows 10 Prof. 64bit, triplescreen

  • EEPOnSignal nützt mir hier sicher nichts, da diese Abfrage d.h. der Rückgabewert ja erst im nächsten Durchlauf der main für Lua sichtbar wird

    Hallo Matthias :)

    genau das ist das Problem. Ich habe damit meine eigenen Erfahrungen gemacht, siehe dazu Rückgabe EEPGetSignal für Startsignal Fahrstraße.

    Kann mir eventuell einer der Spezialisten weiter helfen oder mich zumindest in eine gangbare Richtung dirigieren, in der ich mein o.g. Ziel allfällig erreichen kann?

    Ich arbeite nicht mit solchen kaskadierenden FS und kann mir nicht vorstellen, wie das sinnvoll funktionieren könnte. Evtl. haben aber Benny (BH2) oder DH1 oder... eine Idee?

    Gruß Ingo

  • "Krücken"-Idee, wenn's nicht anders geht:

    Hier könnten Schaltautos helfen, die die vorher geschalteten Teilfahrstrassen wieder auflösen. :as_1:

    Evtl. macht es auch Sinn, die Teilfahrstrassen rückwärts abzufragen, wg. Zugstart.

    :aq_1:

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-17.0, HN13+15/16+15/16DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • Matzinger, Hallo Thomas,

    ich habe einen ähnlich großen Bahnhof wie du. Ich habe den Bereich von einem Einfahrtsignal bis zum Ausfahrtsignal des Bahnsteigs als eine Fahrstraße geschaltet. Das heißt, ein Startsigna hat mehrere Zielsignale weil die verschiedenen Züge verschieden Bahnsteige anfahren sollen. Und umgekehrt vom Ausfahrtsignal bis zum nächsten Block.

    Wenn die Weichenstraßen zu Ende sind kommt ein Kontaktpunkt zum Auflösen der FS, damit der nächste Zug nicht warten muss, bis der andere das Zielsignal erreicht hat.

    Würde ich diese FS nochmals unterteilen, dann könnten gar keine Züge fahren, weil sie sich ständig kreuzen würden, so wie du auch schreibst.

    Zur Sicherheit habe ich die an eine FS angrenzenten Splines mit in die FS eingebunden.

    Das ganze wird durch Lua gesteuert und funktioniert prima.

    Meine Erfahrungen.

    Ich weiß, dass das keine direkte Antwort auf deine Frage ist, aber ich schätze, weiß es aber nicht, dass du bei dem was du vorhast den Verkehr zum Stocken bringst.

    Zur Veranschaulichung ein Bild:

    Schönen Abend

    Jüürgen

    Schöne Grüße

    Jürgen

    EEP:
    5,7,8,10,11,12,13,14,15, 16.4 Exp (x64), Patch 2, Plugins 1,2,3,4,

    17.3, Patch 2, Plugins: 1.2

    PC
    Prozessor: Intel(R) Core(TM) i7-6700 CPU @ 3,40GHz 3,41 GHz, Arbeitsspeicher (RAM): 16,0 GB, 64 Bit-Win 10, Grafikkarte: NVIDIA GeForce GTX 980

    Laptop:
    64 Bit-Win 10, Prozessor: Intel(R) Core (TM) i5-3230 CPU @ 2.6GHz 2.6 GHz, Arbeitsspeicher (RAM): 8,00 GB, Grafikkarte: Intel(R) HD Graphics 4000 NVIDIA GeForce GT 730M

  • Hallo Matthias,

    wie du schon geschrieben hast, kannst du nicht abfragen, ob eine Fahrstraße geschaltet werden könnte (sondern nur einen Schaltbefehl absetzen und warten, ob er "durchkommt").

    Deine Idee mit vielen kurzen Fahrstraßen wird deshalb also vermutlich nicht funktionieren.

    Du kannst aber eine lange Fahrstraße vorzeitig auflösen, indem du das Fahrstraßensignal (z.B. per Kontaktpunkt) auf Auflösen stellst. So einen Kontaktpunkt könntest du z.B. setzen, nachdem der Zug die erste (relevante) Weiche passiert hat.

    Das ist aber auch keine wirkliche Lösung, denn wenn du eine Fahrstraße auflöst, ist auch die Fahrstraßensicherung weg, bzw. nur noch über die besetzten Gleise gewährleistet. Du darfst die Fahrstraße also eigentlich erst auflösen, sobald alle relevanten Gleisabschnitte vom Zug selbst blockiert sind.

    Die von dir gewünschten "Teilauflösungen" gibt es bei den EEP-Fahrstraßen nicht.

    Eine andere ungetestete Idee hätte ich noch: Behalte deine kurzen Fahrstraßen (um Teilauflösungen realisieren zu können), richte zusätzlich aber noch lange Fahrstraßen ein. Diese langen Fahrstraßen kannst du versuchsweise aktivieren, und wenn das geklappt hat (-> EEPOnSignal), löst du die lange Fahrstraße wieder auf und aktivierst stattdessen sofort die kurzen Fahrstraßen.

    Viele Grüße

    Benny

  • Hoi Ingo, eep_gogo, Jüürgen und Benny,


    herzlichen Dank für eure Antworten und vor allem, dass ihr Hirnschmalz wegen meines Problems aufgebra(u)cht habt!


    Besonders Bennys Gedankengang bringt mich auf einen möglichen workaround: nämlich nicht die einzelnen relativ kurzen FS zu benutzen, aber die Idee dahinter beizubehalten. Also ich schalte erst eine "lange" FS bis zum Bahnsteig, löse die aber unmittelbar nach dem ersten Teilstück (ehemals erste Fahrstrasse der Reihe) auf, nur um in der gleichen Lua-Funktion von dort eine neue Fahrstrasse bis zum Bahnsteig zu aktivieren. Da das dann in der gleichen Funktion passiert, sollte es (hoffentlich) auch keine "quer rein grätscher" aus anderen Lua-Funktionen geben, z.B. FS-Schaltung.

    Auf jeden Fall etwas, womit ich herumprobieren muss! Besten Dank für diesen Denkanreiz, Benny!


    LG, Matthias

    PS an die Forumsleitung: Bitte teilt mir mit, welche JAVA script Einstellungen notwendig sind, damit man auf posts ohne Inhaltsverlust antworten kann. Auf meinem privaten PC werden mir Antworten auf Forumsposts nur sehr unvollständig angezeigt in der Vorschau und erscheinen dann auch extrem "abgeschnitten" im Forum selbst nach Abschicken. Um diesen post vollständig, also mit jedem geschriebenen Wort, absenden zu können, musste ich aufs Firmen-Notebook wechseln. Zwar ist mir bewusst, dass ich auf meinem Privat-PC sehr restriktiv bin: Aber beispielsweise habe ich dort bei den JAVA-script-Einstellungen lediglich "EEP-Forum" und "Google-Analytics" zur Auswahl betreffend Einstellungen für JAVA script. EEP-Forum habe ich selbstverständlich auf "vertrauensvoll" (alles an Java-script erlaubt) gesetzt, Google Analytics ist selbsterklärend ein No-Go! Das darf gar nichts und wird es auch nie dürfen. Sorry für den Off-Topic, dieses PS kann gerne auch in einen separaten thread im passenden Bereich abgetrennt und verschoben werden. Gerne können bzw. sollten wir das bilateral klären, i.e. via skype, MS Teams oder PM etc.

    EEP 8-15, EEP 16.4. PlugIn 1-2, EEP 17.1 Plugin 1
    i7-6700 @4.2, 32GB, Nvidia GTX 1070 4GB, Windows 10 Prof. 64bit, triplescreen

  • @schlino

    Hoi Ingo,

    ich habe mir nun den von Dir verlinkten thread angeschaut: Auf jenen war ich während meiner Recherche zu diesem Thema auch schon gestossen. Aber leider hat es mir, ebensowenig wie Dir :au_1:, weitergeholfen. Aber zumindest Bennys input gibt uns möglicherweise einen Ansatz, wie wir das beschriebene Dilemma via workarounds zumindest halbwegs lösen kännen.
    Ich hätte nie gedacht, dass ich jemals etwas in "Wünsche für EEP xx" schreiben könnte (mangels Expertise betreffend Thema Eisenbahn), aber dank Dir, weil Du mit mir das gleiche Problem teilst fühle ich mich motiviert, das zu tun. Aber nicht mehr heute nacht.

    Dazu:
    Frage an die Allgemeinheit: Reicht mein initial post dazu aus oder bedarf es bezüglich Funktionalitätsspezikitation noch detaillierterer Informationen?

    LG, Matthias

    Edit: PS: Da die Programmierung in Polen statt findet, könnte ich meinen initial post gerne auch auf Englisch formulieren. Polnisch geht leider nicht.

    EEP 8-15, EEP 16.4. PlugIn 1-2, EEP 17.1 Plugin 1
    i7-6700 @4.2, 32GB, Nvidia GTX 1070 4GB, Windows 10 Prof. 64bit, triplescreen

    Einmal editiert, zuletzt von Matzinger (13. Januar 2021 um 01:07)

  • und vor allem, dass ihr Hirnschmalz wegen meines Problems aufgebra(u)cht habt

    Das (u) ist nicht notwendig.

    Sie haben ihren Hirnschmalz nicht aufgebraucht, sondern nur benutzt. Ganz im Sinne der Forumsidee. :ae_1:

    :aq_1:Gruss Jürg

    Es ist müssig, dauernd den Weltuntergang heraufzubeschwören. Man muss auch aktiv etwas dafür tun. :bn_1:

  • Hallo Matzinger,

    ich habe mir auch erlaubt einiges an Hirnschmalz zu verschwenden. vielleicht hat es sich ja gelohnt.

    Die Grundlagen sind in diesem Beitrag beschrieben.

    Einfahrt Nebengleis auf HauptgleisWie gewähre ich einem Zug vom Nebengleis Einfahrt auf das Hauptgleis

    Als Ergebnis das nachstehende Lua-script:

    function Besetzt

    Voraussetzung sind 3 Tabellen die vor dem eep-main eingefügt werden müssen.

    Dies sind:

    a) Tabelle für die zu registrierenden Gleise: Name{ID1,ID2, usw}

    b) Tabelle mit den zu schaltenden FS mit den darin enthaltenen Gleisen, die auf besetzt überprüft werden sollen:


    Name muss FStrack sein. zB: FStrack={{5,{14,13,2,1,6}},{9,{6,7}},{11,{7,8,9}},{13,{9,10,11}},{4,{20,5,4,3,1,6}}}

    Das erste Element jeder darin enthaltenen Tabelle ist das Startsignal der Fahrstrasse.

    Das zweite Element ist eine Tabelle der darin enthaltenen Gleise, die überprüft werden sollen.

    c) Tabelle der zusammenhängend zu schaltenden Fahrstrassen

    z.B: FS={{5,{9,11,13}},{4,{9,11,13}}}

    Das erste Element ist wiederum die Nr. des Startsignals, die Tabelle an 2. Stelle die nachfolgend zu schaltenden Fahrstrassen.

    Vom Hauptprogramm muss an dieses Programm die zu schaltende Nr des 1. Startsignals übergenen werden (C) und die Tabelle der darauf folgenden FS-Starsignale.

    Beispiel mit oben angegebenen Zahlen: Aufruf der function: Besetzt(C,t) ---> C wäre 5 und t={9,11,13}

    Im Hauptprogramm müsste noch bei Variable Gleis abgefragt werden ob frei oder Besetzt. Bei "Besetzt" darf die Fahrstrasse nicht geschaltet werden.

    Zero

    Einmal editiert, zuletzt von Zero (14. Januar 2021 um 21:40)