Lua Geschwindigkeitsunterschied zu EEP

!!! 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.
In the case of pictures that are attached to the article, the source must also be stated. This also applies to your own pictures, which were taken by you. Pictures without source information will be deleted!
  • Hi liebe Gemeinde,


    in etlichen threads kommt immer wieder zur Sprache, dass EEP teils Probleme mit Lua hat, weil Lua in EEP "nur" fünfmal pro Sekunde abarbeitet.

    Ist denn diese Taktung in Stein gemeißelt?

    Spricht etwas dagegen, diese Taktung zu verdoppeln oder vervierfachen?

    Allein dadurch müssten sich doch etliche Probleme lösen lassen, weil EEP und Lua "synchroner" arbeiten würden, so meine Vorstellung.

    Heutige Rechnerkapazitäten im Privatbereich sollten das doch stemmen können.

    Oder gibt es andere Gründe, bei dieser vergleichsweise langsamen Taktung zu bleiben?

    Hab' darüber bisher nichts gefunden...

    Gruß Heiner


    System: Win 10 pro (64 bit)

    CPU: i5-9600K

    Mainboard: Asus Prime Z390-A

    RAM: G.Skill DDR4-3200 64BG

    SSD: Samsung SSD 980 Pro 1TB

    Grafikkarte: EVGA NVIDIA RTX 3070

    Monitore: Dell U3014 und Asus PB 277

    Soundsystem: EMU 1616m

    Boxen: Teufel Motiv 2 Mk2 "2.1-Set"


    EEP 14.1, Plugin 1 bis EEP 17

  • Hallo Heiner,


    Lua ist in EEP erst relativ spät integriert worden. Allein das spricht dagegen, Lua synchron im Spielverlauf einzusetzen. Aber selbst wenn Lua von Anfang an dabei gewesen wäre, wird es nie wirklich synchron im Spiel laufen. Jede Simulation hat so etwas wie eine Haupt-Schleife, die immer wieder durchlaufen wird. Darin werden die Veränderungen der Blickrichtung und der Umgebung abgearbeitet und auf das nächste auszuliefernde Bild angewendet. Dazu gehört alles, vom Wiegen der Bäume im Wind über animierte Wasseroberflächen, andere Animationen, fahrende Züge und Autos, Auslösen von Kontaktpunkten, Prüfen oder Vermeiden von Zusammenstößen und und und. In dieser Schleife wirst Du nie an jeder beliebigen Stelle mit Lua dazwischen funken dürfen.


    Also bleibt Lua in gewisser Weise asynchron zum Spielverlauf. Und dann spielt es meines Erachtens keine Rolle mehr, ob Lua nun 5- oder 500-mal pro Sekunde aktiv wird. Die einzige Einschränkung dieser Aussage, die ich gelten lassen würde, wäre, dass man für den Eindruck von Bewegungen, die man durch Platzierungen in Lua darstellen wollte, etwa 25mal in der Sekunde "zuschlagen" können müsste.


    Damit wir aber keine Scheinargumente austauschen, wäre es hilfreich, wenn Du die Probleme konkret benennen könntest, die durch eine höhere Taktung gelöst würden.


    Gruß

    Christopher

    PC: Intel i7-7700K; 64bit; 4,2 GHz; 32GB RAM; GeForce GTX 1080 (8 GB); Win 10; EEP 6, 15 (Dev), 17 (Dev); HomeNOS 14 (Dev)
    Laptop: Intel i5 3230M; 64bit; 2,6 GHz; 8GB RAM; GeForce GT740M (1 GB); Win 8.1; EEP 6, 13.2 Plugins 1+2; HomeNOS 13 (User)

    The post was edited 1 time, last by cetz: Vergessenen Buchstaben eingefügt ().

  • Es gibt zur Zeit kein diesbezügliches Problem bei mir.

    Die Überlegung kam mir, nachdem ich in mehreren threads darüber las, dass sich EEP quasi an Lua verschluckt, weil von Kontaktauslösung bis zur dadurch beabsichtigten Schaltung bis zu 400 ms vergehen können.

    Und dieser Wert dachte ich, könne durch eine höhere Taktung verkürzt werden und so EEP den zeitweiligen "Lua-Schluckauf" minimieren.

    Insbesondere, da durch diesen "Schluckauf" anscheinend schon Probleme aufgetaucht sind, die Fehler produzieren, aber eben nicht immer die selben Fehler an der selben Stelle, sondern eher zeitabhängig, je nach Zeitpunkt des "Verschluckens".

    Ich beziehe mich ausschließlich auf die Lektüre einiger Seiten threads, in denen das Thema immer wieder mal hochkam.

    Gruß Heiner


    System: Win 10 pro (64 bit)

    CPU: i5-9600K

    Mainboard: Asus Prime Z390-A

    RAM: G.Skill DDR4-3200 64BG

    SSD: Samsung SSD 980 Pro 1TB

    Grafikkarte: EVGA NVIDIA RTX 3070

    Monitore: Dell U3014 und Asus PB 277

    Soundsystem: EMU 1616m

    Boxen: Teufel Motiv 2 Mk2 "2.1-Set"


    EEP 14.1, Plugin 1 bis EEP 17

  • Hallo Heiner Hein von Frohnau ,

    die meisten "Verschlucker" treten auf, weil EEP und Lua zwei asynchrone Programme sind. Einige Lua-Anwender vergessen das und wundern sich, dass ein Lua-Befehl in Lua nicht sofort ein abrufbares Ergebnis liefert.

    Lua muss immer erst seine Daten an EEP übergeben, EEP muss darauf reagieren und seine Daten wieder zurück übergeben. Die Übergabe erfolgt immer nur einmal innerhalb der main-Schleife, also im günstigsten Fall alle 200 Millisekunden.

    Dabei kann schon mal im ungünstigsten Fall ein main-Schleifendurchlauf in Lua übersprungen werden, daher rührt die Angabe 400 Millisekunden.

    Die 5 mal pro Sekunde sind ein Kompromiss zwischen schneller Kommunikation Lua <-> EEP und der Notwendigkeit, möglichst alle anstehenden Befehle in einem Durchlauf in Lua abzuarbeiten. Verkürzt man diese Zeit kann es vorkommen, dass nicht alle Aufrufe in Lua abgearbeitet wurden und dadurch "Verschlucker" in der Zusammenarbeit auftreten. Deshalb ist es beispielsweise angebracht, zeitintensive aber nicht zeitkritische Funktionen in Lua nicht bei jedem main-Schleifendurchlauf aufzurufen.


    Gruß Holger

  • Wie gesagt sind meine Überlegungen nur aus der Lektüre etlicher threads entstanden.

    Wie und dass die Arbeitsweise zwischen EEP und Lua ist wie sie ist, ist mir bekannt.

    Wird ja in den threads auch immer wieder drauf eingegangen.

    Dennoch dachte ich, dass eine Taktänderung Abhilfe bei einigen der geschilderten Probleme bringen könnte.

    Von da aus freue ich mich dennoch, diese Diskussion angestoßen zu haben, auch wenn sie mir nur aufzeigt, weshalb meine Überlegungen NICHTS bringen würden.

    Obwohl ich denke, dass gerade bei hohen (Zug-) Geschwindigkeiten eine häufigere Kommunikation zwischen EEP und Lua so manches (Zeit-) Problem minimieren könnte.

    Gruß Heiner


    System: Win 10 pro (64 bit)

    CPU: i5-9600K

    Mainboard: Asus Prime Z390-A

    RAM: G.Skill DDR4-3200 64BG

    SSD: Samsung SSD 980 Pro 1TB

    Grafikkarte: EVGA NVIDIA RTX 3070

    Monitore: Dell U3014 und Asus PB 277

    Soundsystem: EMU 1616m

    Boxen: Teufel Motiv 2 Mk2 "2.1-Set"


    EEP 14.1, Plugin 1 bis EEP 17

  • Obwohl ich denke, dass gerade bei hohen (Zug-) Geschwindigkeiten eine häufigere Kommunikation zwischen EEP und Lua so manches (Zeit-) Problem minimieren könnte.

    Hallo Heiner,

    ich denke, dass wird eher das Gegenteil bewirken.

    Gerade beim hohen Geschwindigkeiten ist EEP stark ausgelastet. Wie sehr EEP dabei zu tun hat siht man an den manchmal einbrechenden Frameraten. Alle 0.2 Sekunden sagt jetzt Lua "pausiere mal Deine Artbeit, ich möchte mit Dir Daten austauschen". EEP muss seine aktuellen Arbeiten kurz pausieren, zwischenspeichern um Daten mit Lua auszutauschen, dann seine Daten wieder abrufen und weiter normal arbeiten.

    Wenn die Abstände dieser Lua-Zwischenrufe noch weiter verkürzt werden hat EEP immer weniger Zeit und damit sinkt die Framerate und unter einer bestimmten Framerate kam es in der Vergangenheit immer wieder zum Überspringen von Kontakten. Dieser 0,2 oder 0,4 Sekunden Verlust bei der Zusammenarbeit zwischen EEP und Lua stellt in den seltensten Fällen ein Problem dar, wenn sich der Lua-Nutzer (Programmierer) dieses Zusammenspiels zwischen EEP und Lua bewusst ist.

    Er sollte also zum Beispiel wissen, dass er in einem main-Durchlauf nicht ein Signal stellen und danach im gleichen Durchlauf die neue Stellung abfragen kann.


    Gruß Holger

  • Hallo,

    wenn man diese Lua-Zykluszeiten kennt, muss man sie bei der Programmierung entsprechend berücksichtigen.

    Kenne ich schon aus den 80ern seit dem Umgang mit den ersten SPS-Steuerungen.

    200ms von EEP ist zwar min 10 mal langsamer als damalige SPS aber aufgrund der wichtigeren Echtzeit-Visualisierung/Berechung nicht schlimm, wenn man sich dessen bewusst ist.

    Habe bei meine Anlagen selbst mit grossen Lua-Programmen bisher keine Probleme. Bisher befanden sich die Fehler immer vor dem Bildschirm:ao_1:

    https://de.wikipedia.org/wiki/…programmierbare_Steuerung

  • Hey Maik !

    Das Like musste sein.

    Ich finde das der Satz :Bisher befand sich der Fehler immer vor dem Bildschirm ,

    in den meisten Fällen stimmt!


    VLG Angelika:bn_1::bm_1:

    Intel Core i7-8700, 6x 3,2 GHz (bis 4,6 GHz, 12 MB Cache)

    ASUS GeForce GTX 1050 Ti, 4 GB GDDR5, DVI, HDMI, DP

    Festplatten: 250 GB SSD Crucial MX500, 1 TB HDD

    8 GB DDR4-RAM, 2666 MHz, Crucial, Windows 10 Home

    Inkl. Maus, Tastatur, WLAN 300 MBit/s, USB 3.1


    EEP12 /EEP14 Plugin 2

  • Hallo Heiner,

    ich denke, dass wird eher das Gegenteil bewirken.

    Gerade beim hohen Geschwindigkeiten ist EEP stark ausgelastet. Wie sehr EEP dabei zu tun hat siht man an den manchmal einbrechenden Frameraten. Alle 0.2 Sekunden sagt jetzt Lua "pausiere mal Deine Artbeit, ich möchte mit Dir Daten austauschen". EEP muss seine aktuellen Arbeiten kurz pausieren, zwischenspeichern um Daten mit Lua auszutauschen, dann seine Daten wieder abrufen und weiter normal arbeiten.

    Hallo Holger,

    ist das tatsächlich der Ablauf, dass EEP pausieren muss um die Daten mit Lua auszutauschen?

    Ich wäre davon ausgegangen, dass Hyperthreading, was ja jeder halbwegs moderne Rechner beherrscht, keine Pausierung an der Stelle nötig sein lässt.


    Des Weiteren sprichst Du etwas später von Problemen bei geringen Framerates.

    Die würde ich aber eher durch die verbaute Grafikarte verursacht sehen, da die Mindestsystemvoraussetzungen für EEP ja eigentlich relativ lachhaft für moderne PC sind.


    Meine Idee war, die eigentliche Berechnung (und damit Steuerung) in Lua rein außerhalb von EEP-Lua über "require"-Aufrufe zu gestalten und ausschließlich die Kontaktdaten in Richtung "externes" Lua zu übergeben und von dort dann ausschließlich die Steuersignale retournieren zu lassen.


    Leider weiß ich nicht, mir welcher Geschwindigkeit das "externe" Lua läuft;

    aber sicher mit mehr als 5Hz (wie das EEP-Lua).

    Gruß Heiner


    System: Win 10 pro (64 bit)

    CPU: i5-9600K

    Mainboard: Asus Prime Z390-A

    RAM: G.Skill DDR4-3200 64BG

    SSD: Samsung SSD 980 Pro 1TB

    Grafikkarte: EVGA NVIDIA RTX 3070

    Monitore: Dell U3014 und Asus PB 277

    Soundsystem: EMU 1616m

    Boxen: Teufel Motiv 2 Mk2 "2.1-Set"


    EEP 14.1, Plugin 1 bis EEP 17

  • dass Hyperthreading, was ja jeder halbwegs moderne Rechner beherrscht, keine Pausierung an der Stelle nötig sein lässt.

    Hallo Hein,

    dazu müsste EEP aber Hyperthreading unterstützen. EEP kann aber nur mit einem Core, deshalb ist für EEP nicht die Anzahl der Kerne sondern die Taktfrequenz entscheidend.

    Schau Dir doch mal bei laufendem EEP die Prozessorauslastung nach Cores an.


    Des Weiteren sprichst Du etwas später von Problemen bei geringen Framerates.

    Auch das lget zum größten Teil nicht an der Grafikkarte, sonst müsste EEP auf jedem halbwegs modernen Rechner laufen wie am Schnürchen.

    Nein EEP bereitet die gesamt Ausgabe in der CPU vor (ein Kern) und übergibt es dann an die Grafikkarte zur Ausgabe. Deshalb erreicht man mit Tricks und Einstellungen an der Grafikkarte nur unwesentliche Verbesserungen.


    Gruß Holger

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

  • Hallo Hein,

    dazu müsste EEP aber Hyperthreading unterstützen. EEP kann aber nur mit einem Core, deshalb ist für EEP nicht die Anzahl der Kerne sondern die Taktfrequenz entscheidend.


    Oh, da in den Systemvoraussetzungen mindestens ein Dual-Core-Prozessor gefordert ist, ging ich davon aus, dass Hyperthreading auch EEP inzwischen erreicht hätte.

    Na, vielleicht, nein hoffentlich, kommt das ja noch.


    Und was sagst Du zu dieser Überlegung?

    Meine Idee war, die eigentliche Berechnung (und damit Steuerung) in Lua rein außerhalb von EEP-Lua über "require"-Aufrufe zu gestalten und ausschließlich die Kontaktdaten in Richtung "externes" Lua zu übergeben und von dort dann ausschließlich die Steuersignale retournieren zu lassen.

    Wäre vermutlich sehr umfangreich;

    aber auch machbar?

    Gruß Heiner


    System: Win 10 pro (64 bit)

    CPU: i5-9600K

    Mainboard: Asus Prime Z390-A

    RAM: G.Skill DDR4-3200 64BG

    SSD: Samsung SSD 980 Pro 1TB

    Grafikkarte: EVGA NVIDIA RTX 3070

    Monitore: Dell U3014 und Asus PB 277

    Soundsystem: EMU 1616m

    Boxen: Teufel Motiv 2 Mk2 "2.1-Set"


    EEP 14.1, Plugin 1 bis EEP 17

    The post was edited 1 time, last by Hein von Frohnau ().

  • Wäre vermutlich sehr umfangreich;

    aber auch machbar?

    Hallo Hein,

    da haben schon andere sich den Kopf zerbrochen und aufgegeben.


    Gruß Holger

  • Na ja, ich habe in absehbarer Zeit nichts Wichtiges zu tun. :af_1:

    Versuchen werde ich es wohl.

    Irgendwie muss ich mir ja die Zeit vertreiben.:an_1:

    Wenn's was wird, stelle ich mein Opus hier vor...

    ... und wenn ich aufgebe hülle ich mich in Schweigen...:ad_1::ba_1:

    Gruß Heiner


    System: Win 10 pro (64 bit)

    CPU: i5-9600K

    Mainboard: Asus Prime Z390-A

    RAM: G.Skill DDR4-3200 64BG

    SSD: Samsung SSD 980 Pro 1TB

    Grafikkarte: EVGA NVIDIA RTX 3070

    Monitore: Dell U3014 und Asus PB 277

    Soundsystem: EMU 1616m

    Boxen: Teufel Motiv 2 Mk2 "2.1-Set"


    EEP 14.1, Plugin 1 bis EEP 17