Sind Fahrstrassen begrenzt ?

!!! 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 EEP Gemeinde

    ich hoffe das mein Problem hier noch nicht aufgetaucht ist und zwar folgendes:

    Ich habe in meiner Anlage 35 Fahrstrassen die funktionieren die 36. FS macht jetzt Probleme indem immer die Fehlermeldung ------ Error running function ´anmelden(475,Zugname) ´: [String EEP Script"] : 164 bad argument #1 to´ EEPGet Train Route´(string exected got nil).---


    Hier meine derzeitigen Eintragungen - alles funktioniert, dann die FS 475 erst dort eingebaut wo sie hinsollte (Fehlermeldung) dann habe ich versucht diese FS auf ein Stück gerades Gleis in der Anlage zu bauen wieder diese Fehlermeldung.


    LUA Source Code
    1. function ausgeben()
    2. local a_Fs = {475,528,421,446,223,482,416,402,428,424,435,432,439,437,436,400,452,458,462,464,478,497,498,500,511,515,520,FS_224(),FS_468(),FS_157(),FS_416(),FS_444(),FS_446(),FS_484(),FS_501(),FS_517()}
    3. for n = 1, #a_Fs do
    4. if type(a_Fs[n]) == "number" then
    5. if EEPLoadData(a_Fs[n]) then EEPSetSignal(a_Fs[n],2) end
    6. elseif type(a_Fs[n]) == "function" then
    7. if EEPLoadData(a_Fs[n]) then a_Fs[n]() end
    8. end
    9. end
    10. end

    Hier der Block Zeile 161 bis 171


    jetzt kommt langsam Verzweifelung auf .Wer kann mir helfen?





    Gruß Roadrunner

    Intel(R) Core(TM) i5-2500 CPU @ 3,30Ghz 3,3Ghz Arbeit 16GB System 64bit ,Nvidia GeForce-GT 710

    EEP 7,8expert ,12expert, 14expert,15 Patch 3

  • Die gezeigte Fehlermeldung sagt nur, dass in Zeile 164 Zugname (das erste Argument für EEPGetTrainRoute) aus irgendeinem Grund nil ist, also nicht gesetzt wurde.

    Warum das so ist, kann ich aus den von dir gegebenen Informationen aber leider nicht rauslesen.


    Steht bei dir am Anfang des Skripts eine halbwegs aktuelle Variante meines Code-Schnipsels, der Zugname unterstützt? Ohne das dürfte es aber nie funktionieren....


    Viele Grüße

    Benny


    PS: Um die Lesbarkeit zu erhöhen, setze deinen Code bitte in einen Code-Block. Den erreichst du hier im Beitragseditor über den </>-Knopf.

    Wenn du dann noch auf die Überschrift vom Code-Block klickst, kannst du noch noch das Syntax-Highlighting (Lua) und sogar die Start-Zeilennummer einstellen.


    Nachtrag:

    Eine Idee habe ich noch. Hast du im entsprechenden Kontaktpunkt wirklich anmelden(475,Zugname) eingetragen, oder dich vielleicht irgendwie vertippt (z.B. anmelden(475,Zugmame)). Da du die Fehlermeldung vermutlich von Hand abgetippt hast, könntest du den Fehler dadurch aus Versehen versteckt haben.

  • Hallo Roadrunner ,


    mal mit Print "Zugname" anzeigen lassen. Der dürfte im Fehlerfall NIL sein.


    Wenn die Funktion anmelden(...) über einen Kontaktpunkt aufgerufen wird, dann sollte "Zugname" nicht im Funktions-Parameter stehen.

    Benny's Funktion stellt die Variable "Zugname" zur Verwendung in der Funktion zur Verfügung, ohne, dass diese als Funktions-Parameter übergeben werden muss.


    Wenn Aufruf nicht in einem Kontaktpunkt erfolgt, dann ist "Zugname", beim Funktionsaufruf im Fehlerfall, warum auch immer, NIL hat dann aber nichts mehr mit Benny's "Zugname" zu tun.

    Jürgen


    EEP: 12.1, 13.2, 14.1, 15.1


    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,

    Um die Lesbarkeit zu erhöhen, setze deinen Code bitte in einen Code-Block.

    ich war dann mal so frei.


    Mal allgemein zur latenten Frage in der Überschrift, Fahrstraßen in EEP sind ja nur Signale mit speziellen Eigenschaften, sind also meines Wissens nur die die Zahl der Signal- und Weichen-IDs begrenzt (je eine ID pro Start oder Zielsignal).


    Zum konkreten Problem hat sich Benny (BH2) ja schon geäußert.


    Gruß Michael

    163-katalog-banner-jpg

    Hardwarekonfiguration:
    Laptop: Intel Core i3-3110M 2,4 GHz, 4GB RAM, Win7 64 bit, EEP 6.1/EEP 14.1 Expert Plugin 1

  • Hallo Roadrunner ,


    in deiner "anmelden(Fs_Id, Zugname)" - Funktion ist kein Fehler zu finden, wie Benny bereits
    sagte, solltest du die Schreibweise im KP überprüfen, eventuell gibt es die Route nicht.


    In der Tabelle "a_Fs" entferne bitte die runden Klammern von den Funktionen, das sind hier

    keine Funktionsaufrufe sondern Referenzen.

    Ansonsten der beste Lehrmeister ---> "Try and Error" , "Versuch und Fehler" finden.


    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/

  • Danke Benny,


    es ist doch wichtig auf die Schreibweise (475,Zugname) ist richtig ich habe (475,zugname) geschrieben.


    gruß Roadrunner

    Intel(R) Core(TM) i5-2500 CPU @ 3,30Ghz 3,3Ghz Arbeit 16GB System 64bit ,Nvidia GeForce-GT 710

    EEP 7,8expert ,12expert, 14expert,15 Patch 3

  • Wenn die Funktion anmelden(...) über einen Kontaktpunkt aufgerufen wird, dann sollte "Zugname" nicht im Funktions-Parameter stehen.

    Benny's Funktion stellt die Variable "Zugname" zur Verwendung in der Funktion zur Verfügung, ohne, dass diese als Funktions-Parameter übergeben werden muss.

    Nein!

    Die Variable Zugname soll nur im Kontaktpunkt verwendet werden, und von dort als Funktionsparameter übergeben werden. Dieser Funktionsparameter darf dann auch wieder Zugname heißen, muss aber nicht.

    Leider kann man auf Zugname auch als globale Variable zugreifen, ohne sie als Funktionsparameter übergeben zu haben. Das ist so aber nicht gedacht, und kann sich bei neueren Versionen meiner Codezeile auch ändern.

    Übergebt den Zugnamen also bitte als Parameter an die aufgerufene Funktion. Also genau so, wie es im ersten Beitrag dieses Themas gezeigt ist.


    Sorry, Jürgen, das geht nicht gegen dich persönlich. Aber ich will vermeiden, dass sich diese "falsche" Verwendung weiter verbreitet.


    Viele Grüße

    Benny

  • Hallo Benny (BH2) ,

    nein, ist doch kein Problem.

    Vor allem, wenn Du noch zukünftige Veränderungen vornehmen möchtest.

    Darum ab jetzt immer mit dem Parameter für den Zugnamen, wenn er in der Funktion benötigt wird!


    Darum schreibe ich auch nicht, dass die globale Variable (NUR FÜR MICH) praktisch ist, vor allem, da das Kontaktpunkt-Lua-Feld bei mehreren Funktions-Parametern manchmal zu klein ist und wenn man da schon mal einen Parameter sparen kann...

    Und eine Schreibfehler-Quelle im Kontaktpunkt weniger, ist es auch.

    Jürgen


    EEP: 12.1, 13.2, 14.1, 15.1


    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 2 times, last by JuergenSchm ().

  • Darum ab jetzt immer ...

    ... und bitte auch Rückwirkend. :ae_1:


    :aq_1:Gruss Jürg

    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 / EEP14, EEP15
    AnlagenBau / AnlagenLaufLass

    _______________________________________________________________________

    Resourcen-Extractor

  • Aber ich will vermeiden, dass sich diese "falsche" Verwendung weiter verbreitet.

    Viele Grüße

    Benny,

    du weißt es bestimmt besser, deine Variable "Zugname" ist nicht Global.

    In deinem Codeschnipsel überbernimmst du den im KP übergebenden Funktionsstring

    und machst in der Funktion "setmetatable" daraus ausführbaren Code.

    Dieser übergebene Funktionsstring ist in diesem Moment des Aufrufes ein Bestandteil

    von setmetatable.

    Hierbei ist es absolut egal, ob der Zugnamen per Argument oder per Variable innerhalb

    deiner Funktion erfolgt.


    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/

  • Hallo Dieter,

    leider verstehe ich nicht ganz, was du meinst (oder willst).

    Nein, ich mache nichts "in der Funktion setmetatable". Diese Funktion ist von Lua bereits fertig implementiert, ich rufe diese Funktion nur auf. Als Parameter übergebe ich der Funktion setmetatable (irgendwo verschachtelt) eine andere (namenlose) Funktion, in der das von dir beschriebene funktioniert.

    Das klingt jetzt vielleicht etwas kleinlich, und ist mir eigentlich auch egal, aber solche "unpräzisen Ausdrucksweisen" führen sehr schnell zu Missverständnissen.


    Hierbei ist es absolut egal, ob der Zugnamen per Argument oder per Variable innerhalb deiner Funktion erfolgt.

    Ich weiß nicht genau, was du damit (insbesondere mit "egal") meinst, deshalb weiß ich auch nicht, ob ich dir da wiedersprechen muss.


    Aber ich bleibe dabei: Globale Variablen sind böse.

    Wenn ich den Aufruf MeineFunktion() in einem Kontaktpunkt sehe, dann erwarte ich, dass beim Aufruf von MeineFunktion() in der EEPMain oder sonstwo im Skript das gleiche passiert. Wenn die Funktion MeineFunktion auf die globale Variable Zugname zugreift, ist das nicht mehr gegeben. Solche unerfüllten Erwartungen ("sieht aus als ob, ist aber doch nicht") können zu sehr schwer zu findenden Fehlern führen.


    Viele Grüße

    Benny

  • Also grundsätzlich will ich von dir nichts, oder doch, hin und wieder eine kleine Unterstützung

    wenn ich nicht mehr weiter weiß.

    Deine Variable Zugname ist nicht Global, ich führe sehr oft in meinem Script eine Globale Variable

    Zugname = "Der wilde Benny" mit, aber kein Zug will sie .


    Deine deklarierte Variable Zugname ist wirklich nur und ausschließlich innerhalb der Funktion setmetatable

    sichtbar.

    Ich habe mich nur wehren wollen, dass mir eine falsche Verwendung in meiner Programmierung nachgesagt

    wird.


    Viele Grüße 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 1 time, last by Parry36 ().

  • Doch, Zugname ist global. Ich habe zwar versucht, die Auswirkungen der "Globalität" abzumildern, indem ich die Variable nach dem Ausführen des KP-Codes wieder zurücksetze. Aber während der KP-Code ausgeführt wird, ist Zugname global.

    Wäre Zugname nicht global, könntest du in anderen Funktionen nicht darauf zugreifen, ohne den Zugnamen als Parameter mitzugeben.


    Viele Grüße

    Benny

  • Benny, als Beispiel, mein String --> anmelden(74) wird in setmetatable()

    per Lua Funktion p = load(k) zu einer ausführbaren Funktion transferiert

    und auch innerhalb dieser Funktion ausgeführt, sonst würde ja nichts passieren,

    das heißt, meine Funktion ist in diesem Stadium Bestandteil von setmetatable().


    Es ist extern nicht möglich auf deine Variable zu zugreifen.


    Viele Grüße Dieter


    PS: es ist mir aufgefallen, dass EEP den Zugnamen in einer bestehenden Sitzung statisch in einer Tabelle hält.

    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 3 times, last by Parry36 ().

  • Zu setmetatable und einer präzisen Ausdrucksweise hatte ich schon was geschrieben, das will ich nicht nochmal wiederholen.


    Und auch zu

    Es ist extern nicht möglich auf deine Variable zu zugreifen.

    hatte ich eigentlich schon etwas geschrieben. Ja, das stimmt, außerhalb des Kontaktpunktaufrufs kann man nicht mehr auf den Zugnamen zugreifen. Aber während des Kontaktpunktaufrufs ist Zugname eine globale Variable. Punkt.


    Irgendwie habe ich eh das Gefühl, wir reden aneinander vorbei. Ich verstehe nicht so ganz, was du willst, und du verstehst wohl auch nicht so ganz, was ich will.

    Solange sich das so bleibt, halte ich eine weitere Diskussion für sinnlos.


    Viele Grüße

    Benny


    PS: Aus deinem PS werde ich auch nicht schlau. Was für eine "bestehende Sitzung"? Was bedeutet hier "statisch"? Welche Tabelle? (Musst du jetzt nicht beantworten. Ich will nur erklären, warum ich darauf nichts antworten kann)

  • Post by eep_gogo ().

    This post was deleted by Michael89: wie gewünscht ().