Autor
|
Thema: status erzwingen (2805 mal gelesen)
|
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 02. Jun. 2005 16:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum, hallo Simulator, ich werde schlauer und schlauer und komme auf immer neue Ideen... ...leider. Momentan überlege ich meine ganze bisherige Arbeit über den Haufen zu schmeißen um mein Vorhaben viel einfacher zu lösen. Folgendes probiere ich aus: Ich möchte mehrere Montage- und Bearbeitunsvorgänge auf einer Station simulieren. Dazu betritt ein Ladehilfsmittel eine Einzelstation. Es folgt eine Abfrage folgender Tabelle (Zeile 1) über die Eingangsmethode "montage": Spalte 1: Freier Text (z.B. Montage der Teiles A) Spalte 2: Bearbeitungszeit Spalte 3: BE (z.B. .BEs.teil_a, Teilweise aber auch leer!!!!) Die Methode "montage" (Eingangssteuerung): is index,i:integer; tabelle,kw,bearbeitung:object; do index := @.index;--zeilenindex als Attribut auf der Palette hinterlegt tabelle := tabelle_arbeitsanweisung1; kw := kommissionierwagen1;--ydim = 1 bearbeitung := bearbeitung_takt1;--bearbeitungsstation if tabelle[3,index] /= void then for i := 1 to kw.xdim loop if kw[i,1].inhalt /= void then if kw[i,1].inhalt.name = tabelle[3,index].name then kw[i,1].inhalt.umlagern(bearbeitung.inhalt); end; end; next; end; end; Die Bearbeitungszeit setze ich durch eine separate Methode, welche Spalte 2 ausliest und als "result" an die Einzelstation (Bearbeitungszeit: Formel) übergibt.
Nun soll folgendes passieren: Wenn das zu montierende Teil auf dem Kommissionierwagen nicht gefunden wird, soll nicht mit der Bearbeitung begonnen werden. Der Status soll wartend und blockiert sein. Im Prinzip möchte ich die Funktion der Montagestation haben, kann aber keine Montagestation verwenden da bei manchen Durchläufen kein Teil montiert wird (reine Bearbeitung, Spalte 3 ist leer). Kann ich den Status wartend und blockiert erzwingen und in meine Programmierung einfügen? Leider habe ich nur möglichkeiten gefunden, den Status abzufragen (true oder false). Vielen Dank schon mal für eure Hilfe, Gruß eMwartend
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jun. 2005 18:47 <-- editieren / zitieren -->
Hi, wofür willst Du den Zustand wartend oder blockiert setzen,wenn es "waituntil... prio x;" bzw. @.ausganggesperrt (true/false) gibt ???? Gruss ------------------ DER SIMULATOR  [Diese Nachricht wurde von Simulator am 02. Jun. 2005 editiert.] |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 03. Jun. 2005 14:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo Simulator, hast ja recht *g*, ich hab wahrscheinlich wieder einmal um 3 Ecken gedacht. Ich habe jetzt mal mit ausganggesperrt und waituntil experimentiert und weiß nicht genau, wo ich die Methoden einsetzen muss. In meiner Eingangssteuerung soll folgendes passieren: 1. In der Tabelle wird abgefragt, ob es sich um einen Montage oder einen Bearbeitungsprozess handelt (BE vorhanden oder nicht) 2. Sowohl bei Bearbeitung als auch bei Montage wird geschaut ob in Spalte 4 eine Störzeit eingetragen ist (diese wird an anderer Stelle erzeugt und dann in die Tabelle eingetragen) 3. Bei einer Störung wird die Einzelstation für die vorgegebene Zeit gestört. 4. WEnn es sich um einen Montageprozess handelt soll das benötigte BE auf dem Stellplatz_Kommi gesucht werden. Solange es nicht gefunden wird, ist der Status der Einzelstation "wartend", die Bearbeitung darf nicht beginnen. In der Regel kommen die Anbauteile zeitlich vor dem Maschinenkörper an, manchmal wird ein Teil aber auch nachgeliefert. Ich brauche also eine Art Endlosschleife, die den Inhalt des Stellplatz_Kommi immer wieder durchsucht bis das Teil gefunden wird! Erst dann beginnt die Bearbeitung. Bei meinen Versuchen wurden trotz ?.ausganggesperrt umgelagert, auch die waituntil hat nicht richtig geklappt. Anbei die Grundprogrammierung (ohne waituntil oder ausgangsgesperrt) als Bild. Ich tüftel weiter, für jede Hilfe bin ich wie immer dankbar. Lieben Gruß eMtüftler Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aloetscher Mitglied Logistiksimulation

 Beiträge: 10 Registriert: 03.06.2005
