Posts by frank.buchholz

    Alexander Bei so langen Verzögerungen besser nicht eine globale Lua-Variable zur Speicherung (der geplanten EEP-Zeit) verwenden, sondern einen Daten-Slot oder einen Tag-Text - ansonsten gerät die Anlage bei einem Neustart leicht außer Takt. Das könnte auch eine der Ursachen für das Chaos, der bei der in diesem Thread beschriebenen Anlage sein.

    Hmm, so recht weiß ich nicht was mir das erste Bild sagen soll. Lua ist jedenfalls richtig schnell, viel tausend Befehle werden problemlos innerhalb der 200ms je EEPMain-Runde abgearbeitet - das zeigt das Projekt "Automatic Train Control" (ATC) von Rudy und mir oder auch der EEP-Server von Andreas.

    Die Kontrolle von 15 Routen mit 80 Fahrzeugen sollte Lua also nicht ins Schwitzen bringen - jedenfals nicht was die Performance anbelangt.

    Andererseits ist es durchauf kniffelig, dazu ein Lua-Programm zu entwerfen. @Mobawe: Du kannst mir ja Mal die Anlage schicken, die nächsten Tage bin ich allerdings in Urlaub, es kann also etwas dauern, dies anzuschauen.

    Frohe Festtagsgrüße
    Frank

    Übrigens: Steuerkreise, auf denen schnelle Fahrzeuge im Kreis umherflitzen, arbeiten gar nicht viel anders: Auch dabei gibt es eine Rundenzeit der Schaltautos, die im Prinzip den Runden von EEP-MAin entsprechen.

    Eine Idee zur Analyse:

    Wenn der Zug rückwärts wieder herausfährt, dann wird das Haltesignal und vermutlich auch die entsprechende Funktion EEPOnSignal_X ausgeführt. Trotzdem wäre ein passender Print-Befehl nützlich, der dies klar und deutlich im Ereignisfenster zeigt. Das könnte dann so aussehen (nicht im EEP getestet):

    Hallo Christopher,

    das Thema XSRF-Tokens ist eigentlich nicht neu. Ich tippe eher auf ein Problem mit den Cookies im Cache des Browsers.

    - Cache und alle Cookies löschen oder

    - gezielt die Cookies des EEP-Forums löschen: eine Seite des Forums aufrufen, F12, Tab "Web-Speicher" , alle Cookies einzeln löschen, Seite neu aufrufen.

    Schönen Gruß
    Frank

    In unserem Automatic Train Control Projekt hatte ich diese Anforderung so gelöst, dass alle Signale, die sowieso auf der Anlage sind, über eine in Lua in einer Schleife erzeugte onSignal-Lua Funktion den aktuellen Zug in eine Tabelle eintragen. So wurden weder Depots noch zusätzliche Kontakte benötigt und es war keine Änderung an der Anlage nötig.

    Nach kurzer Zeit sind so alle aktiven Züge erfasst.

    Update ... Man sollte seinem Gedächtnis nicht trauen, sondern nachschauen, denn ich hatte gar nicht die onSignal-Funktionen verwendet (später gab es auch nicht mehr die 1-1000 Schleife, weil die Nummern der Block-Signale sowieso bekannt gemacht werden mussten).

    So sieht das Beispielcoding aus:

    Du kannst ja im Lua-Wünsche-Faden den Anwendungsfall beschreiben und nach einer neuen Funktion, z.B. EEPGetSignalFS( SignalID ) , fragen, die eine Tabelle zurückgibt deren Einträge z.B. jeweils als Schlüssel das Ziel-Signal haben und wenn belegt den aktuellen Zug nennen (sonst false).

    Hello Ruud,

    in theory you can mix automatic control with some manual control. I did some experiments for following cases:

    1. A part of the layout runs with automatic control and another part with manual control. Sometimes trains cross the border of both realms. This works fine as long a train entering the automated part sees a free block ahread and that any train leaving the automated part does not block the automated part anymore. In general this works similar like the example which shows a depot. You can think about the depot acting as the manual part of the layout.
    2. You stop automatic control via a signal, the trains will stop at the next signal and you can move trains around manually. Later you switch on automatic control again, which starts a discovery cycle until all trains are catched again.

    Both options somehow work but it takes some time and many tries to make it work smoothly.

    Greetings
    Frank

    Fried zeigt mit seiner genialen Zugtürsteuerung zweierlei:

    1. Man erkennt wie groß das Problem und die Schwierigkeiten sind - man braucht nur einmal den Umfang der Datentabelle anschauen
    2. Eine Idee zur Lösung - eben eine Umsetzungstabelle mit der die verschiedene Namen der Modelle zu einheitlichen Bedeutungen wie „Tür rechts“ usw. zugeordnet werden.

    Vielleicht ließe sich als langfristiges gemeinschaftliches Projekt folgendes erreichen:

    • Für das Wiki werden Namenskonventionen erarbeitet und veröffentlicht
    • Für die alten Modelle werden Umsetzungstabellen zusammengetragen, mit denen man mit Lua dann sowohl alte wie neue Modelle einheitlich ansprechen könnte

    Jetzt wird's bunt: Das Gleisplan-Programm zeigt nun auch die Fahrstraßen an.

    • Man kann mit den Buttons rechts oben alle FS ein- bzw. ausschalten.
    • Wenn man mit einem Doppelklick die Popups zu Start- oder Ende-Signalen öffnet, dann kann man dort gezielt die FS von dem Start-Signal bzw. zu dem Ende-Signal ein- bzw. ausschalten. Ab Besten klickt man die Signale zusammen mit der Umschalttaste an, damit jedes Signal sein eigenes Popup bekommt.
    • Genauso wie bei der Gleisanzeige im genialen Tauschmanager gönne ich mir eine Vereinfachung: Die Gleise auf denen die Start- oder Ende-Signale liegen werden komplett eingefärbt und nicht nur das Teilstück ab dem Start-Signal bzw. bis zum Ende-Signal.
    • Die (nicht einstellbaren) Farben der FS entsprechen den Farben in EEP.
    • Die (optionalen) Gleisendemarker werden bei FS weggelassen da sie separat eingefärbt werden müssten.
    Quote

    In EEP17 unterExtras den Menüpunkt "Verwendete Modelle" aufrufen

    Den Menüpunkt sehe ich in EEP17, allerdings ist die Funktion bei mit nicht aktiv, da ich das Plugin 1 (Kapitel 8. Erstellen der Modellliste einer Anlage direkt aus EEP heraus) nicht besitze..

    Seit langen gab es das Problem, dass einige Texte zu Gleisen, Weichen, Signalen und Kontakten im Gleisplan-Programm gespiegelt angezeigt werden.

    Nun habe ich mich ein wenig in die Geheimnisse von Rotationsmatixen, kumuliereten Rundungsfehlern und Quartenionen eingelesen und konnte so die Bedingungen identifzieren bei denen es zu so einer Spiegelung kommt. (Jedenfalls hoffe ich, daß ich alles erwischt habe.)

    Damit konnte ich nun die meisten der bislang gespiegelten Texte umdrehen!

    Display Spoiler

    Für Mathe-Insider: Das Programm verwendet 4x4-Matrizes zur Berechnung der Positionen und Richtungen. Dabei ist es nicht so leicht zu erkennen, ob so eine Matrix eine Spiegelung enthält oder nicht. Erst nachdem ich nun zusätzlich die entspechenden Quartenionen zu den Matrizes berechnete konnte ich erkennen, dass eine Spiegelung in den beiden folgenden Fällen vorliegt:

    Trace = Summe der ersten drei Diagonalelementen

    Achse X, Y, Z je nachdem welcher der ersten drei Diagonalelemente am größten ist


    Achse Determinante >= 0 Determinante < 0
    Trace >= 0 normal Spiegelung
    Trace < 0 und Achse = X Spiegelung normal
    Trace < 0 und Achse = Y Spiegelung normal
    Trace < 0 und Achse = Z normal Spiegelung

    dass aus Performance-Gründen so wenig, wie nötig lesen/schreiben des TagTextes erfolgen sollte und wenn der Inhalt öfter benötigt wird, sollte eine Variable als Zwischenspeicher verwendet werden sollte.

    Dem stimme ich nicht zu, denn:

    1. EEP-Daten werden mit der Anlage gespeichert. Eigene Variablen muss man mit etwas Mühe selber sichern.

    2. die Performance der Lua-EEP-Schnittstelle ist sehr hoch. Lokale Lua-Variablen wären zwar noch schneller, aber zum Datenaustausch zwischen unabhängigen Funktionen braicht man globale Variablen, deren Verwaltung auch seine Zeit braucht.

    3. die Performance ist meiner Ansicht nach nur wichtig wenn man viele tausend Befehle in einem Zyklus abarbeitet

    Bin gerade unterwegs und kann es daher nur aus dem Gedächtnis schreiben: wenn Signale geändert werden liefert ein Get-Befehl erst im nächsten Zyklus den neuen Wert.

    Nach Bennys Kommentar hier habe ich das für Texte überprüft und stellte überrascht fest: Texte werden sofort geändert und der nächste Get-Befehl liefert bereits in gleichen Zyklus den neuen Wert.

    Das konnte ich mit einer kleinen Testanlage und einem Gruppenkontakt mit zwei Kontakten prüfen, die jeweils über zwei verschiedene Lua-Funktionen den Text eines Schildes lasen und erweitern. Das klappte gut, man darf nur nicht eine bestimmte Reihenfolge der Aufrufe erwarten.

    Die Schaltverbindungen werden nun in beiden Programmen beim schaltenden und beim geschalteten Objekt angezeigt. Eine Angabe "1-2" bedeutet, dass bei Stellung 1 des schaltenden Objektes das geschaltete Objekt auf Stellung 2 gesetzt wird.

    Schaltverbindungen im Inventar-Programm:
    (Im Inventarprogramm kann man auf die Links klicken und so den Gleisplans in einem zweiten Browser-Fenster entsprechend positionieren.)

    Schaltverbindungen im Gleisplan-Programm:

    (Man erhällt, wie hier gezeigt, mehrere Popups, wenn man beim Klick auf ein Objekt gleichzeitig die Umschalt-Taste gedrückt hält.)

    Neben dem genialen TM zeigt nun auch das Inventar-Programm die Schaltverbindungen zwischen Weichen und Signalen in beiden Richtungen an.

    (Und jetzt weiß ich durch die Recherche auch, was die Token SignalData, Count und Fnxx für Signale bzw. die Token SignalData, NextSigFn1 bis NextSigFn5für Weichen in der Anlage-Datei bedeuten.)

    In der aktuellen, einfachen Lösung wird vom Inventar-Programm nur ein einfacher Text gezeigt.

    • Die IDs werden gezeigt nicht jedoch der Typ (Weiche/Signal)
    • Die Nummer der Stellung wird gezeigt, nicht jedoch die Bedeutung (0=keine Änderung, Fahrt, Halt, Gerade, Abzweig, usw.)

    Beispiele:

    • Wird geschaltet von 2645 (1-1)
    • Schaltet 1786 (1-2, 2-1)
    • Wird geschaltet von 1506 (1-0, 2-1)

    Irgenwann später gestalte ich das noch schöner und baue es auch in die Popups des Gleisplans ein.