"Warteschleife" für Lua - Fahrstraßenfunktion?

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 zusammen,

    ich habe einiges ausprobiert und im Forum gesucht, aber leider komme ich schon wieder nicht weiter.

    Die Fahrstraßen in meinem Bahnhof werden über KP's geschaltet, die jeweils eine (if - then) Lua- Funktion aufrufen, die den Zug auf das gewünschte Gleis lenken.

    Steht nun ein Zug vor einem Signal, weil die Fahrstraße aufgrund einer anderen kreuzenden, aktiven Fahrstraße nicht freigegeben wurde, ist das ja Ok, aber da der KP ja nur einmal schaltet, steht der Zug dann bis St. Nimmerlein.

    Mit einer Steuerung der FS-Funktionen über die EEPMain und Gleisbesetztabfrage vor der FS wäre dieses Problem behoben, aber da meine Bahnhofsgleise auch in Gegenrichtung befahren werden, werden die FS dann auch aktiviert. Eine Fahrtrichtungsabhängige Steuerung der FS kann ich so mit meinen Kenntnissen nicht realisieren. Mir fehlt dazu die Abfrage der Fahrtrichtung.

    Z.B. if (Besetzt 000) and (Fahrtrichtung == X) then EEPSetSignal(#FS, 2)?

    Gibt es eine Möglichkeit, den Zug, nachdem er den KP überfahren hat, mit Hilfe einer Gleisbesetztabfrage vor dem geschlossenen Signal (gesperrte FS) so lange in eine "Warteschleife" zu versetzen, die die FS aktiviert, sobald die Strecke wieder frei ist?

    Grüße aus dem Münsterland

    Silberstern

    System: Win11 Pro x64; Prozessor: AMD Ryzen 5 3600X-3,8GHz-6K-12T; Grafik: Gigabyte Radeon RX5600 XT Gaming OC 6G (rev2.0); RAM: 32GB

    EEP6; EEPX/Expert (Patch5); EEP14.1 (Patch 2); HN14 (Patch1); EEP16.4; Aktuell: EEP17.2 (Update 2; Patch1) Plugin 1

  • Hallo Silberstern

    etwas hemdsärmelig, aber als "Basis"

    "über KP's geschaltet, die jeweils eine (if - then) Lua- Funktion aufrufen"

    -- in deiner aufgerufenen Funktion am Anfang eine Variable (FSx - FSaufgerufen) mit entsprechendem Namen auf true setzen

    -- in der main() wird eine Funktion aufgerufen, die, wenn diese Variable true ist, die Fahrstrasse zu setzen versucht

    -- ist sie erfolgreich, wird in einer dem Signal zugehörigen "OnSignal-Funktion" (wenn Signal "Fahrt") diese Variable wieder auf false gesetzt

    :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"

  • Man könnte die angeforderten aber noch nicht freigegebenen Fahrstraßen in eine Art Wartetabelle füllen und in regelmäßigen Intervallen (alle x Aufrufe in der EEPMain) die Wartetabelle abprüfen, ob die wartenden Fahrstraßen nun geschaltet werden können.

    Mit etwas mehr Aufwand lassen sich mehrere wartende Fahrstraßen sogar nach einer Priorität statt einer Reihenfolge abarbeiten, wenn man sich zusätzlich zur Fahrstraße auch den wartenden Zug merkt (Eilzug, Bummelzug, Güterzug, ...).

    Viele Grüße Ralf

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

    EEC, EEP 2.43 - 6, EEP 9 - 14, EEP 15.1, EEP 16, EEP 17.2

    Hugo + Tauschmanager + EEP-Tauscher + Modellkatalog + Modellkonverter + Bilderscanner

  • Ich habe diese Problemstellung bislang immer so gelöst, dass ein Zug vor Halt am Blocksignal zu Beginn der Fahrstraße über einen Kontakt fährt, mit dem über eine entsprechende Lua-Funktion ein Data-Slot gebildet wird mit der Nummer des Fahrstraßensignals. Diese Nummer dient nur der Zuordnung für den User bei Überprüfung der Schaltung und als eindeutiger Index-Wert, da es jedes FS-Signal mit seiner Nummer auf einer Anlage ja nur einmal gibt. Es genügt, wenn der Data-Slot existiert, er bracht keinen Inhalt zu haben.

    In der Main gibt es dann eine eine "If"-Abfrage, ob dieser Slot mit der betreffenden Nummer existiert. Wird diese Frage mit "wahr" beantwortet, versucht die betreffende Funktion die FS zu schalten, also die Fahrt für den wartenden Zug freizugeben. Dies gelingt natürlich dann und erst, wenn die betreffende FS frei ist, denn nur dann kann sie geschaltet werden.

    Sobald sie geschaltet werden konnte, passiert der Zug das Blocksignal zu Begrinn der FS und überfährt dahinter einen Kontakt, der den Dataslot löscht und damit die Anfrage nach Freischaltung der betreffenden FS.

    Solange der Dataslot dann bis zum nächsten Zug nicht existiert, bewirkt die If-Abfrage in der Main schlicht nichts, da der Dataslot ja solange nicht existiert und die If-Abfrage "false" als Antwort liefert.

    Diese Methode führt allerdings dazu, dass die Dataslots mit den Nummern der FS-Signale nicht für andere Zwecke genutzt werden können. Das kann gelegentlich zu Problemen führen, wenn noch andere Funktionen Dataslots aus dem betreffenden Nummernbereich nutzen wollen/sollen. Dann müssen für die Dataslots eben andere Nummern gewählt werden. Da kann sich jeder User ein eigenes Schema überlegen, da die Nummer des Dataslots ja keinen Einfluss auf diese Schaltung hat, sondern nur der einfachen Zuordnung für den User dient.

    Diese Schaltung verwende ich in einigen Anlagen, die in der Filebase zum Download zur Verfüng stehen.

    Wenn man die Frage nach der Existenz des Dataslots noch mit der Abfrage einer entsprechenden Route verbindet, kann man die Schaltung auch noch für bestimmte Züge bzw. eben Routen differenzieren. Dann kann der Zug bei Anmeldung für die Einfahrt in die Fahrstraße beim Kontakt vor dem Blocksignal seine mitgeführte Route auf Anfrage hin in den Dataslot hinterlegen und bei der Abfrage der Dataslots in der Main wird dann für jede Route in Verbindung mit einem Dataslot gesondert geprüft, ob die entsprechende FS frei ist.

    NACHTRAG:

    #3 ist quasi die Kurzfassung von #4

  • Kann nur de Beitrag von KS1 bestätigen und bekräftigen. Benutze diese Lösung seit EEP13 ohne Problem. Möchte nur noch hinzufügen, das ich im Slot auch gleich die gewünschte Fahrstrassenstellung je nach Route speichere, also 2 bis ... Fahrstrasse x schalten (bin bis 8 gekommen).

    Sieht in EEPMain so aus:

    for Slot = 120, 799 do -- reserviert fuer Fahrstrassen

    hResult, hData = EEPLoadData(Slot)

    if hData > 1 then

    EEPSetSignal(Slot, hData, 1)

    -- print("Fahrstrasse :" ..Slot.. " , SigCmd :" ..hData.. ", 1")

    end

    end

    Im Gegensatz zu KS1 bekomen meine Slots immer zumindest die "1". Habe rund 300 Slots belegt. Schadet nach meiner Meinung nichts, da Main die Slots ohne spürbare Verzögerung abarbeitet.

    Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz, 16GB RAM, Windows 10 (64 bit), Radeon RX550/550 Series

    EEP 5, EEP 13.2, EEP 14.1, EEP 15.1, EEP 16.4, EEP 17.1

    Home-Nostruktor 13.0, 14.0, 15.0, 16.0, 17.0, Der Finder, EEP-Bodentextur Tool, EEP-Modellkatalog

  • Sobald sie geschaltet werden konnte, passiert der Zug das Blocksignal zu Beginn der FS und überfährt dahinter einen Kontakt, der den Dataslot löscht und damit die Anfrage nach Freischaltung der betreffenden FS.

    Hallo Klaus,

    das geht schneller. Füge unter deine Anforderungsfunktion für die FS gleich eine Funktion EEPOnSignal_X(Stellung) [X = FS-ID] ein und lösche bei Stellung auf "Fahrt" den Slot. Schneller und einfacher geht's nicht. Manche führen den KP für das Blocksignal ja zeitverzögert oder erst mit dem Zugschluss aus, da wird bis dahin die FS immer wieder unnötig geschaltet.

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.3.0 Plug-in 1, 2, 3; HN17; AnlVerb17; MK; ME; ZE; TM; ...

  • Vielen Dank für eure Hilfe!

    Das werde ich dann mal ausprobieren und hoffe, dass ich das hinbekomme.

    Grüße

    Silberstern

    System: Win11 Pro x64; Prozessor: AMD Ryzen 5 3600X-3,8GHz-6K-12T; Grafik: Gigabyte Radeon RX5600 XT Gaming OC 6G (rev2.0); RAM: 32GB

    EEP6; EEPX/Expert (Patch5); EEP14.1 (Patch 2); HN14 (Patch1); EEP16.4; Aktuell: EEP17.2 (Update 2; Patch1) Plugin 1

  • juemei

    Schau mal auf die Uhrzeit der Beiträge!

    Es gibt keinen Vorteil.

  • Doch Klaus. Uhrzeit hin oder her.

    Ralf arbeitet mit Tabellen. Du mit Slots.

    Was ist wohl der Vorteil der Slots gegenüber den Tabellen? ... ... ...

    Gruss Jürg

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

  • Was ist wohl der Vorteil der Slots gegenüber den Tabellen?

    Keine Ahnung! Mit Slots konnte ich damals umgehen, von Tabellen hatte und habe ich nicht so viel Ahnung. Lua ist sowieso nicht gerade meine Kernkompetenz.

  • Hallo Silberstern,

    ein guter Tipp für Dich ist das rundum-sorglos-Paket von DH1/Parry36. Der Ursprung war ein Vorgehen wie von Byronic u.a. skizziert. Das ganze wurde mit der Zeit immer weiter verbessert und erweitert. Hat man sich einmal eingearbeitet, macht das ruS-Paket seinem Namen alle Ehre.

    Damit wird das Schalten von FS z.B. vor oder im Bahnhof zur langweiligen Routine:aa_1:.

    Es findet sich dazu auch einiges hier im Forum und bei YT.

    Spoiler anzeigen

    EEP 17.2 mit Plug-in 1,2

    Intel(R) Core(TM) i7-11700F 2.50GHz, 32 GB

    NVIDIA GeForce RTX 3070

  • Mit Slots konnte ich damals umgehen

    Hallo Klaus :)

    das ist grundsätzlich eine pfiffige Idee. Du hast dabei nur ein Problem. Es gibt aktuell nur 1000 Slots. Wie steuerst Du damit z.B. ein FS-Signal mit der ID 1137? Ja, ich bin in meiner aktuellen Anlage momentan bei 2863.

    Gruß Ingo

  • Wie steuerst Du damit z.B. ein FS-Signal mit der ID 1137?

    Gibt es zufällig auch ein FS-Signal 137? oder 2137? Also über 999 FS-Signale auf einer Anlage dürften doch wohl eher die Ausnahme sein. Aber meine Schaltung ist natürlich nur eine von vielen alternativen Möglichkeiten, die sicher jede für sich den einen oder anderen Vor- oder Nachteil haben. Bei zwei FS mit Signalen mit der Ziffernfolge x137 muss man notfalls eben eine andere Ziffernfolge aus dem Bereich bis 999 wählen oder eben ein anderes Schema oder eben eine andere Methode, zum Beispiel mit Tabellen. Und sich mit den Dingern dann notfalls vertraut machen, falls man dazu Zeit und Lust hat.

  • Es ist doch - wie sagt man so schön - "gehopst wie gesprungen", schließlich muss ich die Informationen in der Tabelle beim Speichern der Anlage auch irgendwie sichern.
    Wie mache ich das? Mit einem Slot natürlich. :bd_1:

    Die Tabellenvariante hätte höchstens den technischen Vorteil, dass man die Informationen aus einer Tabelle alle in einem einzige Slot sichern kann, z.B. mit Hilfe dieser Funktionen.

    Aber jeder muss sich sowieso selbst für eine Lösung entscheiden, und zwar eine, die man versteht bzw. mit der man selbst klar kommt. Egal ob nun #3 , #4 oder ggf. eine noch andere (vielleicht sogar bessere) Variante. :co_k:

    Viele Grüße Ralf

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

    EEC, EEP 2.43 - 6, EEP 9 - 14, EEP 15.1, EEP 16, EEP 17.2

    Hugo + Tauschmanager + EEP-Tauscher + Modellkatalog + Modellkonverter + Bilderscanner

  • und zwar eine, die man versteht bzw. mit der man selbst klar kommt.

    Das ist das hüpfende Komma! Neudeutsch: "key feature".

    Mit der kleinen Ergänzung: "... und die auf der aktuellen Anlage funktioniert".

  • über 999 FS-Signale auf einer Anlage dürften doch wohl eher die Ausnahme sein

    Hallo Klaus :)

    ich habe sie zwar nicht gezählt, habe aber ganz sicher nicht so viele. Aber alle Signale und Weichen teilen sich ja denselben Nummernkreis. Und das sind in Summe eben momentan 2863.

    muss ich die Informationen in der Tabelle beim Speichern der Anlage auch irgendwie sichern.
    Wie mache ich das? Mit einem Slot natürlich.

    Ich auch. Aber ich speichere nicht 1 zu 1 (also Signalnummer = Slot), sondern habe dafür eine Funktionssammlung, mit der ich die Anforderungen in einem festen (und wählbaren) Bereich verwalte.

    jeder muss sich sowieso selbst für eine Lösung entscheiden

    Korrekt.

    Gruß Ingo

  • Oh - das hört sich ja kompliziert an. Da ich mit meinen Lua - Kenntnissen noch nicht so weit bin, muss ich mich erstmal damit beschäftigen.

    Oder hat jemand von euch einen Script - Auszug? Das wurde mir beim Verstehen helfen.

    Vielen Dank nochmals.

    Silberstern

    System: Win11 Pro x64; Prozessor: AMD Ryzen 5 3600X-3,8GHz-6K-12T; Grafik: Gigabyte Radeon RX5600 XT Gaming OC 6G (rev2.0); RAM: 32GB

    EEP6; EEPX/Expert (Patch5); EEP14.1 (Patch 2); HN14 (Patch1); EEP16.4; Aktuell: EEP17.2 (Update 2; Patch1) Plugin 1

  • hat jemand von euch einen Script - Auszug? Das wurde mir beim Verstehen helfen.

    Hallo :)

    es gibt das angesprochene RuS-Paket, DH1 sollte so etwas haben und auch meine Toolbox könnte ich Dir zur Verfügung stellen. Aber erstens geht da jeder seinen eigenen Weg und zweitens ist es eher schwierig, fremden Code zu verstehen; ich muss mich nach einiger Zeit selbst wieder reinfinden, wie ich das damals denn gemeint habe. Ich persönlich finde es auf jeden Fall besser, sich selbst hinzusetzen und sich etwas zu überlegen. Erstens verstehst Du das dann auch und zweitens lernst Du damit. Das schließt selbstverständlich nicht aus, bei konkreten Problemen nachzufragen.

    Da ich mit meinen Lua - Kenntnissen noch nicht so weit bin, muss ich mich erstmal damit beschäftigen.

    Dann empfehle ich Dir, nicht gleich die Quadratur des Kreises lösen zu wollen, sondern erst einmal klein anzufangen, wie Lua überhaupt funktioniert. Dazu gibt es auch im Forum einige Tutorials, z.B. die Lua Übungen.

    Gruß Ingo

  • Es gibt aktuell nur 1000 Slots. Wie steuerst Du damit z.B. ein FS-Signal mit der ID 1137?

    Es gibt etwas viel besseres als Slots, nämlich Tag-Texte. Und die kann man in beliebig vielen Immos und LS-Elementen auf der Anlage hierfür nutzen. Meistens/häufig steht in der Nähe eines Blog- oder Einfahrsignals ein Telefonkasten. In dem könnte man die FS-Information speichern. Oder wenn kein Telefonkasten vorhanden ist (weil Neuzeit) dann eben im nächsten Busch.

    Noch schöner wäre es, wenn Trend meinem schon geäußerten Wunsch nachkommen würde und man Tag-Texte auch in Signalen speichern könnte. (Wie war das noch mit der Hoffnung ....?)

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.3.0 Plug-in 1, 2, 3; HN17; AnlVerb17; MK; ME; ZE; TM; ...