So, ich mal wieder
habe das Gefühl, dass jedes Problem, was ich (unter anderem dank Eurer Hilfe) löse, zwei neue mit sich zieht...
1.
BEs erzeugen: bei meiner Simulation arbeiten Sägen auf mehrere Förderbänder, erzeugen dabei neue BEs und vernichten die alten (um das Teilen in mehrere Stücke darzustellen). Das Problem: BEs werden immer an der möglichst letzten Position auf dem Förderband erzeugt. Will man das umgehen, kann man eine bestimmte Position angeben ( Beispiel: ...Fördergut.erzeugen(StationX, POSITION) ). Gibt man nun aber die Position 0 an (um es am Anfang zu erzeugen), sagt mir die Simulation, dass nicht genug Platz auf dem Förderband ist, bzw. ignoriert diese Anweisung völlig.
Klar, logisch, ein 10m langes Rohr würde z.B. 5m (beim Buchungspunkt in der Mitte) aus dem Eingang herausragen, wenn man es an die Position 0 schickt. Das ist doch aber auch gewollt und stört die Simulation, wenn man eine ganz normale Verkettung der Stationen machen würde und nicht eine neue BE erzeugt, sondern die alte weiterschickt, auch nicht.
Eventuell liegts ja auch daran, dass die alte BE erst vernichtet wird, wenn die neue erzeugt ist, und die Simulation sagt "die alte ist ja noch in der Säge, also kann die neue BE nicht aus dem Förderband in die Säge reinragen", was ja auch verständlich wäre. Aber wie umgehe ich dieses Problem?
2.
Ich habe durch diese Sägegeschichte mehrere Methoden am laufen. Um darzustellen, dass die Säge erst wieder frei ist, wenn beide Endprodukte abtransportiert sind, wird die "ausgangs-BE" (also die, die im Grunde zweimal auf den Nachfolgern erzeugt wird, und anschließend vernichtet wird), erst dann gelöscht, wenn die Endprodukte den Nachfolger verlassen habe bzw. an einer bestimmten Position des Förderbandes angekommen sind.
Dazu habe ich am Ende der Sägemethode eine Schleife gebaut:
repeat
if VerbindungFörderstrecke1.leer then
@.deleteobject;
else
wait 2
end;
until Verbindungförderstrecke1.leer;
Das heißt, die Methode wartet solange, bis das Förderband leer ist, und löscht dann die in der Säge enthaltene BE. Die Ausgangssteuerung des Förderbands ist wiederum dessen Nachfolgern abhängig, hier kann es auch von Zeit zu Zeit zu einem Stau kommen, auch hier gibt es in der Ausgangssteuerung wieder eine ähnliche Schleife, die solange wartet, bis ein Nachfolger frei wird, und dann den Inhalt umlagert.
Problem: trifft dieser Fall einmal zu (dass das Förderband in die Warteschleife geht und darauf wartet, bis ein Nachfolger frei wird), „vergisst“ Plant Simulation plötzlich die oben genannte Methode. Sprich, die BE bleibt nun für immer in der Säge und blockiert diese bis zum Ende des Simulationsdurchlaufs.
Ich habe im Allgemeinen das Gefühl, dass niemals zwei Methoden gleichzeitig laufen können. Ähnlich wie beim oben genannten Beispiel „vergisst“ Plant ganz plötzlich nach ca. 16.000 gesägten Stücken, einem einzelnen Rohr einen Namen zu verpassen. Geht man den Debugger durch (in der Codezeile mit F9 einen Haltepunkt setzen, dann mit F11 Einzelschritte durchgehen), sieht man auch ganz deutlich, dass Em-Plant, falls irgendwo anders in der Simulation eine BE eine andere Methode aktiviert, plötzlich die betrachtete Methode abbricht, eine eventuelle Warteschleife, in der sich eine Station grade befinden, einfach abgebrochen wird, und in die andere Methode springt. Dadurch wird dann ganz plötzlich, wie oben beschrieben, ein Stau erzeugt weil diese BE in der Säge vergessen wird.
Was kann ich dagegen tun?
3.
BEs an eine beliebigen Stelle von einem Förderband abgreifen und umlagern.
Kleiner Auszug aus meiner Förderbandkonfiguration:
Förderband1, dahinter geschaltet Förderband2, parallel zu Förderband1 Förderband3 und Förderband4.
Die Steuerung funktioniert jetzt so, dass zuerst geprüft wird, on Förderband2 frei ist, wenn nicht wird die BE entweder auf Förderband3 oder Förderband4 umgelagert. Da es sich bei den BEs um 10-40m lange Rohre handelt, werden die parallelen Umlagerungen aber nicht erst am Ende von Förderband1 durchgeführt, sondern in der Mitte (die Förderbänder sind jeweils ca. 50m lang). Damit ists ja keine reine Ausgangssteuerung mehr, sondern eigentlich eine Steuerung in etwa der Mitte des Förderbands. Wie mache ich das?
Also noch mal einfacher erklärt sollen die „Pakete“, die in der Animation durchlaufen, falls Sie quer auf ein paralleles Förderband gelagert werden solle, nicht vom Ende des Förderband1 auf den Anfang des Förderband3 (oder4) geschoben werden, sondern von der Mitte vom Förderband1 auf die Mitte des Förderband3.
Uff, ganz schön lang geworden.
Danke schonmal an Die, die sich das bis hierhin durchgelesen haben
Gruß, Julez
[Diese Nachricht wurde von julez am 24. Sep. 2007 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP