Frage zu Lua

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.
  • Ein freundliches „Hallo“ in die Runde,

    vielleicht kann mir wieder jemand helfen.

    Gestern habe ich einige Beiträge gelesen, die sich damit befassen, LUA-Scripte farbig zu gestalten. Mitten in dieser „Lesestunde“ brach dann mein toller Internetanschluss zusammen, und nun kann ich diese Beiträge nicht wiederfinden.

    Herausgeschrieben habe ich mir diesen Dreizeiler, Zitat:

    „Die Farben für die EEP-Funktionen kannst du über Einstellungen --> Stile --> Lua

    im Bereich FUNC1/2/3 ändern, ich selbst habe dazu die FUNC2 genutzt,

    dort mußt du die Funktionen namentlich eintragen.“

    Gerne hätte ich einen Hinweis, wo ich suchen könnte, diese farbliche Gestaltung möchte ich auch gerne umsetzen.

    Viele Grüße aus dem Großraum Bremerhaven

    Hans-Jürgen (HJM99)

    Computer: PC mit Windows 10 x 64 Home, Version 22H2, aktuelle #: 19045.4239

    Prozessor: AMD A10-6600K, 4,1 - 4,4 GHz, 2 Kerne, 4 Prozessoren,

    Grafik: Radeon RX 550 Sapphire Pulse / 4 GB,

    Speicher: 16 GB RAM,

    Festplatten: 1 TB SSD, 2 TB SSD

    HD-Monitor: Diagonale 60 cm ,

    EEP-Software: EEP 6.1 Classic, EEP X platinum, EEP 11, EEP 13.2 Expert (x64), EEP 14.1 Expert (x64),

    EEP 15.1 Expert (x64), EEP 16.4 Expert (x64), EEP 17.3 Expert (x64) Plugin-1, 2, HN 14.0, HN 16.0

  • diese farbliche Gestaltung möchte ich auch gerne umsetzen.

    Der in EEP enthaltene Lua Editor kann das nicht.

    Andere Editoren machen es automatisch.

    Die meisten verwenden den Editor namens Notepad++

    Ein weiterer beliebter Editor ist ZeroBrane Studio

    Beide sind kostenlos.

    In dem von dir zitierten Thread ging es darum, Notepad++ dahingehend zu erweitern, dass es außerdem auch die EEP Befehle farbig hervorhebt. Die sind ja nicht Teil des Lua Befehlssatzes, sondern Funktionen, die in EEP integriert wurden.

    Der Thread ist hier:

    Neue Twitch-Sendung "Rundum-Sorglos-Paket" mit EEP und Lua

  • Hallo Goetz,

    habe ich so gemacht, damit ist meine Frage hilfreich beantwortet.

    Danke dafür,

    Gruß Hans-Jürgen

    Computer: PC mit Windows 10 x 64 Home, Version 22H2, aktuelle #: 19045.4239

    Prozessor: AMD A10-6600K, 4,1 - 4,4 GHz, 2 Kerne, 4 Prozessoren,

    Grafik: Radeon RX 550 Sapphire Pulse / 4 GB,

    Speicher: 16 GB RAM,

    Festplatten: 1 TB SSD, 2 TB SSD

    HD-Monitor: Diagonale 60 cm ,

    EEP-Software: EEP 6.1 Classic, EEP X platinum, EEP 11, EEP 13.2 Expert (x64), EEP 14.1 Expert (x64),

    EEP 15.1 Expert (x64), EEP 16.4 Expert (x64), EEP 17.3 Expert (x64) Plugin-1, 2, HN 14.0, HN 16.0

  • das Signal (z.B. bei Ausfahrt eines Zuges aus einem Bahnhof) soll erst auf hp1 gestellt werden, wenn der Bahnübergang tatsächlich geschlossen ist.

    Hallo Michl,

    deinen Wunsch habe ich erst jetzt gelesen.

    Wenn du die Anlage Wildungen samt der Wega Erweiterung besitzt, dann findest du dort im Bahnhof Wega genau das: Ausfahrten via BÜ lassen sich nur dann schalten, wenn der BÜ vollständig geschlossen ist.

    Auf Wunsch beantworte ich gerne Fragen zu dem Skript.

    die BÜ Sequenz beginnt in Zeile 624 (Standardversion) bzw. Zeile 617 (Version für HK1 Signale)

    Die Signalsteuerung dazu findest du ab Zeile 400.

    Viele Grüße
    Götz

  • Hallo Götz,

    nein, Wildungen habe ich leider noch nicht, werde ich mir aber demnächst mal zulegen.

    Aber danke für den Hinweis.

    Liebe Grüße aus Nürnberg!:av_1:

    Ich hatte noch nie was mit Drogen zu tun, doch dann bekam ich EEP in die Hände und Trend wurde zu meinem Dealer.....:ae_1:

  • Zurück zur ursprünglichen Frage: Wie kann man in EEP mit Lua Aufgaben zur späteren Ausführung einplanen?

    Eine der wichtigsten Programmierregeln ist, nie und niemals eine wartende Endlosschleife zu programmieren - denn dann kann die Maschine nicht anderes während der Wartezeit tun.

    Das gilt insbesondere, wenn das Programm in einer Umgebung läuft in der viele Ereignisse quasi gleichzeitig laufen sollen: Züge fahren, Weichen schalten, Lua Funktionen starten, usw.

    Bei EEP gibt es praktischerweise bereits eine nicht-wartende Endlosschleife EEPMain, die alle 0,2 Sekunden aufgerufen wird. Man muss also (wie in einem vorherigen Beitrag von JuergenSchm beschrieben) nur dafür sorgen, dass

    • Aufträge für spätere Ausführung mit ihren gewünschten Zeitpunken geeignet gespeichert werden und
    • in EEPMain geprüft wird welche Aufträge zur Ausführung anstehen.
    • Diese werden dann gestartet und danach aus der Liste der Aufträge entfernt.

    In Lua wird alles (was nicht ein einfacher Wert ist) in Tabellen gespeichert, also kann man auch für diese Liste von Aufträgen eine Tabelle anlegen, deren Einträge

    • den gewünschten Zeitpunkt und
    • die auszuführende Funktion enthalten.

    Als Zeitpunkt kann man z.B. folgende Informationen nutzen:

    • Die berühmte Zählvariable I , die im Standard-Skript in EEPMain jeweils um 1 erhöht wird. (Man kann natürlich auch einen anderen Variablennamen wählen). Damit kann man einen zeitliche Auflösung von 0,2 Sekunden erreichen, weil EEPMain ja nach jeweils dieser Zeit wieder aufgerufen wird.
    • Die Variable EEPTime ist noch einfacher zu verwenden, da man dann keine spezielle Zählvariable verwalten muss. Diese Variable bietet jedoch nur eine Auslösung von 1 Sekunde an.
    • Die Lua Funktion os.clock() liefert direkt eine Sekunden-Angabe mit Nachkommastellen. Damit kann dann eine Auflösung von 0,2 Sekunden erreicht werden. Diese Funktion wird im Beispiel unten verwendet.

    Die Funktion kann eine bereits im Skript definierte Funktion sein oder man kann sie dynamisch bei der Speicherung der Aufgabe erzeugen - das ist ein cooler Lua-Trick, der im Beispiel unten verwendet wird.

    Eine Experimentieranlage dazu ist schnell aufgebaut: In eine neue, leere Anlage habe ich dazu ein einzelnes Straßenstück mit einer einzelnen Ampel eingefügt. Diese Ampel wird dann mit folgenden Lua-Skript einmalig zu definierten Zeitpunkten geschaltet. Die einzelnen Aufgaben bestehen in diesem Beispiel also aus den Zeilen mit EEPSetSignal - alles andere dient zur Verwaltung der Zeitsteuerung.

    Eine kleine Übung für die Leser: Wie sieht ein Skript aus, bei dem die Ampel nicht einmalig, sondern durchlaufend geschaltet wird?

    Tipp: Dazu könnte man z.B. statt erledigte Aufgaben zu löschen den Zeitstempel dieser Aufgaben neu setzen. Oder man legt neue Einträge unter Bezug auf die vorhandene Funktionen an. Oder man macht etwas ganz anderes. Bin gespannt wie eure Lösungen und Optimierungen des Programs aussehen.

    Schönen Gruß

    Frank

    Online EEP-Tools: Gleisplan-Programm / Inventar-Programm

    EEP 15 ab Mai 2019 und EEP 17 ab Nov. 2021
    EEP 6 in 2011 und EEP 13 ab Januar 2019 sind eingemottet
    XMP Core 17 Laptop mit Intel Core i7-10870H 8-Core-CPU, 16 GB Arbeitsspeicher, NVIDIA GeForce RTX 3060 Laptop GPU mit DirectX 12

  • Hier nun eine vereinfachte Version meiner modularisierten Zeitsteuerung.

    • Ein Zeitplan ist eine Kette bzw. ein Netz von Aufgaben (Zuständen)
    • Jede Aufgabe (Zustand) wird durch die eine Funktion repräsentiert
    • In den Funktionen wird die jeweils nächste Aufgabe (bzw. bei einer Verzweigung mehrere Aufgaben) eingeplant
    • Die Funktionen können auch Parameter haben, so dass sie wiederverwendet werden können (im Beispiel also für mehrere Ampeln)
    • Aufgaben, die nicht erledigt sind, werden erneut ausgeführt (das ist nur angedeutet)

    Online EEP-Tools: Gleisplan-Programm / Inventar-Programm

    EEP 15 ab Mai 2019 und EEP 17 ab Nov. 2021
    EEP 6 in 2011 und EEP 13 ab Januar 2019 sind eingemottet
    XMP Core 17 Laptop mit Intel Core i7-10870H 8-Core-CPU, 16 GB Arbeitsspeicher, NVIDIA GeForce RTX 3060 Laptop GPU mit DirectX 12

  • HalloFrank frank.buchholz

    diese Thread ist zwar schon älter, habe ihn aber bei der Suche nach Zeitverzögerung gefunden.

    Ich habe mich die letzten Tage damit beschäftigt, und habe Ampelschaltungen und andere Versuche damit erledigt. Das klappt auch schon soweit gut.

    Habe aber dazu eine Frage. Bis jetzt läuft das Script ja in der main() von Anfang mit.

    Ich würde auch gerne u.a. eine Aufgabe von einem KP für eine bestimme Aktion starten. Gibt es in dem Script einen Punkt, wo ich die Start Zeit eintragen kann, oder wie ich es über einen KP starten kann.

    Ich bin kein Lua Fachmann, und benötige immer mal Hilfe für einen Punkt.

    Danke für einen Tip und für das neue Jahr alles Gute.

    Gruß

    Peter

    Betriebsystemname: Microsoft Windows 11 Pro

    Prozessor:Prozessor AMD Ryzen 7 7700X 8-Core Processor, 4501 MHz, 8 Kern(e), 16 logische(r) Prozessor(en)

    PC:RAM 32 GB, Name NVIDIA GeForce RTX 4070 Ti

    EEP 17 mit allen Plug ins und Patches

    Modelkonverter, Home-Nostruktor 16.0, Modellkatalog, Bodentextur Tool

  • In dem Skript oben wird initial genau eine einzige (Dauer)-Aufgabe eingeplant: Das geschieht in diesem Beispiel über den Aufruf von Aufgabe_einplanen außerhalb der EEPMain in Zeile 177.

    Dieses spezielle Beispiel ist eine Dauer-Aufgabe, da jede der daran beteiligten 4 Aufgaben auch wiederum reihum die nächste Aufgabe erneut einplant.

    In ähnlicher Weise könnte man irgendwelche anderen Aufgaben einplanen, egal ob in außerhalb oder innerhalb von EEPMain oder innerhalb irgendeiner anderen Funktion. Insbesondere kann man auch solche Aufrufe von Aufgabe_einplanen auch in EEPOnSignal_x(), EEPOnSwitch_x() oder jeder von einem KP aufgerufenen Funktion geschehen.

    1. Zuerst definiert man eine Funktion Aufgabe_XX ähnlich zu function Aufgabe_01( Parameter ), die das tut, was die Aufgabe machen soll.

    2. Dann ruft man dort wo es geschehen soll Aufgabe_einplanen({ ... }) auf und plant damit die Aufgabe ein. In eigenen Funktionen, EEPOnSignal_x() oder EEPOnSwitch_x() kann man das direkt hinschreiben während es für einem Kontaktpunkt wohl übersichtlicher ist, eine weitere Funktion zu definieren. Das sieht dann z.B. etwa so aus wobei man in den Kontaktpunkt dann Aufgabe_KP01 einträgt:

    Online EEP-Tools: Gleisplan-Programm / Inventar-Programm

    EEP 15 ab Mai 2019 und EEP 17 ab Nov. 2021
    EEP 6 in 2011 und EEP 13 ab Januar 2019 sind eingemottet
    XMP Core 17 Laptop mit Intel Core i7-10870H 8-Core-CPU, 16 GB Arbeitsspeicher, NVIDIA GeForce RTX 3060 Laptop GPU mit DirectX 12

  • Hallo Frank frank.buchholz

    danke erstmal für den Hinweis. Dann will ich mal probieren, ob ich es hinbekommen.

    Gruß

    Peter

    Betriebsystemname: Microsoft Windows 11 Pro

    Prozessor:Prozessor AMD Ryzen 7 7700X 8-Core Processor, 4501 MHz, 8 Kern(e), 16 logische(r) Prozessor(en)

    PC:RAM 32 GB, Name NVIDIA GeForce RTX 4070 Ti

    EEP 17 mit allen Plug ins und Patches

    Modelkonverter, Home-Nostruktor 16.0, Modellkatalog, Bodentextur Tool