|
erstellt am: 03. Jun. 2005 15:16 <-- editieren / zitieren --> Unities abgeben:          Nur für eMlooser
Hallo Das Umlagern kannst Du verhindern, indem Du Deine Methode in die Bug-Ausgangssteuerung des Bausteins einträgst (Häkchen Bug muss aktiviert sein). In der Bug-Ausgangssteuerung musst du dann aber am Ende der Methode selbst für das Umlagern auf den nächsten Baustein sorgen. Falls Du eine Kante zum nächsten Baustein gesetzt hast, klappt dies über @.umlagern; Gruss, Adrian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 03. Jun. 2005 15:51 <-- editieren / zitieren -->
Hi, hier ein gedanklicher Ansatz, der Dir hoffentlich das Leben etwas vereinfacht. Betrachte doch mal das Netzwerk als eine Einzelstation auf der Du montieren kannst, wenn die Be´s vorhanden sind oder in der andere Bearbeitungsvorgänge ablaufen, wenn keine Be´s in Deiner Liste stehen. Nach aussen ist doch alles abgeschottet, d.h. was im Netz geschieht sieht keiner wenn es nicht gezeigt werden soll. Du kannst doch in dem Netzwerk parallel mehrere Stränge aufbauen z.B. ein Strang für´s Montieren und weitere Stränge für andere Bearbeitungsvorgänge. Am Anfang des Netzes postierst Du eine Einzelstation als Schranke, sodaß immer nur ein (Haupt-) BE im Netzwerk ist. Am Ende des Netzes postierst Du eine weitere Einzelstation mit einer Methode, die die geschlossene Eingangsschranke wieder öffnet. Nun kannst Du z.B. für die Montagevorgänge wieder die Standardbausteine verwenden und brauchst nicht alles mittels SIMTALK zu entwickeln. Gruss ------------------ DER SIMULATOR  [Diese Nachricht wurde von Simulator am 03. Jun. 2005 editiert.] |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 06. Jun. 2005 08:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo Simulator, danke für den Ansatz. Genauso bin ich bis jetzt vorgegangen. Mein Takt war ein Netzwerk, über eine Variable habe ich Eingang und Ausgang des Taktes gesperrt sobald ein Teil den Takt betritt. Im Takt habe ich mehrere Montage- oder Einzelstationen angeordnet, welche die verschiedenen Montageschritte darstellen. Soweit so gut. Dann wollte ich mich an die Auswertung bzw. Verifzizierung des Prozesses machen. Hier habe ich nun das Problem, dass die Gesamtbearbeitungszeit pro Takt "verfälscht" wird. Beispiel: Ein Takt besteht aus 5 Einzel/Montagestationen mit jeweils einer Stunde Bearbeitungszeit. Ein BE durchwandert den Takt. Jede Einzelstation gibt mir einen Bearbeitungszeit von 1h aus (Wartezeit 4h), der Takt (Netzwerk) mittelt diese Zeiten und gibt mir so ebenfalls eine Bearbeitungszeit von 1h aus. Die Tatsächliche Arbeitszeit pro Takt beträgt jedoch 5 Stunden. Nun sehe ich 2 Möglichkeiten: 1. Ich bastel mir meine eigene Statistik, ich muss dazu die relvanten Werte manuell in Tabellen eintragen und entsprechend "addieren". Die Engpassanalyse kann ich leider nicht nutzen 2. Ich passe den Takt wie oben beschrieben an. Ein Takt = ein Baustein (wie du früher schon mal so passend bemerktest: warum schaust du eigentlich in den Takt rein?) und kann somit die von eMplant zur Verfügung gestellten statistischen Auswertungstools nutzen. DA ich die Engpassanalyse für meinen Prozess gut gebrauchen kann, denke ich 2 ist die bessere Lösung. Ich muss zwar einiges nochmal machen, denke aber dass ich dafür bei der statistischen Auswertung viel Zeit einsparen kann. Werde mich die nächsten Tage mit meinem Prof besprechen und dann entscheiden, für deine Meinung wäre ich dankbar. Gruß eMgrenzenloseMöglichkeiten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 06. Jun. 2005 09:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo nochmal, ich experimentiere gerade weiter mit Sim Talk und habe folgendes Problem: In einem Lager suche ich mittels einer for Schleife nach einem bestimmten BE. Wird das BE gefunden ist alles OK, das BE wird umgelager. Wird es nicht gefunden, ruft sich die Methode alle 60 Sekunden selbst wieder auf und schaut, ob das Teil in der zwischenzeit eingelagert wurde. if gefunden = false then ref(methode(parameter1)).methaufr(60); end; Warum bekomme ich nach dem ersten Aufrufen der Methode wenn ein Teil nicht gefunden wurde die Fehlermeldung "maximale Aufruftiefe (500) überschritten". Habe in der Hilfe gelesen aber kann nicht verstehen, wie die 500 erreich werden soll (wie gesagt schon beim 1. Aufruf) Wo ist der Fehler? Vielen Dank für schonmal für die Hilfe Lieben Gruß Didi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Zifnab Mitglied Student

 Beiträge: 23 Registriert: 11.01.2005
