Rangierbetrieb mit LUA gesteuert

!!! 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!
  • Moin liebe EEP-Gemeinde,

    ich bin zwar schon länger im Forum registriert, schreibe heute aber meinen ersten Beitrag. Worum geht's? Nach ausgiebigem YouTube und Forum Studium hab ich angefangen, meine erste Anlage mit einem Kreuzungsbahnhof zu bauen.

    Da ich auch automatisierten Rangierbetrieb auf der Anlage haben möchte, hab ich nach Themen gesucht, die an- und abkuppeln etc. per LUA behandeln. Leider bin ich nicht 100%ig fündig geworden. Mir fehlten immer Infos zum Thema Zugnamen

    (Stichwort ";001") und einige andere Dinge. Ich will nicht abstreiten, dass ich das nur übersehen habe. Hab halt nichts passendes gefunden. Also hab ich mich aufgerafft und selbst etwas entwickelt. Es funktioniert sogar :aa_1:. Die Schaltung läuft

    über einen Mix aus Kontaktpunkten und LUA.

    Da ich nicht sicher bin, ob alles so Sinn macht, wie ich es gelöst habe, bitte ich Euch Fachleute nun, meinen Lösungsansatz zu testen und zu kommentieren. Wer den Code verwenden möchte...feel free. Zwei Dinge hab ich noch nicht gelöst:

    1. Manchmal fährt die Lok ungebremst in den Rangierbereich ein, obwohl ich mittels KP und LUA die Speed auch 20 km/h reduziert habe

    2. Ich bin noch nicht dazu gekommen den Status der Anlage via EEPLoadData und EEPSaveData zu sichern. Ich bin mir auch nicht sicher, ob das evtl. mit der "Slot_tab_Data" vom Rundum-Sorglos-Paket kollidiert. Dazu hab ich zu diesem Thema

    noch nicht genug gelesen.

    Ich hoffe, dass ich den LUA-Code ausreichend kommentiert habe. Zusätzlich lasse ich Infos im EEP Ereignisfenster erscheinen.

    Ich hoffe auf zahreiche Feedbacks. Die Anlage steht hier zum Download zur Verfügung

    Bis denne

    Martin

    BTW: Muss noch erwähnen, dass ich EEP 16.4 nutze. Ausser der GK3-Gleise ist alles aus dem Grundsortiment.

    Edited once, last by schlingo: Link auf private Cloud entfernt. Bei Bedarf bitte die Anlage im Forum zur Verfügung stellen. (April 13, 2023 at 1:01 PM).

  • Hallo
    Martin MadDoc

    willkommen zum ersten Beitrag.

    Ja, Rangierbetrieb via Lua ist schon eine anspruchsvolle Sache.

    Wenn Du dazu eine Anregung brauchst gibt es von mir im Shop eine Anlage Ausbau- und Spielanlage Rangierbahnhof

    Da wird über einen Abdrückberg jeweils eine vom Spieler angegebene Anzahl Waggons abgedrückt und entweder zufällig oder manuell in verschiedene Gleise geleitet.

    Ist ein Zug fertig gestellt wird er von einer Streckenlok abgeholt und wieder "in Verkehr" gebracht.

    Vielleicht hast Du die Anlage ja schon?

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hi Dieter,

    tatsächlich habe ich mir die Anlage (noch) nicht gekauft. Als Anfänger neigt man schnell dazu sich Dinge zu kaufen, die man hinterher vielleicht nicht braucht.

    Sei mir nicht böse, wenn ich davon erstmal absehe...

    Bei meinem Post geht es mir auch hauptsächlich darum, ob ich auf dem richtigen Weg bin oder schon entscheidende Fehler mach, die sich später rächen

    könnten.

    Ich sehe grad, dass Schlingo meinen Link entfernt hat :ad_1: Da muss ich wohl nochmal nachlesen, wie man Anlagen zum Download bereitstellt:ay_1:

    LG

    Maddin

  • Du kannst hier im Forum deinen Code direkt in lesbarer Form einfügen, wenn Du ihn in einem Fenster <Code> einfügst. Dieses erreichst Du in der Menüleiste über dem Textfenster indem Du auf </>

    klickst.

    In das dann erscheinende Fenster kannst Du dann einfach deinen Lua-Code einfügen.

    Bei Anlagendateien weiß ich jetzt nicht genau, ob Du als "User" hier zip-Dateien hochladen kannst. Ich denke aber eher nicht.
    Dann schicke die Anlagendateien 1x anl3, 1x lua und 5 x bmp. als zip Datei gepackt an die Forumsadresse. Die Moderatoren können das dann einfügen (hoffe ich)

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Sei mir nicht böse, wenn ich davon erstmal absehe...

    gar nicht, warum sollte ich böse sein ?

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Soderle,

    nachdem die Anlage jetzt zum Download bereit steht, hoffe ich auf zahlreiches feedback. Zwischenzeitlich wollte ich mich gerne dem Load- und SaveData widmen.

    Auch hier haben meine Recherchen noch nicht alle Fragen beantwortet. Es ist so, dass ich das Prinzip noch nicht ganz verstanden habe. Ich möchte meine Frage

    anhand eines Beispiels konkretisieren:

    Code
    function RichtungUmsetz(Zugname)
            AnzahlWagen = EEPGetRollingstockItemsCount(Zugname)
            if AnzahlWagen == 1 and Signal == "halt" then
            Speed= 20*Faktor
            EEPSetTrainSpeed(Zugname, Speed)
            end
    end

    Nehmen wir mal an, ich beende die Anlage in dem Moment, wo der Zug den Kontaktpunkt dieser Funktion auslöst.

    Wenn ich die Anlage wieder neu starte, steht die Lok an der gleichen Stelle, würde aber keine Infomation erhalten,

    da die Variablen ja alle leer sind. Hier würde EEPLoadData ins spiel kommen, richtig? Vorher muss ich allerdings

    die Daten in entsprechenden Slots speichern. Leide hab ich keine Idee, wann ich wo das speichern und Laden

    veranlasse.

    Ich schätze, dass dieser Ansatz humbug ist, denn so würde jedesmal beim Auslösen der Funktion der gespeicherte Wert genutzt

    werden, oder? Bitte helft mir aufs Pferd, damit ich weiter machen kann. Danke.

    LG

    Maddin

  • Hallo MadDoc ,

    ja, so wie Du das im Moment in der Funktion RichtungUmsetz machst, ist es egal, welcher Zug den Kontaktpunkt auslöst.

    Es wird immer der Zugname aus dem Dataslot genommen.

    Und Du hast noch mehrere Variablen (Signal, Faktor) in der Funktion. Werden deren Werte auch in Dataslots gespeichert?

    Denn sonst sind diese nach dem Neustart der Anlage auch weg.

    Es sei denn, es sind konstante Werte, die beim Anlagenstart gefüllt werden.

    Als Erstes.

    Eine Anlage sollte nie im laufenden Betrieb beendet und gespeichert werden.

    Denn dabei könnte es zu ungünstigen Momenten zum "Überspringen" von Kontaktpunkten kommen.

    Als Zweites.

    Wenn der Kontaktpunkt bei Dir ausgelöst wird.

    Dann wird bei einem Beenden während des Auslösens die Lua-Funktion noch ausgeführt.

    Du könntest jetzt, vor diesem Kontaktpunkt-Aufruf einen weiteren Kontaktpunkt platzieren, in dem eine Funktion ausgeführt wird, die den Zugnamen im Dataslot speichert.

    Aber auch da hättest Du dann das gleiche Problem mit dem Ausführen der Funktion beim Beenden der Anlage.

    Soll also heißen.

    wenn die Funktion RichtungUmsetz im Kontaktpunkt aufgerufen wird, dann musst Du den Zugnamen nur im Dataslot speichern, wenn dieser auch noch in anderen Funktionen verwendet wird (dort natürlich zuvor aus dem Dataslot laden).

    Wenn Du dies aber so machst, dann solltest Du Dir eventuell auch mal die Verwendung von lokalen und globalen Variablen anschauen.

    Jürgen

    EEP: 12.1, 13.2, 14.1, 15.1, 16.4 (z.Zt. installiert aber nur für Tests im Einsatz)

    keinerlei externe Zusatztools und manuell manipulierte Anlagendateien

    Prozessor: Intel(R) Core(TM) i5-4460S CPU @ 2.90 GHz 2.90 GHz
    PC: RAM 12 GB, Windows 10 Home, 64 Bit
    GK: NVIDIA Geforce GT 730, 4 GB

    Edited 2 times, last by JuergenSchm (April 14, 2023 at 12:45 PM).

  • Hallo MadDoc

    Gedanken:

    a) die function RichtungUmsetz(Zugname), wird bei Anlagenneustart ja gar nicht aufgerufen, da der KP nicht mehr überfahren wird

    Annahme: das ist der EINZIGE Aufruf

    b) den 1.Code beibehalten und zwischen Zeile 5 und 6 das (SaveData) einfügen

    und eine Variable UMerker auf true setzen (beides wird nur bei Anlagen-Neustart benötigt)

    c) in der main() oder einer Startsequenz abfragen, ob

    Slot1 belegt UND UMerker==true -> dann nix machen

    Slot1 belegt UND UMerker==false (entspricht Neustart, in der Annahme, dass bei Lua default boolean == false ist) man möge mich berichtigen, falls nicht

    dann eine

    function RichtungUmsetz2()

    mit demselben Aufbau, wie dein zweiter Code,

    aber in der Zeile 10 steht UMerker = false

    aufrufen

    d) kleine Unzulänglichkeiten in obigem wirst du wohl korrigieren können

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

  • Danke Ihr beiden,

    wenn ich das richtig verstanden habe, wird also eine Funktion beim Beenden zuende ausgefürt. Das würde ja heißen, dass ich lediglich

    die Daten globaler Variablen speichern muss, wenn ich diese noch benötige, richtig? Der Zugname wird bei Bedarf bei jeder Funktion neu abgefragt.


    Eine Anlage sollte nie im laufenden Betrieb beendet und gespeichert werden.

    Denn dabei könnte es zu ungünstigen Momenten zum "Überspringen" von Kontaktpunkten kommen.

    Wie genau meinst Du das, Jürgen? Erst auf "Editiermodus" wechseln?

    Blöd wäre auch die Situation, wenn ein Zug an einen Zeitverzögerten Kontakt Kontakt fährt, stehen bleibt und dann die Anlage beendet wird.

    Dieses an-den-Kontakt-fahren und stehen bleiben kommt beim Rangieren halt öfters vor...:ad_1:

    BTW: Der von mir eingestellte Code war nur ein unvollständiges Beispiel.

    LG

    Maddin

  • Hallo Maddin MadDoc ,

    Wenn ein Zug über einen KP mit Zeitverzögerung fährt und du dann die Anlage speicherst und beendest wird der Zug beim nächsten Laden und nach dem Start die Verzögerung abwarten und danach weiter fahren. Diese Zeiten werden in der Anlagendatei mit gespeichert.
    Was Jürgen JuergenSchm sagen wollte und was ich auch unterstütze. Es sollte auf der Anlage eine Möglichkeit geben (Start-Signal) den Betrieb zumindest bei den relevanten Teilen kontrolliert anzuhalten bevor man die Anlage speichert.
    Übrigens...
    neben der Möglichkeit irgendwelche Dinge in Datenslots vor dem Vergessen zu bewahren kann man auch Tag-Texte benutzen :ae_1:
    Aber eins nach dem anderen.

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hey Dieter,

    das mit dem Startsignal klingt logisch. Mein Rangiertest soll später in meine "richtige" Anlage. Die läuft zur Zeit mit rus problemlos.

    Dieses "Speicherproblem" hab ich nur bei meinem Rangiertest. wenn ich den integriert habe, könnte ich den "Travo" ja mit einem

    Signal verbinden, der den (einzigen) Rangierzug vielleicht sogar in einem Zugdepot oder zumindest in einem Abstellgleis hält...

    LG

    Maddin

  • jenau Maddin, das war mein Gedanke dabei :be_1:

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hallo Maddin ( MadDoc ),

    ja, wenn der Zugname nur in der "Kontaktpunkt-Funktion" verwendet wird, musst Du diesen nicht im Dataslot speichern.

    Eine Lua-Funktion würde beim Beenden der Anlage nur zwangsweise undefiniert abgebrochen, wenn sie sehr lange läuft (aber dann hättest Du noch andere Probleme) oder es würde, "Die Anwendung reagiert nicht mehr" erscheinen.

    Werte von globalen Variablen, die noch öfter in unterschiedlichen Funktionen benötigt werden sollten beim Ändern des Wertes gespeichert und beim Anlagenstart geladen werden.

    Wenn man immer fitter wird, sollte man die Verwendung von globalen Variablen auf ein Mindestmaß reduzieren und statt dessen lokale Variablen bevorzugen.

    Deine andere Frage hat Dieter ( DH1 ) bereits beantwortet.

    Ich bevorzuge übrigens die Tag-Texte zum Speichern.

    Auch wenn ich keine Fremd-Tools verwende.

    Bei der Verwendung dieser Tools muss man aufpassen, dass man keine Dataslots dieser Tools verwendet und dass dies auch nach einem Update des Tools so bleibt.

    Der Tool-Programmierer wird nicht nachfragen, welche Dataslots die Benutzer des Tools verwenden, falls er einen neuen benötigt.

    Jürgen

    EEP: 12.1, 13.2, 14.1, 15.1, 16.4 (z.Zt. installiert aber nur für Tests im Einsatz)

    keinerlei externe Zusatztools und manuell manipulierte Anlagendateien

    Prozessor: Intel(R) Core(TM) i5-4460S CPU @ 2.90 GHz 2.90 GHz
    PC: RAM 12 GB, Windows 10 Home, 64 Bit
    GK: NVIDIA Geforce GT 730, 4 GB