Peter Lorenz English smaller fonts Simulation und Animation

4.2. Blöcke, Steueranweisungen und Compilerdirektiven


Das erste Beispiel eines GPSS/H-Modells, Joe's Barbershop, enthält Blöcke (GENERATE, ADVANCE, SEIZE, RELEASE, TERMINATE ) und Steueranweisungen (SIMULATE, START, END ). Hier sollen beide Klassen von Anweisungen beschrieben und miteinander verglichen werden. Weiterhin werden die im GPSS/H definierten Simulationsuhren beschrieben und an Beispielen erklärt.
Für den Test von Programmen haben sich Traces, das sind Laufprotokolle von Transaktionen, gut bewährt. Sie werden durch die Blöcke TRACE und UNTRACE begonnen und beendet.

SteueranweisungenTop Line

Steueranweisungen dienen primär der Steuerung der Simulation. SIMULATE, START und END sind Beispiele dieser Steueranweisungen. Im Laufe der Entwicklung von GPSS sind viele neue hinzugekommen. Die meisten von ihnen sind im Abschnitt 3 behandelt worden. Zu ihnen zählen LET, PUTPIC, IF-THEN-ELSE-ELSEIF-ENDIF, GOTO und DO.

Bezüglich aktueller Versionen von GPSS/H kann man die Gesamtheit der Steueranweisungen als eine vollständige Programmiersprache betrachten. Zu dieser Programmiersprache muß man auch die Compilerdirektiven hinzurechnen.

Die Steueranweisungen werden in der Reihenfolge ausgeführt, wie sie im Programm erscheinen, falls diese Ausführungsordnung nicht durch Sprung-, Verzweigungs- oder Zyklusanweisungen geändert wird. Das ist ebenso wie in allen anderen anweisungsorientierten Programmiersprachen.

Wenn zwischen den Steueranweisungen Blöcke oder Blockanweisungen auftreten, werden diese zunächst übergangen oder ignoriert.

Der Prozeß der Ausführung der Steueranweisungen wird durch jede START -Anweisung unterbrochen und durch die END -Anweisung abgeschlossen. Jede START -Anweisung bewirkt den Start der Blockverarbeitung.

Blöcke Top Line

Blöcke oder Blockanweisungen beschreiben den Lauf oder Fluß der Transaktionen. Die Folge der Blöcke ist ein Hauptteil des Simulationsmodells.

Im Einführungsbeispiel sind die Blöcke GENERATE, ADVANCE, SEIZE, RELEASE und TERMINATE aufgetreten. Ein Block verkörpert eine Folge von internen Operationen (oder eine Methode), die immer dann ausgeführt wird, wenn eine Transaktion den Block betritt.

Die Blöcke bilden den sichtbaren Teile eines GPSS-Modells. Demgegenüber bleiben die Modellelemente wie Transaktionen, Einrichtungen, Warteschlangen, Speicher, . . . unsichtbar.

Sichtbar ist der GENERATE -Block, der die Transaktion erzeugt.
Unsichtbar bleibt die erzeugte Transaktion.
Sichtbar ist der SEIZE -Block, der die Belegung einer Einrichtung beschreibt. Unsichtbar bleibt die Einrichtung.

Eine der ersten Funktionen des Compilers besteht darin, die Blöcke von allen anderen Programmkomponenten zu trennen, weil sie anders behandelt und auch später ausgeführt werden, als Compilerdirektiven und Steueranweisungen.

Die Blockverarbeitung oder Blockausführung, d.h. die Aktivierung der GENERATE -Blöcke zur Erzeugung von Transaktionen, welche ihren Weg durch die auf GENERATE folgenden Blöcke beginnen, wird immer dann gestartet, wenn im Verlauf der Ausführung der Steueranweisungen eine START -Anweisung erreicht wird. Zu diesem Zeitpunkt wird die weitere Ausführung der Steueranweisungen unterbrochen und die Blockverarbeitung oder ein Simulationslauf beginnt. Ein Simulationslauf umfaßt alle Blöcke, die im Quelltext des Programmes vor der aktuellen START -Anweisung stehen, welche die Blockausführung veranlaßt hat.

Die Blockverarbeitung wird solange fortgesetzt, bis der Startzähler kleiner oder gleich Null wird.

Aus dem Einführungsbeispiel (Joe's Barbershop ) ist bereits bekannt, wie ein TERMINATE -Block mit der START -Anweisung kooperiert: Immer, wenn eine Transaktion den Block betritt, wird der Wert seines ersten Operanden (Operand A) vom Startzähler subtrahiert.

Der Anfangswert des Startzählers ist durch den Operanden A der START -Anweisung bestimmt.Nach Abschluß dieser Phase der Blockausführung, die man oft auch als Simulationslauf bezeichnet, wird die Ausführung der Steueranweisungen wieder aufgenommen. Diese Wiederaufnahme beginnt mit der ersten, der aktuellen START-Anweisungen folgenden Anweisung.

Wenn in einem Programm mehrere START -Anweisungen vorkommen, werden die Blöcke mehrfach ausgeführt. Die aktuelle START -Anweisung veranlaßt die Ausführung aller Blöcke.

Compilerdirektiven Top Line

Compilerdirektiven werden zur Compilierungszeit ausgeführt, sobald sie vom Compiler aufgefunden werden.

Ein Beispiel ist die INTEGER -Direktive, welche die Existenz einer oder mehrerer Ampervariablen ankündigt. Ein anderes Beispiel ist die EQU-Direktive, die während der Compilierzeit dem Namen eines Modellelementes einen Wert zuordnet. Die Compilerdirektiven sind zur Ausführungszeit bedeutungslos.

Eine Übersicht über wichtige Compilerdiretiven findet man im Abschnitt 3.3.

SimulationsuhrenTop Line

GPSS führt zwei Simulationsuhren:

Mit der Ausführung der ersten START -Anweisung beginnen die beiden Simulationsuhren von GPSS, die Relative Uhr und die Absolute Uhr, vom Anfangswert 0 an zu laufen.

Diese Uhren laufen weder kontinuierlich noch schrittweise: Sie springen von einem Ereigniszeitpunkt zum jeweils nächsten.

Die interne Steuerung von GPSS organisiert zyklisch

AC1 und C1 bezeichnen Numerische Standardattribute, die bei jedem Aufruf den gerade aktuellen Zeitwert besitzen.

Die Relative Uhr mißt die abgelaufene Simulationszeit seit Beginn eines Simulationslaufes oder seit der letzten Ausführung einer RESET-, BRESET-, CLEAR- oder BCLEAR -Anweisung.

Die Absolute Uhr mißt die abgelaufene Simulationszeit seit Beginn eines Simulationslaufes oder seit der letzten Ausführung einer CLEAR- oder BCLEAR -Anweisung.

Die folgenden Programmbeispiele soll einen ersten Einblick in die Funktion der Simulationsuhren vermitteln.

Beispiel 1

Im folgenden Beispiel werden zwei Läufe gestartet. In jedem Lauf wird nur eine Transaktion erzeugt, die nach Erreichen des TERMINATE -Blockes den Abbruch der Simulation veranlaßt. Nach jedem Lauf soll auf den Stand der Relativen und der Absoluten Uhr geachtet werden.

Wenn man die Simulation startet, erhält man eine Resultatdatei, aus der folgendes hervorgeht:
Es sind zwei Simulationsläufe protokolliert. Die beiden Läufe sind durch die zwei START -Anweisungen im Programmtext veranlaßt worden.
Am Ende des ersten Laufes haben beide Simulationsuhren den Wert 50 erreicht. Denn die erste Transaktion ist zum Zeitpunkt 0 erzeugt worden, hat 50 Zeiteinheiten gewartet und anschließend den Lauf beendet.
Nun stellt RESET die Relative Uhr auf Null zurück, während die Absolute Uhr ihren alten Wert 50 behält. Die zweite Transaktion wird 80 Zeiteinheiten nach der ersten erzeugt. Das ist der Zeitpunkt 30 im zweiten Lauf.Sie wartet durch ADVANCE wieder 50 Zeiteinheiten. Danach hat C1 den Wert 80 und AC1 den Wert 130.

Beispiel 2

Das folgende Beispiel enthält wieder nur drei Blöcke:
GENERATE erzeugt eine Transaktion,
BPUTPIC schreibt eine Zeile in ein Report-File und
TERMINATE vernichtet die erzeugte Transaktion.
Der Startzähler wird damit von seinem Anfangswert 1 auf Null reduziert und die Blockausführung endet.
So entsteht eine Zeile je Start der Blockausführung. Zuerst gibt es drei START -Anweisungen. Die Ampervariable &ISTART dient der Numerierung und Unterscheidung der Blockausführungsphasen oder Simulationsläufe.
Anschließend liegen START -Anweisungen in DO -Schleifen. Damit werden Zyklen zur Ausführung von Simulationsläufen organisiert.

Im folgenden wird nicht das Standard-Ausgabefile *.LIS wiedergegeben, sondern die Datei, REPORT.DOC die im obenstehenden Programm als Resultatfile definiert worden ist.
                                   .
                                   .
   BLOECKE UND STEUERANWEISUNGEN                                   .
  Dieses Programm demonstriert das Zusammenwirken  
  von Steueranweisungen und Bloecken.  Die obige PUTPIC-Steueranweisung 
  wird ausgefuehrt, bevor die Blockverarbeitung beginnt; 
  ebenso FILEDEF und LET.
              Erste Transaktion wurde erzeugt zur   
  LAUFNR.     Absoluten Zeit   Relativen Zeit   
     1       7.703            7.703
     2      17.696           17.696
     3      30.094           30.094
     4      37.135           37.135
     5      43.342           43.342
Jetzt mit der Steueranweisung RESET
     6      56.026           12.684
     7      65.430            9.404
     8      79.025           13.595
Jetzt mit der Steueranweisung CLEAR
     9       5.925            5.925
    10       6.858            6.858
    11      13.898           13.898
Das war's.

Die hier gezeigte Resultatdatei gibt gleichzeitig einen Einblick in die Funktion der später zu behandelnden Steueranweisungen CLEAR und RESET .

RESET setzt die Relativzeit C1 auf Null und läßt die Absolutzeit AC1 unverändert
CLEAR setzt Relativ- und Absolutzeit auf Null zurück

Weitere Funktionen von CLEAR und RESET werden im Abschnitt 5 erklärt .

TRACE-Protokolle Top Line

Simulationsprogramme gelten als fehleranfällig. Sicher hat man mehr Möglichkeiten inhaltlicher Fehler, als in anderen Feldern der Programmierung. Andererseits stehen mit der Blockstatistik und den hier einzuführenden TRACE -Protokollen gute Testhilfen bereit.

TRACE
ist ein Block, der die eintretende Transaktion mit einer Markierung versieht. Diese veranlaßt die Ausgabe eines Protokolls bei jedem Eintritt in einen Block. TRACE hat keine Operanden.
UNTRACE
ist ein Block, der die durch TRACE gesetzte Markierung wieder löscht, so dass anschließende Blockeintritte nicht mehr protokolliert werden.

TRACE kann sehr umfangreiche Ausgaben bewirken und sollte deshalb mit Sorgfalt benutzt werden.

Beispiel

Das folgende Beispiel erzeugt das TRACE -Protokoll für das Single-Server-Modell aus 4.1. Die Protokollierung erfolgt hier für die mittleren Blöcke. Der Anfangswert des Startzählers wurde hier auf 5 gesetzt, um den Umfang des Protokolls in überschaubarer Größe zu halten.


Kontrollfragen Top Line

  1. Beschreiben Sie die Funktion von GPSS/H-Steueranweisungen!
  2. Geben Sie drei Beispiele für Steueranweisungen an!
  3. Vergleichen Sie die Funktion von Steueranweisungen und Compilerdirektiven!
  4. Wodurch wird die Blockausführung veranlaßt?
  5. Unter welchen Bedingungen werden Steueranweisungen später ausgeführt, als Blockanweisungen?
  6. Geben Sie drei Beispiele für Compilerdirektiven an!
  7. Wann wird die Blockausführung abgebrochen und was geschieht danach?
  8. Welche Simulationsuhren gibt es im GPSS/H und wie unterscheiden sie sich?
  9. Wodurch kann die Absolute Uhr auf Null zurückgesetzt werden?
  10. Wodurch kann die Relative Uhr auf Null zurückgesetzt werden?
  11. Wann erfolgt ein neuer Eintrag in der Liste der zukünftigen Ereignisse?
  12. Wozu dienen die Blöcke TRACE und UNTRACE?
SAHome previous next up Englishsmaller fonts Top Line
Last Modified Fri 05-27-11 06:54 GMT Valid CSS!

Comments please to:pelosim@yahoo.com