2. 1. 8 Routen
Die Stationen werden durch spezielle Routing-Objekte miteinander
verknüpft. Die Existenz von Routing-Objekten im Simulationsmodell
ist die Voraussetzung für die zielgerichtete Bewegung der Jobs.
Grundsätzlich gibt es zwei Routing-Objekte:
Die Technologie beschreibt eine einfache Folge von Arbeitsgängen,
d.h., jeder Arbeitsgang hat genau einen Vorgänger (außer dem
Startarbeitsgang) und einen Nachfolger (außer dem
Schlussarbeitsgang). Jeder Arbeitsgang ist mit genau einer Station
oder
genau einer Verzweigung verknüpft. Eine Station bzw. Verzweigung
darf von einem Arbeitsgang innerhalb einer Technologie auch mehrfach
verwendet werden, so dass auf diese Weise zyklische Routen gebildet
werden können.
Verzweigungen fassen alternative Arbeitsgänge zusammen und bilden
so eine 1-aus-n-Entscheidung
ab
(n - Anzahl der Zweige).
Darüber hinaus können auch m-aus-n-Entscheidungen abgebildet
werden (m<n). Bei m=n
werden alle in der Verzweigung enthaltenen Arbeitsgänge
gleichzeitig gestartet und parallel ausgeführt.
Obwohl beide Objekte unterschiedliche Aspekte des Routings
beschreiben,
beruhen sie doch auf einer gemeinsamen Listen-Struktur. Die Befehle
sind daher, abgesehen von wenigen Ausnahmen, identisch. Der Befehl routeCmd steht für techCmd und branchCmd. Befehle, die
ausschließlich für Technologie- bzw. Verzweigungs-Objekte
gelten, werden dagegen mit techCmd
bzw. branchCmd bezeichnet.
SYNTAX
Der Tcl-Befehl routeCmd erlaubt Operationen mit
Technologie-
bzw. Vezweigungs-Objekten. Er hat die allgemeine Form:
routeCmd option ?arg arg
...?
option und args bestimmen das exakte
Verhalten des Befehls. Ein Routing-Objekt stellt eine
zweidimensionale Matrix dar, die beiden Dimensionen Arbeitsgang pass
und Spezifikator spec oder specindex werden als option
angegeben. Um die Matrixelemente von Spezifikator und Arbeitsgang
(Zweig)
anzusprechen, müssen beide Dimensionen angegeben werden, die
Reihenfolge spielt dabei keine Rolle. Über die allgemeinen Objektbefehle hinaus sind folgende Befehle
für Routing-Objekte definiert:
OBJEKTPARAMETER
| routeCmd pass
length |
|
Gibt die Anzahl der Arbeitsgänge (Zweige) des
Routing-Objektes
zurück. |
| |
| routeCmd pass
exchange
index1 index2 |
|
Vertauscht den index1-ten Arbeitsgang (Zweig)
mit
dem index2-ten
Arbeitsgang. |
| |
| routeCmd pass
move
index1 index2 |
|
Verschiebt den index1-ten Arbeitsgang (Zweig)
an die
Position index2. |
| |
| routeCmd pass
index option ?arg1? ?arg2?
?arg3? |
|
Der Arbeitsgang (Zweig) an der Position index
wird
adressiert. Bei der Angabe von option können
folgende
Parameter des Arbeitsgangs (Zweigs) abgefragt oder gesetzt
werden:
| option |
arg1 |
arg2 |
arg3
|
|
|
name
|
?string? |
- |
-
|
Abfrage oder Setzen eines frei wählbaren Namens
des
Arbeitsgangs (Zweigs). |
|
refcount
|
|
- |
-
|
Gibt die Anzahl der auf diesen Arbeitsgang
gerichteten
Referenzen zurück. Referenzierte Arbeitsgänge
können
nicht gelöscht werden. |
|
remove
|
|
- |
-
|
Der Arbeitsgang (Zweig) wird entfernt (nur
möglich, wenn
nicht
mehr referenziert) |
|
insert
|
stationCmd |
- |
-
|
Vor dem Arbeitsgang (Zweig) wird die Station stationCmd
als
Arbeitsgang eingefügt (siehe routeCmd
pass insert). |
|
station
|
?stationCmd? |
- |
-
|
Abfrage oder Setzen der Station des
Arbeitsgangs
(Zweigs). |
|
credit
|
?double? |
- |
-
|
Abfrage oder Setzen der auf dem Arbeitsgang
(Zweig)
gebuchten
Menge. |
|
collect
|
?double? |
- |
-
|
Abfrage oder Setzen der im Arbeitsgang (Zweig)
gesammelten
Menge.
(Im Zusammenhang mit needCmd
collect) |
|
need
|
?needCmd? |
- |
-
|
Abfrage oder Setzen des Bedarfsobjekts des
Arbeitsgangs (Zweigs)
Abfrage oder Setzen des Bedarfsobjekts des
Arbeitsgangs (Zweigs). |
distrib
|
busy
|
offset
|
?distribCmd?
|
Abfrage oder Setzen der Stochastik
für
die absolute Störung der Bearbeitungszeit des
Arbeitsgangs (Zweigs)
|
distrib
|
busy
|
factor
|
?distribCmd?
|
Abfrage oder Setzen der Stochastik
für
die relative Störung der Bearbeitungszeit des
Arbeitsgangs (Zweigs)
|
|
distrib
|
gate
|
?distribCmd?
|
-
|
Abfrage oder Setzen der Stochastik
für
die Torzeit der Station im Arbeitsgang (Zweig)
|
split
|
unit
|
?type?
|
-
|
Abfrage oder
Setzen, nach
welchem Typ gesplittet werden soll. Zulässige
Typen sind:
{} - kein Split
size -
Die
Jobgröße wird gesplittet.
quantity
- Die
Jobmenge wird gesplittet.
|
|
split
|
distrib
|
?distribCmd?
|
-
|
Abfrage oder
Setzen, nach
welcher Stochastik gesplittet wird.
|
|
split
|
pattern
|
?string?
|
-
|
Abfrage oder Setzen
des
Namensmusters für alle erzeugenden Kinderjobs. Der
String pattern
kann
Formatierungsanweisungen enthalten, die mit %
eingeleitet werden. Die
Syntaxregeln für den Formatstring sind an die
C-Bibliotheksfunktion printf
angelehnt. Die wichtigsten Anweisungen sind:
- %p Name des Eltern-Jobs
- %x Zähler, von 1 beginnend
Desweiteren lässt sich einstellen:
- Anzahl der zu übernehmenden Zeichen aus dem
Eltern-Namen
- Anzahl der darzustellenden Zeichen
- Anzahl der Ziffern des Zählers
- Rechts- oder linksbündig
Beispiel 1: Job A wird gesplittet mit "%x. Kind
von %p" -> "1. Kind
von A", "2. Kind von A", ...
Beispiel 2: Job A wird gesplittet mit "Teil %.2x
von %p" -> "Teil 01
von A", "Teil 02 von A", ...
|
merge
|
unit
|
?type?
|
-
|
Abfrage oder
Setzen, nach
welchem Typ zusammengefasst werden soll. Zulässige
Typen sind:
{} - kein Merge
size -
Die
Jobgröße wird zusammengefasst.
quantity
- Die
Jobmenge wird zusammengefasst.
|
|
merge
|
kill
|
?boolean?
|
-
|
Abfrage oder Setzen
der
Eigenschaft, ob Kinderjobs nach dem Merge gelöscht
werden (1) oder
nicht (0).
|
|
next
|
priority |
jobCmd - |
-
|
Abfrage der für den angegebenen Job jobCmd
wirksamen Priorität als Kombination von
Arbeitsgang- und
Jobparametern für den Transfer zum nachfolgenden
Arbeitsgang. |
|
next
|
enable |
jobCmd - |
-
|
... wirksame Aktivität ... |
|
next
|
enter |
jobCmd - |
-
|
... wirksame Freigabe ... |
|
next
|
need |
jobCmd - |
-
|
... wirksame Bedarfserfüllung ... |
|
next
|
opt |
jobCmd - |
-
|
... wirksame Operationszeit ... |
|
next
|
tpt |
jobCmd - |
-
|
... wirksame Gesamtfertigungszeit ... |
|
next
|
rpt |
jobCmd - |
-
|
... wirksame Restfertigungszeit ... |
|
next
|
ldd |
jobCmd - |
-
|
... wirksamer Endtermin (identisch mit
Jobtermin) ... |
|
next
|
slack |
jobCmd - |
-
|
... wirksame Schlupfzeit ... |
|
next
|
steps |
jobCmd - |
-
|
... verbleibende Anzahl an
Maschinenarbeitsgängen
... |
| Arbeitsgangparameter, die
spezifikatorbezogen angegeben werden (time,
forward, size, quandep,
setup, quantity, enable, priority, esd),
können als option
eingesetzt werden (siehe option),
um eine Liste der Werte für
alle Spezifikatoren zu erhalten (Spaltenvektor).
Wird zusätzlich
ein
Wert arg1 angegeben wird dieser Wert für
alle
Spezifikatoren gesetzt. |
|
| |
| routeCmd spec|specindex
length |
|
Gibt die Anzahl der Spezifikatoren im Routing-Objekt
zurück. Ein Routing-Objekt muss mindestens einen
Spezifikator
besitzen (spec length > 0). |
| |
| routeCmd spec|specindex
append specValue |
|
Hängt einen weiteren Spezifikator mit dem Wert specValue
(pattern) an das Routing-Objekt. Der neue Spezifikator
erhält
den Index spec length+1
(zugleich Rückgabewert des Befehls). Der Versuch, einen
bereits
vorhandenen Spezifikatorwert anzuhängen, erzeugt eine
Fehlermeldung. Bei einem neu angelegten Routing-Objekt
wird automatisch
ein Spezifikator mit dem Wert 0 (specindex = 1)
eingerichtet. |
| |
| routeCmd specindex
?index1? ?index2? |
|
Gibt eine Liste der Spezifikatoren, beginnend mit dem
Index index1
( = 1, 2, ..., spec
length) und endend mit dem Index index2
( = index1,
index1+1,
..., spec length)
zurück. Fehlt der Parameter index2, wird nur der
Spezifikator an der Stelle index1 zurückgegeben.
Fehlen
beide Indices, wird eine geordnete Liste aller
Spezifikatoren
zurückgegeben. Ungültige Indices erzeugen eine
Fehlermeldung. |
| |
| routeCmd spec
specValue |
|
Gibt den Index (= 1, ..., spec length) zum
Spezifikator specValue
zurück (0 = Spezifikator ist nicht enthalten). |
| |
routeCmd spec
specValue
option ?arg?
routeCmd specindex index option ?arg? |
|
Der Spezifikator specValue bzw. mit dem Index index
wird adressiert. Bei der Angabe von option können
folgende
Parameter des Spezifikators abgefragt oder gesetzt werden:
| option |
arg |
|
|
name
|
?string?
|
Abfrage oder Setzen eines frei wählbaren Namens
des Spezifikators. |
|
refcount
|
-
|
Gibt die Anzahl der auf diesen Spezifikator
gerichteten Referenzen zurück. Referenzierte
Spezifikatoren
können nicht gelöscht werden. |
|
remove
|
-
|
Der Spezifikator wird entfernt (nur möglich,
wenn
nicht mehr referenziert) |
|
value
|
?newSpecValue?
|
Abfrage oder Setzen des Spezifikatorwerts. |
|
index
|
-
|
Gibt den Index des Spezifikators zurück. |
| Arbeitsgangparameter, die
spezifikatorbezogen angegeben werden (time,
forward, size, quandep,
setup, quantity, enable, priority, esd),
können als option
eingesetzt werden (siehe option),
um eine Liste der Werte des Spezifikators für alle
Arbeitsgänge zu erhalten (Zeilenvektor). |
|
| |
routeCmd pass
passIndex spec specValue option
?value?
routeCmd pass passIndex specindex
specIndex option ?value?
routeCmd spec specValue pass
passIndex option ?value?
routeCmd specindex specIndex pass
passIndex option ?value? |
|
Abfrage oder Setzen logistischer Parameter von
Arbeitsgängen entsprechend option. Zulässige
Optionen
sind:
|
time
-
|
Bearbeitungszeit (value-Typ: double
oder Inf). Voreinstellung ist 0. |
|
forward
-
|
Weitergabezeit (value-Typ: time).
Voreinstellung ist Inf. |
|
size
-
|
Größe (value-Typ: double
oder job). Bei Angabe von job gilt
die Größe
des Jobs im Arbeitsgang (Zweig). Voreinstellung
ist job. |
|
priority
-
|
Priorität (value-Typ: integer
oder job).
Bei Angabe von job gilt die Priorität des
Jobs im
Arbeitsgang (Zweig). Voreinstellung ist job. |
|
enable
-
|
Aktivität (value-Typ: boolean).
Voreinstellung ist 1. |
|
quandep
-
|
Mengenabhängigkeit (value-Typ: boolean).
Voreinstellung
ist 1. |
|
setup
-
|
Rüstarbeitsgang (value-Typ: boolean).
Voreinstellung
ist 0. |
|
quantity
-
|
Menge (value-Typ: double oder job).
Bei
Angabe von job gilt die Menge des Jobs im
Arbeitsgang
(Zweig).
Voreinstellung ist job. |
|
esd
-
|
Freigabetermin (esd - earliest supply date, value-Typ:
date). Voreinstellung ist 0. |
|
| Beispiele: |
|
routeCmd pass 1 spec 9 time p31
routeCmd spec 9 esd
p31 p32 p33 p34
routeCmd pass 1 specindex 3 priority
p31
routeCmd spec 0 pass 1 forward p21
routeCmd specindex 3 enable p31 p32
p33
p34
routeCmd pass 3 setup p13 p23
p33
|
|
| techCmd pass
passIndex
?specindex specIndex? skip ?boolean? |
|
0 - der Arbeitsgang wird
ausgeführt (Standardeinstellung); 1 - der Arbeitsgang wird
übersprungen. Der Befehl kann formal auch auf die Zweige
einer
Verzweigung angewendet werden, hat dort aber keine
Wirkung.
|
|
| branchCmd type ?value? |
|
Abfrage oder Modifikation
des
Typs der Verzweigung. value
setzt den Typ der Verzweigung. Möglich sind die Typen:
|
sort -
|
sortierende Verzweigung |
|
random
-
|
zufällige Verzweigung |
|
load
-
|
lastabhängige Verzweigung |
|
balance
-
|
lastabhängige Verzweigung, gleichmäßig
verteilend |
|
static
-
|
statische Verzweigung |
Voreinstellung ist sort.
|
|
| branchCmd active ?index?
|
|
Abfrage oder Setzen des
aktiven
Zweiges. Der Zweig index
(= 1, 2, ..., length)
wird
aktiviert. Ohne den Parameter index wird der Index
des
aktivierten Zweiges zurückgegeben. Ist kein Zweig
aktiviert, wird
0 zurückgegeben. |
|
| branchCmd lpass
?index? pass
?passIndex? |
|
Abfrage oder Setzen des
letzten
Arbeitsganges
in einem Zweig, der für die Entscheidung bei lastabhängigen Strategien
(load,
balance) herangezogen wird. Der letzte zu prüfende
Arbeitsgang
des Zweigs index (= 1, 2, ..., length)
wird mit dem Arbeitsgang passIndex des mit diesem
Zweig
verbundenen Technologie-Objektes verknüpft. Ohne den
Parameter passIndex
wird der Index des Arbeitsganges innerhalb seines
Technologie-Objektes
zurückgegeben. Ist der Zweig mit keiner Technologie
verknüpft, wird 0 zurückgegeben. Fehlt auch der Parameter
index,
so werden die Indizes der letzten Arbeitsgänge aller
Zweige als
Liste zurückgegeben. Bei der lastorientierten Entscheidung
wird
die Summe der Ladung der Stationen von pass 1 bis
einschließlich lpass als Kriterium für den
bestmöglichen Zweig herangezogen. |
|
| branchCmd pass
index probability ?value? |
|
Abfrage oder Modifikation
der
Wahrscheinlichkeitswerte eines
Zweigs. Der Zweig index (= 2,3, ..., length) erhält
den
Wahrscheinlichkeitswert value. Der erste Zweig (index
=
1) kann nicht explizit gesetzt werden. Beim Setzen der
anderen Zweige
wird der Wahrscheinlichkeitswert des ersten Zweiges
entsprechend
verringert oder erhöht. Wird ein Zweig entfernt, so
vergrößert sein Wahrscheinlichkeitswert den des ersten
Zweiges. Fehlt der Parameter value, so wird der
Wahrscheinlichkeitswert des Zweiges index
zurückgegeben. value
ist vom Typ double. |
|
| branchCmd parallel
option
?value? |
|
Abfrage oder Modifikation
des
Parallelverhaltens der Verzweigung. Der Parameter value
(= 1,
2, ..., length) setzt
den
Parallelitätsgrad. Fehlt der Parameter value, so
wird der
Parallelitätsgrad der Verzweigung zurückgegeben.
Mögliche Optionen sind: max (Anzhal der Zweige
die versucht wird zu belegen) und min (Anzahl der
Zweige die mindestens belegt werden müssen, damit der Job
die Verzweigung betreten darf)
Für value sind auch die Werte 0 und all
zulässig. Voreinstellung ist single (= 1).
|
|
|
| OBJEKTVERKNÜPFUNGEN |
|
|
Zweige
von Verzweigungen werden mit
Arbeitsgängen verknüpft, die über Technologie und
Arbeitsgangindex definiert werden: |
|
| routeCmd pass append
objCmd |
|
Hängt einen weiteren
Arbeitsgang (Zweig)
mit dem Objekt objCmd
an die Liste des Routing-Objekts. Der neue Arbeitsgang
(Zweig)
erhält den Index length+1
(Rückgabewert
des
Befehls). Als Objekte sind zulässig:
Technologie (nur in Verzweigungen),
Station und Verzweigung. Für den Fall, dass in einer
Verzweigung
eine Technologie oder
eine Verzweigung angehängt wird, wird der
Arbeitsgangzeiger des
Zweiges auf 0 gesetzt. |
|
| routeCmd pass
pass-index insert objCmd |
|
Fügt einen weiteren
Arbeitsgang (Zweig)
mit dem Objekt objCmd vor den Arbeitsgang (Zweig)
pass-index
(= 1, 2, ..., length)
ein. Als Objekte sind zulässig: Technologie (nur in
Verzweigungen),
Station und Verzweigung. Die
Länge der Route wird zurückgegeben. |
EREIGNISROUTINEN
Für Routing-Objekte stehen die folgenden Ereignisroutinen
zur Verfügung:
routeCmd check enter
|
routeCmd after enter
|
simcron MODELLER 3.4
Copyright © 2025 simcron
21.05.2025
|