Kopfbahnhof (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.
  • Hallo,


    ich habe mir eine Testanlage mit einem Gleis aufgebaut. Am Endgleis steht ein unsichbares Signal(1). und ein Ausfahrtssignal(3).

    Bei der Einfahrt sind 2 Soundkontakte gesetzt. Der erste prüft die Geschwindigkeit, der zweite zeitverzögert setzt die Umkehr der Geschwindigkeit.

    Sobald ich das Ausfahrtssignal auf Fahrt gehe fährt der Zug jedoch weiter zum Prellbock.

    Die Lua Befehle stimmen, da die neue Geschwindigkeit angzeigt wird, aber EEP reagiert nicht.

    Was ist dann an meinem Code falsch?

    Gruß Gerhard

    EEP15.1
    Windows10 Home Premium 64Bit, DirectX 11

    Nvidia GeForce GTX10800i

  • Moin Gerhard,


    Was ist dann an meinem Code falsch?

    definitiv falsch ist die Zeile 37 weil sie überflüssig ist.

    Du musst an der Stelle lediglich die Abfrage und die Funktion beenden. Eigentlich sollte sich der Interpreter beim Laden des Skripts darüber beschweren.

    Über den Rest lässt sich vorerst nur spekulieren.

    In meinem Versuchsaufbau

    hat die Umkehr der Züge funktioniert.

    Um Dir bei dem Problem besser helfen zu können müsstest Du mal einen Screenshot von Deinem Aufbau posten und uns Aufschluss darüber geben,

    wie Du die Signale ansteuerst.

    Gruss, Oliver


    i7-6500U, 2,5 GHz, Geforce GTX 950M Win10

    EEP13.2, 15.1 Patch 2 Plug-In 1, 16.1 Patch 4 Plug-In 1( außer Betrieb )

  • Hallo Gerhard ( Salamanda19 ),


    wie BrettvormKopf schon schrieb ist in der Funktion "Umkehren" ein Syntaxfehler, ein "end" zuviel. Dadurch wird die Funktion beim Aufruf nicht ausgeführt und der Zug behält seine ursprüngliche Geschwindigkeit und Fahrtrichtung.

    Das stellen des Signale auf Fahrt verändert die ursprüngliche Fahrtrichtung nicht, die Funktion "Umkehren" muss ausgeführt werden.

    Ich weiß anhand Deines Quellcodes nicht, was zwischen den Aufrufen von "Geschwindigkeit" und "Umkehren" noch passiert, aber wenn Du den Wert der neuen Geschwindigkeit nur in "newSpeed" speicherst, dann sehe ich noch folgende Probleme:

    Wenn Du die Anlage zwischen den Aufrufen der beiden Funktionen beendest, dann hat "newSpeed" nach einem Neustart beim Aufruf von "Umkehren" keinen Wert mehr. Du müsstest den Wert "dauerhaft" in der Anlage speichern (DataSlot bzw. die Tag-Text-Funktionen bieten sich dafür an).

    Und wenn Dein Kopfbahnhof mal mehr als ein Gleis bekommen sollte, dann kannst Du "newSpeed" in der jetzigen Form nicht mehr dem entsprechenden Zug auf dem gewünschten Gleis zuordnen.

    Jürgen


    EEP: 12.1, 13.2, 14.1, 15.1, 16.2 (z.Zt. installiert, bezahlt, aber nur für Tests im Einsatz, da auf Fehlerbeseitigung gewartet wird)


    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

    The post was edited 6 times, last by JuergenSchm ().

  • Hallo ,


    zuerst Danke für eure Hilfe.

    Ja ihr habt recht die Syntaxfehler waren bei mir nicht mehr, da ich den falschen bzw. noch den Fehlerhaften kopiert habe. Ich konnte im Ereignisfenster sehen das die Geschwindigkeit gestellt wurde, jedoch nicht im Steuerelement weil das Signal auf Halt ist. Daher vermute ich es liegt an den KP.

    Der KP für die Geschwindigkeit liegt kurz vor dem KP für Umkehr und kurz vor dem Haltesignal. Aber werde mal mit den KP handieren.

    Ansonsten habe ich keinen Rat.

    Gruß Gerhard

    EEP15.1
    Windows10 Home Premium 64Bit, DirectX 11

    Nvidia GeForce GTX10800i

  • Hallo Salamanda19 ,


    ich habe die Situation mit Deinem Quellcode bei mir nachgestellt (ohne das überflüssige "end" und ohne Route-Abfrage) und es funktioniert, der Zug dreht nach der Kontaktpunkt-Verzögerung um. Ohne, dass das Signal auf Fahrt gestellt wird.


    Ich könnte mir vorstellen, dass es bei Dir noch ein Problem mit der Route gibt.

    Schreibe doch mal in Deinem Quellcode ein zusätzliches print(…) vor die beiden EEPSetTrainSpeed(…) in "Umkehren".

    Erfolgt eine entsprechende Anzeige?

    Du könntest das ganze auch erstmal ohne die Routen-Abfrage versuchen.


    Mir ist noch etwas aufgefallen:

    Du addierst beim "Personzug" 20. Wenn newSpeed -40 ist, dann würde der "Personenzug" mit -20 abfahren. Das ist doch sicherlich nicht gewollt?

    Jürgen


    EEP: 12.1, 13.2, 14.1, 15.1, 16.2 (z.Zt. installiert, bezahlt, aber nur für Tests im Einsatz, da auf Fehlerbeseitigung gewartet wird)


    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

  • Hallo Salamanda19 , Gerhard,


    ich bin leider (noch) kein Anwender von Lua und habe da höchstens gefährliches Halbwissen. Vielleicht verstehe ich es deswegen nicht so ganz, aber warum willst Du es denn überhaupt mit einem Lua-Script lösen? Da reicht doch an richtiger Stelle lediglich ein unsichtbares Signal mit einem KP, der eine Fahrtrichtungsumkehr und Geschwindigkeitsvorgabe enthält.


    Falls ich einen Denkfehler mache, sieh es mir bitte nach ok?

    Viele Grüße,

    Christopher

    System: Intel Core i7 6700k * Mainboard ASUS Z170 ProGaming * NVidia GeForce GTX 1060 6GB * 64GB Ram * 2 x 32"-TFT -Display PEAQ * Windows 10 Home (64 Bit) * EEP15 auf SSD Samsung 850 EVO 250GB

  • EEPSetTrainSpeed(Zugname,newSpeed + 20)

    Hallo Gerhard, Salamanda19

    Ohne jetzt deinen Aufbau zu kennen und mal abgesehen von dem oben genannten Fehler in der Syntax...

    in der zitierten Zeile veränderst Du die in newSpeed gespeicherte Geschwindigkeit indem Du 20 addierst.

    Wenn newspeed einen positiven Wert von sagen wir 40 hat ist alles kein Problem. Dann wird der Personenzug mit 60 weiter fahren.

    Ist aber newSpeed -40 dann wird die Geschwindigkeit -40 +20 = -20.

    Das solltest Du berücksichtigen.

    Wie Lelf zeigt, kannst Du

    if EEPGetSignal(3) == 2 then --Ausfahrtsignal auf Fahrt
    EEPSetSignal(1,2)
    end

    dir das sparen. Denn wenn der Zug, egal an welchem Signal er steht eine Geschwindigkeitsumkehr erfährt, dann löst er sich aus der "Fesselung" des Signals.

    könnte man ersetzen durch

    Code
    1. function Geschwindigkeit(Zugname) --Die Geschwindigkeit ermitteln ob sie negativ oder positiv ist
    2. hResult, speed = EEPGetTrainSpeed(Zugname)
    3. if hResult then
    4. print(speed)
    5. newSpeed = speed*-1 -- umgekehrte Geschwindigkeit setzen
    6. end
    7. end

    ich habe hier mal einen Ausschnitt aus meinem Kopfbahnhof genommen.

    Die Messung der Geschwindigkeit erfolgt in dem Sound-KP jeweils links im Gleis.


    LUA Source Code
    1. ----------------Geschwindigkeit speichern Kopfbahnhof
    2. for dl = 101, 110 do
    3. _ENV["radar"..dl] = function(zn)
    4. ztempo = select(2, EEPGetTrainSpeed(zn)) -- Geschwindigkeit ermitteln
    5. EEPSaveData(dl, ztempo)
    6. EEPSaveData(dl+10, zn)
    7. end
    8. end

    Da ich nicht mit Bennys Codeschnipsel arbeite müsstest Du (zn) durch (Zugname) ersetzen :ae_1:

    Bei mehreren Gleisen (hier 10) finde ich es einfacher, sowohl die Geschwindigkeit der Züge als auch den Zugnamen in je einem Slot zu speichern.

    Dann habe ich die Ausfahrtsignale noch in einer Tabelle angelegt, diese registriert und jeweils ein Callback erzeugt.

    Wird das Ausfahrtsignal auf Fahrt gestellt, dann wird für den Zug die neue Geschwindigkeit ausgehend von den in den Slots gespeicherten Werten errechnet und zugewiesen,

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Schalten und walten ist mein Hobby, aber nur in EEP ;)
    __________________________________________
    EEP alle ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,HomeNos11 DEV...
    Intel I7 4790k 4x 4Ghz,16 GB RAM, NVidia GTX 970 4GB, Direct x V11, Windows 7 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hallo und Danke für eure Hilfe.

    Christopher der Grund ist da bei einem KP der Zug nicht zu langsam sein darf. Daher muss der KP sehr knapp an das Vorsignal damit der Zug nicht zu früh umdreht. Weiters ist der Zug jetzt an das Signal gebunden.


    Mit Lua steht der Befehl des Umkehr über das Signal. Das heist ich kann jederzeit selbst die Zeit bestimmen wann er raus soll. Mit KP musst du eine Zeit vorgeben oder über das Signal freigeben.

    Aber Danke für den Rat.


    So ich habe es hinbekommen und sogar mit Route das er mit verschiedener Geschwindigkeit raus fährt. Hier der Code und ein Bild der Anlage.

    Anlagebild


    Gruß

    EEP15.1
    Windows10 Home Premium 64Bit, DirectX 11

    Nvidia GeForce GTX10800i

  • Hallo DIeter,


    unsere Beiträge haben sich überschnitten.

    Aber Danke werde deinen Code benutzen da er mit Tabellen ist und da es noch mehr werden ist das eine gute Sache.


    Edit: Dieter was bewirken die Fahrzeug KP am Ende des Bahnhofes?

    Code
    1. if Route == "ICE" or Route == "WZ" then -- wenn kein Zugwechsel erforderlich
    2. EEPSetTrainSpeed(zugn,Zspeed*-1) -- umgekehrte Geschwindigkeit setzen
    3. en

    Du vergibst den Zügen mit der Route ICE und WZ eine Umkehr.

    Lua rechnet - daher ergibt 100*-1 =99, -100*-1 = -101 ok? Das Tempo wird beim speichern bereits gedreht, aber was bedeutet bei select die 2?

    Sorry für die vielen Fragen aber ich möchte die Begriffe in Lua verstehen wie das abläuft und mit select habe ich noch nichts am Hut.


    Gruß Gerhard

    EEP15.1
    Windows10 Home Premium 64Bit, DirectX 11

    Nvidia GeForce GTX10800i

    The post was edited 5 times, last by Salamanda19: Themen mit Dieter gekreuzt ().

  • daher ergibt 100*-1 =99, -100*-1 = -101 ok?

    Hallo Gerhard :)


    nein. Vielleicht wird es durch einige Leerzeichen klarer:

    LUA Source Code
    1. newSpeed = 100 * -1 -- +100 multipliziert mit -1 ergibt -100
    2. newSpeed = -100 * -1 -- -100 multipliziert mit -1 ergibt +100

    Mit anderen Worten: Du kehrst das Vorzeichen um.

    was bedeutet bei select die 2

    Mit select kannst Du aus einer Liste von Parametern einen bestimmten ansprechen, siehe z.B. hier.

    muss der KP sehr knapp an das Vorsignal damit der Zug nicht zu früh umdreht. Weiters ist der Zug jetzt an das Signal gebunden.

    Ersteres sehe ich nicht als (großes) Problem, letzteres ist für mich eher erwünscht, denn...

    ich kann jederzeit selbst die Zeit bestimmen wann er raus soll. Mit KP musst du eine Zeit vorgeben oder über das Signal freigeben.

    ... das kann ich genauso, weil ich die Freigabe durch ein beliebiges Ereignis auslösen kann, nicht nur zeitgesteuert.


    Gruß Ingo

    Win 10x64 Professional, Gigabyte B360M AORUS, Intel Core i7-8700K, 32GB RAM, NVIDIA GeForce GTX 1050 Ti 4GB, 1920x1200 auf 26" TFT

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

    EEP 16.2 Expert Patch 3, Plugins: 1,2


    alt:
    Win 7x64 Professional SP1, Intel Core i5-3570, 16GB RAM, nVIDIA GeForce GT630, 2GB, 1280x1024 auf 19" TFT

    Windows Firewall und Defender (MSE)

    EEP6; EEP8-14; EEP 15.1 Expert Patch 2, Plugins: 1

  • 100*-1 =99, -100*-1 = -101 ok?

    Nein.

    100 - 1 = 99

    100 Mal Minus 1 = Minus 100

    (Einen Wert mal Minus1 rechnen kehrt das Vorzeichen um)

    100 wird zu -100

    1794357 wird zu -1794357

    -112344 wird zu 112344

    Samsung Series 9 Laptop / Lenovo Z50 - 70 Laptop
    Intel i5 1.7 Ghz / Intel i7 2.0 Ghz
    4 Gb Speicher / 8 Gb Speicher
    Intel HD Graphics 4000 / NVIDIA Geforce 840M
    Windows 10 64 /Windows 10 64
    EEP15, EEP16 / EEP14, EEP15
    AnlagenBau / AnlagenLaufLass

    _____________________________________________________________________

    Ganz grosses Kino  :bn_1:

  • Edit: Dieter was bewirken die Fahrzeug KP am Ende des Bahnhofes?

    Hallo Gerhard,

    da dieses Bild aus einer größeren Anlage stammt habe ich bei dem Script ein wenig "gemogelt"

    Bei diesem Kopfbahnhof bekommen nur bestimmte Züge (Routen "WZ" für Wendezug und "ICE") die neue Geschwindigkeit am Signal. Der KP nach dem Du fragst hat den Eintrag "Geschwindigkeit 0 nach 30 Sekunden". Wie Du ja gemerkt hast nutze ich nicht dieses "Durchrutschen" am Signal und gebe den Zügen Ihre neue Geschwindigkeit wenn das Signal schaltet.

    Wenn Züge in den Kopfbahnhof einfahren, bei denen die Lok gewechselt werden muss, also keine Steuerwagen am anderen Ende. Dann wird die Lok abgekuppelt und eine neue Lok aus dem BW kommt zum Einsatz. Die alte Lok zieht bis zum Ende des Gleises vor während die andere Lok von hinten an die Wagen fährt.

    Also etwas komplexer :ae_1:

    select = wähle

    strbes, zn = select(2,EEPIsRoadTrackReserved(v[2],true))

    EEPIsRoadTrackReserved übergibt ja 3 Parameter. Wenn ich sicher davon ausgehen kann, dass ein Wert vorhanden ist, dann spare ich mir die Abfrage des ersten Wertes der ja entweder true oder false ist. Wie Du im Beispiel siehst lese ich daher aus dem Ergebnis nur ab dem 2. Rückgabewert aus, also Status des Splines und Name des Rollmaterials.

    Würde ich nur den Namen des Rollmaterails benötigen könnte ich anstelle von Select(2,xy) select(3,xy) nutzen.

    Also immer alle Werte ab dem Parameter der an der x-ten Stelle steht.

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Schalten und walten ist mein Hobby, aber nur in EEP ;)
    __________________________________________
    EEP alle ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,HomeNos11 DEV...
    Intel I7 4790k 4x 4Ghz,16 GB RAM, NVidia GTX 970 4GB, Direct x V11, Windows 7 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Mir kommt die select-Funktion immer etwas komisch und unnötig komplex vor - sie verstellt mir den Blick auf die eigentlich wichtige EEP-Funktion.


    Statt

    strbes, zn = select(2,EEPIsRoadTrackReserved(v[2],true))


    schreibe ich mit der Dummy-Variablen "_"

    _, strbes, zn = EEPIsRoadTrackReserved(v[2],true)


    bzw. zumeist mit lokalen Variablen und explizitem returncode zur Vorbereitung einer Fehlerbehandlung:

    local rc, strbes, zn = EEPIsRoadTrackReserved(v[2],true)

    if rc == true then ... end


    Den Test kürze ich dann noch ab:

    if rc then ... end

  • Ich würde auch gern meine Senfkörner hier verstreuen.

    Meine persönliche Meinung zur Kopfbahnhofsteuerung.

    Züge würde ich durch ein unsichtbares Signal nahe am Prellbock (ca. 10m oder mehr) halten lassen.

    Eine Geschwindigkeit und -richtung über Kontaktpunkt, würde ich entfallen lassen, da das Ausfahrtsignal eh die Höchstgeschwindigkeit vorgibt. Hat man z.B. nur Halt und Fahrt am Signal, dann kann man mit einer Tabelle für jede Zuggattung (Route und/ oder Filter) bestimmte Geschwindigkeiten festlegen und dementsprechend zuordnen. Was die Richtung angeht, kann man über die Gleise die Richtung bestimmen, auch wenn der Zug steht, damit entfällt ein Speicher.

    Grundsätzlich fahren die Züge erst los, wenn das Ausfahrtsignal auf Fahrt steht. Und hier auch mit einer Verzögerung, damit die Bahnhofsdurchsage, alle Türen zu usw. von statten gehen können. Eine Besonderheit gibt es noch, wenn Zugverbände zur Wartung, Abstellgleise fahren.

    Ein Lua-Skript gibt es nicht, da ich keine Ahnung von Lua habe.:ad_1:

    MfG. Jörg
    Ausstattung: Notebook: i7-6700K, 4[8]x4.0 GHz, 32GB RAM DDR4, NVIDIA GTX 980M 8GB, Windows 10, 64-Bit
    Installiert: EEP15.1 Patch2 mit Plugin 1; EEP16.2 Patch3 mit Plugin1+2

    Zusatzprogramme: ResourcenSwitcher2

  • Hallo und danke allen für die Zahlreiche Hilfe und Tipp's,

    Mit select kannst Du aus einer Liste von Parametern einen bestimmten ansprechen, siehe z.B. hier.

    Danke jetzt bin ich im Bilde.


    Zu euren Rechen Beispiele.

    Das die Rechnung stimmt hatte ich keinen Zweifel sonst würde er im Code nicht stehen.:an_1:. Hab mich nur gefragt warum der Taschenrechner falsch ausgibt.


    Hallo Gerhard,

    da dieses Bild aus einer größeren Anlage stammt habe ich bei dem Script ein wenig "gemogelt"

    Ist doch nicht schlimm. War nur neugierig.:aa_1:

    Danke für die Ausführliche Erklärung Dieter.

    EEP15.1
    Windows10 Home Premium 64Bit, DirectX 11

    Nvidia GeForce GTX10800i

  • Hab mich nur gefragt warum der Taschenrechner falsch ausgibt.

    Hallo Gerhard,

    wenn Du im Taschenrechner 100* -1 rechnest wird das "*" ignoriert, denn richtig müsste es ja 100 * (-1) heißen.

    Wenn du aber die Faktoren umdrehst, also -1 * 100, dann erhältst Du -100 :ag_1::ae_1:

    Gruß
    Dieter

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

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Schalten und walten ist mein Hobby, aber nur in EEP ;)
    __________________________________________
    EEP alle ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,HomeNos11 DEV...
    Intel I7 4790k 4x 4Ghz,16 GB RAM, NVidia GTX 970 4GB, Direct x V11, Windows 7 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hallo Dieter,

    Hallo Gerhard,

    wenn Du im Taschenrechner 100* -1 rechnest wird das "*" ignoriert, denn richtig müsste es ja 100 * (-1) heißen.

    Wenn du aber die Faktoren umdrehst, also -1 * 100, dann erhältst Du -100

    Ok haste recht, aber du bekommst keine 100 :ag_1: weder mit -1 * -100 oder -100 * -1.

    Dazu musste ich den Rechner von Windows auf Programmierer umstellen damit ich die Klammern verwenden konnte dann funktioniert's. :an_1:

    Gruß Gerhard

    EEP15.1
    Windows10 Home Premium 64Bit, DirectX 11

    Nvidia GeForce GTX10800i