Jump to content

Timerfunktion


baki2512

Empfohlene Beiträge

Hallo und guten Abnd,

ich habe zwei "Probleme" mit der Timerfunktion:

Richtet man einen Timer ein, steht der Haken immer auf "automatischer Neustart". OK - benutze ich zwar bislang noch nicht, aber man kann den Haken ja entfernen. Setzt man den Timer dann in der EV ein, sitzt der Haken wieder auf "automatischer Neustart". Jetzt also nicht vergessen, hier den Haken zu entfernen. Beim zweiten Einsatz an anderer Stelle der Ev habe - zumindest ich es - vergessen, dass der Haken hier ja wieder aus Neustart steht - Folge: meine Züge fahren erst einmal durcheinander, bis ich den Grund gefunden habe. Daher meine Frage: Wird der Neustart des Timers so oft vewendet, dass es Sinn macht diesen Haken programmtechnisch zu setzen oder wird diese Funktion eher selten benutzt, dann könnte mE der Haken weg und jeder, der den Neustart möchte, setzt ihn. Ich weiß nicht, wie die Mehrheit dies sieht.

Zweiter Punkt ist Folgender: Bei mir fährt ein Zug in ein Bahnhofsgleis ein und soll nach zB 60 sek wieder starten. Zwischenzeitlich kreuzt aber ein anderer Zug das Ausfahrtgleis, also Timer stoppen und nach Freigabe des Gleises wieder den Timer starten. Das klappt auch soweit gut - aber der kreuzende Zug kann in der ersten Sekunde den Timer stoppen oder in der letzten Sekunde, der kreuzende Zug gibt bei mir zB eine Laufzeit von 30 Sek vor, der erste Zug kann also 31 Sek oder 89 Sek halten, es sollten aber nur 60 Sek plus Durchfahrtzeit sein. der autoimatische Neustart hilft mir dabei auch nicht, denn der würde auch wieder nur 60 Sek vorgeben. Vielleicht übersehe ich hier etwas. Aber wenn nicht wäre die Frage, ob man die Timerfunktion dahin ergänzen könnte, dass es nicht heißt "Timer starten" sondern "Timer weiterlaufen lassen".

Gruß

Baki

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Baki,

vor 30 Minuten schrieb baki2512:

Wird der Neustart des Timers so oft vewendet, dass es Sinn macht diesen Haken programmtechnisch zu setzen

ja, denn Timer sollten nur für regelmäßig wiederkehrende Aktionen genutzt werden. Wenn du nur einmalig (oder ab und zu) eine Aktion zeitverzögert ausführen möchtest, dann nutze die Aktion "Ausführung verzögern".

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Baki

Zweiter Punkt:

Du mußt einen Timer nutzen, der die Sekunden zählt.
Jedesmal, wenn der Timer dran ist, erhöhst Du den Wert einer Variablen um 1.
Während der Zug kreuzt, stoppst Du den Timer, oder erhöhst die Variable einfach nicht weiter.
Wenn die Variable dann = 60 ist, hast Du Deine Wartezeit + Zugkreuztzeit. :-)

 

Also nochmal langsam:

Zug 1 = EInfahrender Zug
Zug 2 = Kreuzender Zug
Variable x = Sekundenzähler
Variable y = Blocker, wenn Zug kreuzt: y=1, sonst y=0

1. Zug 1 setzt Variable x=0
2. 1s Timer hat als Aktion: x=x+1, aber nur, wenn z.B. y=0 ist
3. 1s Timer fragt x ab, ob x =60 ist, wenn ja, dann schaltet er das Abfahrsignal für Zug 1
4. Zug 2 will kreuzen und setzt y=1
5. Zug 2 ist fertig mit kreuzen (Zugende) und setzt y=0 -> x kann weiter zählen
Dabei kann der Timer ruhig endlos laufen, da x ja der 60s Zähler ist und auf 0 zurück gesetzt wird.

Gruß
Thomas

 

Bearbeitet von HaNNoveraNer
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Baki

vor 10 Stunden schrieb baki2512:

Zweiter Punkt ist Folgender: Bei mir fährt ein Zug in ein Bahnhofsgleis ein und soll nach zB 60 sek wieder starten. Zwischenzeitlich kreuzt aber ein anderer Zug das Ausfahrtgleis, also Timer stoppen und nach Freigabe des Gleises wieder den Timer starten. Das klappt auch soweit gut - aber der kreuzende Zug kann in der ersten Sekunde den Timer stoppen oder in der letzten Sekunde, der kreuzende Zug gibt bei mir zB eine Laufzeit von 30 Sek vor, der erste Zug kann also 31 Sek oder 89 Sek halten, es sollten aber nur 60 Sek plus Durchfahrtzeit sein. der autoimatische Neustart hilft mir dabei auch nicht, denn der würde auch wieder nur 60 Sek vorgeben. Vielleicht übersehe ich hier etwas. Aber wenn nicht wäre die Frage, ob man die Timerfunktion dahin ergänzen könnte, dass es nicht heißt "Timer starten" sondern "Timer weiterlaufen lassen". 

was du da schreibst erinnert mich sehr an meine eigenen ersten Schritte hier. Ich hatte überhaupt keine Ahnung von Eisenbahn und Modellbau, fand aber MBS interessant, war schnell infiziert, habe aber nicht in dieses Forum geschaut und auf eigene Faust experimentiert und mir die aberwitzigsten Konstrukte zusammenprogrammiert. Zwar funktionierte es, zumindest irgendwie, aber nichts von dem war wirklich erfolgreich und zufriedenstellend. Als ich dann doch noch den Weg ins Forum fand konnte ich unheimlich viel von den erfahrenen MBS-Nutzern und Eisenbahnexperten lernen und habe gemerkt, wie umständlich und ineffektiv meine ersten Versuche waren.

Aufgrund dieser meiner eigenen Erfahrung kann ich dir nur wärmstens empfehlen, dir die Tutorials von @BahnLand bezüglich des Lock-Mechanismus durchzulesen. Das Prinzip ist eigentlich sehr einfach, wenn man's erst verstanden hat und dein oben beschriebenes Problem ist plötzlich überhaupt kein Problem mehr. Ganz ohne Timer. Probier's ruhig mal, es lohnt sich.

Gruß Timba

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Stunden schrieb baki2512:

Bei mir fährt ein Zug in ein Bahnhofsgleis ein und soll nach zB 60 sek wieder starten. Zwischenzeitlich kreuzt aber ein anderer Zug das Ausfahrtgleis, also Timer stoppen und nach Freigabe des Gleises wieder den Timer starten.

Das ist kein guter Ansatz, Baki

Zwei Bedingungen müssen erfüllt sein, damit dein Zug fahren darf

  1. Die Mindestzeit muss abgelaufen sein
  2. Es darf kein Zug kreuzen.

Stopp den Timer (besser: die verzögerte Ausführung) nicht. Sondern setz nach Ablauf der Zeit eine Variable auf true. Sie steht dafür, dass die Wartezeit um ist.

Ein kreuzender Zug setzt eine zweite Variable auf false.  Ist er durch, dann wird diese Variable wieder auf true gesetzt.

Wenn sich eine der beiden Variablen auf true ändert, dann prüf ob die zweite Variable auch auf true steht. Falls ja, dann darf der Zug abfahren.

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...