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:

  • queue - 
  • Warteschlange
  • machine - 
  • Maschine
  • src - 
  • Quelle
  • tech - 
  • Technologie
  • branch - 
  • Verzweigung

    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.