Simulation - Timer einbinden

28/10/2007 - 13:05 von Robert Hauffe | Report spam
Hallo,

Ich habe mehrere Maschinen, welche mit Linien verbunden sind. Siehe auch
Bild (zweite Link ist nur, falls der erste nicht funktioniert):

http://812.knu-systems.de/temp/simu.gif (~40 kb)
http://web36.area3.knu-systems.net/temp/simu.gif (~40 kb)

(@ Karsten: Falls du das hier liest: Nochmals danke für dein
Beispielprogramm zum Zeichnen.)

Folgendes soll passieren:

Wenn eine Maschine das erste Mal Material erhàlt, soll der
Eingangspuffer um die entsprechende Anzahl erhöht werden. Danach soll
ein kleines Quadrat auf der Maschine gezeichnet werden, welches für die
Rüst- und Ausführungszeit verbleibt. Im Anschluss daran soll der
Ausgangspuffer die Anzahl eins erhöht werden. Wird die Voreinstellung
für das Fassungsvermögens des Ausgangspuffers erreicht, soll sich das
Quadrat in der angegebenen Transportzeit über die Linie zu der nàchsten
Maachine bewegen. Der Ausgangspuffer wird um den Betrag geleert, wie der
Eingangspufer der neuen Maschine aufnehmen kann. Ist das Quadrat dort
angekommen, beginnt das Spiel erneut.

Ist die obige Initialisierung einer Maschine abgeschlossen, dann muss
zwischen den Wechseln des Quadrats von einer Maschine zu einer anderen
geprüft werden, ob letztere die Menge überhaupt aufnehmen kann. Wenn
nicht, muss gewartet werden, bis dies möglich ist. Das hat zufolge, das
der Ausgangspuffer der ersteren Maschine vollaufen kann. Ist dies
passiert, muss die Maschine ihre Arbeit unterbrechen.

Die Puffer und die Zeiten sind alle mit einem Ereignisauslöser versehen.
Ändert sich deren Wert, wird ein Ereignis ausgelöst. Weiterhin gibt es
einen Timer, welcher jede Sekunde ein Ereignis auslöst.

Das Problem ist jetzt, dass ich noch nicht so richtig weiß, wie ich den
Timer einbinden kann.

Zum Beispiel beim Start. Die Maschine soll jetzt warten bis die Rüstzeit
abgelaufen ist. Dazu muss die Anzeige "Rüstzeit" jede Sekunde um eins
heruntergesetzt werden. Wie kann ich das realisieren? Gibt es so etwas
wie "For Each timertick"?

Das mit dem Qaudrat ist noch ein ganz anderes Problem. Aber darauf komme
ich vielleicht spàter noch einmal zurück (eventuell lasse ich es auch
weg). Erst einmal eins nach dem anderen.

Robert
 

Lesen sie die antworten

#1 Oliver Tell
28/10/2007 - 18:04 | Warnen spam
"Robert Hauffe" wrote:

Hallo,

Ich habe mehrere Maschinen, welche mit Linien verbunden sind. Siehe auch
Bild (zweite Link ist nur, falls der erste nicht funktioniert):

http://812.knu-systems.de/temp/simu.gif (~40 kb)
http://web36.area3.knu-systems.net/temp/simu.gif (~40 kb)

(@ Karsten: Falls du das hier liest: Nochmals danke für dein
Beispielprogramm zum Zeichnen.)

Folgendes soll passieren:

Wenn eine Maschine das erste Mal Material erhàlt, soll der
Eingangspuffer um die entsprechende Anzahl erhöht werden. Danach soll
ein kleines Quadrat auf der Maschine gezeichnet werden, welches für die
Rüst- und Ausführungszeit verbleibt. Im Anschluss daran soll der
Ausgangspuffer die Anzahl eins erhöht werden. Wird die Voreinstellung
für das Fassungsvermögens des Ausgangspuffers erreicht, soll sich das
Quadrat in der angegebenen Transportzeit über die Linie zu der nàchsten
Maachine bewegen. Der Ausgangspuffer wird um den Betrag geleert, wie der
Eingangspufer der neuen Maschine aufnehmen kann. Ist das Quadrat dort
angekommen, beginnt das Spiel erneut.

Ist die obige Initialisierung einer Maschine abgeschlossen, dann muss
zwischen den Wechseln des Quadrats von einer Maschine zu einer anderen
geprüft werden, ob letztere die Menge überhaupt aufnehmen kann. Wenn
nicht, muss gewartet werden, bis dies möglich ist. Das hat zufolge, das
der Ausgangspuffer der ersteren Maschine vollaufen kann. Ist dies
passiert, muss die Maschine ihre Arbeit unterbrechen.

Die Puffer und die Zeiten sind alle mit einem Ereignisauslöser versehen.
Ändert sich deren Wert, wird ein Ereignis ausgelöst. Weiterhin gibt es
einen Timer, welcher jede Sekunde ein Ereignis auslöst.

Das Problem ist jetzt, dass ich noch nicht so richtig weiß, wie ich den
Timer einbinden kann.

Zum Beispiel beim Start. Die Maschine soll jetzt warten bis die Rüstzeit
abgelaufen ist. Dazu muss die Anzeige "Rüstzeit" jede Sekunde um eins
heruntergesetzt werden. Wie kann ich das realisieren? Gibt es so etwas
wie "For Each timertick"?

Das mit dem Qaudrat ist noch ein ganz anderes Problem. Aber darauf komme
ich vielleicht spàter noch einmal zurück (eventuell lasse ich es auch
weg). Erst einmal eins nach dem anderen.

Robert





Hallo Robert,

For Each timertick gibt es in der Tat, nennt sich aber
System.Windows.Forms.Timer.Tick bzw. System.Timers.Timer.Elapsed :-)

In der entsprechenden Ereignisprozedur prüftst du zuerst, ob die Rüstzeit
größer als Null ist. Wenn ja zàhlst du die Rüstzeit einfach um eins runter
und gibst die aktuellen Werte dann über deine GUI aus.

MfG,
Oliver

Ähnliche fragen