Einen bestimmten Zug per Signal aus dem Depot holen

!!! 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!
  • Liebe EEP ler

    Ich haette mal wieder ein Frage an euch!

    Seitdem ich EEP habe, versuche ich vom Schattenbahnhof wegzukommen und auf das virtuelle Depot umzustellen.

    Ich scheitere aber an dem Problem einen ganz bestimmten Zug (oder Route) aus dem Depot zu holen!

    Es gibt ja die Moeglichkeit die Ausfahrt aus dem Depot ueber ein Signal zu steuern, aber dann kommt entweder

    ein Zug per Zufall raus oder derjenige der in der Reihenfolge dran waere, aber NICHT der den ich brauche.

    Zum Beispiel stelle ich mir das so vor, dass wenn das Signal "x" schaltet kommt der Zug "a" raus und

    wenn das Signal "y" schaltet kommt der Zug "e" raus etc .....

    Das heisst jeder Zug (oder besser noch jede Route) hat sein eigenes Signal das die Ausfahrt aus dem Depot frei gibt!

    Kurz gesagt, ich brauche eine Kontrolle darueber welcher Zug (oder welche Route) wann aus dem Depot kommt!!!

    Es sollte schon ueber ein Signal sein und nicht ueber eine Zeit (Fahrplan)!

    Es muesste doch relativ einfach gehen da mein Gedanke ja sooo exotisch nicht ist!

    Ich fuerchte das es nur ueber LUA geht aber das wuerde ich versuchen.

    Bin fuer jede Idee (oder LUA Beispiele) dankbar!!!


    Schoene Gruesse aus North Carolina

    Wolfgang

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • Hallo Wolfgang,


    ohne dich jetzt zu sehr mit Lua-Details zu quälen... :bd_1:

    Wenn du für jedes deiner Signale folgende Codezeilen (einfach jeweils am Ende) in das Lua-Skript einfügst:

    LUA Source Code
    1. function EEPOnSignal_14()
    2. EEPGetTrainFromTrainyard(1, "#BR 212 376-8", 0)
    3. end; EEPRegisterSignal(14)

    Die 14 in Zeile 1 und 3 ist die Signal-Id, die musst du an dein jeweiliges Signal anpassen.
    Die erste Wert in Zeile 2 (hier 1) ist die Depot-Id, aus der du die Züge herausholen möchtest.

    Der zweite Wert ist der Name des Zugverbandes den du herausholen möchtest.

    Den dritten Wert (hier 0) kannst du ignorieren, weil du den NamenZugverbandes angibst. Also einfach bei 0 belassen.


    Sicherlich kann man das bei vielen Signalen und Zugverbänden eleganter lösen, aber die obige Variante sollte auch ohne große Lua-Kenntnisse funktionieren.

    Viele Grüße Ralf

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

    EEC, EEP 2.43 - 6, EEP 9 - 13, EEP 14, EEP 15.1, EEP 16, EEP 17

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

  • Hallo Ralf

    Vielen Dank fuer deine Hilfe!!!

    Werde ich ausprobieren, muesste ich eigentlich hinbekommen!

    Melde mich spaeter!


    Tovak

    Das dachte ich mir schon das kein Weg an LUA vorbei geht!

    Wolfgang

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • Hallo Wolfgang,


    am einfachsten geht es mit "Bennys Codeschnipsel". Du gibst diese Zeile im Luascript ein:

    -- Bennys Codeschnipsel

    setmetatable(_ENV,{__index=function(s,k) local p=load(k);if p then local f=function(z) local s=Zugname;Zugname=z;p();Zugname=s end;_ENV[k]=f;return f end;return nil end})


    und kannst dann in jedem beliebigen Kontaktpunkt die Funktion für das Depot aufrufen. Einschränkung: der Zugname sollte keine Sonderzeichen enthalten.



    Im Bild ist nicht der ganze Funktionsaufruf zu sehen: EEPGetTrainFromTrainyard(1, "#Dampflok", 0)

    EEP 15.1 EEP 16
    MS Windows 10 Pro 64bit
    Prozessor: AMD FX-8370 Eight-Core Processor 4,0GHz // RAM: 32GB // SSD 256GB // Grafikkarte: GeForce GTX 950

  • @Ralf

    Also ich habe mit deinen Code Zeilen schonmal einen Teilerfolg gehabt.

    Das funktionierte aber erst nachdem ich in Zeile 3 einen 3. Wert (,0) eingegeben hatte.


    function EEPOnSignal_358()

    EEPGetTrainFromTrainyard(1, "#DB V200-008 EpIII", 0,0)

    end

    Hiermit kann ich jetzt den eingetragenen Zug, nach schalten des Signals 358, aus dem Depot holen.

    Jetzt muss ich noch herausfinden wie ich den Zugnamen automatisch eintragen kann.

    Bei diesem Beispiel habe ich den Zugnamen haendisch eingegeben.

    Da beim Rangieren die Zugnamen sich aendern kommt das naechste Problem.

    Der Zugname muesste ja permanent aktualisiert werden.

    Wenn das in BASIC waere koennte ich dem Zugnamen z.B. nur die ersten 4 Buchstaben zuweisen,

    die aendern sich ja beim Rangieren nicht.

    Als Beispiel in BASIC: A$="123456789" in der Ausgabe dann Print A$(1,4) da kaeme dann 1234 raus.

    Das ist mir gerade beim Schreiben der Zeilen hier eingefallen, leider kann ich das Im Moment nicht testen ob das in LUA auch geht.



    @kaffeschluerfer

    Vielen Dank auch fuer deine Hilfe.

    Das sieht ja genial aus!!!

    Mein Problem, bei den Codezeilen von Ralf kann ich die Befehle ja noch einigermassen nachvollziehen,

    aber bei deinen Codezeilen hoert es bei mir auf! :ao_1:

    Trotzdem wede ich mal versuchen was passiert :as_1:


    Ich werde berichten.

    Wolfgang

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • bei deinen Codezeilen hoert es bei mir auf!

    Hallo Wolfgang :)


    das links im Lua-Editor ist der berühmte Code-Schnipsel von Benny (BH2) . Damit kannst Du in Kontaktpunkten komplette Funktionsaufrufe eingeben, inklusive Parameter (rechtes Bild).


    Gruß Ingo

    Threema - Sicherer und privater Messenger

    Meine Threema-ID

    Warum Threema?


    Win 10x64 Professional, Gigabyte B360M AORUS, Intel Core i7-8700K, 32GB RAM, NVIDIA GeForce GTX 1050 Ti 4GB, Philips 273V7QDAB Full HD

    Windows Firewall und Defender
    EEP 15.1 Expert Patch 2, Plugins: 1

    EEP 16.4 Expert, Plugins: 1,2,3,4

    EEP 17.0 Expert Patch 1


  • Als Beispiel in BASIC: A$="123456789" in der Ausgabe dann Print A$(1,4) da kaeme dann 1234 raus.

    Als Beispiel in Lua: string.sub("123456789", 1, 4) da kommt auch "1234" raus


    :co_k:

    EEP 15.1 EEP 16
    MS Windows 10 Pro 64bit
    Prozessor: AMD FX-8370 Eight-Core Processor 4,0GHz // RAM: 32GB // SSD 256GB // Grafikkarte: GeForce GTX 950

  • Hallo

    Als Beispiel in Lua: string.sub("123456789", 1, 4) da kommt auch "1234" raus

    Das ist richtig, leider verlangt EEP aber den vollständigen Zugnamen z.B. "#DB V200-008 EpIII".


    Eine Mögliche Lösung währe vielleicht so. (hab es noch nicht getestet, nur erst mal so aufgeschrieben)

    LUA Source Code
    1. EEPRegisterSignal(14) -- Signal das den Zug auslösen soll registrieren
    2. function EEPOnSignal_14() -- Wenn Siganl 14 schaltet dann
    3. Anzahl = EEPGetTrainyardItemsCount(1) -- Wieviele Züge sind im Depot 1
    4. for i = 1,Anzahl do -- Schleife bis Anzahl Züge im Depot
    5. Name = EEPGetTrainyardItemName(1, i) -- Name von Zug auf Platz i
    6. if string.sub(Name,1,4) == "1234" then -- wenn die ersten vier Zeichen mit dem gesuchten übereinstimmen
    7. EEPGetTrainFromTrainyard(1, "", i,0) -- holt den Zug auf Platz i heraus (0 an vierter Stelle = in Fahrtrichtung wie gespeichert, 1 = vorwärts, 2 = rückwärts 3 = entgegen der gespeicherten)
    8. end
    9. end
    10. end

    Gruß

    Michael

    EEP 6.1

    EEP 15.1 Expert(x64), EEP 16.4 Expert(x64) Patch 2
    PC: AMD Phenom(tm) II X4 955 Processor 3.20 GHz 16,00 GB 64-Bit WIN10 Pro,20H2.19042.746, Grafikkarte: AMD Radeon HD 6700
    Laptop: Intel(R) Core(TM) i7-6700HQ CPU 2.6GHz 2.59GHz 16,00 GB 64-Bit WIN10 Pro,1903.18363.1316, Grafikkarte: Intel(R) HD Graphics 530, NVIDIA GeForce GTX 960M

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

  • Hallo,

    also mein Script funktioniert.

    habe ich da mal was vorbereitet.

    eepforum.de/filebase/file/1986/


    Gruß

    Michael

    EEP 6.1

    EEP 15.1 Expert(x64), EEP 16.4 Expert(x64) Patch 2
    PC: AMD Phenom(tm) II X4 955 Processor 3.20 GHz 16,00 GB 64-Bit WIN10 Pro,20H2.19042.746, Grafikkarte: AMD Radeon HD 6700
    Laptop: Intel(R) Core(TM) i7-6700HQ CPU 2.6GHz 2.59GHz 16,00 GB 64-Bit WIN10 Pro,1903.18363.1316, Grafikkarte: Intel(R) HD Graphics 530, NVIDIA GeForce GTX 960M

  • Hallo Michael

    Vielen Dank das du dir die Arbeit gemacht hast und eine Demo als Download bereitgestellt hast!

    Leider funktioniert es bei mir nicht, da kommt folgende Meldung:

    Die angegebene Datei exitstiert nicht oder kann nicht gelesen werden

    Vielleicht liegt das daran das ich noch mit EEP15 arbeite?!

    Aber deine Codezeilen, in dem Beitrag davor, sehen schonmal ganz vielversprechend aus.

    Sieht fast so aus als ob ich zum erstenmal ein Projekt/Anlage mit einem virtuellen Depot bekomme!

    Schoene Gruesse

    Wolfgang

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • Hallo nochmal,

    Wolf_A hab erst gerade gesehen das Du kein EEP16 hast, hier nochmal die V15 Version.

    Gruß

    Michael


    muss aber erst noch freigeschaltet werden.

    EEP 6.1

    EEP 15.1 Expert(x64), EEP 16.4 Expert(x64) Patch 2
    PC: AMD Phenom(tm) II X4 955 Processor 3.20 GHz 16,00 GB 64-Bit WIN10 Pro,20H2.19042.746, Grafikkarte: AMD Radeon HD 6700
    Laptop: Intel(R) Core(TM) i7-6700HQ CPU 2.6GHz 2.59GHz 16,00 GB 64-Bit WIN10 Pro,1903.18363.1316, Grafikkarte: Intel(R) HD Graphics 530, NVIDIA GeForce GTX 960M

  • EEP Forum Da werden Sie geholfen :ae_1:

    Hallo Michael

    Das "isses"!!!

    WOW, dein Script ist ja genial, so wenig Zeilen!!!

    Alles funzt!

    Kan gar nicht abwarten das in meine Anlage einzubinden und zu testen!!!

    Viiiielen Dank fuer deine Hilfe!!!

    Natuerlich auch an alle anderen fuer Ihre Beitraege!!!

    Werde mich melden wenn ich das umgesetzt habe!!!


    Schoene Gruesse aus dem kalten aber sonnigen North Carolina

    Wolfgang

    p.s. Hier impfen Sie im Moment meine Alterklasse, 64Jahre aufwaerts!

    Hab meine 1. Impfung natuerlich schon abgeholt, alles OK!! :bn_1:

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • Wolf_A

    Hab mir gerade noch überlegt, das bei Dir ja vielleicht die Signal-IDs nicht in fortlaufender Nummerierung sind (in meinem Demo von 1-6).


    Dazu habe ich das Script noch einmal geändert.


    In der Tabelle ab Zeile 10 werden jeweils die Signal-ID und der Zugname eingetragen.

    Die Tabelle kann um beliebig viele Einträge erweitert werden.

    Die Schleife in Zeile 13 arbeitet immer die ganze Tabelle ab.


    Gruß

    Michael

    EEP 6.1

    EEP 15.1 Expert(x64), EEP 16.4 Expert(x64) Patch 2
    PC: AMD Phenom(tm) II X4 955 Processor 3.20 GHz 16,00 GB 64-Bit WIN10 Pro,20H2.19042.746, Grafikkarte: AMD Radeon HD 6700
    Laptop: Intel(R) Core(TM) i7-6700HQ CPU 2.6GHz 2.59GHz 16,00 GB 64-Bit WIN10 Pro,1903.18363.1316, Grafikkarte: Intel(R) HD Graphics 530, NVIDIA GeForce GTX 960M

  • Hallo Michael

    Meine Guete, sorry aber ich wollte nicht das dein Sonntag draufgeht!

    Also dein Gedanke war gut, aber ich habe die Signale in einer Reihenfolge (401-406) aufgestellt.

    Aber trotzdem Danke fuer den neuen Script.

    Allerdings bin ich zur Zeit am Verzweifeln, ich bekomme immer eine Fehlermeldung!



    Hier ist der angepasste Script:

    Der Fehler ist in der Zeile "if string.sub(Name,1,9) == string.sub(Signale[k],1,9) then ......."

    Als ob die Zugnamen nicht richtig eingetragen sind?

    Due Zugnamen sind exakt so wie sie in dem Depot stehen!

    Im Moment gehen mir die Ideen aus.

    Am Besten mal eine Nacht drueber schlafen!

    Wolfgang

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • Das zweite string.sub(Signale[k],1,9) hat den Index k, der bezieht sich auf die Signal Id´s,

    das haut nicht hin, du mußt string.sub(Signale[k-400],1,9) eintragen.

    Es soll doch in der Tabelle verglichen werden.


    Gruß Dieter

    1.MSI 17,3" Intel® i7-8750H 16GB SSD + HDD GeForce® GTX 1060 »GV72 8RE-013DE (00179E-013)

    2. PC:Win10/64, i7-7700K, 4.2 GHz, GPU GTX 1070/8 GB, 16 GB RAM(DDR4), SSD 960 Evo 500GB, Ilyama PL2490
    EEP 6.1 - EEP 15 E, HomeNos 15


    Ich wünsche mir eine freizügige Script-Sprache und eine leistungsfähige Grafik Engine für EEP.
    Ein Leben ohne EEP ist möglich, aber sinnlos, so ganz sicher bin ich mir nicht mehr.

    "mal was ganz Einfaches" "rundum sorglos Paket"

    Parrys YouTube Videos
    https://www.twitch.tv/parry_36/

    The post was edited 2 times, last by Parry36 ().

  • Der Fehler ist in der Zeile "if string.sub(Name,1,9) == string.sub(Signale[k],1,9) then ......."

    Hallo Wolfgang :)


    bitte beim nächsten Mal den Code nicht als Screenshot, sondern als Codeblock einfügen. Das ist deutlich besser lesbar. Offenbar ist Name leer (d.h. nil). Füge mal vor Zeile 16...

    LUA Source Code
    1. print( Anzahl, Name)

    ...ein, damit Du siehst, welchen Wert diese Variablen haben.

    Due Zugnamen sind exakt so wie sie in dem Depot stehen!

    Ich verstehe auch noch nicht ganz den Sinn, warum Du die Zugnamen manuell in die Tabelle einträgst. Das kannst Du doch mit EEPGetTrainyardItemsCount() und EEPGetTrainyardItemName() auslesen.

    Der 5. Name in der Liste Signale ist zu kurz.

    Das sollte keine Rolle spielen. Außerdem wird laut Fehlermeldung im ersten Parameter ein String erwartet.


    Gruß Ingo

    Threema - Sicherer und privater Messenger

    Meine Threema-ID

    Warum Threema?


    Win 10x64 Professional, Gigabyte B360M AORUS, Intel Core i7-8700K, 32GB RAM, NVIDIA GeForce GTX 1050 Ti 4GB, Philips 273V7QDAB Full HD

    Windows Firewall und Defender
    EEP 15.1 Expert Patch 2, Plugins: 1

    EEP 16.4 Expert, Plugins: 1,2,3,4

    EEP 17.0 Expert Patch 1


  • Mit Michaels neuem Script funktioniert es jetzt.

    Das Problem waren meine Signalnummern. Michael hatte in seiner Demo die Signale 1-6 nummeriert.

    Ich habe die Signale zwar auch in einer Reihenfolge gesetzt (401-406) aber da ist eine Schleife zum zuordnen "for k = 1,6 do "

    Da habe ich drin stehen "for k = 401,406 do ". Das war das Problem!!!


    An Dieter

    Genau da hat es gehakt

    Thank you!!!


    An kaffeeschluerfer

    Das hatte ich auch zuerst gedacht wegen dem Befehl "if string.sub(Name,1,9) .........." und weil der 5. Zugname nur 9 Zeichen hat/

    Aber das war es wohl nicht.


    An Schlingo

    >>>Ich verstehe auch noch nicht ganz den Sinn, warum Du die Zugnamen manuell in die Tabelle einträgst. Das kannst Du doch mit EEPGetTrainyardItemsCount() und EEPGetTrainyardItemName() auslesen. <<<

    Wie schon gesagt, ich bin "blutiger" LUA Anfaenger. Ich bin schon froh das ich ueberhaupt soweit gekommen bin!

    Ich wuesste im Moment ueberhaupt nicht wie die ausgelesenen Zugnamen in dem Script bekommen haette.

    Zumindest zum testen von Michaels Script hatte ich mir die Arbeit gemacht und die Namen selbst geschrieben!

    Aber wie gesagt, jetzt funktioniert es!!!


    Nochmal an Alle Vielen Dank!!!

    Wolfgang

    EEP 13.2 Expert Patch 1

    EEP 14.1 Expert Patch 2

    EEP 15.1 Expert Patch 2

    Windows 10, INTEL i7-7700 CPU 3,6 GHz,

    16GB RAM, Geforce 1080

  • Hallo,

    so langsam wird ein Schuh draus.

    Ich verstehe auch noch nicht ganz den Sinn, warum Du die Zugnamen manuell in die Tabelle einträgst. Das kannst Du doch mit EEPGetTrainyardItemsCount() und EEPGetTrainyardItemName() auslesen.

    und da hat schlingo recht.


    Da hab ich das Script doch wieder einmal umgeschrieben:

    Ein bisschen Handarbeit bleibt aber doch.

    In Zeile 11 die Signale eintragen, die für die Schaltungen benötigt werden sollen (in meinem Beispiel 6 Stück) und als zweiten Wert einen Leerstring.

    Im DepotEinfahrtkontakt die Function Depot_ausleseneintragen.

    Bei jeder Einfahrt in das Depot werden jetzt die Zugnamen der im Depot befindlichen Züge auf die Signale verteilt.

    Sollte ein Zug gerade unterwegs sein bleibt der Platz leer.

    Wenn der Haken bei Abmeldengesetzt ist ändert sich die Reihenfolge der Signalbelegungen. Der eingefahrene Zug erhält den letzten Platz.

    Ohne Haken behält jeder Zug seinen alten Signalplatz.


    Bin auf weitere Ideen gespannt.


    Gruß

    Michael

    EEP 6.1

    EEP 15.1 Expert(x64), EEP 16.4 Expert(x64) Patch 2
    PC: AMD Phenom(tm) II X4 955 Processor 3.20 GHz 16,00 GB 64-Bit WIN10 Pro,20H2.19042.746, Grafikkarte: AMD Radeon HD 6700
    Laptop: Intel(R) Core(TM) i7-6700HQ CPU 2.6GHz 2.59GHz 16,00 GB 64-Bit WIN10 Pro,1903.18363.1316, Grafikkarte: Intel(R) HD Graphics 530, NVIDIA GeForce GTX 960M