Lua-Skript zur Anfahr- und Bremssteuerung (ABS)

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.
  • Entsprechend dem Wunsch aus der Diskussion um meine Anlagensteuerung habe ich ein Skript erstellt, das das Anfahren und Bremsen der Züge wesentlich realistischer ablaufen lässt als im normalen EEP. Auch der mittige Halt am Bahnsteig, bei dem die Zugmitte an einem definierten Punkt zumm Halten kommt, ist mit diesem Skript möglich. Ich habe die Dateien soeben an den Admin geschickt, dieses Skript dürfte demnach in Kürze verfügbar sein.

    Ich habe eine kleine Demo-Anlage hinzugefügt, auf der man sich die verschiedenen Möglichkeiten, die ABS bietet, ansehen kann. Gleichzeitig ist dies als eine Ergänzung zu der umfangreichen Betriebsanleitung gedacht, damit man an einem ausgeführten Beispiel nachvollziehen kann, wie die Aufrufe erfolgen müssen und welche Daten erforderlich sind.

    Das Skript stelle ich der Community hier gerne zur Verfügung. Wesentlicher Punkt der Lizenz: Man möge die Betriebsanleitung lesen und beachten!

    Ich stelle dieses Skript prinzipiell kostenlos zur Verfügung. Wenn es jedoch in Kaufanlagen verwendet wird, hätte ich gerne einen Gutschein für die Vollversion der Anlage im Shop.

    Viel Spaß einstweilen.

    Norbert

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

    Einmal editiert, zuletzt von BMWFan (11. Januar 2021 um 09:21)

  • vielen Dank für deine Mühen Norbert. Sobald das Skript zur Verfügung steht, werde ich versuchen, mich in dieses Thema rein zu fuchsen.

    Viele Grüße

    Lothar

    EEP6, EEP17.2 - PC: Win 11 Pro 64 bit , SSD 2,5 SA3 Samsung 850 EVO, MB Asus Z390-F Gaming , CPU Intel Core i9- 9900k Coffee Lake, ASP 64 GB RAM , GK GeForce RTX 2080Ti Gaming Pro

  • Das Paket vom BMWFan für Euch..

    Man möge die Betriebsanleitung lesen und beachten!

    Gruß icke

  • Genial!

    Zum Glück habe ich die Anleitung gelesen :ae_1:, ansonsten hätte ich die herrliche Spitze verpasst: "Erfahrungsgemäß ergeben sich unvermeidliche Ungenauigkeiten von vielleicht +/- 5 m, was aber auch in der Großtechnik außerhalb Japans durchaus vorkommt.":an_1:

    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 BMWFan,

    bei der Programmierung habe ich immer großen Respekt vor versteckten globalen Variablen, die zunächst ganz harmlos, später bei der gemeinsamen Nutzung mit anderen Modulen jedoch zu subtilen Fehlern führen können. Wenn man globale Variablen vermeiden will (und durch Modul-Variablen ersetzen will), muss man erst einmal wissen welche es gibt - und dann will ich auch mit Notepad++ bequem Copy&Paste aus dem EEP-Log nutzen wollen. Dazu verwende ich in meinen Test-Anlagen die beiden Skripte PrintToFile_BH2 von Benny (BH2) und ShowGlobalVariables von mir. Das Lua-Skript von Demo_ABS sieht damit bei mir so aus:

    Lua: Demo_ABS
    -- Kopiere EEP-Log in Datei, siehe https://emaps-eep.de/lua/printtofile
    require("PrintToFile_BH2"){file="Resourcen/Anlagen/Demo_ABS/output.txt", output=2}
    
    dofile ("C:/EEP15/Resourcen/Anlagen/Demo_ABS/Demo_ABS_Main.lua")
    
    -- Zeige globale Variablen, siehe https://github.com/FrankBuchholz/EEP/blob/master/ShowGlobalVariables.lua
    require('ShowGlobalVariables')()

    Beispielsweise lassen sich die Variablen iiABSJobCounter (wenn man die Prüfung innen in ABS() macht) ,cZ, und ttTimeLine recht einfach local machen.

    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

  • Danke für die Tipps, Frank frank.buchholz. Ich werde das gleich mal ausprobieren.

    ttTimeLine ist keine Größe in ABS sondern in dem Steuerprogramm der Anlage.

    cZ Dass dies zu einer globalen Variablen geworden ist, ist mir durch die Lappen gegangen. Sonst hätte Sie auch einen Namen, wie ich sie für globale Symbole verwende. Werde ich in der nächsten Version ändern.

    iiABSJobCounter Ich weiß, dass ich das auch hätte in meinem Skript prüfen können, ob gerade Aufgaben anliegen. Aber so wollte ich dem Nutzer zeigen, dass dieses Teil nicht immer im Eingriff ist. Und ihm die Möglichkeit geben, Aufrufe in seinem Skript von der Anzahl der offenen Aufträge in ABS abhängig zu machen, indem er auch auf diese Variable zugreift und sagen wir "planbare Operationen" nur dann ausführen lässt, wenn nicht allzu viele ABS-Jobs anliegen. Ich weiß nämlich nicht so genau, wie groß die Belastung bei großen Anlagen werden kann, wenn -zig Züge unterwegs sind.

    Das Konzept von "Modulvariablen" kenne ich nicht. Ich kenne globale Variable, die im gesamten Skript sichtbar sind und lokale Variable, die nur in dem Chunk sichtbar sind, in dem sie definiert sind. Gibt es eine Möglichkeit, dass Variable nur in bestimmten Funktionen sichtbar sind? Außer einer direkten Übergabe natürlich? Etwa wie im Fortran, wo man Blöcke definieren konnte, die nur in Funktionen zugänglich waren, in denen man diesen Block refertenziert hatte. Das würde die Zahl der globals drastisch reduzieren.

    Viele Grüße

    Norbert

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

  • Und wo findet man das Skript ShowGlobalVaraibles?

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

  • Hier. Steht im #6Beitrag in der LUA: Demo_ABS in Zeile 6.

    Es grüßt aus dem schönen Westerwald

    Michael

    Spoiler anzeigen

    Desktop: AMD Ryzen 7 7800X3D (4,2 GHz) 64 GB Speicher Gainward GeForce RTX 4070 Ti Panther Windows® 11 Pro 64bit

    Notebook: Intel Core(TM) i7-97050h (2,6 GHz) 16 GB Speicher Nvidia GeForce GTX1650 Windows® 11 Home Premium 64bit

    EEP 6, EEP11, EEP13 mit Plugin 1 + 2, EEP14 mit Plugin 1, EEP15.1 mit Plugin 1, EEP16.4 mit Plugin 1 + 2 + 3 + 4, EEP 17.3 mit Plugin 1 + 2 + 3

    Modellkatalog, HomeNos 13 - 16, Tauschmanager

  • oh ja, Tomaten auf den Augen. Danke, Michael.

    Viele Grüße

    Norbert

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

  • Ich kenne globale Variable, die im gesamten Skript sichtbar sind und lokale Variable, die nur in dem Chunk sichtbar sind, in dem sie definiert sind. Gibt es eine Möglichkeit, dass Variable nur in bestimmten Funktionen sichtbar sind?

    Hallo Norbert :)

    selbstverständlich. Lokale Variablen sind immer in der Entität sichtbar, in der sie definiert sind. Das kann eine Funktion, eine Schleife, oder auch ein Modul sein. Auch Funktionen selbst können übrigens lokal sein. Ich nutze das ständig. Siehe dazu z.B. Programming in Lua : 4.2.

    Gruß Ingo

  • schlingo

    Das tu ich auch. Mir geht es darum, ob es einen Weg gibt, eine Variable zum Beispiel nur in den Funktionen meines Skripts sichtbar zu haben - und außerhalb dieser Funktionen nicht, so dass sie in anderen Chunks des Users nicht sichtbar sind.

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

  • ob es einen Weg gibt, eine Variable zum Beispiel nur in den Funktionen meines Skripts sichtbar zu haben - und außerhalb dieser Funktionen nicht

    Hallo Norbert :)

    ich kenne jetzt Dein Skript nicht. Aber meine FS-Steuerung besteht aus einem Modul (d.h. also einer Lua-Datei), das ich mit require einbinde. In diesem Modul habe ich am Anfang lokale Variablen definiert, die dann nur in diesem Modul verfügbar sind. Das Modul enthält auch interne, lokale Funktionen, die für den User nicht sichtbar sind. Ein kleiner Auszug:

    Gruß Ingo

  • schlingo

    Ich sehe, es gibt Raum für Verbesserungen. Ich habe immer nach Möglichkeiten gesucht, die Variablen in die Funktionen entsprechend zu definieren. Dass das hier anders herum geht, dass ich die Funktionen als lokal definieren kann, daran hatte ich nicht gedacht.

    Ich werde wohl Kapitel 15 in "Programming in Lua" nochmal genauer betrachten müssen.

    Viele Grüße

    Norbert

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

  • dass ich die Funktionen als lokal definieren kann, daran hatte ich nicht gedacht.

    Hallo Norbert :)

    denk einfach daran, dass auch Funktionen nichts anderes als Variablen sind.

    Ich werde wohl Kapitel 15 in "Programming in Lua" nochmal genauer betrachten müssen.

    Nobody is perfect. Man lernt nie aus. Das weiß ich aus eigener Erfahrung :ae_1:

    Gruß Ingo

  • Hallo Icke, ich habe Ihr Demo_ABS ausprobiert, das sehr interessant zu sein scheint, aber wenn ich es starte, nachdem ich die Anweisungen (ich denke richtig) Ihres erklärenden PDFs im Ereignisfenster befolgt habe, erscheint nach dem Loslassen des ersten consist der Fehler << Error running function 'ABSGetLength (Zugname, "Start")': attemp to call a nil value >>.

    Würden Sie so freundlich sein, mir zu sagen, was ich falsch mache?

    Vielen Dank und beste Grüße.


    Hola Icke he estado probando su Demo_ABS que me parece muy interesante pero al ponerla en marcha, después de seguir las instrucciones (creo que correctamente) de su PDF explicativo en la ventana de eventos, tras liberarse el primer consist, aparece el error << Error running function 'ABSGetLength (Zugname, "Start")': attemp to call a nil value >>

    ¿Sería tan amable de decirme que estoy haciendo mal?

    Gracias y un saludo muy cordial.

    EEP 6-13-14-15-16-17

    HN 5-14-16

    ModellKatalog, EEP-Bilder Scanner

    Lenovo Legion I15 "; Intel® Core ™ i7-9750H 2,6 Ghz (12 CPU); RAM 32 GB; Nvidia GeForce RTX2060 6 Gb; SSD 1,5 Tb; W11 Pro; Direct 12

    Lenovo T480; Intel® Core ™ i7-8550U 2 Ghz; RAM 16 GB; SSD 1 Tb; W11; DirectX 12

  • Hola Icke de nuevo, disculpe por haberle involucrado en el asunto, ya que fue usted el que puso a disposición de la comunidad la citada demo ( script Lua para control de arranque y frenado (ABS) ).

    L.eyendo más he averiguado que el autor de la demo fue BMWFan y que hay un hilo abierto sobre él en Signaling System, Lua and Controlling , no si sería posible trasladar este hilo mío al que le menciono.

    Si no fuera posible, replantearé la pregunta en el foro específico.

    Gracias y disculpe las molestias.

    EEP 6-13-14-15-16-17

    HN 5-14-16

    ModellKatalog, EEP-Bilder Scanner

    Lenovo Legion I15 "; Intel® Core ™ i7-9750H 2,6 Ghz (12 CPU); RAM 32 GB; Nvidia GeForce RTX2060 6 Gb; SSD 1,5 Tb; W11 Pro; Direct 12

    Lenovo T480; Intel® Core ™ i7-8550U 2 Ghz; RAM 16 GB; SSD 1 Tb; W11; DirectX 12

  • Hallo Javier

    da geht es um meine Demo-Anlage. (Sorry für die späte Antwort, war einige Zeit offline).

    Die Funktion ABSGetLength() ist die erste Skriptfunbktion, die aufgerufen wird - und die findet Dein System nicht. Bitte überprüfe, ob alle Skriptteile so gespeichert sind und die Einträge zu den Pfaden richtig sind. Siehe seite 2 und 3 der Anleitung.

    Leider kann ich kein Spanisch. Ich hoffe Du kannst mit der Google-Übersetzung etwas anfangen. Alternativ wäre Englisch möglich.


    Hola javier se trata de mi sistema de demostración. (Perdón por la respuesta tardía, estuve fuera de línea durante algún tiempo). La función ABSGetLength () es la primera función de script que se llama, y su sistema no puede encontrarla. Compruebe si todas las partes del script se guardan de esta manera y si las entradas de las rutas son correctas. Consulte las páginas 2 y 3 de las instrucciones. Desafortunadamente, no hablo español. Espero que puedas hacer algo con la traducción de Google. Alternativamente, el inglés sería posible.

    EEP 16.3, Plugins 1 + 2, EEP 13, HomeNostruktor 13
    PC: HP Pavilion, Prozessor: Intel Core i7-8750H @ 2,2 Ghz, 64 bit, 16 GB RAM,

    Grafikkarte: NVIDIA GeForce GTX 1050 Ti, 4GB, 1493 - 1620 MHz

    System: Windows 10 Home

    "Der Optimist glaubt, dass wir in der besten aller möglichen Welten leben. Der Pessimist befürchtet, dass das stimmt."

    Einmal editiert, zuletzt von BMWFan (30. Januar 2021 um 14:49)