Lua & Fahrstrassenschaltung

!!! 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 mit EEP12 prof

    habe ichFahrstrassen mit LUA aufgebaut getestet alles gut.Jetzt baue ich im Bahnhofbereich weiter und plötzlich steehe ich vor einem Problem. Und zwar folgendes ich habe eine weitere Fahrstrasse im Bahnhofsbereich eingerichtet und diese macht jetzt Theater.

    - Die Zugfahrt wird angemeldet - alles schaltet ordnungsgemäss durch - Die Fahrt meldet sich ab - alles schaltet sich zurück und nach kurzem Moment schaltet sich diese wieder ein. Selbst in der 3D Ansicht mit Shift-lässt Sich diese nicht mehr ausschalten. Ich habe

    eine zweite Installation auf einem anderen Rechner gemacht dort das gleiche Problem.

    ich habe diesen Script benutzt :

    -- Script als Grundlage für eine neue Anlage nach dem Prinzip "Mal was ganz Einfaches"

    clearlog() ; print("Meine neue Anlage")


    -- Codeschnipsel von BH2,Benny

    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 } )



    function EEPMain()


    if EEPLoadData(416) then EEPSetSignal(416,2) end

    if EEPLoadData(402) then EEPSetSignal(402,2) end

    if EEPLoadData(428) then EEPSetSignal(428,2) end

    if EEPLoadData(424) then EEPSetSignal(424,2) end

    if EEPLoadData(435) then EEPSetSignal(435,2) end

    if EEPLoadData(432) then EEPSetSignal(432,2) end

    if EEPLoadData(439) then EEPSetSignal(439,2) end

    if EEPLoadData(437) then EEPSetSignal(437,2) end

    if EEPLoadData(436) then EEPSetSignal(436,2) end

    if EEPLoadData(400) then EEPSetSignal(400,2) end

    if EEPLoadData(444) then EEPSetSignal(444,2) end

    if EEPLoadData(446) then EEPSetSignal(446,2) end

    if EEPLoadData(452) then EEPSetSignal(452,2) end

    if EEPLoadData(458) then EEPSetSignal(458,2) end

    if EEPLoadData(462) then EEPSetSignal(462,2) end

    if EEPLoadData(464) then EEPSetSignal(464,2) end




    return 1

    end







    -- allg. Anmeldefunktion mit Route

    function anmelden(Fs_Id, Zugname)

    local hResult, s_route

    hResult, s_route = EEPGetTrainRoute(Zugname)

    if hResult then

    EEPSaveData(Fs_Id, s_route )

    print("angefordert FS_",Fs_Id, ", Route: ", s_route)

    else

    print("*** Route nicht ermittelt ***")

    end

    end


    -- allg. Abmeldefunktion

    function abmelden(Fs_Id)

    EEPSaveData(Fs_Id, nil)

    end


    dafür Danke an Benny& Parry_36


    wer kann mir helfen ?

    Ich hoffe das es nicht ein Programmfehler ist ..........oder muss ein anderer Script benutzt werden ?

  • Hallo,

    nur eine Vermutung, da wenig Info´s:

    wahrscheinlich setzt du den Datenslot für die Anmeldung nicht zurück,

    sehe das deine Rücksetzung wohl über Kontaktpunkte funktioniert, ev. einen vergessen,falsche Daten eingetragen?

    Die Fahrstrasse setzt sich auf jedenfall am Fahrstrassen-Ziel zurück, wenn aber die Anforderung nicht gelöscht wird, kann sie durch Lua gleich wieder aktiviert werden, wenn frei.

    würde auch das Verhalten bei manueller Auflösung der Fahrstrasse erklären.


    Gruß

    Maik

    EEP14.1 Expert + PL1 , EEP13.2 + PL1&2, EEP 6.1 Classic, EEP 10 Expert, Modellkatalog, Konverter, HomeNos 14

    Rechner-Eigenbau: Z170 Pro Gaming, i5-6600k 4x4,2 Ghz OC, 16GB Ram, GTX1080 8GB, 960GB SSD, Win 10 Pro

    Bildschirme: Asus ROG PG27A 4K, Asus MX27UQ-4K

    Notebook: ASUS GL752V, I7-6700HQ 4 x 2,6 - 3,5 GHz, 8GB Ram, NVIDIA Geforce GTX 960M 4GB, Win10 Pro


    Mein YouTube-Kanal: https://www.youtube.com/channel/UCsn4pZ1Wmk7jecMZ1uYLTQQ

  • Hallo Roadrunner,


    Maik hat dir die wesentlichen Tipps bereits gegeben, ich sehe das genau so.

    Du muß bei dieser Schaltung darauf achten, dass du die Sound-KP´s für die

    An- und Abmeldung so setzt wie es in den Tutorials beschrieben wird und du

    mußt die gleichen FS Id´s setzen (kontrollieren).
    An deinem Lua Script ist nichts negatives Festzustellen, alles ok.
    Kontrolliere die KP Einträge.
    Zum Verständnis:
    Bei der Anmeldung wird im jeweiligen Slot der Routenname eingetragen, der

    dafür sorgt, dass in der EEPMain() der Aufruf EEPSetSignal() getriggert wird,

    bei der Abmeldung wird der Slot gelöscht, EEPSetSignal() ist damit standby.


    Eventuell kannst du die fehlerhafte FS mit dem Aufruf EEPSaveData(xx, nil)
    im Script Zwangslöschen, mußt dann aber diesen Aufruf wieder löschen.


    Übrigens, Willkommen im Club.


    Gruß Dieter

    1. PC:Win7Pro/64, i5-760, 2.8 GHz(3.2), GPU GTX 760/2 GB, 8GB RAM,

    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 14 E


    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.


    http://www.parry-36.jimdo.com 
    https://www.twitch.tv/parry_36/

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

  • Hallo Dieter & Mike zunächst mal ein Dankeschön

    ja so ist es nachdem ich mir die Videos v. Dieter nochmal in Ruhe angesehen habe - dann aber auch von Anfang an - habe ich festgestellt das ich die Abmelde - Sound -KP total falsch gesetzt habe ist auch nicht zu Verwechseln mit den Auflöse-KP - man sollte schon sich die Arbeit machen und mal die Messleiste benutzen ( FS auflösen Zugschluss + Meter). habe ich gemacht und......ein Wunder alles Prima.


    gruss Frank

  • Hallo Dieter,

    ich versuche mit der Änderung Deines Script:


    Code
    1. function anmelden(Fs_Id, Zugname)
    2. local hResult, s_route
    3. hResult, s_route = EEPGetTrainRoute(Zugname)
    4. if hResult then
    5. EEPSaveData(Fs_Id, s_route )
    6. print("angefordert FS_",Fs_Id, ", Route: ", s_route)
    7. else
    8. print("*** Route nicht ermittelt ***")
    9. end
    10. end

    den Zugnamen auszulesen.

    Ich hatte auch schon kurzzeitig erfolg, habe mich aber irgendwie verrannt.

    Ich habe jetzt das Script folgendermaßen geändert:

    Code
    1. function KF_anmelden(Fs_Id, Zugname)
    2. hResult, Route = EEPGetTrainRoute(name)
    3. Typ = string.sub((name),1,3)
    4. if hResult then
    5. EEPSaveData(Fs_Id, Typ )
    6. print("angefordert FS_",Fs_Id," Zug-Typ: ", Typ)
    7. else
    8. print("*** Typ nicht ermittelt ***")
    9. end
    10. end

    Jetzt bekomme ich jedesmal eine Fehlermeldung in Zeile 2.

    Ich habe zur Zeit keine Idee, was falsch sein könnte.:bk_1:

    Bin für jeden Rat dankbar.


    Reiner

    Windows 10 Home 64 bit, Intel® Core™ i7-6700k Processor 4 x 4000 MHz,(4633 Mhz mit Wasserkühlung)

    Palit Geforce GTX 1060 /6 GB , DDR4-2133 16 GB) --->> und kein Zug ruckelt mehr<<---:ap_1:


    Fast alles ab EEP4

  • Ich kenne zwar das Gesamtskript nicht,


    du müsstest aber statt name Zugname schreiben,


    weil die Variable im Funktionsaufruf so steht.


    :aq_1:


    PS: Hilfreich ist auch, wenn du die genaue Fehlermeldung mitpostest :ae_1:

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-14, HN13, MK, TM, "Schiefe Ebene 6 + 8", "Bahn2000"

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

  • Hallo Reiner,

    schön wäre es die Fehlermeldung hier reinzuschreiben, erleichtert die Hilfe,


    ohne den Rest deines Programm´s zu kennen, würde ich mal vermuten, das du die Variable name in der 2. Zeile nicht definiert hast.

    das muss zu einem Fehler führen, da die Funktion EEPGetTrainRoute("Zugname") als Parameter einen String erwartet, wenn du als Parameter eine Variable verwendest, muss diese einen String enthalten. ist die Variable eine Zahl oder gar nicht vorhanden führt dies zu einem Fehler .

    Ist aus meiner Sicht ist die variable name hier auch falsch, sollte Zugname sein.

    in Zeile 3 müsste dann die Variable name durch Route ersetzt werden.

    dann bekommst du in der Variablen Typ die ersten 3 Zeichen von der Route des Zuges.

    Falls das dein Ziel war.

    Viel Erfolg beim Fehler suchen.


    Nachtrag: eep_gogo war schneller:be_1:

    Gruß

    Maik

    EEP14.1 Expert + PL1 , EEP13.2 + PL1&2, EEP 6.1 Classic, EEP 10 Expert, Modellkatalog, Konverter, HomeNos 14

    Rechner-Eigenbau: Z170 Pro Gaming, i5-6600k 4x4,2 Ghz OC, 16GB Ram, GTX1080 8GB, 960GB SSD, Win 10 Pro

    Bildschirme: Asus ROG PG27A 4K, Asus MX27UQ-4K

    Notebook: ASUS GL752V, I7-6700HQ 4 x 2,6 - 3,5 GHz, 8GB Ram, NVIDIA Geforce GTX 960M 4GB, Win10 Pro


    Mein YouTube-Kanal: https://www.youtube.com/channel/UCsn4pZ1Wmk7jecMZ1uYLTQQ

  • ich versuche mit der Änderung Deines Script (...) den Zugnamen auszulesen.

    Warum denn so kompliziert?

    Warum willst du dafür am Skript etwas ändern?

    Der Zugname steht doch schon in der Variablen Zugname in Dieters Skript.

    Den kannst du einfach mit print(Zugname) ausgeben.

    Hanlon's Razor:

    "Never attribute to malice that which is adequately explained by stupidity."

  • Danke für die schnelle Antworten,

    ich möchte durch die Script-Änderung von funktionierenden Script:

    Code
    1. function anmelden(Fs_Id, Zugname)
    2. local hResult, s_route
    3. hResult, s_route = EEPGetTrainRoute(Zugname)
    4. if hResult then
    5. EEPSaveData(Fs_Id, s_route )
    6. print("angefordert FS_",Fs_Id," Route: ", s_route)
    7. else
    8. print("*** Route nicht ermittelt ***")
    9. end
    10. end

    Ergebnis ist "angefordert FS_328 Route: Nebenbahn_R"

    nicht die Route auslesen, sondern den Zugnamen, und davon die ersten 3 Stellen(z.B.: #GZ)

    In dem Resultat von

    Code
    1. EEPGetTrainRoute(Zugname)

    ist doch der Zugname mit enthalten.

    Wenn ich das Scriptso ändere:

    dann erhalte ich das Ergebnis: "angefordert FS_328 Zug-Typ: Neb".

    Das ist wieder die Route, der Zugname ist: #GZ_S_DB-211 Güter 02

    Liegt es etwa am Codeschnipsel von Benny, das der Name des Zuges nicht mit ausgelesen wird.


    Reiner

    Windows 10 Home 64 bit, Intel® Core™ i7-6700k Processor 4 x 4000 MHz,(4633 Mhz mit Wasserkühlung)

    Palit Geforce GTX 1060 /6 GB , DDR4-2133 16 GB) --->> und kein Zug ruckelt mehr<<---:ap_1:


    Fast alles ab EEP4

  • Hallo Goetz,

    wenn wir Dich nicht hätten:ap_1:

    Das war genau richtig. Wie ich schon am Anfang schrieb, hatte ich doch schon mal den Erfolg.

    Hab dann etwas geändert und weg war es.

    Man ist wirklich langsam blind und steigert sich dann immer weiter ins Chaos.


    Danke nochmals:aq_1:

    Windows 10 Home 64 bit, Intel® Core™ i7-6700k Processor 4 x 4000 MHz,(4633 Mhz mit Wasserkühlung)

    Palit Geforce GTX 1060 /6 GB , DDR4-2133 16 GB) --->> und kein Zug ruckelt mehr<<---:ap_1:


    Fast alles ab EEP4

  • In dem Resultat von Code EEPGetTrainRoute(Zugname) ist doch der Zugname mit enthalten.

    Nein.

    Im Resultat von EEPGetTrainRoute() ist der Name nicht enthalten.

    Du übergibst den Zugnamen beim Aufruf der Funktion, damit EEP weiß, von welchem Zug du die Route zurück bekommen möchtest. Zurück bekommst du erstens ein true oder false - je nachdem, ob der Funktionsaufruf funktioniert hat oder nicht - und zweitens die Route.


    Den Zugnamen hast du schon.

    Nämlich in der Variablen Zugname, die als zweites Argument in deiner Funktionsdefinition steht.


    Man ist wirklich langsam blind

    Das ist es nicht, Reiner.

    Es ist vielmehr das, was ich so oft und bei so vielen beobachte:

    "Kopieren und Anpassen" ist eine sehr ineffektive Art des Lernens.

    Hanlon's Razor:

    "Never attribute to malice that which is adequately explained by stupidity."

    The post was edited 5 times, last by Goetz ().

  • Wenn ich das mal bildlich darstellen darf:


    Du wirst oben in einen Kaugummiautomaten Geld rein und erwartest, dass unten Geld raus kommt und bist immer enttäuscht, dass da nur Kaugummi raus kommt. :ae_1:

  • Hallo Reiner,

    laß dich nicht entmutigen, man lernt immer etwas dazu, und Fehler machen,

    sind die besten Lehrer.

    Wenn du nur die die ersten 3 Buchstaben benötigst genügt diese Funktion:


    Code
    1. -- wenn du nur die ersten 3 Buchstaben aus dem Zugnamen extrahieren möchtest,
    2. -- genügt diese Funktion
    3. function KF_anmelden(Fs_Id, Zugname)
    4. local s_type
    5. s_type = string.sub(Zugname,1,3)
    6. EEPSaveData(Fs_Id, s_type )
    7. print("angefordert FS_",Fs_Id," Zug-Typ: ", s_type)
    8. end

    Gruß Dieter

    1. PC:Win7Pro/64, i5-760, 2.8 GHz(3.2), GPU GTX 760/2 GB, 8GB RAM,

    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 14 E


    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.


    http://www.parry-36.jimdo.com 
    https://www.twitch.tv/parry_36/