|
erstellt am: 06. Jun. 2005 09:48 <-- editieren / zitieren --> Unities abgeben:          Nur für eMlooser
Hallo, wie ist denn deine Simulationszeit vorangeschritten? Wenn die Zeit ziemlich weit ist, kann es schon sein, dass die Methode 500 mal aufgerufen wurde. Bei Rekursionen kann das schon sehr schnell passieren. Vielleicht versteh ich dein Problem auch falsch, aber was spricht denn gegen eine repeat until Schleife? In etwa so: repeat *for-Schleife zur Suche* if gefunden=false then wait(60); end; until gefunden=true; Hoffe es hilft dir vielleicht weiter. Gruss Zifnab
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 06. Jun. 2005 10:15 <-- editieren / zitieren -->
Hi Zifnab, ich glaube das Thema und eine passende Lösung dazu hatten wir schon mal oder ? s. http://ww3.cad.de/foren/ubb/Forum262/HTML/000115.shtml das permanente Pollen in eM-Plant halte ich nicht für sehr sinnvoll, weil es Zeit/Performance kostet ! Gruss
------------------ DER SIMULATOR  |
Ex-Mitglied
|
erstellt am: 06. Jun. 2005 10:33 <-- editieren / zitieren -->
Hi eMlooser, zeig doch mal die ganze Methode, mit der Anweisung ref(methode).methaufr alleine kommt diese Meldung nicht ! Gruss ------------------ DER SIMULATOR  |
Ex-Mitglied
|
erstellt am: 06. Jun. 2005 11:59 <-- editieren / zitieren -->
... Dann wollte ich mich an die Auswertung bzw. Verifzizierung des Prozesses machen. Hier habe ich nun das Problem, dass die Gesamtbearbeitungszeit pro Takt "verfälscht" wird.... Nun die Taktzeit berechnet sich bekannterweise aus der Differenz zwischen Austritts- & Eintrittszeit des Be´s dazu brauchst Du wohl keine statistische Auswertung oder ? Gruss
------------------ DER SIMULATOR  |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 06. Jun. 2005 13:10 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum, hallo Simulator Vielen Dank für eure Antworten. Hier sind meine: 1. Die ganze Methode (montageteil,Station bject) is i:integer; vg bject; gefunden:boolean; do vg := stellplatz_vg1; gefunden := false; for i := 1 to vg.xdim loop if vg[i,1].inhalt /= void then if vg[i,1].inhalt.name = montageteil.name then vg[i,1].inhalt.umlagern(station.inhalt); gefunden := true; end; end; next; if gefunden = false then ref(durchsuche_vg1(montageteil, station)).methaufr(60); end; end; 2. "das permanente Pollen..." ; Was ist das? 3. Das die Taktzeit die Differenz aus Ausgang- und Eingangzeit ist halte ich für eine gewagte Theorie *g*, neee mal im Ernst: Mit der Statistik im Spezialfall Takt = Netzwerk mit mehreren Stationen gibts nur Probleme. Wie bekommst du z.B. korrekte Wartezeiten, Bearbeitungszeiten, Blockierzeiten (total und prozentual) wenn jede Station auf die andere wartet. Habe ich z.B. eine Störung im ersten Montageschritt, so warten die anderen Montageschritte (in Echt hab ich aber keine Wartezeit sondern eine Störung!). Ich müsste aus jedem Baustein die Zeiten als Totalwert rauslesen und addieren (Bearbeitungszeiten,Störzeiten...), müsste mir dann die Wartezeiten ableiten und prozentualen Werte (z.B. Auslastung) berechnen und wie gesagt, die Engpassanalyse könnte ich nicht nutzen. Daher halte ich die Lösung mit mehr Simtalk und nur einem Baustein für sinnvoller (Zumal logisch: Der Takt ist ja auch nur eine Bearbeitungsstation). Das mit dem methaufr(60) mach ich jetzt einfach mal anders, waren ja genug Hinweise dabei (Vielen Dank). Ich hoffe ich denke jetzt nicht wieder quer und mache es mir komplizierter, Vielen Dank für eure Hilfe Gruß Dietmar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 06. Jun. 2005 18:10 <-- editieren / zitieren -->
Hi, zu 3. also Dein Netz beschreibt doch das Verhalten einer Station oder ? Ich frage mich wirklich was Du da mit den Warte-/Blockier- oder Stoer-zeiten der Einzelstationen innerhalb des Netzwerkes willst. Interessant ist doch nur die Gesamtstatistik des Netzes nicht die Einzelstatistiken der Bausteine, die im Netzwerk jetzt genutzt werden um das Verhalten einer Station zu beschreiben! Warte- bzw. Blockierzeiten kannst Du doch über Eingangs/Ausgangsbaustein bestimmen ! Es ist kein Problem die Bausteine innerhalb des Netzes alle zusammen zu stoeren (->Schutzkreis) oder ? zu 2. "Pollen" vereinfacht gesprochen: das (regelmässige) Abfragen eines Ereignisses.
zu 1. Hast Du Dir mal den Ablauf mit dem Debugger angeschaut ? Nun schreib es doch mal so, wie im Online-Handbuch spezifiziert: ref(durchsuche_vg1).methaufr(60,montageteil, station); Die Parameter bitte zum .methaufr(time_offset,p01,p02...,pn) !!!! dann funktioniert es Gruss ------------------ DER SIMULATOR 
[Diese Nachricht wurde von Simulator am 06. Jun. 2005 editiert.] |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 07. Jun. 2005 09:47 <-- editieren / zitieren --> Unities abgeben:         
Guten Morgen Simulator, vielen Dank für deine Antwort. Ich hoffe du verzweifelst nicht langsam an mir, wie es scheint hab ich da noch das ein oder andere Verständnisproblem! Zu1: ich seh den Wald vor lauter Bäumen nicht, Dummheitsfehler, sorry! (Debugger hat mir nur die Zeile und besagte Fehlermeldung gezeigt) Zu2: Besser ist also waituntil? Ist eine mit waituntil suspendierte Methode für andere Aufrufe noch zugänglich? (Die Methode wird von mehreren Bausteinen aufgerufen, die dann ihre Parameter übergeben) Zu3: „Interessant ist doch nur die Gesamtstatistik des Netzes nicht die Einzelstatistiken der Bausteine, die im Netzwerk jetzt genutzt werden um das Verhalten einer Station zu beschreiben!“ Absolut richtig und hier kommt mein Verständnisproblem: Beispiel: Netzwerk Takt1 mit 5 Einzelstationen, Bearbeitungszeit jeweils 1h: 1. Bearbeitung_1, 2. Montage_1(Teil1 wird angefordert), 3. Bearbeitung_2, 4. Montagage_2, 5. Montage_3. Die Gesamtstatistik (Netzwerk) fasst doch die Einzelstatistiken zusammen. Durch die Wartezeiten der einzelnen Bausteine im Netzwerk aufeinander gibt mir die Gesamtstatistik also eine Bearbeitungszeit von 1 h aus, Wartezeit 4h. Diese Statistik kann ich also nicht nutzen. Ich müsst mir also meine eigene Statistik basteln, mittels Eingangs- Ausgangssteuerungen in jedem Baustein. Habe ich Dich soweit richtig verstanden? Wie übermittel ich dann die korrekte Wartezeit, wenn z.B. Montage_2 45 Minuten auf Teil2 wartet (die Wartezeit des Bausteins bringt mir ja nichts, da der Baustein schon 3 Stunden wartet, bis er an der Reihe ist. Lese ich die Bearbeitungszeit aus und subtrahiere diese von der Zeitdifferenz Ausgangszeit-Eingangszeit weiß ich nicht, ob die Zusatzzeit eine Warte-, Blockier-, oder Störzeit ist) Wäre schön wenn du mir verraten würdest, was in den Eingangs- Ausgangssteuerungen passieren soll. Ich stehe nach wie vor mit meinem 85 KG voll auf dem Schlauch. Bitte hab Geduld mit mir eMlooser
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Jun. 2005 10:48 <-- editieren / zitieren -->
Hi, zu 2 waituntil ... das waituntil wartet solange bis das Ereignis eintritt auf das es wartet. Dann werden die nachfolgenden Anweisungen ausgeführt. Die Methode kann durchaus von verschiedenen Stellen aufgerufen werden zu 3. Also in der Eingangsstation kannst Du via Statistik abfragen, wie lange sie schon auf ein Folgeteil wartet. in der Ausgangsstation kannst Du Abfragen, wiel lange sie blockiert ist. Via obj.initstat kannst Du die Statistik von jeder Einzelstation individuell zuruecksetzen und somit die Arbeitszeiten/Wartezeiten... für jeden Takt bestimmen. Die Frage, die ich mir dabei immer noch stelle : wofür brauchst Du eigentliche diese Statistiken ??? Gruss
------------------ DER SIMULATOR  |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 07. Jun. 2005 11:38 <-- editieren / zitieren --> Unities abgeben:         
Vielen vielen Dank, ich glaube langsam klart es etwas auf: Zu 2: kann die Methode auch aufgerufen und abgearbeitet werden während Sie durch einen anderen Aufruf noch wartet?? Zu 3:Ich fasse zusammen: Ein Eingangsbaustein erfasst meine Wartezeiten und zählt die Eingänge. Ein Ausgangsbaustein erfasste meine Blockierzeiten und zählt die Ausgänge. Jeder Bearbeitungs-Montagebaustein verfügt über Eingangs- und Ausgangssteuerung: Eingangssteuerung: Rücksetzen der Statistik (das war das fehlende Glied in meinen Überlegungen). Ausgangssteuerung: Abfrage der Statistik und Übertrag in Tabelle (Zelle = alter Wert + neuer Wert). a) Habe ich alles richtig verstanden b) Stimmt es, dass ich die Engassanalyse nicht nutzen kann. (Sie würde mir schnell und einfach zeigen, welcher Takt die meisten Probleme macht) Nun wozu brauche ich diese Statistiken: 1. Ich möchte die Kosten ( = Stör, Warte- und Blockierzeiten…), welche durch Störungen an verschiedenen Stellen der Fließlinie entstehen aufzeigen. 2. möchte ich meine Experimente vergleichen können (Durchlaufzeit, Wartezeiten…). c) Ist dieses Vorgehen denn ungewöhnlich? Zusatzfrage: Für was kann ich den Status meines Netzwerkes bestimmen (statusarbeitend, statusressourcefehlt…)wenn ich ihn nicht beobachten und nicht auswerten kann. Ich Frage weil ich am Anfang daran dachte, den Status des Netzwerkes zu setzen und dann das Netzwerk wie einen einzelnen Baustein zu behandeln und statistisch abzufragen. Wäre das nicht sinnvoll, da ich dann auch (theoretisch, geht ja nicht) die Engpassanalyse nutzen könnte?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Jun. 2005 12:25 <-- editieren / zitieren -->
Hi, zu 2 ja! zu3. ja, das war meine Überlegung zu der Gesamtstatistik des Netzes ,dass ja eine Einzelstation darstellen soll mit einer entsprechend erweiterten Funktionalität. Die Taktzeit ist dabei dann die Durchlaufzeit des Einzelbe´s die Arbeitszeit = Summe der Einzelarbeitszeiten. Taktzeit-Arbeitszeit = summe Warte/-, Stör/-, Pausen-Zeiten. zu statusarbeitend .... Ich meine, mit diesen Attributen kannst Du "nur" die Netz-LED´s an-/ausschalten. Gruss ------------------ DER SIMULATOR 
[Diese Nachricht wurde von Simulator am 07. Jun. 2005 editiert.] |
eMlooser Mitglied

 Beiträge: 68 Registriert: 11.04.2005
|
erstellt am: 07. Jun. 2005 13:43 <-- editieren / zitieren --> Unities abgeben:         
Hey Simulator, ich weiß schon du verzweifelst manchmal an meinen Fragen*g*! Vielen Dank für deine Geduld und für alles, bei dem du mir schon weitergeholfen hast. Nun werde ich mich entscheiden auf welche Weise ich die Linie entgültig simuliere: 1. Takt = ein Baustein, der immer wieder durchlaufen wird. Vorteil: Engpassanalyse nutzbar, Statistik einfach nutzbar (incl. Anteilswerte%) Nachteil: mehr Simtalk 2. Takt = Netzwerk mit mehreren Stationen: Vorteil: Einfacher zu gestalten, weniger Simtalk Nachteil: Engpassanalyse nicht möglich, "manuelle" Statistikerstellung aus den Absolutwerten. Dann wirst du eine Zeit lang hoffentlich Ruhe vor mir haben. Lieben Gruß, nochmals vielen Dank Didi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Jun. 2005 14:02 <-- editieren / zitieren -->
Hi eM.... Joooh, viel Erfolg! Gruss
------------------ DER SIMULATOR  |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |