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

Achte bitte darauf, dass Du mit deinem Thema bzw. mit deiner Frage im richtigen Bereich bist.
Die Bereiche sind: Einstellungen im Forum, EEP aktuell ab EEP7 , Splines, Rollmaterialien, Immobilien, Landschaftselemente, Signale und Schaltung, Anlagenvorstellungen, Schnappschüsse Konstrukteure, EEP Treffen , Laberecke, Online - Handbuch EEP Vielen Dank für die Unterstützung das Forum übersichtlich zu halten.
Bilder/Fotos aus dem Internet sind nur als Link gestattet. Eigene Fotos, also Fotos aus dem realen Leben, sind erstens mit Eigenes Bild als Quellenangabe zu kennzeichnen und zweitens nur als Dateianhang im Beitrag zulässig. Bilder ohne Quellenangaben und Bilder dessen Quelle das Internet wie z. B. Google ist, werden gelöscht.
  • 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

  • Wenn Lua diese Änderung bemerkt, dann können inzwischen schon wieder drei Züge über vier KPs gefahren sein und fünf Variablen verändert haben. Schon passt nichts mehr zusammen.

  • 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

  • Zitat

    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
    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
    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 15, EEP 17

    ASUS Gaming Notebook ROG Strix G814JV, 1TB + 2 TB SSD, RTX 4060, 18 ", Win11 Home,
    AMD Phenom II X6 1070T 3GHz, 16 GB Ram, Win 10Home, ASUS Matrix-HD7970-P-3GD5 Radeon 3GB, 2x27" Asus

  • Hallo Benny
    Da möchte ich mich auch bedanken. :aq_1:

    Rechner:Acer Predator i7-3,9GHz,Geforce GTX 1070,16GB-Ram Win.10 EEP 4-17.1

    Laptop Acer Nitro 5 i5-3,5GHz GeforceRTX EEP17

  • Hallo Benny,

    auch von mir ein dickes DANKESCHÖN an dich.

    :aq_1: :thumbsup_1:

    Gruß

    Uwe

    :aq_1:

    _______________

    EEP 6.1 classik / EEP 15.1 Patch 2 PlugIn 1 / EEP 16.4 Patch 2 PlugIn 1/2/3/4 / EEP 17.0 Patch 3

    EEP MK, HNos 15.0 + 16.0 DEV, Blender 2.79b, Substance Painter, GIMP 2.10
    Win 11 x64 Pro , aktuelle Version, Desktop, i7-8700K, Asus Z370 PRO, Nvidia GTX 1060 6GB, 32GB
    Win 11 x64 Pro, aktuelle Version, 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

    EEP17.2 Plugin 1, EEP Modell-Explorer, EEP_Modell Katalog.
    MS Windows 11 Home
    Intel Core i5-9400 CPU 2,9GHz, 16GB RAM, 512GB SSD, 2000GB HDD, NVIDIA GeForce RTX 2070 AERO 8GB

  • Danke Benny.

    Intel Core I5 3550; RAM 24 GB; Windows 10 (64 Bit),
    Nvidia Geforce GTX 960 (4 GB)
    EEP Modelconverter, Modell-Explorer, Texturenmultiplier, Task-Memorizer, Status-Memorizer, Modell-Katalog
    EEP 6.1, EEP 16 Update 4, EEP 17 Update 2 Patch 1; Plugins: 1

  • 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


    Mein System+EEP

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

    EEP17, P1, Plugin 1,2 PlanEx 3.2, SpDrS60-3, Modellkatalog, Modell Explorer, Modellkonverter, EEP-TauschManager2

  • 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 16 mit allen Updates, Patches und Plug-Ins (stets aktuell gehalten)

  • 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

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

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

    [Blockierte Grafik: http://up.picr.de/27170263rs.jpg]
    Klammer mit oder ohne Parameter == schwarz
    [Blockierte Grafik: http://up.picr.de/27170282gk.jpg]
    klick
    [Blockierte Grafik: http://up.picr.de/27170289nb.jpg]
    klick
    [Blockierte Grafik: 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.