Autor
|
Thema: Ausgang, Teil wegtragen (1081 / mal gelesen)
|
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 28. Mrz. 2017 16:34 <-- editieren / zitieren --> Unities abgeben:
Hallo ! in meiner Simulation lasse ich den Werker ein Teil von einer Station zu einer anderen bringen, dafür verwende ich die Ausgangsstrategie "Teil wegtragen". Das klappt soweit gut, doch nun möchte ich dass der Werker das Teil entweder zu AP1 oder zu AP2 bringt (je nachdem welche Farbe sie haben). Doch leider kann man unter "BE-Ziel" keine Methode auswählen Kannst du mir da weiterhelfen? Vielen Dank im voraus Gruß Lele Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 30. Mrz. 2017 20:21 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Hallo Lele01, eine Möglichkeit besteht eine Ausgangssteuerung an Station hinterlegen. Als Event ist Bug auszuwählen.
Code: is do if @.Attr = 1 then ?.BEZiel := current.Puffer;/*setzt Ziel für das BE*/ else ?.BEZiel := current.Puffer1; end; @.umlagern(); end;
------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 31. Mrz. 2017 15:23 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Nadine. In meiner Simulation soll der Werker aus dem Puffer P12 immer ein Teil entnehmen und dann in der Maschine "Zentrieren_AS_BS" und "Messen_Zentrieren_AS_BS" bearbeiten. Danach soll das Teil in den Puffer P13 gebracht werden. Das soll solange geschehen bis der Puffer P13 voll ist. Sobald der Puffer P13 voll ist soll der Werker ein Teil aus P13 entnehmen (nicht mehr aus P12). Das Teil wird wieder in der Maschine "Zentrieren_AS_BS" und "Messen_Zentrieren_AS_BS" bearbeitet und anschließend zu P14 gebracht. Der Werker soll solange Teile aus P13 entnehmen, bis der Puffer leer ist. Erst wenn er leer ist, darf der Werker wieder Teile aus P12 entnehmen. Im Prinzip möchte folgende Importeranfragesteuerungen in einer unterkriegen. Weißt du wie ich das am besten löse? Ich habe es mit "Waituntil" versucht, aber das hat leider nicht funktioniert 1) param obj: object, -- Importer typ: integer -- Importertyp (0=Entstörimporter, 1=Rüstimporter, 2=Bearbeitungsimporter, 3=Transportimporter) if typ = 3 then if current.Messen_Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Messen_Zentrieren_AS_BS, 3) elseif current.Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Zentrieren_AS_BS, 3) else ?.standardImportDurchführen(P12, 3) -- Teil aus Lager P12 entnehmen end end 2) param obj: object, -- Importer typ: integer -- Importertyp (0=Entstörimporter, 1=Rüstimporter, 2=Bearbeitungsimporter, 3=Transportimporter) if typ = 3 then if current.Messen_Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Messen_Zentrieren_AS_BS, 3) elseif current.Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Zentrieren_AS_BS, 3) else ?.standardImportDurchführen(P13, 3) -- Teil aus Lager P13 entnehmen end end Viele Grüße Lele Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 31. Mrz. 2017 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Hallo Lele01, Am Besten gehen wir dies zusammen durch Step 1 Zusammentragen von relevanten Events und Randbedingungen: Beschreibe bitte zuerst alle relevanten Steuerungsanforderungen an Importer in der Form: ++++++++++++Form++++++++++++++ Event ist: Ziel Ort von @ ist: Randbedingungen sind: +++++++++++++Beispiel++++++++++++ z.B.: Puffer P12 --> [*] Event ist: PufferP12 will auslagern [*] Ziel Ort von @ ist: Wenn @.Farbe = "Grün" dann zu current.Zentrieren_AS_BS, sonst current.Messen_Zentrieren_AS_BS [*] Randbedingungen sind: PufferP13.Leer = true ++++++++++++++++++++++++++ ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 01. Apr. 2017 19:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadine, Puffer P12 --> [*] Event ist: P12 will ein Teil auslagern [*] Ziel Ort von @ ist: current.Zentrieren_AS_BS [*] Randbedingungen sind: wenn current.Zentrieren_AS_BS.leer = true then auslagern aber wenn Puffer current.P13.voll = true then stoppe Event solange bis Puffer current.P13.leer = true /* wenn die Station Zentrieren_AS_BS leer ist soll ausgelagert werden, aber sobald PufferP13 voll ist soll P12 nicht mehr auslagern und dass solange bis Puffer.P13 leer ist */ ++++++++++++++++++++++++++ Einzelstation Zentrieren_AS_BS --> [*] Event ist: Zentrieren_AS_BS will auslagern [*] Ziel Ort von @ ist: current.Messen_Zentrieren_AS_BS [*] Randbedingungen sind: wenn Zielort current.Messen_Zentrieren_AS_BS.leer = true /* es soll ausgelagert werden, wenn der Zielort Messen_Zentrieren_AS_BS leer ist */ ++++++++++++++++++++++++++ Einzelstation Messen_Zentrieren_AS_BS --> [*] Event ist: Messen_Zentrieren_AS_BS will auslagern [*] Ziel Ort von @ ist: Wenn @.Farbe = "Braun" dann zu current.P13, sonst zu current.P14 [*] Randbedingungen sind: soll immer durchgeführt werden ++++++++++++++++++++++++++ Puffer P13 --> [*] Event ist: P13 will auslagern [*] Ziel Ort von @ ist: current.Zentrieren_AS_BS [*] Randbedingungen sind: wenn current.Zentrieren_AS_BS.leer = true then umlagern aber erst wenn Puffer current.P13.voll = true then starte Event solange bis Puffer current.P13.leer = true
/* wenn die Station Zentrieren_AS_BS leer ist soll ausgelagert werden. Das auslagern soll beginnen sobald der Puffer P13 voll ist. Sobald der Puffer leer ist, soll das Auslagern gestoppt werden und erst wieder beginnen, wenn der Puffer P13 wieder voll ist */ Liebe Grüße
Lele
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 01. Apr. 2017 22:20 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Hallo Lele, herzlichen Glückwunsch, damit hast du schon mal das Größte abgearbeitet. Jetzt Step 2: das Ganze bewerten. Event von "Messen_Zentrieren_AS_BS" kann für "Importeranfrage" unberücksichtigt bleiben, da alles was wir nicht extra definieren normal ausgelagert wird. Bleiben somit 3 Anfragen: ******************************************************************** ZU:
Zitat: aber wenn Puffer current.P13.voll = true then stoppe Event solange bis Puffer current.P13.leer = true
Hier muss der Zeitraum zwischen "Voll" und "Leer" überwacht werden. d.h. es muss z.B. eine globale Variable angelegt werden. Ein möglicher Lösungsansatz: Diese Variable ich nenne die mal "XXX" wird beim INIT := false gesetzt. Im Lauf wenn current.P13.voll wird := true und wenn current.P13.leer wird := false; Durch diese Regelung ist der Zusand XXX überwachbar. Dadurch kann z.B. Randbedingung für Puffer P12 geändert werden zu: Puffer P12 --> [*] Randbedingungen sind: wenn current.Zentrieren_AS_BS.leer = true und current.XXX = false FRAGE: Wie würden dann die Randbedingungen für P13 aussehen? ********************************************************************+ ZU:
Zitat: Einzelstation Zentrieren_AS_BS -->
INFO: Solange der Werker mit dem BE von "Zentrieren_AS_BS" zu "Messen_Zentrieren_AS_BS" unterwegs ist, können weitere Auslagerungen stattfinden. Also d.h. diese Bedingung ist an Bedingung geknüpft, dass Werker schneller auslagern muss als "Zentrieren_AS_BS" nachproduziert. Falls dies nicht als Bedingung angenommen werden darf, dann muss auch hier der Auslagervorgang mit in Randbedingungen z.B.: globale Variable. Falls dies erforderlich ist, wie müssten hier die Randbedingungen angepasst werden? vg Nadin ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 02. Apr. 2017 00:33 <-- editieren / zitieren --> Unities abgeben:
Hi Nadine ZU "FRAGE:Wie würden dann die Randbedingungen für P13 aussehen?" => Puffer P13 --> [*] Randbedingungen sind: wenn current.Zentrieren_AS_BS.leer = true und current.XXX = true /* Wenn current.Zentrieren_AS_BS leer ist und die Variable auf true umgesprungen ist, startet die Auslagerung bei P13 */ ZU
" INFO: Solange der Werker mit dem BE von "Zentrieren_AS_BS" zu "Messen_Zentrieren_AS_BS" unterwegs ist, können weitere Auslagerungen stattfinden. Also d.h. diese Bedingung ist an Bedingung geknüpft, dass Werker schneller auslagern muss als "Zentrieren_AS_BS" nachproduziert. Falls dies nicht als Bedingung angenommen werden darf, dann muss auch hier der Auslagervorgang mit in Randbedingungen z.B.: globale Variable. Falls dies erforderlich ist, wie müssten hier die Randbedingungen angepasst werden? " Ich verstehe nicht so genau was du meinst. Wieso können da weitere Auslagerungen stattfinden? Wenn schneller nachproduziert wird als der Werker auslagert, staut sich doch das Teil in der Maschine und wartet solange, bis der Werker Zeit hat, oder? Viele Grüße Lele
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 02. Apr. 2017 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Zitat: Ich verstehe nicht so genau was du meinst. Wieso können da weitere Auslagerungen stattfinden? Wenn schneller nachproduziert wird als der Werker auslagert, staut sich doch das Teil in der Maschine und wartet solange, bis der Werker Zeit hat, oder?
Ein Beispiel: Frau Schreiber arbeitet im Büro und druckt Aufträge aus, welche die Werker (Herr Schweißer, Herr Koch) abhollt. Wenn Werker bei Frau Schreiber vorbeischaut, sagt er ihr was er gemacht hat. Nun meldet das MES, dass der Auftrag von "Zentrieren_AS_BS" abhollbereit ist. Frau Schreiber bekommt die Info am Bildschirm: "Nur freigeben, wenn Messen_Zentrieren_AS_BS leer". Dies liegt zu diesem Zeitpunkt vor. Frau Schreiber druckt den Auftrag aus und packt es auf dem "Haufen" für Herr Schweißer. Herr Schweißer kommt und nimmt sich die Aufträge (naja in EM nimmt Herr Schweißer nur einen Auftrag). Diese Aufträge arbeitet Herr Schweißer nacheinander ab. Während er diese Aufträge abarbeitet meldet MES bei Frau Schreiber, dass der Auftrag von "Zentrieren_AS_BS" abhollbereit ist. Frau Schreiber bekommt wieder die Info am Bildschirm: "Nur freigeben, wenn Messen_Zentrieren_AS_BS leer". Nun hat Frau Schreiber vergessen, dass ein Auftrag von "Zentrieren_AS_BS" schon raus ist und Herr Schweißer hat diesen Auftrag noch nicht fertig. Also, da zu diesem Zeitpunkt "Messen_Zentrieren_AS_BS" immer noch meldet, dass es leer ist und Herr Schweißer beschäftigt ist druckt Frau Schreiber eine neuen Auftrag "Zentrieren_AS_BS" für Herr Koch aus. Wenn nun Herr Koch zur Frau Schreiber kommt nimmt er den freigegebenen Auftrag für "Zentrieren_AS_BS" mit, obwohl zu diesem Zeitpunkt "Messen_Zentrieren_AS_BS" eigentlich nicht leer ist, da doch Herr Schweißer auch einen Auftrag hat. Dies bedeutet Zitat: Solange der Werker mit dem BE von "Zentrieren_AS_BS" zu "Messen_Zentrieren_AS_BS" unterwegs ist, können weitere Auslagerungen stattfinden.
Beispiel ist angehängt ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 02. Apr. 2017 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
So jetzt Step 3: da wir in Step 1 die Liste an die Struktur von Importeranfrage angepasst haben, ist dieser Schritt sehr einfach. Es geht darum Step1 in SimTalk zu übersetzen. (Den Step Pseudocode lasse ich mal hier außer acht.) So sieht die Struktur von Importeranfrage aus: Code: (obj: object; typ: integer) --das ist das Event aus Step1 z.B.: Zentrieren_AS_BS will auslagern isdo /** hier dann die Regeln **/ if typ = 3 then inspect obj.name /*das ist SimTalk V12. in 13 ist es switch*/ when "P12" then --entscheide nach Event was für Randbedingungen gelten waituntil current.Zentrieren_AS_BS.leer and XXX prio 1; --warten bis Randbedingungen eintretten when "Zentrieren_AS_BS" then waituntil current.Messen_Zentrieren_AS_BS.leer prio 2; when "P13" then waituntil current.Zentrieren_AS_BS.leer and XXX prio 3; end; /*Auslagern selbst außerhalb von inspect, alles ausgelagern möglich sein sollte*/ ?.standardImportDurchführen(obj, typ); --damit starten wir die Standartumlagerung end; end;
FRAGE: Was kann für XXX eingetragen werden? INFO: "prio" sollte dabei unterschiedlich sein. Falls mehrere Anfragen gleichzeitig warten, sollte nicht der Zufall entscheiden welche Auslagerung als nächste stattfindet. Wegen Bedingung:
Zitat: da alles was wir nicht extra definieren normal ausgelagert wird
ist "inspect" ohne "else"-Block. vg Nadin
------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 02. Apr. 2017 15:09 <-- editieren / zitieren --> Unities abgeben:
Ich habe eine globale Variable mit dem Namen "Bedingung" erstellt und folgendens ausprobiert. param obj: object, -- Importer typ: integer -- Importertyp (0=Entstörimporter, 1=Rüstimporter, 2=Bearbeitungsimporter, 3=Transportimporter) if typ = 3 then switch obj.name case "P12" waituntil current.Zentrieren_AS_BS.leer and @.Bedingung = false prio 1 <--- ich bekomme jedoch hier eine Fehlermeldung "Syntaxfehler" case "Zentrieren_AS_BS" waituntil current.Messen_Zentrieren_AS_BS.leer prio 2 case "P13" waituntil current.Zentrieren_AS_BS.leer and @.Bedingung = true prio 3 end ?.standardImportDurchführen(obj, 3) end
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 02. Apr. 2017 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Code: if typ = 3 then switch obj.name case "P12" waituntil current.Zentrieren_AS_BS.leer and @.Bedingung = false prio 1 ; --keine neue Zeile und ";" case "Zentrieren_AS_BS" waituntil current.Messen_Zentrieren_AS_BS.leer prio 2; case "P13" waituntil current.Zentrieren_AS_BS.leer and @.Bedingung = true prio 3; end ?.standardImportDurchführen(obj, 3) end
------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 02. Apr. 2017 15:50 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 02. Apr. 2017 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
ist doch globale Variable! Wozu dann @ davor? Mit @ sprichst du das BE an. Importeranfrage kennt kein BE. ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 02. Apr. 2017 16:46 <-- editieren / zitieren --> Unities abgeben:
Ich habe in den Eingang von P13 folgendes eingefügt if current.P13.voll then Bedingung:=true elseif current.P13.leer then Bedingung:=false else end Kann man das so machen? Bei der Simulation kommt es zu einem Stau vor P13, der Werker versucht ein Teil von Messen_Zentrieren_AS_BS zu Puffer P13 zu tragen, aber der Puffer P13 ist schon voll. Und ich möchte dass der Werker an der Einzelstation Messen_Zentrieren_AS_BS bleibt, während diese arbeitet. Normalerweise funktioniert das, wenn ich in der Arbeitsstation "Werker bleibt nach Abschluss der Arbeit" hier auswähle. Aber jetzt funktioniert es iwie nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 02. Apr. 2017 17:10 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
EingangSt kann nicht wissen dass die Station leer ist, da diese nicht beim Auslagern aktiviert wird. Beobachter sind einfacher (sehe Beispiel von Heute)
Zitat: Und ich möchte dass der Werker an der Einzelstation Messen_Zentrieren_AS_BS bleibt, während diese arbeitet. Normalerweise funktioniert das, wenn ich in der Arbeitsstation "Werker bleibt nach Abschluss der Arbeit" hier auswähle. Aber jetzt funktioniert es iwie nicht.
Werker bleibt solange keine weiteren Aufträge angenommen werden können an dem Werker vermittelt wurden. Entweder im Werkerpool "Arbeitsaufträge nur im Pool hollen" aktivieren (global auf alle Werker gültig). Oder in Station die Bearbeitung mit Werker einrichten Importer auf aktiv (lokale Lösung) ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern [Diese Nachricht wurde von nadin1223 am 02. Apr. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 02. Apr. 2017 22:42 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt für P13 einen Beobachter erstellt --> Siehe Bild Beobachter Und für Messen_Zentrieren_AS_BS habe ich den Importer auf aktiv --> Siehe Bild Importer Sobald ich den Importer erstelle, wird jedoch der Auftrag von Messen_Zentrieren_AS_BS nicht mehr ausgeführt. Kannst du mir sagen, was ich falsch mache? Ich habe mir noch eine weitere Lösungsmöglichkeit überlegt if typ = 3 then if Bedingung = false then if current.Messen_Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Messen_Zentrieren_AS_BS, 3) elseif current.Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Zentrieren_AS_BS, 3) else ?.standardImportDurchführen(P12, 3) end else if current.Messen_Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Messen_Zentrieren_AS_BS, 3) elseif current.Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Zentrieren_AS_BS, 3) else ?.standardImportDurchführen(P13, 3) end end end Ich habe diese Lösung mal getestet und beim Arbeitsplatz A20 von Messen_Zentrieren_AS_BS "Werker bleibt nach Abschluss der Arbeit hier" ausgewählt. Bei dieser Lösung bringt der Werker das Teil zur Einzelstation Zentrieren_AS_BS, währen die Einzelstation arbeitet, geht er zurück in seinen Werkerpool. Sobald die Einzelstation fertig ist, geht er zur Einzelstation Messen_Zentrieren_AS_BS und bleibt während der gesamten Bearbeitungszeit dort. Wenn die Einzelstation fertig ist, bringt der Werker das Teil zu P13. Dadurch dass der Werker an der Station Messen_Zentrieren_AS_BS bleibt, lagert P12 nicht schneller aus, als der Werker bei P13 ankommt. Doch zu meinem Problem: Bei dieser Lösung läuft anfangs alles richtig ab und sobald P13 voll ist wechselt die gobale Variable auf true. Doch danach geht der Werker in seinen WerkerPool zurück statt das nächste Teil aus P13 zu entnehmen. Weißt du woran das liegen kann? Viele Grüße Lele Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 02. Apr. 2017 23:41 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Ungünstige Wahl , da --> Code:
/*Bei Event --> leer*/ wenn alterWert= false then --war nicht leer // Jetzt ist LEER Bedingung = true; //wenn LEER setze auf TRUE sonst Bedingung = false; //wenn nicht LEER setze auf FALSE end;/*Bei Event --> voll*/ wenn alterWert = false then --war vorher nicht voll // Jetzt ist VOLL Bedinung = true; //wenn VOLL setze auf TRUE sonst Bedingung = false; //wenn nicht VOLL setze auf FALSE end;
Code: if typ = 3 then if Bedingung = false then Print "Bedingung false; if current.Messen_Zentrieren_AS_BS.voll then Print "MZ_AB_BS voll", " auslager Event von --> " , obj.name; ?.standardImportDurchführen(Messen_Zentrieren_AS_BS, 3) elseif current.Zentrieren_AS_BS.voll then Print " hier das gleiche usw." ?.standardImportDurchführen(Zentrieren_AS_BS, 3) else Print " usw. für jede Möglichkeit ein Print damit in Konsole du die Entscheidungen nachvollziehen kannst " ?.standardImportDurchführen(P12, 3)end else if current.Messen_Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Messen_Zentrieren_AS_BS, 3) elseif current.Zentrieren_AS_BS.voll then ?.standardImportDurchführen(Zentrieren_AS_BS, 3) else ?.standardImportDurchführen(P13, 3) end end end
Dieser Lösungsansatz ist schwierig, da hier stets!!! sichergestellt werden muss, dass der zu erfüllende Zustand nur dann auftritt, wenn auch nur diese Station die Anfrage sendet. Setze mal paar Print-Befehle ein, dann siehst du was ich meine. vg Nadin ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 03. Apr. 2017 20:55 <-- editieren / zitieren --> Unities abgeben:
Ich habe das mal ausprobiert und verstehe was du meinst. Ich versuche grade wieder deinen Lösungsvorschlag. Ich habe jetzt in meine Importeranfragesteuerung noch eine weitere Randbedingung bei P12 und P13 eingefügt und somit wird in P12 erst wieder ausgelagert, wenn das Teil in P13 bzw. P14 angekommen ist. param obj: object, -- Importer typ: integer -- Importertyp (0=Entstörimporter, 1=Rüstimporter, 2=Bearbeitungsimporter, 3=Transportimporter) if typ = 3 then switch obj.name case "P12" waituntil current.Zentrieren_AS_BS.leer AND Bedingung = false AND current.Messen_Zentrieren_AS_BS.leer prio 1 ; case "Zentrieren_AS_BS" waituntil current.Messen_Zentrieren_AS_BS.leer prio 2; case "P13" waituntil current.Zentrieren_AS_BS.leer AND Bedingung = true AND current.Messen_Zentrieren_AS_BS.leer prio 3; end ?.standardImportDurchführen(obj, 3) end Ich habe bei P13 einen Beobachter eingefügt --> Beobachteter Wert von P13 ist VOLL
param Attribut: string, alterWert: any if alterWert=false then -- War nicht voll (somit leer oder zum Teil gefüllt) // Ist jetzt VOLL current.Bedingung := true; -- Wenn jetzt VOLL dann soll globale Variable Bedingung TRUE sein end; => Wie setze ich "Bedingung" wieder auf false, wenn P13 wieder leer ist? Wenn ich simuliere läuft anfangs alles richtig ab. Sobald P13 voll ist springt meine globale Variable "Bedingung" auf True und der Werker entnimmt auch kein Teil aus P12. Aber in dem Moment müsste er anfangen Teile aus P13 zu entnehmen. Doch das tut er nicht. Kannst du mir sagen, woran das liegt? Viele Grüße Lele
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 03. Apr. 2017 21:04 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 03. Apr. 2017 21:33 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Moin, Zitat: Aber in dem Moment müsste er anfangen Teile aus P13 zu entnehmen. Doch das tut er nicht. Kannst du mir sagen, woran das liegt?
dann wird Code: case "P13" waituntil current.Zentrieren_AS_BS.leer AND Bedingung = true AND current.Messen_Zentrieren_AS_BS.leer prio 3;
nicht aufgerufen/nie geweckt. Print davor und dahinter und schon ist dieser Punkt ausgeschlossen. Oder Klassenhaltepunkt kann da weiterhelfen. Kann P13 den umlagern? Ist der Name richtig geschrieben? ... usw. :D Zitat: => Wie setze ich "Bedingung" wieder auf false, wenn P13 wieder leer ist?
genauso wie voll. Oder in Importeranfragesteuerung wenn P13.AnzahlBEs = 1 (aber nach waituntil). Ausgangssteuerung geht auch. vg Nadin ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 03. Apr. 2017 23:18 <-- editieren / zitieren --> Unities abgeben:
Ich habe die Print-Befehle in die Importeranfragesteuerung eingefügt. param obj: object, -- Importer typ: integer -- Importertyp (0=Entstörimporter, 1=Rüstimporter, 2=Bearbeitungsimporter, 3=Transportimporter) if typ = 3 then switch obj.name case "P12" Print "P12", " auslager Event von --> " , obj.name; waituntil current.Zentrieren_AS_BS.leer AND Bedingung = false AND current.Messen_Zentrieren_AS_BS.leer prio 1 ; Print "P12", " auslager Event von --> " , obj.name; case "Zentrieren_AS_BS" Print "Messen_Zentrieren_AS_BS", " auslager Event von --> " , obj.name; waituntil current.Messen_Zentrieren_AS_BS.leer prio 2; Print "Messen_Zentrieren_AS_BS", " auslager Event von --> " , obj.name; case "P13" Print "P13", " auslager Event von --> " , obj.name; waituntil current.Zentrieren_AS_BS.leer AND Bedingung = true AND current.Messen_Zentrieren_AS_BS.leer prio 3; Print "P13", " auslager Event von --> " , obj.name; end ?.standardImportDurchführen(obj, 3) end Und die Konsole gibt mir folgendes aus.
13 auslager Event von --> P13 P12 auslager Event von --> P12 Messen_Zentrieren_AS_BS auslager Event von --> Zentrieren_AS_BS Messen_Zentrieren_AS_BS auslager Event von --> Zentrieren_AS_BS P12 auslager Event von --> P12 P13 auslager Event von --> P13 P12 auslager Event von --> P12 P12 auslager Event von --> P12 P13 auslager Event von --> P13 P12 auslager Event von --> P12 P12 auslager Event von --> P12 P12 auslager Event von --> P12 P12 auslager Event von --> P12 P13 auslager Event von --> P13 P12 auslager Event von --> P12 Messen_Zentrieren_AS_BS auslager Event von --> Zentrieren_AS_BS Messen_Zentrieren_AS_BS auslager Event von --> Zentrieren_AS_BS P12 auslager Event von --> P12 P13 auslager Event von --> P13 P12 auslager Event von --> P12 P12 auslager Event von --> P12 P13 auslager Event von --> P13 P13 auslager Event von --> P13 P13 auslager Event von --> P13 P13 auslager Event von --> P13 P13 auslager Event von --> P13 P13 auslager Event von --> P13 P13 auslager Event von --> P13 P12 auslager Event von --> P12 Sobald die globale Variable True ist gibt die Konsole "P13 auslager Event von --> P13" an, doch die letzte Zeile ist immer "P12 auslager Event von --> P12" egal wie lange die Simulation läuft Ansonsten ist alles richtig geschrieben und P13 kann auch auslagern. Viele Grüße Lele
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 03. Apr. 2017 23:30 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Code: param obj: object, -- Importer typ: integer -- Importertyp (0=Entstörimporter, 1=Rüstimporter, 2=Bearbeitungsimporter, 3=Transportimporter)if typ = 3 then switch obj.name case "P12" Print "P12", " auslager Event START von --> " , obj.name , "; Zentrieren_AS_BS.leer= ", current.Zentrieren_AS_BS.leer , "; Bedingung= " , Bedingung , "; Messen_Zentrieren_AS_BS.leer= ", current.Messen_Zentrieren_AS_BS.leer; waituntil current.Zentrieren_AS_BS.leer AND Bedingung = false AND current.Messen_Zentrieren_AS_BS.leer prio 1 ; Print "P12", " auslager START von --> " , obj.name , "; Zentrieren_AS_BS.leer= ", current.Zentrieren_AS_BS.leer , "; Bedingung= " , Bedingung , "; Messen_Zentrieren_AS_BS.leer= ", current.Messen_Zentrieren_AS_BS.leer; case "Zentrieren_AS_BS" /**...usw. Es gillt ein Monitoring die relevanten Zustände und Events aufzuzeigen (Pro Case die Randbedingungen davor und danach), da die Ursache für Fehler nicht bekannt ist (es kann auch nicht der Importer sein). Und Ausgabetext muss Unikat sein, sonst weist du nicht welche Stelle grade was ausgibt.**/ end ?.standardImportDurchführen(obj, 3) end
------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 04. Apr. 2017 10:47 <-- editieren / zitieren --> Unities abgeben:
P12 auslager START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P13 auslager Event START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= false P12 auslager Event START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= false P12 auslager START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P13 auslager Event START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P12 auslager Event START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P12 auslager START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P12 auslager Event START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P12 auslager START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P13 auslager Event START von --> P13; Zentrieren_AS_BS.leer= false; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P12 auslager Event START von --> P12; Zentrieren_AS_BS.leer= false; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true Zentrieren_AS_BS auslager Event START von --> Zentrieren_AS_BS; Messen_Zentrieren_AS_BS.leer= true Zentrieren_AS_BS auslager START von --> Zentrieren_AS_BS; Messen_Zentrieren_AS_BS.leer= true P12 auslager START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P13 auslager Event START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= false P12 auslager Event START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= false P12 auslager START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= false; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager Event START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P13 auslager START von --> P13; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true P12 auslager Event START von --> P12; Zentrieren_AS_BS.leer= true; Bedingung= true; Messen_Zentrieren_AS_BS.leer= true Sobald der Puffer voll ist, wird die globale Variable "Bedingung" aut true gesetzt, und sowohl das Event als auch der Vorgang werden gestartet. Aber in der Simulation geht der Werker zurück in seinen WerkerPool sobald der Puffer voll ist und die Variable True ist Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 04. Apr. 2017 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Ist der Ausgang von P13 offen? ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 04. Apr. 2017 14:45 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 04. Apr. 2017 15:22 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
hänge bitte das Modell an, ich schaue es mir an ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 04. Apr. 2017 15:27 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 04. Apr. 2017 16:16 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
P13 --> Ausgang --> Dienste sind nicht gesetzt Hilft es? vg Nadin ------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 04. Apr. 2017 17:35 <-- editieren / zitieren --> Unities abgeben:
Ja jetzt funktioniert endlich alles Vielen Dank. Jetzt hätte ich noch eine andere Frage. Ich möchte dass der Werker nachdem er ein Teil aufgenommen hat, am Arbeitsplatz 5 Sekunden stehen bleibt, bevor er zum Zielarbeitsplatz losläuft und wenn er am Zielarbeitsplatz ist, soll er wieder auf dem Arbeitsplatz 5 Sekunden stehen bleiben, bevor er das Teil auf die Einzelstation umlagert. Kannst du mir sagen wie ich das umsetze? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 04. Apr. 2017 18:17 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Es gehört zum Modellierungsprozess dazu eigenständig Lösungsansätze zu entwickeln. Ich helfe gerne weiter, wenn ich überzeugt bin, dass diese Hilfe erforderlich ist. Hilfe ist erforderlich, falls Verständnis falsch oder nicht da ist. Zeitmangel oder faulheit gehören nicht dazu. vg Nadin
------------------ „Die einfachste Art an korrekte Informationen zu gelangen ist, etwas Falsches in ein Forum zu posten und auf die Korrektur zu warten.“ Matthew Austern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 05. Apr. 2017 13:32 <-- editieren / zitieren --> Unities abgeben:
Ich habe eben noch mal genauer geschaut und auch festgestellt, dass es eine dumme Frage war -.-' Tut mir leid. Noch mal vielen Dank für deine Hilfe. Jetzt verstehe ich endlich wie ich mit der Importeranfragesteuerung umgehe. Vor allem deine Vorgehensweise hat mir sehr weitergeholfen. Viele Grüße Lele Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |