Lua-Skript zur Anfahr- und Bremssteuerung (ABS)

!!! 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.
  • 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."

    The post was edited 1 time, last by BMWFan ().

  • 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, EEP14, EEP15.Patch3, EEP16.Patch3 - PC: Win 10 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

  • 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:

  • Erfahrungsgemäß ergeben sich unvermeidliche Ungenauigkeiten von vielleicht +/- 5 m, was aber auch in der Großtechnik außerhalb Japans durchaus vorkommt.

    Hahjahahaha :be_1:

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

    _____________________________________________________________________

    Update auf Version 2021 ist erledigt. :ae_1: Aber dummerweise hat auch die Version 2021 einen Virus.:ad_1:

  • 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 Source Code: Demo_ABS
    1. -- Kopiere EEP-Log in Datei, siehe https://emaps-eep.de/lua/printtofile
    2. require("PrintToFile_BH2"){file="Resourcen/Anlagen/Demo_ABS/output.txt", output=2}
    3. dofile ("C:/EEP15/Resourcen/Anlagen/Demo_ABS/Demo_ABS_Main.lua")
    4. -- Zeige globale Variablen, siehe https://github.com/FrankBuchholz/EEP/blob/master/ShowGlobalVariables.lua
    5. 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

  • 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 Hohen Westerwald


    Michael


  • 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

    Threema - Sicherer und privater Messenger. Meine Threema-ID


    Win 10x64 Professional, Gigabyte B360M AORUS, Intel Core i7-8700K, 32GB RAM, NVIDIA GeForce GTX 1050 Ti 4GB, Philips 273V7QDAB Full HD

    Windows Firewall und Defender
    EEP 15.1 Expert Patch 2, Plugins: 1

    EEP 16.4 Expert, Plugins: 1,2,3


    alt:
    Win 7x64 Professional SP1, Intel Core i5-3570, 16GB RAM, nVIDIA GeForce GT630, 2GB, 1920x1200 auf 26" TFT

    Windows Firewall und Defender (MSE)

    EEP6; EEP8-14; EEP 15.1 Expert Patch 2, Plugins: 1

  • 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

    Threema - Sicherer und privater Messenger. Meine Threema-ID


    Win 10x64 Professional, Gigabyte B360M AORUS, Intel Core i7-8700K, 32GB RAM, NVIDIA GeForce GTX 1050 Ti 4GB, Philips 273V7QDAB Full HD

    Windows Firewall und Defender
    EEP 15.1 Expert Patch 2, Plugins: 1

    EEP 16.4 Expert, Plugins: 1,2,3


    alt:
    Win 7x64 Professional SP1, Intel Core i5-3570, 16GB RAM, nVIDIA GeForce GT630, 2GB, 1920x1200 auf 26" TFT

    Windows Firewall und Defender (MSE)

    EEP6; EEP8-14; EEP 15.1 Expert Patch 2, Plugins: 1

  • 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

    Threema - Sicherer und privater Messenger. Meine Threema-ID


    Win 10x64 Professional, Gigabyte B360M AORUS, Intel Core i7-8700K, 32GB RAM, NVIDIA GeForce GTX 1050 Ti 4GB, Philips 273V7QDAB Full HD

    Windows Firewall und Defender
    EEP 15.1 Expert Patch 2, Plugins: 1

    EEP 16.4 Expert, Plugins: 1,2,3


    alt:
    Win 7x64 Professional SP1, Intel Core i5-3570, 16GB RAM, nVIDIA GeForce GT630, 2GB, 1920x1200 auf 26" TFT

    Windows Firewall und Defender (MSE)

    EEP6; EEP8-14; EEP 15.1 Expert Patch 2, Plugins: 1