Anzahl der Züge im Depot und die Funktion EEPGetTrainyardItemsCount

!!! 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!
  • Hallo,

    ich habe mir eine Testanlage gebaut, um mich mal tiefgründiger in die Thematik Anlagensteuerung mittels Lua einzuarbeiten. Es gibt ein virtuelles Depot wovon eine eingleisige Strecke zu einem Endbahnhof führt. Außerdem gibt es noch ein Anschlussgleis zu einem Lager. Im Depot sind insgesamt 4 Züge gelistet. Die Züge werden auch nicht abgemeldet. Es sind 3 Personenzüge und ein Güterzug (für das Lager). Im Endbahnhof wechselt die Lok vom Anfang zum Ende des Zuges und fährt dann wieder zurück zum Depot. In den Anlageneinstellungen ist bei Zugname beibehalten ein Haken gesetzt.

    Ursprünglich war es so, das vor der Ausfahrt eines Zuges die Anzahl der gelisteten Züge mittels der Funktion EEPGetTrainyardItemsCount ermittelt wird um eine Zufallszahl im Bereich dieser Anzahl zu generieren. Das funktioniert so lange, bis ein Zug 2 mal im Einsatz war. Dann wird der Name des Zuges nämlich doch geändert. Außerdem ist dann das Ergebnis der Funktion EEPGetTrainyardItemsCount nicht mehr 4 sondern 5 (im Bild zu sehen). Im Depot sind aber nur 4 Züge tatsächlich vorhanden. Ich habe es jetzt erst mal so gelöst, dass ich die Anzahl bei Anlagenstart ermittle. um die Zufallszahlen zu generieren. Für mich ist das aber keine echte Lösung sondern nur eine Notlösung. Das Ergebnis dieser Funktion muss zuverlässig sein.

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

  • Die Sache wird immer unverständlicher. Das ist das Ergebnis nachdem ein Zug zum 2. mal zum Einsatz kam. Da er dann seinen Namen nach dem Ankoppeln der Lok ändert. ist er nicht mehr im Depot gelistet. Das ändert sich erst wieder, wenn er im Depot einfährt, wo sich dann danach zusätzlich die Reihenfolge ändert. Trotzdem liefert die Funktion EEPGetTrainyardItemsCount 3 Züge als Ergebnis. Das führt natürlich zu einer Fehlermeldung wie im Bild zu sehen.

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

  • Hallo Holger Mover (HG3) ,

    das Problem liegt daran, dass "Zugname beibehalten" nicht ganz sauber arbeitet.

    Da du "Abmelden" nicht angehakt hast, fährt nach der Namensänderung ein "neuer" Zug (da "neuer" Name) ein. Der alte bleibt erhalten. Also: aus 4 mach 5.

    Setz mal den Haken bei Abmelden. Ich hoffe, dass dann der alte abgemeldet wird. Bin mir aber nicht sicher.

    Wenn nicht, hilft dir folgendes:

    Für die Ausfahrt baue eine for-Schleife mit EEPGetTrainyardItemsCount. Überprüfe darin mit EEPGetTrainyardItemStaus, ob wartend. Wenn JA, schreibe die Position in eine Hilfstabelle.

    Wenn Schleife durchlaufen, bestimme die Anzahl in der Hilfstabelle. Generiere Zufallszahl zwischen 1 und Anzahl. Hole dann den Zug mit der Position der Zufallszahl.

    Wenn Fragen dazu, bitte melden.

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.2.1 Plug-in 1 + 2; HN17; AnlVerb17; MK; ME; ZE; TM; ...

  • Hallo Holger Mover (HG3) ,

    ich denke wie Fried, dass der fehlende Haken der Haken ist.

    Bei Zügen, die getrennt und wieder zusammen gesetzt werden wird - ich meine mich zu erinnern - wenn die Lok rückwärts fährt der vorherige Zugname gegen einen mit ;xxx geänedert.
    Normalerweise ist ja der Zug #irgendwas und nach dem Trennen # irgendwas und #irgendwas;001.
    Aber dann wird nach (bei dir) dem 2. Durchlauf #irgendwas zu #irgendwas;002 und die Wagen behalten #irgendwas;001
    Man könnte, wenn man unbedingt auf den Haken bei abmelden verzichten will aber auch den Zugname vor der Einfahrt in den Endbahnhof in einen Slot oder als Tag speichern und bei der Rückfahrt wieder ersetzten.

    Gruß
    Dieter

    -----------------------------------------------------------------------------------

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

    Edited once, last by DH1 (February 6, 2023 at 1:06 PM).

  • Hallo Fried , DH1 ,

    erst mal danke für die Antworten. Ich hatte mir schon gedacht, dass es da keine einfache Lösung gibt. Ich werde erst mal den ganzen Ballast an Quelltext entschlacken, der so im Laufe des ganzen Testens entstanden ist. Der schwierigere Teil wird die Steuerung der Ausfahrtrichtung aus dem Depot, da sich ja nach jedem Einsatz die Fahrtrichtung ändert.

    Dazu hatte ich eine Tabelle wo ich neben Namen, auch die Zahl der Einsätze gespeichert habe. Damit habe ich dann die Ausfahrtrichtung bestimmt. Das kann ich dann mit Haken bei abmelden vergessen. Allerdings habe ich mittlerweile auch gesehen, dass es auch ohne Haken irgendwann nicht mehr stimmt.

    Da muss ich wohl eine andere Lösung finden.

    Edit: Ich glaube die Lösung ist viel einfacher als ich dachte. Da muss ich aber noch ein bisschen basteln.

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

    Edited once, last by Mover (HG3) (February 6, 2023 at 10:03 PM).

  • Hallo Holger Mover (HG3) ,

    vielleicht irre ich mich, aber ich interpretiere #1 so, dass immer bislang eine Zufallszahl zwischen 1 und 4 ermittelt hast, weil du ja 4 Züge im Depot hast.

    Das ist aber nicht das Gelbe vom Ei. Morgen fällt dir ein, dass du einen 5. Zug auf die Anlage setzt und du musst dein Skript ändern. Mindestens lästig.

    Übermorgen fällt dir ein, dass du einen Personenzug losschicken könntest, während der Güterzug etwas im Lager entlädt. Schon funktioniert das Skript nicht.

    Bei so etwas solltest du immer erst die "wartende" Anzahl bestimmen und dann daraus die Zufallszahl.

    Vielleicht hab ich dich aber auch nur missverstanden.

    Ich glaube die Lösung ist viel einfacher als ich dachte. Da muss ich aber noch ein bisschen basteln.

    Viel Spaß beim Basteln. Berichte!

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.2.1 Plug-in 1 + 2; HN17; AnlVerb17; MK; ME; ZE; TM; ...

  • Hallo Fried,

    wir reden da ein bisschen aneinander vorbei. Macht aber nichts, da du ja nur die Effekte aus den Bildern gesehen hast aber nicht wie ich es gemacht hatte.

    Deswegen hier die wesentlichsten Teile die ich bis dahin hatte. Mittlerweile verfolge ich einen anderen Ansatz. Den stelle ich später noch vor.

    Da ich bei den ersten Versuchen schon Probleme mit der Anzahl der Züge im Depot hatte, hatte ich mir folgendes überlegt. Ich erstelle mir bei Anlagenstart eine Liste der Züge im Depot.

    Den Status dort mitzuspeichern war übrigens nonsens, da der sich eh ändern kann. War zu dem Zeitpunkt eher eine Spielerei um die EEP-Funktion mal auszuprobieren. Eins von den Altlasten. AnzEinsatz speichert die Anzahl der Einsätze des Zuges (wird um 1 erhöht bei jedem Einsatz) um damit die Richtung der Ausfahrt aus dem Depot festzulegen. Diese Liste war auch der Grund warum ich bei Abmelden im Depot keinen Haken gesetzt hatte.

    In der EEPMain war dann die Ausfahrt aus dem Depot wie folgt:

    Den neuen Ansatz stelle ich später noch vor, wenn ich da ein bisschen weiter bin.

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

  • Hallo

    Ohne mir jetzt alles genau duchzulesen und es nachzuvollziehen...

    ...ich habe auf einer meiner kleinen Versuchsanlagen an den Depots Zählersignale stehen die mir die Anzahl der Züge in den Depots anzeigen, erklärt wurde dies einmal in einer Twitch Sendung von Goetz.

    Ich hänge Dir mal das kleine Lua Script mit an, evtl. kannst Du neue Gedanken fassen.

    Aufs Wesentliche reduziert

    Gruß Joachim

  • Hallo Holger Mover (HG3) ,

    Vorab aber erstmal ein Tipp zur if Anweisung. Der Wert zwischen if und then wird von Lua auf wahr (true) untersucht und wenn er wahr (true) ist, dann wird das Folgende ausgeführt.

    Boolsche Werte - in deinem obigen Skript sind das Anlagenstart und ErledigtDP1 - beinhalten aber schon von Haus aus den Wert wahr (true) oder unwahr (false). Es macht also wenig Sinn zu überprüfen, ob wahr == wahr oder ob unwahr == unwahr ist.

    Anstatt if AnlageStart == true then schreibt man besser if AnlageStart then.

    Will man überprüfen, ob etwas nicht wahr ist (wie bei dir im 2. Fall), schreibt man anstatt if ErledigtDP1 == false then besser if not ErledigtDP1 then.

    Gewöhn dir bitte bei der Abfrage von boolschen Werten gar nicht erst das == an.

    Die Funktion math.randomseed(os.time()) benötigst du nur 1x in deinem Skript. Schreibe sie nicht in eine Funktion, die du auch noch in der EEPMain(9 aufrufst, sondern irgendwo für sich am Anfang des Skripts.

    Den Status dort mitzuspeichern war übrigens nonsens

    Nicht nur das. Sorry. :aw_1:

    Die function DP1Anzahl() hättest du dir komplett sparen können. Überall da, wo du sie aufrufst, kannst du auch gleich EEPGetTrainyardItemsCount(1) einsetzen.

    Um beim Anlagenstart eine Liste anzulegen, benötigst du keine Funktion. Du könntest direkt

    Lua
    --Erstellung der Zugliste bei Anlagenstart
    Zugliste1DP1 = {}  -- leere Liste anlegen
    for i = 1, EEPGetTrainyardItemsCount(1) do

    schreiben. Du erstellt die Tabelle über den Index i. Später fragst du die Tabelle auch über den Index i ab. Inzwischen kann sich aber die Reihenfolge im Depot geändert haben. D.h. Zug[2] ist dann vielleicht Zug[4]. Du musst die Einsatzanzahl nicht über den laufenden Index abfragen sondern über den Zugnamen. Achtung, aber auch der kann sich andern (;0001).
    Im obigen Code hast du auch vergessen, die Einsatzanzahl des Zuges zu erhöhen.

    Dann noch ein Wort zur Modulo-Funktion: 0 % 2 ergibt 0. Sicherheitshalber gerade nochmal überprüft.

    D.h. die if und erste elseif kannst du zu einer if zusammenfassen. Die 2. elseif benötigt du auch nicht mehr, da es bei % 2 nur 2 Möglichkeiten gibt: 0 oder 1. Also:

    Lua
    if anz % 2 == 0 then
        ok = EEPGetTrainFromTrainyard(1, "", i, 1)
    else
        ok = EEPGetTrainFromTrainyard(1, "", i, 2)
    end

    Dies nur als Tipps.

    Deine Crux ist, dass du die Ausfahrrichtung immer wechseln musst/willst. Ich will dir da jetzt nicht mit einer fertigen Lösung reinpfuschen. Denn dadurch lernst du nichts.

    Aber vielleicht hilft dir das hier schon bei deinen Überlegungen zum neuen Ansatz. Gerne können wir darüber auch per PN korrespondieren.

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.2.1 Plug-in 1 + 2; HN17; AnlVerb17; MK; ME; ZE; TM; ...

  • Hallo Fried

    danke für deine sicherlich gut gemeinten Tipps bezüglich der If-Anweisung. Aber die fallen bei mir nicht auf fruchtbaren Boden.

    Ich habe vor 33 Jahren beruflich mit Programmierung angefangen. Meine ersten Programmiersprachen waren Cobol und Pascal. Ergänzt habe ich letztere aus Performancegründen noch mit eingebundenem Assemblercode. Später kamen noch Delphi, C, C++, VB und C## dazu. Oberste Regel war am Anfang die Performance des Rechners zu schonen. Mein erster Rechner hatte 8 MHz, einen RAM von 1 MB und der Grafikspeicher war 512 KB groß. Heute interessiert so was keinen mehr. Programmierer können heute aus dem Vollen schöpfen.

    Ich weiß was eine Sequenz ist, was eine einseitige, zweiseitige oder mehrseitige (verschachtelte) Selektion ist. Kenne den Unterschied zwischen einer Kopf- und Fußgesteuerten Schleife und auch was eine Iteration ist.

    Anstatt if AnlageStart == true then schreibt man besser if AnlageStart then.

    Das kenne ich, verwende es aber trotzdem bei einem Interpreter nicht. Das mache ich nur bei Programmiersprachen welche den Quelltext kompilieren da ein Compiler den Quelltext bei der Umwandlung in Maschinensprache optimiert und es für mich als Programmierer komfortabler ist. Selbst der Ausdruck true oder false sind Stellvertreter für den Wert 0 oder 1 und erfordern einen zusätzlichen Aufwand für den Interpreter, der das in Echtzeit in Maschinensprache übersetzen muss.

    Nach wie vor weicht das Ergebnis der Funktion EEPGetTrainyardItemsCount von der im Depot aufgeführten Züge ab, sobald ein Zug zum 2. mal auf der Strecke war. Im Einfahrtsignal ist der Haken bei abmelden gesetzt. Die Zugliste ist mittlerweile Geschichte und damit auch der Zähler für die Einsätze (die Funktion zum Hochzählen hatte ich nicht dazu genommen, da für das eigentliche Problem nicht relevant). Was ich ausgeschlossen hatte war der Umstand, dass Züge im Depot nicht mit den Zugfunktionen angesprochen werden können. Das war ein Irrtum. Mittlerweile ermittle ich ob das erste Fahrzeug im Zugverband eine Lok ist oder nicht. Dadurch wird dann die Richtung für den Zug bestimmt mit der er ausfährt.

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

  • Mittlerweile ermittle ich ob das erste Fahrzeug im Zugverband eine Lok ist oder nicht. Dadurch wird dann die Richtung für den Zug bestimmt mit der er ausfährt.

    Hi Holger,

    und was, wenn ein Wendezug mit dem Steuerwagen voran in das Depot gefahren ist?Dieser kann trotzdem vorwärts fahren.
    Wenn beim zusammenstellen des Zugs die Lok in Fahrtrichtung 1, also positive Geschwindigkeit von hinten an die Wagen heran gefahren wird, dann fährt der gesamte Zug vorwärts mit der Lok am Ende.

    Gruß
    Dieter

    -----------------------------------------------------------------------------------

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hallo Dieter,

    ein Steuerwagen ist für mich ein böhmisches Dorf. Ich kenne nur Züge mit Lok und "normalen" Waggons. Sorry da bin ich absoluter Eisenbahnlaie. Welchen Fahrzeugtyp würde denn der Steuerwagen in dem Fall ergeben?

    Ach übrigens der Hinweis der Speicherung der alten Geschwindigkeit vor dem "Kopf machen" war sehr brauchbar. Damit kann ich den Zug wieder mit seiner ursprünglichen Geschwindigkeit und dem richtigen Vorzeichen in Bewegung bringen. Leider ist die Ausrichtung der Lok im Fahrzeugverband immer vorwärts, auch wenn der Hintern nach vorn zeigt und damit für diesen Zweck nicht brauchbar.

    Edit DH1 : Ich glaube ich weiß jetzt was du meinst. Im Prinzip ist ja die Lok der Triebwagen wenn ich es richtig verstanden habe. Am Endbahnhof wechselt ja nicht der Triebwagen vom Ende an den Anfang. Nach meinem Verständnis geht der Lokführer in den hinteren Waggon des Zuges und steuert den Zug von dort. Da muss ich mir bei der Ausfahrtsteuerung Gedanken machen. Den Fall hatte ich noch nicht auf dem Plan. Danke für den Hinweis. :aa_1:

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

    Edited once, last by Mover (HG3) (February 11, 2023 at 2:01 AM).

  • Leider ist die Ausrichtung der Lok im Fahrzeugverband immer vorwärts,

    ist das so, Holger?

    ich betrachte mal im Radarfenster oder im 2D Editor die Lok.
    Da, wo die verjüngte Nase ist ist zunächst einmal vorne und bei Eingabe einer positiven Geschwindigkeit im Steuerdialog fährt die Lok in Richtung "1", also vorwärts.
    Wenn man beim Aufgleisen eines neuen Zugs darauf achtet, die Lok immer an die Wagen heran zu fahren, dann sollte die Fahrtrichtung der Lok im Anschluss für den ganzen Zug gelten.

    Eine Besonderheit habe ich aber in Verbindung mit dem 3D Editor festgestellt.
    Dort kann man ja mit der RMT ein Rollmaterial anklicken und dadurch ein Menü öffnen. Dort habe ich 2 Möglichkeiten ein RM zu wenden.

    1. Rollmaterial wenden
      bewirkt, dass das gewählte RM - auch in einem Zugverband mit verbundenen Kupplungen - gewendet wird.
      Bei Waggons ist das wenig spektakulär, wendet man das aber auf ein RM mit Antrieb an, dann sind nach meinen Beobachtungen die Fahrtrichtungen vertauscht.
    2. Zug wenden
      wendet normalerweise den gesamten Zugverband, aber wenn ich Zug wenden auf ein einzelnes RM mit Antrieb anwende, dann wird die Lok gewendet, die Fahrtrichtung wechslet in diesem Fall aber mit, so dass da, wo die verjüngte Nase ist ist immer noch vorne ist.

    Wer mag kann das ja mal gelegentlich überprüfen.

    Gruß
    Dieter

    -----------------------------------------------------------------------------------

    Sie haben Lua? :ad_1: Ist das ansteckend?

    Bleibt alle schön EEP-besessen :ae_1:

    Hardeware und Software

    __________________________________________
    EEP alle Versionen ab EEP6 mit allen Plugins,
    Homenos5, Homenos8,...,HomeNos17 DEV...
    Intel I7 4790k 4x 4Ghz, 32 GB RAM, NVidia GTX 1080 ti 11GB, Direct x V11, Windows 10 pro 64 Bit,
    Laptop Medion Erazer, 16GB RAM, 500GB SSD, 2 TB HDD, GT 850 von Nvidia, Windows 10 Home 64bit

  • Hallo,

    um das Ganze mit der Fahrtrichtung noch etwas komplizierter zu machen:

    Folgendes Testszenario:

    - Zug Waggons mit Lok vorwärts (FZ 1)

    - eine Lok in anderer Richtung nicht angekuppelt (FZ 2)

    - nun kuppelt FZ 2 an den FZ 1 an

    - FZ 2 (mit FZ 1 angekuppelt) fährt, entsprechend der Ausrichtung der Lok von FZ 2, vorwärts bzw. rückwärts

    - FZ 2 (die einzelne Lok) wieder abkuppeln

    - nun ist die Fahrtrichtung des FZ 1 getauscht, das heißt dieser Zug fährt (entsprechend der Ausrichtung der Lok) statt vorwärts rückwärts und umgekehrt

    (und das solange, bis mal wieder eine Lok in anderer Richtung ankuppelt)

    Jürgen

    EEP: 12.1, 13.2, 14.1, 15.1, 16.4 (z.Zt. installiert aber nur für Tests im Einsatz)

    keinerlei externe Zusatztools und manuell manipulierte Anlagendateien

    Prozessor: Intel(R) Core(TM) i5-4460S CPU @ 2.90 GHz 2.90 GHz
    PC: RAM 12 GB, Windows 10 Home, 64 Bit
    GK: NVIDIA Geforce GT 730, 4 GB

    Edited once, last by JuergenSchm (February 11, 2023 at 3:32 PM).

  • Hallo Holger Mover (HG3) ,

    das waren nur Tipps. Aus dem Skript konnte ich nicht erkennen, welche Programmiererfahrung du hast. Ich habe übrigens mit FORTRAN angefangen. Lang, lang ist es her. Doch manchmal ist die Erfahrung mit anderen Sprachen nicht unbedingt von Vorteil.

    Was glaubst du - ohne es auszuprobieren - welche Ergebnisse die beiden folgenden sich leicht unterscheidenden Skripte ergeben?

    Ist nicht böse gemeint. Bezieht sich nur auf deine Aussage im vorletzten Absatz von #10.

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.2.1 Plug-in 1 + 2; HN17; AnlVerb17; MK; ME; ZE; TM; ...

  • Hallo Fried

    echt das Ding ist gut. Damit hast du mich voll gekriegt. :an_1::be_1:

    Ich könnte da nur Lotto spielen, da ich nicht weiß welchen Wert Lua intern für true oder false verwendet. In C++ könnte ich es dir sagen.

    Doch manchmal ist die Erfahrung mit anderen Sprachen nicht unbedingt von Vorteil.

    Damit ist diese Aussage bewiesen. :aa_1:

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

  • In C++ könnte ich es dir sagen.

    Klar und auch in vielen anderen Sprachen. Lua (ob nur Lua ?) interpretiert true und false anders als die meisten anderen Sprachen.

    Um dich und alle die hier mitlesen nicht auf die Folter zu spannen, die Ergebnisse sind:

    1. Skript if wert == true then : NEIN, NEIN, NEIN, denn wert ist 0, 1 oder nil aber niemals Boolean true.

    2. Skript if wert then : JA, JA, NEIN. Hier wird wert als Boolean verglichen und 0 und 1 interpretiert Lua als true. Nur false und nil wird in Lua als false interpretiert. Alles andere ist true.

    Bin ich anfangs auch drauf reingefallen. :ae_1:

    Fried-liche Grüße:aq_1:

    Rentner sein ist wie Urlaub, nur 365 Tage im Jahr.

    Wen es interessiert ...

    PC: AMD Ryzen 5 5600X 6x3,7GHz; 32GB RAM; GeForce RTX3060XC 12GB; 2x 1TB SSD; Windows10Pro 64bit;

    Monitore: 2560x1440 (ASUS) + 1920x1080 (alt)

    Laptop: i7-4710HQ 2,5GHz; 8GB RAM; NVIDIA GeForce GTX860M; 125GB SSD + 1TB HDD; W10Pro64bit

    EEP: Aktuell 15.1.2 Plug-in 1, 17.2.1 Plug-in 1 + 2; HN17; AnlVerb17; MK; ME; ZE; TM; ...

  • Hallo bhg9451  Fried ,

    nein das war für mich nicht gemein. Ganz im Gegenteil. Es war mein Highlight des Tages. Besser konnte man so einen alten Zausel wie mich nicht überzeugen doch mal über den eigenen Tellerrand hinaus zu schauen und alte Gepflogenheiten in die Tonne zu kloppen. Leider konnte ich nur jeweils ein Like dafür vergeben: Eigentlich hätten es 100 oder mehr sein müssen. :aa_1:

    Nun aber zum eigentlichen Thema. Nach wie vor ist für mich das Ergebnis der Funktion EEPGetTrainyardItemsCount ein Rätsel. Bei Start der Anlage ist das Ergebnis noch korrekt.

    Hier der Quelltext der Funktion für die Ausfahrt.

    Ich habe vergessen bei if stop == false die neuen Erkenntnisse in den Quelltext einfließen zu lassen. Ich denke das Fried mir das verzeiht. :ae_1:

    Irgendwann erreicht ein Zug den Zustand, dass sich das Ergebnis um 1 erhöht. Es sind beim Start nur die 3 Züge im Depot vorhanden. Es kommt auch kein anderer Zug dazu. Egal wie oft andere Züge auf der Anlage vom Anfang an das Ende wechseln es bleibt dann bei der tatsächlichen Anzahl der Züge + 1.

    Zu diesem Zeitpunkt befinden sich alle Züge wartend im Depot. Der Kontaktpunkt für die Ausfahrtfunktion befindet sich nur kurz vor dem Einfahrtsignal und hat eine Zeitverzögerung von 10 Sekunden. Im Einfahrtsignal ist der Haken bei Zug abmelden gesetzt (im Gegensatz zur alten Testanlage). Obwohl bei dem vorherigen Bild die Zufallszahl 4 eigentlich einen nicht "vorhandenen" Zug mit Erfolg aus dem Depot schickt, ist das für mich ein Rätsel. Bei der alten Testanlage , wo der Haken nicht gesetzt war, habe ich eine Fehlermeldung erhalten und es ist dann nichts mehr passiert.

    Gruß Holger (HG3)

    Desktop: EEP 6 - 16 (installiert 14 bis 17) aktuell 17.2 + Plugin 1 u. 2, HN14 und 16, Intel i7 3770 3,5 GHz, 24 GB RAM, NVIDIA GeForce GTX 1060 6GB Grafikspeicher, Windows 10

  • Guten Morgen Holger Mover (HG3) ,

    EEP-Lua verweigert nach einer Fehlermeldung die weitere Mitarbeit.

    Das Problem mit dem fehlerhaften "ItemCount" liegt vermutlich, wie weiter oben schon beschrieben, an ZUG und ZUG;001. Dies tritt bei mir nur im Automatik-Betrieb auf, wenn ich händisch "Kopfmache", ändert sich nichts. Das stört mich schon geraume Zeit. Aus diesem Grund habe ich eine kleine Lua-Funktion geschrieben welche ;001 eliminiert. Und siehe da es funktioniert. Sie benutzt  string.find() und string.sub().

    string. ist eine auch in EEP eingebundene Bibliothek.

    Am besten man plaziert den KP mit der Funktion in der Nähe des Übeltäters, auf dem Bild (Umbau Nossen) glaube ich kann man es gut erkennen.

    Gruß, Botho.

    PS. "händisch" heiß das Triebfahrzeug ist weiter auf Automatik und NICHT in Handsteuerung,
    gesteuert wird über [A],[S],[D] und [K],[L].

    Edited once, last by bhg9451: PS. ergänzt (February 12, 2023 at 9:29 AM).