Jump to content

Depot für Verzögerung nutzen


AlbertE

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Goetz
Schreibfehler korrigiert
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Albert, 
hier ist mein erster Versuch:   0A29F493-B3B4-458A-B4B8-D5506565A43A

76135187_DepotsalsKehrschleife.thumb.jpg.25710845ec2d5364195f3a1ad6219c8d.jpg

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...