AlbertE Geschrieben 16. November 2022 Geschrieben 16. November 2022 Hallo, für meine Anlage möchte ich Depots nutzen, um Züge (im Berg) für unterschiedlich lange Zeit verschwinden zu lassen. Die Parameter habe ich im Wesentlichen in Variablen beim Zug abgelegt. Umwege waren nötig, da die Informationen zum Zug nicht mehr verfügbar sind, sobald er ins Depot eingefahren ist. Grundlage war das Beispiel von Goetz zum Starten von Zügen aus einem Depot. Ich wäre den Profis hier dankbar, wenn sie sich meine Lösung mal anschauen würden. Depot als Verzoegerung.mbp
Goetz Geschrieben 16. November 2022 Geschrieben 16. November 2022 (bearbeitet) Hallo Albert, dein Prinzip funktioniert wie gewünscht. Bei der Sortierung der Funktionen gibt es noch ein wenig Durcheinander. Da finden sich Einträge für die Ausfahrt aus Depots im Modul "Einfahrt Depot". Technisch ist das kein Problem, aber für die Untersuchung deiner Mechanismen ist das etwas hinderlich. Viele Grüße Götz Bearbeitet 16. November 2022 von Goetz Schreibfehler korrigiert
AlbertE Geschrieben 16. November 2022 Autor Geschrieben 16. November 2022 Hallo Götz, noch ein paar Hinweise: Zu jedem Zug gibt es einen Schalter und eine Lampe. Die Lampe zeigt an, ob der Zug im Depot (rot) oder auf der Strecke ist (grün). Wenn der Schalter bei der Einfahrt des Zuges ins Depot auf rot steht, bleibt der Zug im Depot; steht er auf grün, fährt der Zug nach Ablauf des Timers beim anderen Depot wieder aus. Wird der Schalter von rot auf grün umgeschaltet und steht der Zug im Depot, startet er aus dem anderen Depot. Vielleicht hilft dies beim Verständnis in meiner kleinen „Unordnung“. Beste Grüße Albert
Goetz Geschrieben 16. November 2022 Geschrieben 16. November 2022 Hallo Albert, danke für die Erläuterung. Dieses Verhalten konnte ich aus der EV herauslesen. Dennoch würde ich Ausfahrt Funktionen nicht in den Ordner "Einfahrt Depot" stecken, weil mir das widersprüchlich scheint. Aber es muss für dich passen, nicht für mich. Viele Grüße Götz
AlbertE Geschrieben 22. November 2022 Autor Geschrieben 22. November 2022 Hallo, beim Übertragen meines Test-Aufbaus in meine Anlage ist leider ein Problem aufgetreten. Immer wenn irgend ein Timer abläuft, startet meine Depot-Ausfahrt-Routine. Ich nutze Timer aber auch für andere Zwecke. Es wäre also notwendig zwischen Timer für das Depot und andere Timern zu unterscheiden. Normalerweise gruppiert man in der EV über Schlagwörter. Wenn ich das richtig sehe, ist dies aber bei Timern nicht möglich. Die einzige Lösung, die mir einfällt, ist die Unterscheidung beim Namen mitzugeben. Das heißt, allen Timern für das Depot den Präfix "Depot_" mitzugeben. Zusammenfügen ist ja ganz einfach, aber das spätere Splitten ist mir bisher nicht fehlerfrei gelungen. Kann mit jemand helfen oder hat jemand generell ein bessere Idee. Danke Albert
Goetz Geschrieben 22. November 2022 Geschrieben 22. November 2022 vor 28 Minuten schrieb AlbertE: Es wäre also notwendig zwischen Timer für das Depot und andere Timern zu unterscheiden. Das kannst du tun, Albert. Du kannst mehrere Timer einrichten. Und du kannst auf jeden dieser Timer individuell reagieren. Viele Grüße Götz
AlbertE Geschrieben 22. November 2022 Autor Geschrieben 22. November 2022 Hallo Götz, danke, dass du mir weiterhelfen willst. Das Problem ist aber komplexer. Wenn bei mir ein Zug in das Depot einfährt, startet/errichtet er einen Timer mir dem Zugnamen. Dadurch habe ich den Zugnamen beim Timerablauf zu Verfügung. Ich möchte jetzt aber nicht beim Timerablauf abfragen, ob es ein Timer mit einem Zugnamen ist. Dies ist mir zu fehleranfällig, da ich bei jedem neuen Zug der auf die Anlage kommt, die EV abändern müsste. Deshalb suche ich nach einer abstrakten/generellen Lösung. Hast du eine Idee? Beste Grüße Albert
Goetz Geschrieben 22. November 2022 Geschrieben 22. November 2022 Warum willst du für jeden Zug einen eigenen Timer? Die Züge sind im Depot in der Reihenfolge gelistet, in der sie eingefahren sind. Sollen sie nicht in derselben Reihenfolge (verzögert) wieder ausfahren?
AlbertE Geschrieben 22. November 2022 Autor Geschrieben 22. November 2022 Nein. Jeder Zug hat in einer Variablen seine individuelle Verzögerungszeit stehen. Und falls das Ausfahrtgleis belegt ist, wartet er diese Zeit nochmal.
Goetz Geschrieben 22. November 2022 Geschrieben 22. November 2022 Dann benötigst du gar keinen Timer. Sondern nur eine Verzögerung. Timer sind dann sinnvoll, wenn Dinge regelmäßig getaktet passieren sollen. Ich versuch mal, ob ich ein Beispiel für dich zusammen bekomme ...
AlbertE Geschrieben 22. November 2022 Autor Geschrieben 22. November 2022 Da wäre ich dir sehr dankbar. Alle meine Versuche mit Verzögerung haben zu einem Overflow geführt.
Goetz Geschrieben 22. November 2022 Geschrieben 22. November 2022 Hallo Albert, hier ist mein erster Versuch: 0A29F493-B3B4-458A-B4B8-D5506565A43A Du siehst, dass die EV auch mit mehreren Depots und einer Handvoll Züge sehr überschaubar bleibt, wenn man es systemisch angeht. Der wichtigste "Trick" ist hier das benutzerdefinierte Ereignis, dem ich gleich mehrere Parameter gegeben habe. Damit kann ich ein generisches Prinzip für viele individuelle Fälle erstellen. Viele Grüße Götz
AlbertE Geschrieben 23. November 2022 Autor Geschrieben 23. November 2022 Hallo Götz, deine Lösung ist verblüffend einfach. Ich werde versuchen, sie in meine Test-Anlage zu übertragen. Ein Problem sehe ich aber noch. Du rufst aus dem benutzerdefinierten Ereignis "Ausfahrt" dieses benutzerdefinierte Ereignis wieder auf. Dies scheint mir mit dem Aufruf einer Funktion aus der Funktion in anderen Programmiersprachen vergleichbar zu sein. Dort führt dieser self:invoke unweigerlich zu einem stack overflow. Ob dies bei der Verbindung von LUA und MBS auch so ist kann uns wohl nur Neo sagen. Trotzdem vielen herzlichen Dank. Ich werde jetzt etwas weiter experimentieren und mich dann wieder melden. Beste Grüße Albert
Neo Geschrieben 23. November 2022 Geschrieben 23. November 2022 Hallo Albert, bei Lua gibt es auch einen Stack, der im Kontext des Studios auf 25 Level begrenzt ist, aber im Falle von Götz' Beispiel spielt das keine Rolle. Das benutzerdefinierte Ereignis beginnt mit einer Verzögerung. Diese Verzögerung verlässt den Stack und veranlasst das Studio, das Ereignis an der entsprechenden Stelle später erneut aufzurufen, mit einem frischen Stack. Viele Grüße, Neo
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden