2. 1. 4 Ereignisroutinen
SYNTAX
Die Verwaltung der Ereignisroutinen erfolgt durch das jeweilige
Objekt, an
den die Ereignisroutine geknüpft ist. Es handelt sich also um
gewöhnliche objektspezifische Befehle der Form:
objCmd option ?arg arg ...?
Ereignisroutinen sind spezielle aktive Prozeduren, die immer dann
automatisch ausgeführt werden, wenn der Scheduler das betreffende
Objekt objCmd anspricht. Folgende Objekte können mit
Ereignisroutinen versehen werden:
Der Kontext einer Ereignisroutine umfasst alle Objekte und die den
Objekten zugehörigen Variablen, die das zugehörige Ereignis
ausgelöst haben. Der Programmierer kann im Skript der
Ereignisroutine mit Hilfe der Kontext-Befehle
auf den Kontext zugreifen.
OBJEKTPARAMETER
| objCmd
events count |
|
Abfrage der Anzahl der insgesamt am Objekt objCmd
hängenden Ereignisroutinen. |
| |
| objCmd
events error |
|
Abfrage der Anzahl der insgesamt am Objekt objCmd
hängenden Ereignisroutinen, in deren Skript beim Ausführen
ein Fehler auftrat. |
| |
| objCmd
events ?class? |
|
Gibt eine Liste der möglichen Ereignisroutinen der
Klasse class zurück, die mit dem Objekt objCmd
verknüpft werden können. Für den Parameter class
ist zulässig:
|
check -
|
Gibt eine Liste von Ereignistypen
zurück, für die Bedingungsroutinen am Objekt objCmd
zulässig sind. Eine Bedingungsroutine erlaubt bzw. verhindert die
Ausführung des jeweiligen Ereignisses an diesem Objekt.
Bedingungsroutinen müssen stets einen booleschen Wert
zurückgeben: 1 - Ereignis kann ausgeführt werden, 0 -
Ereignis kann nicht ausgeführt werden. |
|
after -
|
Gibt eine Liste von Ereignistypen
zurück, für die Ausführungsroutinen am Objekt objCmd
zulässig sind. Eine Ausführungsroutine wird immer unmittelbar
nach dem zugehörigen Ereignis am Objekt ausgeführt. |
|
type -
|
Gibt eine Liste der für dieses Objekt
zulässigen Klassen von
Ereignisroutinen zurück. |
|
all -
|
Gibt eine Liste der für dieses Objekt
zulässigen Paarungen von Klasse (1.
Element) und Ereignistyp (2.
Element) zurück. Die gleiche Wirkung erziehlt man, wenn der
Parameter class weggelassen wird. |
|
Die folgenden Befehle existieren jeweils für Bedingungs- und
Ausführungsroutinen. Die Unterscheidung erfolgt anhand des
Parameters class, für den die Werte check
und after eingesetzt werden können.
| objCmd
class event length |
|
Gibt die Anzahl der Ereignisroutinen der Klasse class
und des Ereignistyps event
im Objekt objCmd an. |
| |
| objCmd
class event error |
|
Gibt die Anzahl der Ereignisroutinen der Klasse class
und des Ereignistyps event
im Objekt objCmd an, bei denen bei der Ausführung des
Skripts ein Fehler auftrat. |
| |
| objCmd
class event clear |
|
Löscht alle Ereignisroutinen der Klasse class
und des Ereignistyps event
aus dem Objekt objCmd. |
| |
objCmd
class event id ?string?
objCmd class event index ?integer? |
|
Abfrage der IDs bzw. Indices aller Ereignisroutinen der
Klasse class und des Ereignistyps
event. Bei Angabe von integer wird eine neue
Ereignisroutine mit der ID string erzeugt, falls noch keine
Routine mit dieser ID existiert. |
| |
objCmd class event
id string option ?value?
objCmd class event index integer
option ?value? |
|
Für die Ereignisroutine mit der ID string bzw.
mit dem Index integer können optional folgende Parameter
abgefragt bzw. gesetzt werden (Parameter option):
|
id -
|
Abfrage oder Modifikation der ID der Ereignisroutine. |
|
index -
|
Abfrage oder Modifikation des Index der
Ereignisroutine. |
|
remove -
|
Löschen der Ereignisroutine. |
|
error -
|
Abfrage, ob ein Fehler im Skript der Ereignisroutine
auftrat. |
|
condition -
|
Abfrage oder Modifikation des Skriptes der
Ereignisroutine. Der Parameter value muss in diesem Fall ein
vollständiges und fehlerfreies Tcl-Skript sein. Andernfalls wird
ein syntaktischer Fehler angezeigt. |
|
VERFÜGBARE EREIGNISROUTINEN
check
| |
queue |
machine |
src |
tech |
branch |
| enter |
x |
x |
|
x |
x |
| leave |
x |
x |
|
|
|
| supply |
x |
x |
|
|
|
| insetup |
x |
x |
|
|
|
| create |
|
|
x |
|
|
after
| |
queue |
machine |
src |
tech |
branch |
| enter |
x |
x |
|
x |
x |
| leave |
x |
x |
|
|
|
| ready |
x |
x |
|
|
|
| forward |
x |
x |
|
|
|
| off |
x |
x |
|
|
|
| on |
x |
x |
|
|
|
| block |
x |
x |
|
|
|
| unblock |
x |
x |
|
|
|
| supply |
x |
x |
|
|
|
| insetup |
x |
x |
|
|
|
| setup |
x |
x |
|
|
|
| create |
|
|
x |
|
|
BEISPIEL
Bei der Verwendung von Down-Objekten im Simulationsmodell kann es
sinnvoll sein, den Start der Bearbeitung eines Auftrages auf einer
Station zu verhindern, wenn diese in naher Zukunft ausgeschaltet wird.
Ist im Modell etwa Personal durch Maschinen abgebildet, so sollte kurz
vor dem Schichtende kein neuer Auftrag begonnen werden. Realisiert
werden kann dies durch eine Ereignisroutine der Klasse check und vom Ereignistyp enter, deren Skript die Prozedur test aufruft:
stationCmd check enter id
1 condition {[test]}
Die Prozedur test muss
dafür im Namensraum der betreffenden Station wie folgt angelegt
werden.
stationCmd :: proc test { }
{
set buffer [expr [this down id Aus1 date] -
[watch]]
if {$buffer >= 600} {
return 1
} else {
return 0
}
}
Hierbei wird ein Transfer auf die Station durch den
Rückgabewert von 0 verhindert, wenn bis zu deren Ausschalten
weniger als 10min verbleiben. Dabei wird der Verfügbarkeitszustand
der Station über das Down-Objekt Aus1
gesteuert, andernfalls muss die Restverfügbarkeit
für alle Down-Objekte der Station abgefragt werden. Über das context-Kommando kann man
zusätzlich den zu transferierenden Auftrag und somit dessen
Bearbeitungszeit auf der Station abfragen, womit der betrachtete Puffer
auftragsspezifisch abgepasst werden kann.
simcron MODELLER 3.4
Copyright © 2025 simcron
21.05.2025
|