Autor
|
Thema: blockierende Flusssteuerung (1750 mal gelesen)
|
lunedi Mitglied
Beiträge: 6 Registriert: 25.09.2014
|
erstellt am: 01. Okt. 2014 14:02 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem mit Flusssteuerungen, die für ein Blockieren der Simulation sorgen, obwohl die nachfolgenden Stationen (wieder) frei sind. Folgende Situation liegt vor: Ich möchte BEs aus einer Senke kommend per Flusssteuerung auf eine von mehreren zur Verfügung stehenden Einzelstationen (+ vorgeschaltete Puffer) umlegen. Dafür nutze ich eine Methode, die mit einer if-then-Regelung auf die entsprechende Station umlegt. Das klappt soweit gut, nur in einigen Fällen "hängt" sich die Simulation auf. Anscheinend schlägt tritt das Problem immer dann auf, wenn die nachfolgenden Puffer bereits voll belegt sind. Das ist soweit normal, jedoch setzt sich die Simulation anschließend nicht wieder selbst in Gang; auch dann nicht, wenn die Puffer wieder frei sind. Entsprechend dieses Threads http://ww3.cad.de/foren/ubb/Forum262/HTML/000253.shtml habe ich bereits versucht Einzelstationen zwischenzuschalten, konnte das Problem damit jedoch nicht lösen. Wenn ich manuell die "festsitzende" BE auf einen Puffer lege, setzt sich die Simulation fort. Vielleicht hat jemand eine Idee, wie ich hier weiterkommen kann? Grüße lunedi [Diese Nachricht wurde von lunedi am 01. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 01. Okt. 2014 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für lunedi
Sie müssten überprüfen, ob die Maschine aufnahmebereit ist (oder warten): Code:
waituntil station.bereit and station.belegt=false prio 1;
Wenn Sie mit umlagern das Teil bewegen und die nächste Station nicht aufnehmen kann, dan gibt umlagern false zurück und das Teil bleibt liegen. Deshalb müssen sie die Bedingung für das Umlagern überwachen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lunedi Mitglied
Beiträge: 6 Registriert: 25.09.2014
|
erstellt am: 01. Okt. 2014 15:45 <-- editieren / zitieren --> Unities abgeben:
Ich habe die umlagern-Funktion gar nicht benutzt sondern verwende eine Methode mit Rückgabewerten für die verschiedenen Nachfolger. Also z.B. so: Quelle -> Flusssteuerung --> Puffer A --> ... ................................................--> Puffer B --> ... ................................................--> Puffer C --> ... Die Ausgangssteuerung der Flusssteuerung folgt dabei diesen Bedingungen (mit wA := Anzahl BEs in Puffer A): Code: -- grundsätzlich zu A umlagern, wenn A leer if wA = 0 then r:=1; -- wenn A nicht leer, aber B oder C dann zufällig zu einem der beiden umlagern elseif wA > 0 and wB = 0 and wC = 0 then r:=z_dEmp(1,Zufall23); -- wenn A nicht leer, aber B, dann zu B umlagern elseif wA > 0 and wB = 0 then r:=2; -- wenn A nicht leer, aber C, dann zu C umlagern elseif wA > 0 and wC = 0 then r:=3; -- wenn A,B,C nicht leer, dann zu A umlagern elseif wA > 0 and wB > 0 and wD > 0 then r:=1; end;
[Diese Nachricht wurde von lunedi am 01. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 01. Okt. 2014 16:52 <-- editieren / zitieren --> Unities abgeben: Nur für lunedi
Sie sollten immer einen else Zweig haben Zitat:
-- wenn A,B,C nicht leer, dann zu A umlagern elseif wA > 0 and wB > 0 and wD > 0 then r:=1;
das funktioniert so nicht, hier müssen sie warten, bis A leer ist... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lunedi Mitglied
Beiträge: 6 Registriert: 25.09.2014
|
erstellt am: 06. Okt. 2014 14:35 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten! Ok, ich habe das jetzt soweit geändert zu folgender Version: Code:
(vorheriger Code wie bisher)-- wenn A,B,C nicht leer, dann zu A umlagern else waituntil A.voll=false prio 1; r:=1; end;
Hier erhalte ich jedoch die Fehlermeldung, dass waituntil nicht in Formeln verwendet werden dürfe? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lunedi Mitglied
Beiträge: 6 Registriert: 25.09.2014
|
erstellt am: 06. Okt. 2014 18:01 <-- editieren / zitieren --> Unities abgeben:
Ok, mittlerweile habe ich das Problem lösen können, indem ich eine zusätzliche Senke hinzugefügt habe. Diese nimmt die BEs auf, die bei voller Warteschlange nicht weitergeleitet werden können. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|