Autor
|
Thema: einzelstation Statistik: warten auf aufträge oder teile? (2943 mal gelesen)
|
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 08. Jul. 2013 16:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich bekomme hier viele gute Tipps, erstmals vielen Dank! Ich habe mich sehr gefreut! Jetzt habe ich eine Frage über die Statistik der Einzelstation. Ich habe eine Station, die für Endmontage steht. Davor steht ein MontagePuffer, die zu produzierte Produkte für jeden Tag werden hier erzeugt. Vor diese MontagePuffer steht ein Teilepuffer. Hier stehen die Teile, die die Produkte benötigen. Jeden Tag werden zuerst die Produkte mit richtige Menge bei MontagePuffer erzeugt, bevor die Produkte zu Endmontage übergehen, wird es bei TeilePuffer nach Stückliste für dieses Produkt überprüft, ob die benötigen Teile da sind. Falls ja, werden die Teile (mit richtige Stückzahl) gelöscht und dann wird das Produkt zu Endmontage transportiert. Falls nein, darf das Produkt nicht weiter transportieren. Diese Produkt wird gewartet, bis es genügende Teile bei TeilePuffer ankomme und dann vernichtet werden. Jetzt habe ich die Frage: In der Statistik Fenster sehe ich die Statistik: arbeitend und wartend. Wenn das Produkt in MontagePuffer wegen fehlende Teile nicht transportieren kann, wird die EndMontage warten. Aber wenn es keine Aufträge mehr gibt, wartet die Endmontage auch. Wie kann ich die beide Statistik unterscheiden? Und noch eine Frage über blockiert, wird es hier die Rüstzeiten erfasst? Vielen Dank und viele Grüße, Jing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fun2smile Mitglied
Beiträge: 15 Registriert: 01.03.2012
|
erstellt am: 09. Jul. 2013 07:31 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
Du könntest in dem Moment, in dem es keine Aufträge mehr gibt, die Endmontage in einen anderen Zustand setzen, z. B. "Pause" oder "Angehalten". Sobald dann wieder ein Auftrag in die Lieferliste kommt müsstest du den Status zurück auf "Arbeitend" setzen Beim Zustand "Blockiert" werden keine Rüstzeiten erfasst. Beim Rüsten gilt der Zustand "Rüstend". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 09. Jul. 2013 10:45 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von fun2smile: Du könntest in dem Moment, in dem es keine Aufträge mehr gibt, die Endmontage in einen anderen Zustand setzen, z. B. "Pause" oder "Angehalten". Sobald dann wieder ein Auftrag in die Lieferliste kommt müsstest du den Status zurück auf "Arbeitend" setzenBeim Zustand "Blockiert" werden keine Rüstzeiten erfasst. Beim Rüsten gilt der Zustand "Rüstend".
Danke schön. Aber wie kann ich unterscheiden, ob es noch Aufträge gibt? Die Aufträge gehen erst zu Endmontage, nachdem die benötigte Teile gelöscht werden. Ich wollte aber die Zeiten unterscheiden, ob es noch Teile fehlt, oder einfach keine Aufträge mehr gibt. Vielen Dank! 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: 09. Jul. 2013 13:07 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
Zunächst: es gibt nur eine Wartezeit (die Station ist leer...). Warum die Station leer ist, interessiert Plant Simulation nicht. Sie können aber ohne große Probleme Ihre eigenen statistischen Daten erheben. Sie müssten eine kleine Steuerung schreiben, die den Grund für das Warten ermittelt und die Zeit registriert. Dafür bitet sich ein Beobachter an (Extras - Beobachter auswählen). Hier können Sie ein Attribut auswählen und eine Methode zuweisen, die jeweils aufgerufen wird, wenn der Wert des Attributes sich ändert. Das Attribut, das Sie überwachen müssen heißt: ResWartend. Die Methode wird aufgerufen, wenn das Warten beginnt und beendet ist (resWartend=true/false). In Ihrer Montagestation können Sie dann eine Reihe benutzerdefinierte Attribute verwenden, um die Wartezeit weiter aufzusplitten z.B. wartenStart (time) statWartenAufAuftragDauer(time) statwartenAufTeileDauer(time) wartenAuf(string: "Teil","Auftrag")
Wenn das Warten beginnt, ermitten Sie die Ursache und speichern diese in wartenAuf und die aktuelle Zeit des Ereignisverwalters in wartenStart. Am Ende des Wartens ermitteln Sie die Dauer des Wartens und zählen Sie diese je nach dem Wert von wartenAuf zu statWartenAufAuftragDauer oder statwartenAufTeileDauer hinzu. In einer Init müssen Sie dann die Werte von statWartenAufAuftragDauer und statwartenAufTeileDauer zurück auf 0 setzen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 09. Jul. 2013 14:48 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: Zunächst: es gibt nur eine Wartezeit (die Station ist leer...). Warum die Station leer ist, interessiert Plant Simulation nicht.Sie können aber ohne große Probleme Ihre eigenen statistischen Daten erheben. Sie müssten eine kleine Steuerung schreiben, die den Grund für das Warten ermittelt und die Zeit registriert. Dafür bitet sich ein Beobachter an (Extras - Beobachter auswählen). Hier können Sie ein Attribut auswählen und eine Methode zuweisen, die jeweils aufgerufen wird, wenn der Wert des Attributes sich ändert. Das Attribut, das Sie überwachen müssen heißt: ResWartend. Die Methode wird aufgerufen, wenn das Warten beginnt und beendet ist (resWartend=true/false). In Ihrer Montagestation können Sie dann eine Reihe benutzerdefinierte Attribute verwenden, um die Wartezeit weiter aufzusplitten z.B. wartenStart (time) statWartenAufAuftragDauer(time) statwartenAufTeileDauer(time) wartenAuf(string: "Teil","Auftrag")
Wenn das Warten beginnt, ermitten Sie die Ursache und speichern diese in wartenAuf und die aktuelle Zeit des Ereignisverwalters in wartenStart. Am Ende des Wartens ermitteln Sie die Dauer des Wartens und zählen Sie diese je nach dem Wert von wartenAuf zu statWartenAufAuftragDauer oder statwartenAufTeileDauer hinzu. In einer Init müssen Sie dann die Werte von statWartenAufAuftragDauer und statwartenAufTeileDauer zurück auf 0 setzen.
Vielen Dank! Aber ich habe eine alte Version von diese Software. Die Version 6.0. Leider finde ich kein Beobachter. Gibt es eine andere Lösung? 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: 09. Jul. 2013 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
resWartend müsste es auch in der Version 6 geben und es sollte überwachbar sein. Sie könnten eine Ausgangssteuerung (Heck) verwenden. Sehen, ob etwas kommt --> Warten Grund setzen, Zeit speichern dann waituntil ?.resWartend=false prio 1; --> dann auswerten wie oben...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 09. Jul. 2013 15:13 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: resWartend müsste es auch in der Version 6 geben und es sollte überwachbar sein.Sie könnten eine Ausgangssteuerung (Heck) verwenden. Sehen, ob etwas kommt --> Warten Grund setzen, Zeit speichern dann waituntil ?.resWartend=false prio 1; --> dann auswerten wie oben...
Ich habe es gerade gefunden. Vielen Dank! Ich probiere es gleich aus! Liebe Grüße, Jing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 09. Jul. 2013 15:48 <-- editieren / zitieren --> Unities abgeben:
|
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 10. Jul. 2013 13:38 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: resWartend müsste es auch in der Version 6 geben und es sollte überwachbar sein.Sie könnten eine Ausgangssteuerung (Heck) verwenden. Sehen, ob etwas kommt --> Warten Grund setzen, Zeit speichern dann waituntil ?.resWartend=false prio 1; --> dann auswerten wie oben...
Da ich noch andere Methode bei Ausgang der Montagestation geschrieben habe, muss die Ausgangsteuerung Bug sein. Wird es genauso funktionieren bei der Statistik? Bei Grund Erkennung wollte ich so machen: Für jede MontageStation gibt es eine dazugehörige Nivellierungstabelle, wo die Aufträge für diese Montagestation jeden Tag aufgelistet werden. Wenn ein Produkt produziert wird, wird den Anzahl für dieses Produkt um 1 reduziert. Dann werde ich bei Grund Erkennung in diese Nivellierungstabelle durchgehen, falls alle Aufträge an diesen Tag 0 sind, dann wartet diese Montage auf Aufträge. Wenn es ein Produkt mit Anzahl größer als 0 gibt,dann wartet diese Montage auf Teile. Wie soll ich es realisieren? Vielen Dank!
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: 10. Jul. 2013 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
Das Problem mit der Ausgangssteuerung Bug ist, dass sie bei Stau zwei mal aufgerufen wird. Das in Kombination mit waituntil ergibt ein nicht zu beherrschendes Verhalten. Alternativ könnten Sie eine Eingangssteuerung im Nachfolger der Montagestation einsetzen. Die wird garantiert nur einmal je Teil aufgerufen. Die beste Lösung ware ein Update auf eine aktuelle Version... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 10. Jul. 2013 16:48 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: Das Problem mit der Ausgangssteuerung Bug ist, dass sie bei Stau zwei mal aufgerufen wird. Das in Kombination mit waituntil ergibt ein nicht zu beherrschendes Verhalten. Alternativ könnten Sie eine Eingangssteuerung im Nachfolger der Montagestation einsetzen. Die wird garantiert nur einmal je Teil aufgerufen.Die beste Lösung ware ein Update auf eine aktuelle Version...
Leider bekomme ich keine aktuelle Version. Die Firma möchte das Geld nicht ausgeben. Eine Montagestation kann mehrere Produktvariante produzieren. In meine Ausgangsmethode für eine Montagestation wird bei Ausgang eines BEs überprüft, ob es in Montagepuffer noch diese Produkt gibt. Falls ja, wird wieder das gleich Produkt in MontageStation umgelagert und montiert. Falls nein, wird das nächste Produkt umgelagert. Hier dient dazu, dass an einem Tag ein Produktvariant am Stück montiert werden, damit wird Rüstzeit gespart. In der Ausgang wird es auch identifiziert (benutzerdefinierte BE für jedes Produkt mit Kundensenke als attribut),in welche Kundensenke diese Produkt geht und danach umgelagert. Soll ich vielleicht diese Methode wo andere schreiben? Damit ich die Statistik bei Ausgang mit Heck schreiben kann. Haben Sie vielleicht eine Idee? Nochmal vielen Dank! Sie haben mir viel geholfen! Jing 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: 10. Jul. 2013 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
|
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 10. Jul. 2013 17:26 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: Dann wäre es das Beste eine Methode zu schreiben und diese jeweils in die Eingangssteuerungen der Kundensenken zu hängen (wenn dazwischen sich kein weiterer Baustein befindet).
aber der Kundensenken und die EndmontageStation sind nicht verbunden. Das heißt, wenn die BE bei Endmontagestation ankommt, identifiziere ich wohin es geht und umlargern es in den richtigen Kundensenken. Wenn ich bei Ausgang der Endmontagestation nichts schreibe, dann stauen die BEs bei Endmontagestation, oder? 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: 11. Jul. 2013 13:42 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
Sie können die Ausgangssteuerung für die Verteilung auf die Kundensenken verwenden. Die Eingangssteuerung in der Senke wird durch das Teil aufgerufen, das funktioniert auch, wenn Sie keine Kanten benutzen, sondern die Teile mit SimTalk umlagern. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 11. Jul. 2013 15:06 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: Sie können die Ausgangssteuerung für die Verteilung auf die Kundensenken verwenden. Die Eingangssteuerung in der Senke wird durch das Teil aufgerufen, das funktioniert auch, wenn Sie keine Kanten benutzen, sondern die Teile mit SimTalk umlagern.
Sorry, ich habe es nicht so gut verstanden. Was haben Sie genau gemeint? Wo soll ich die Ausgangssteuerung schreiben? Bei Kundensenken Ausgang? aber wenn ich Baustein Senke verwende, gibt es kein Ausgangssteuerung. Das Problem ist das die Produkte bei Montagestation bleiben. Ich muss irgendwo Zuweisungen geben, wohin die Produkte gehen sollen. Da ich wegen Statistik für die Ausgangssteuerung der Montage Heck verwenden muss, gehen die Produkte nirgendwo hin. Wenn ich bei der Eingangssteuerung der Kundensenke die Produkte von Montage umlagern möchte, wird diese Methode doch nicht aufgerufen, da es am Anfang keine Produkte in KundenSenke kommen werden. Wird die Eingangssteuerung nur aufgerufen, wenn ein BE auf diese Baustein aufkommt, oder? Vielen Dank!
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: 11. Jul. 2013 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
Verwenden Sie in der Montagestation Ihre Ausgangssteuerung Bug zur Verteilung der Teile auf die Senke. Zuerst muss Ihr Modell (Materialfluss) funktionieren. Eine andere Idee: Sie könnten die Warten-Statistik auch mit Hilfe eines Generators und einer Methode realisieren (Abfragen, ob die Station wartet, Klassifizieren, wenn das Warten beendet ist, Zeit ermitteln und speichern). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 11. Jul. 2013 15:56 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: Verwenden Sie in der Montagestation Ihre Ausgangssteuerung Bug zur Verteilung der Teile auf die Senke. Zuerst muss Ihr Modell (Materialfluss) funktionieren.Eine andere Idee: Sie könnten die Warten-Statistik auch mit Hilfe eines Generators und einer Methode realisieren (Abfragen, ob die Station wartet, Klassifizieren, wenn das Warten beendet ist, Zeit ermitteln und speichern).
Das wäre auch eine gute Möglichkeit. Dann muss ich diese Generator jede Sekunde mal aufrufen, oder? Weil ich ständig überprüfen muss, ob meine MontageStationen wartet oder nicht. 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: 11. Jul. 2013 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
|
zhang1jing4 Mitglied studentin
Beiträge: 53 Registriert: 14.05.2013 Jing
|
erstellt am: 12. Jul. 2013 13:27 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Bon Simul: genau
Hallo, ich habe eine Methode geschrieben, diese Methode wird durch eine Generator jeder Sekunden ein Mal aufgerufen. Hier ist mein Code: /*Diese Methode erfasst den Grund und Zeit der Warten. Sie wird von Generator G_statWartenDauer gesteuert. */ is i:integer; j:integer; wartenStart:time; wartenEnd:time; Dauer:time; aktuellNivTab bject; aktuellEM bject; wartenAuf:string; do for j := 1 to AlleBaustein_als_Objekt.yDim loop if AlleBaustein_als_Objekt[1,j] /= void then --Bekomme das EM und Nivellierungstabelle für diese EM. aktuellEM := AlleBaustein_als_Objekt[1,j]; aktuellNivTab := aktuellEM.NivTab; if aktuellEM.ResWartend = true then --wartenAuf ist auf "Auftrag" default gesetzt. wartenAuf = "Auftrag"; wartenStart := Ereignisverwalter.zeit; --Der Grund wird erkennt. Falls es noch Auftrag für ein Produkt gibt(Anzahl nicht gleich 0), dann wartet es auf "Teile" for i := 1 to aktuellNivTab.yDim loop if aktuellNivTab[AktuellNivPeriode,i] > 0 then wartenAuf := "Teile"; i := 10000; end; next; waituntil aktuellEM.ResWartend = false prio 1; wartenEnd := Ereignisverwalter.zeit; Dauer := wartenEnd - wartenStart; --Diese Dauer wird summiert. if wartenAuf = "Teile" then aktuellEM.statWartenAufTeileDauer := aktuellEM.statWartenAufTeileDauer + Dauer; elseif wartenAuf = "Auftrag" then aktuellEM.statWartenAufAuftragDauer := aktuellEM.statWartenAufAuftragDauer + Dauer; end; end; end; next; end; Danach habe ich mein Modell laufen gelassen. Plötzlich habe ich eine Fehlermeldung bei waituntil bekommen: Die eingestellte max. Anzahl suspendierter Methode(500) ist erreicht worden. Alle momentan aktiven Aufrufketten werden abgebrochen. Was ist das Problem? Vielen Dank! 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: 12. Jul. 2013 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für zhang1jing4
So erzeugen Sie viele waituntil Aufrufe, Sie dürfen in dieser Version kein Waituntil verwenden. Sie müssten innerhalb Ihrer Methode den Statuswechsel erkennen und dann entsprechende Aktionen ausführen (z.B. setzen Sie wartenAuf auf "" wenn resWartend=false ist, dann können Sie den Statuswechsl identifizieren, wenn resWartend="" ist und resWartend=true ist --> nur dann müssen Sie etwas tun, ebenso, wenn wartenAuf /= "" ist und resWartend=false ist) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |