Lua-Funktionsaufrufe mit Parametern in KPs: Geht nicht? Geht doch!

!!! 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 zusammen,


    ich habe mich mangels Zeit noch nicht näher mit LUA befasst. Aber ich bin ja auch so´n oller Programmierer und ich spinne mal ein bisschen rum.


    LUA kann doch mit Dateien umgehen, also muss es doch möglich sein festzustellen, das sich das Attribut "'Datum letzte Änderung" der Anlagendatei verändert hat. Und grundsätzlich wäre es doch möglich die Variablen in diesem Moment in ein Textfile zu schreiben. Dieses File wird beim Anlagenstart wieder eingelesen und fertsch.


    Viele

  • Dann schreibt man eben bei jeder Änderung ein File mit dem Variablenstand (immer ein neues) und nimmt dann das passende. Damit das nicht zu viele Files werden, wird jedes File älter als x Sekunden wieder gelöscht. Wenn man Lua damit nicht belasten will schreibt man einfach eine kleines Dienstprogramm das diese Aufgabe übernimmt.

  • Hallo Frank,
    ich will nicht sagen, dass man sowas nicht "irgendwie hingebastelt" bekommt. Dateien schreiben geht auf jeden Fall, lesen genauso.
    Aber an ein wirklich zuverlässiges System auf diese Art glaube ich nicht - dazu gibt es zuviele Parameter, die man auf irgendwelchen Umwegen erraten müsste, oder für Lua auch gar nicht greifbar sind (z.B. der neue Dateiname, wenn man die Anlage unter anderem Namen speichert).
    Ganz abgesehen davon, dass das Lua-Skript auch nicht ständig ausgeführt wird, sondern nur dann, wenn EEP "gerade mal Lust hat", also die 3D-Ansicht läuft, aber nicht der Skript-Editor geöffnet wird.


    Achja, jetzt fällt mir auch das Hauptargument wieder ein:
    Du musst die Variablen quasi dauernd zwischenspeichern, damit sie im Falle eines Neuladen des Skripts wieder zur Verfügung stehen.
    Du darfst die Variablen aber nicht dauernd zwischenspeichern, weil dann im Falle eines "Verwerfens des Anlagenstands" (also z.B. Neuladen ohne Speichern) falsche Infos verwendet werden würden.


    Das könnte man vielleicht auch irgendwie umgehen (indem man die aktuelle System-Zeit in Signalen auf der Anlage speichert, anhand deren man dann den passenden Speicherstand von der Festplatte sucht), aber das sind alles nur "Hacks", die an die Zuverlässigkeit der Speicherung in der Anlage mit Signalen und Weichen nicht rankommen.


    Viele Grüße
    Benny

  • Hallo Benny,


    Es ist keine Frage, dass eine implementierte Variablenspeicherung in EEP allemal die bessere, bzw. einzig richtige Lösung wäre. Dahingehend habe ich die Hoffnung das dies in EEP 11 berücksichtigt wird. (Wie auch die deutliche Erweiterung der EEP-Schnittstelle, und für alle Lua unbeleckten weitere Wizards).


    Ich bin selbst ein großer Gegner solcher "provisorischer" Lösungen, wenn es denn bessere Lösungen gibt. Aber ich glaube funktionieren könnte es schon. Und in der Not ... frisst der Teufel Fliegen. :az_1:


    Viele

  • Quote

    Achtung! Die letzte Antwort auf dieses Thema liegt mehr als 220 Tage zurück. Das Thema ist womöglich bereits veraltet.

    Nö, liebe Forensoftware, ist es nicht :P
    Wie ich im Forum immer wieder sehe, wird der "Codeschnipsel" für die KP-Parameter (wenn auch mit abweichendem oder ganz ohne Namen) scheinbar von sehr vielen Leuten verwendet.
    Allein deswegen ist das Thema nicht "veraltet", und außerdem gibt es jetzt auch was wirklich neues:


    Mit dem Plugin 2 zu EEP11 übergibt EEP bei jedem Funktionsaufruf mittels eines KPs als ersten Parameter den Zugnamen des aufrufenden Zugs. Sehr praktisch :be_1: Meine bisherige Code-Zeile weiß davon natürlich nichts, und gibt diesen Parameter folglich auch nicht weiter. Somit ändert sich nichts an der bisherigen Funktion, aber die neue Funktion der Zugnamen-Übergabe ist auf dem Wege natürlich nicht nutzbar.


    Ist nicht nutzbar? War nicht nutzbar! Ich habe natürlich ein bisschen weitergebastelt, und habe jetzt eine neue Codezeile. Die ist ein bisschen länger als die erste Version, macht dafür aber auch mehr ;)

    Code
    1. setmetatable(_ENV,{__index=function(s,k) local n=k:gsub("%.",","); local p=load(n);if p then local f=function(z) local s=Zugname;Zugname=z;p();Zugname=s end;_ENV[k]=f;_ENV[n]=f;return f end;return nil end})


    Wenn ihr also den Zugnamen wissen wollte, könnt ihr bei der betreffenden Anlage die alte Zeile rausschmeißen und durch die neue ersetzen. Der Zugname steht innerhalb der Code-Zeile in der Variable Zugname bereit.
    Ein Beispielaufruf im Kontaktpunkt könnte zum Beispiel so aussehen: print("Der Zug namens ",Zugname," hat den KP überfahren!")
    (Die neue Codezeile macht auch in älteren Versionen nichts "kaputt". Nur der Zugname kann natürlich dann nicht ermittelt werden, die Variable Zugname bleibt dann nil)


    Ebenfalls neu (vielleicht auch schon nicht mehr ganz so neu, ich habs nicht bei jeder Version getestet): Wenn man in der Lua-Zeile im Kontaktpunkt ein Komma eingibt, bleibt das auch ein Komma, und wird nicht mehr in einen Punkt verwandelt. Somit ist die Rückumwandlung in meinem "Code-Schnipsel" nicht mehr erforderlich. Die folgende Code-Zeile verzichtet auf die "Rückumwandlung" und lässt daher auch gewollte Punkte bestehen:

    Code
    1. 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})


    Vorraussetzung dafür ist aber natürlich, dass auf der Anlage keine alten KPs existieren, wo EEP (damals noch) die Kommas durch Punkte ersetzt hat. Wenn die nicht zurückübersetzt werden (einmalig von Hand oder jedes Mal neu im Code), gibt es Fehlermeldungen beim Versuch, sie aufzurufen.



    Auf meiner Homepage habe ich die entsprechende Seite natürlich auch angepasst und mit noch ein paar weiteren Hinweisen versehen.


    Viele Grüße
    Benny

  • Wusste ich's doch. Eine wenig Geduld und unser Benny findet eine Lösung. DANKE!


    LG Wolfgang

    EEP 16.1 Expert 64 bit Patch 2, 6,9-15, Modellkatalog, PlanEx 2.72, Kontakt-Explorer 9 64bit, Home-Nostruktor 8, ResuEx 2.81

    WIEDER IN BETRIEB: Acer Aspire 8951G, ..., NVIDIA Geforce GT 555M, Win 10 Professional 64bit
    ZUR ZEIT DEFEKT: ASUS A95VJ, Intel Core i7-3610QM 4x 2.3 GHz, 24GB Ram, NVIDIA Geforce GT 635M, Win 10 Professional 64bit
    AMD Phenom II X6 1070T 3GHz, 16 GB Ram, Win 7 Home Premium 64bit SP1, ASUS Matrix-HD7970-P-3GD5 Radeon 3GB, 2x27" Asus

  • Hallo Benny,


    auch von mir ein dickes DANKESCHÖN an dich.


    :aq_1: :thumbsup_1:

    Gruß

    Uwe

    :aq_1:

    _______________

    EEP 6.1 classik / EEP 14.1 Patch 2 PlugIn 1 / EEP 15.1 Patch 2 PlugIn 1 / EEP 16.1 Patch 2 PlugIn 1

    EEP MK, HNos 14.0 + 15.0 DEV, Blender 2.79b, Substance Painter, GIMP 2.10
    Win 10 x64 Pro, Version 1809, Desktop, i7-8700K, Asus Z370 PRO, Nvidia GTX 1060 6GB, 32GB
    Win 10 x64 Pro, Version 1809, Laptop, i7-8750H (6x4,1GHz), Nvidia GTX 1060M 6GB, 32GB
    Bei allen PCs Virenscanner G-DATA

  • Danke Benny!! :aq_1:

    Mit den besten Grüßen aus Mülheim an der Ruhr

    :aq_1:

    Hartmut


    EEP 16.1 Patch 4, EEP 15.1 Patch 2, EEP Modell-Explorer
    MS Windows 10, Version 1903
    Intel Core i7-4770 CPU 3,40GHz, 8GB RAM, 128GB SSD, 2000GB HDD, NVIDIA GeForce GTX 760 1,5GB

  • Hallo Benny,


    ich habe deinen neuen Code-Schnipsel in meinen Anlagen eingepflegt,
    es funktioniert alles bestens, auch kann der Zugname in der Funktion
    angezeigt bzw. verwendet werden.


    Meinen aller herzlichen Dank, ohne deinen Code wäre vieles garnicht
    programmierbar.


    Gruß Parry36

    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,
    Deine Code-Schnipsel helfen über viele kleine Hürden, besonders wenn man im Programmieren selbst nicht so fit ist.

    Viele Grüße
    Berthold


    Lenovo LegionY720 i7 2,8GHz, 16GB 64bit, NVIDIA GeForce GTX 1060 - Win10Home

    EEP14.1 Exp (64) P2 U1, EEP15.1 Exp Patch2 Plugin 1,EEP16.1 Patch4,Plugin 1, PlanEx 3.2, SpDrS60 mit Ergänzungen, Modellkatalog, Modellkonverter,Tauschmanager

  • Danke Benny...


    G O L D G O L D G O L D G O L D :bp_1: :aq_1: :bj_1: :be_1:

    EEP 11, up 3, Plug 2
    EEP 6 & 9 Expert, EEP 10. Modellkonverter 1.3.6, Plan Ex 2.9, EEP Rechner, Modelltauscher.
    Anlagen: "Schiefe Ebene" und "Vorstadt"
    MacBook Pro i7, 2.6 Ghz

  • Auch ich möchte hier mein Dank hinterlassen, das Script ist bereits in Verwendung und löst viele Aufgaaben mit sich. Klasse!
    Als frührer JavaScript-Programmierer hatte es mich schon gewundert warum es bei mir nicht funktionieren möchte, wie ich sehe musste man das hier durch ein kleines Script lösen, gut das ich auf das hier gestoßen bin :) :bo_1: :thumbsup_1:

    Viele Grüße,
    Damian Rutkowski


    Acer Aspire 5750G, Intel® Core™ i5-2430M 2.4GHz with Turbo Boost up to 3.0GHz, NVIDIA® GeForce® GT 540M, Up to 4095 MB TurboCache™, 8 GB DDR3 Memory, 8 GB DDR3 Memory
    EEP 6, EEP 11.3 mit Plug-In: 2, 3, EEP 13 ohne Updates und Plug-Ins, EEP 13.2 mit Plug-In 2, EEP-Modellkonverter 1.3.7

  • Hallo Benny,


    ich bin erst seit einigen Wochen in EEP 11 und dann EEP 12 unterwegs. Ich habe nach so einer Lösung gesucht.


    Funktioniert prima.


    Ich kann mir dadurch eine Menge Schreibarbeit sparen.


    Danke :aq_1:


    Beste Grüsse


    Peter

    EEP 11 (Plugin 1 bis 3)
    EEP12

  • Hallo!
    Alles Bestens, bis plötzlich Kontakte keine Eingabe mit Parameter zulies


    [Blocked Image: http://up.picr.de/27170244al.jpg]
    da gehts noch(ohne Klammer)


    [Blocked Image: http://up.picr.de/27170263rs.jpg]
    Klammer mit oder ohne Parameter == schwarz
    [Blocked Image: http://up.picr.de/27170282gk.jpg]
    klick
    [Blocked Image: http://up.picr.de/27170289nb.jpg]
    klick
    [Blocked Image: http://up.picr.de/27170293ng.jpg]
    und Hintergrundbild


    Davor liesen sich Weichen oder Signale nicht mit Strg-Maustaste schalten!
    Im Radarfenster schon.
    Nur Neustart von EEP heilte dieses Wunder.(kein smiley)


    Grüsse aus Wien
    Heinrich


    PC:
    Intel(R) Core(TM) i7-6700 CPU @ 3.40 GHz 3.41 GHz
    8 Ram win 10 64 Bit System
    NVIDIA GeForce GTX 970


    Notebook:
    Intel(R) Core(TM) i3-2330M CPU @ 2.20GHz 2.20GHz
    RAM 4 GB, Windows 7, 64 Bit System
    NVIDIA GeForce GT 555M


    EEP8 Expert mit allen Patches
    EEP9 Expert mit allen Patches
    EEP X Expert mit Patch 1, Patch, 2 Patch 3 und Modellupdate, Plugin 1, Plugin2
    EEP11 download
    EEP12 download

    PC:
    intel(R) Core(TM)2 Quad CPU Q8300 @2.50Ghz 2.50GHz
    RAM 4 GB, Windows 7, 32 Bit System
    NVIDIA GeForce GT 240
    Notebook:
    Intel(R) Core(TM) i3-2330M CPU @ 2.20GHz 2.20GHz
    RAM 4 GB, Windows 7, 64 Bit System
    NVIDIA GeForce GT 555M


    EEP8 Expert mit allen Patches
    EEP9 Expert mit allen Patches
    EEP X Expert mit Patch 1, Patch, 2 Patch 3 und Modellupdate, Plugin 1, Plugin2

  • Hallo!
    Immer?
    Habe soeben im 2D, Klammer mit Parameter erfolgreich eingegeben. Freude! Fuktioniert!
    Kontaktpunkt in 3D kopiert == flusch. Siehe oben.


    Gruss aus Wien
    Heinrich

    PC:
    intel(R) Core(TM)2 Quad CPU Q8300 @2.50Ghz 2.50GHz
    RAM 4 GB, Windows 7, 32 Bit System
    NVIDIA GeForce GT 240
    Notebook:
    Intel(R) Core(TM) i3-2330M CPU @ 2.20GHz 2.20GHz
    RAM 4 GB, Windows 7, 64 Bit System
    NVIDIA GeForce GT 555M


    EEP8 Expert mit allen Patches
    EEP9 Expert mit allen Patches
    EEP X Expert mit Patch 1, Patch, 2 Patch 3 und Modellupdate, Plugin 1, Plugin2

  • Davor liesen sich Weichen oder Signale nicht mit Strg-Maustaste schalten!


    Da lief EEP schon nicht mehr rund.
    Dein Problem mit der Parametereingabe war vermutlich nur noch ein Folgefehler.


    Denn selbst, wenn man dabei etwas falsch macht (z.B. Bennys Codezeile vergisst oder das Skript nicht einmal ausführt, bevor man Parameter eingibt) darf das nur eine Fehlermeldung im Ausgabefenster geben und keinesfalls einen Absturz.


    P.S.: Signale und Weichen müssen aber mit Shift + Maustaste geschaltet werden. Nicht mit Strg + Maustaste.