Autor
|
Thema: Werker bleibt an der Einzelstation, währen diese arbeitet (1242 / mal gelesen)
|
Lele01 Mitglied
Beiträge: 41 Registriert: 06.03.2017
|
erstellt am: 08. Apr. 2017 22:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadine, ich muss dich doch noch mal um Hilfe bitten. Ich möchte, dass der Werker während eine Einzelstation arbeitet am AP der Einzelstation bleibt (im Prinzip auch "arbeitet") Ich hab dich diesbezüglich schon mal gefragt und deine Antwort war "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)" Alternativ hatte ich für die "Verweilzeit" die gleiche Dauer wie die "Bearbeitungszeit" der Einzelstation eingetragen, doch der Werker verlässt schon vor Ablauf der Verweilzeit die Station. Ich würde nun gerne die lokale Lösung umsetzen. Ich habe dazu auch schon in der Hilfe gelesen, doch ich verstehe nicht richtig, wie man den Importer -> Unterregisterkarte Bearbeitung nutzt. 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: 08. Apr. 2017 23:33 <-- editieren / zitieren --> Unities abgeben:
Ich habe auch schon versucht das in der Importeranfragesteuerung umzusetzen, indem ich sage, dass der Auftrag der jeweiligen Stationen nur ausgeführt werden soll, wenn meine beiden Messstationen weder am arbeiten noch ein Teil dort blockiert ist. Somit würde der Werker, sobald er ein Teil zur Messstation hingetragen hat, keine Aufträge mehr annehmen, bis er das Teil von der Messstation weggetragen hat. Doch aus irgendeinem Grund macht er das nicht so wie ich will if typ = 3 then switch obj.name case "P7" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resArbeitend OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.Zentrieren_BS.leer AND current.Messen_Zentrieren_BS.leer AND current.Flächen_Fräsen.resArbeitend prio 4; end case "Zentrieren_BS" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resArbeitend OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.Messen_Zentrieren_BS.leer AND current.Flächen_Fräsen.resArbeitend prio 5; end case "P6" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resArbeitend OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.P7.leer AND current.P6.voll AND current.Flächen_Fräsen.resArbeitend prio 6; end case "P8" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resArbeitend OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.Flächen_fräsen.leer AND current.Messen_Flächen_fräsen.leer prio 7; end case "Flächen_Fräsen" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resArbeitend OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.Messen_Flächen_fräsen.leer prio 8; end case "P9" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resblockiert OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.Zentrieren_AS.leer AND current.Messen_Zentrieren_AS.leer AND current.Flächen_Fräsen.resArbeitend prio 1; end case "Zentrieren_AS" if current.Messen.resArbeitend OR current.Messen.resblockiert OR current.Messen_Flächen_fräsen.resArbeitend OR current.Messen_Flächen_fräsen.resblockiert then waituntil current.Messen.leer AND current.Messen_Flächen_fräsen.leer prio 4 else waituntil current.Messen_Zentrieren_AS.leer AND current.Flächen_Fräsen.resArbeitend prio 2; end 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: 09. Apr. 2017 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Moin, lokale Lösung sehe Bild Prinzip: Zur Bearbeitung von BE an Station ist ein Werker notwendig. 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: 09. Apr. 2017 16:51 <-- editieren / zitieren --> Unities abgeben:
Das hatte ich schon ausprobiert. Aber das funktioniert iwie nicht. Zum einen verlässt er die Station trotzdem und zum anderen führt er, nachdem er das Teil zu der Messstation gebracht hat, keine anderen Aufträge mehr durch. Ich habe mal beides hochgeladen, damit du siehst was ich meine. 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: 09. Apr. 2017 20:21 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Es scheint dass der BE auf jede Eventänderung ein Lagerversuch startet. Im Prinzip reicht eig auch eine reine if-Abfrage. INFO: der Werker an Station fordert Bearbeitungsimporter an, d.h. typ 2 muss auslagern können.
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" if current.Zentrieren_AS_BS.leer AND Bedingung = false AND current.Messen_Zentrieren_AS_BS.leer then ?.standardImportDurchführen(obj, typ) end case "Zentrieren_AS_BS" if current.Messen_Zentrieren_AS_BS.leer then ?.standardImportDurchführen(obj, typ) end case "P13" if current.Zentrieren_AS_BS.leer AND Bedingung = true AND current.Messen_Zentrieren_AS_BS.leer then ?.standardImportDurchführen(obj, typ) end else ?.standardImportDurchführen(obj, typ) end else --typ 2 ?.standardImportDurchführen(obj, typ) 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: 10. Apr. 2017 16:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Nadine, Vielen Dank dass du mir immer noch weiterhilfst ich habe das für meine beiden Messstationen umgeändert, aber es funktioniert immer noch nicht. Für die Messstation_Flächen_vorfräsen habe ich folgende Importeranfragesteuerung geschrieben if typ = 3 then switch obj.name case "P9" if current.P11.leer AND current.Messen_Flächen_vorfräsen.leer AND current.P9.voll then ?.standardImportDurchführen(P9, 3) end; case "P11" if current.Flächen_vorfräsen.leer AND Messen_Flächen_vorfräsen.leer then ?.standardImportDurchführen(P11, 3) end; case "Flächen_vorfräsen" if current.Messen_Flächen_vorfräsen.leer then ?.standardImportDurchführen(Flächen_vorfräsen, 3) end; else ?.standardImportDurchführen (obj, 3) end; else ?.standardImportDurchführen(obj, 2) end; und für die Messstation Zentrieren_AS_BS habe ich deinen Code übernommen if typ = 3 then switch obj.name case "P12" if current.Zentrieren_AS_BS.leer AND Bedingung = false AND current.Messen_Zentrieren_AS_BS.leer then ?.standardImportDurchführen(P12, 3) end case "Zentrieren_AS_BS" if current.Messen_Zentrieren_AS_BS.leer then ?.standardImportDurchführen(Zentrieren_AS_BS, 3) end case "P13" if current.Zentrieren_AS_BS.leer AND Bedingung = true AND current.Messen_Zentrieren_AS_BS.leer then ?.standardImportDurchführen(P13, 3) end else ?.standardImportDurchführen(obj, 3) end else --typ 2 ?.standardImportDurchführen(obj, 2) end Dann bräuchte ich noch bei einer Sache deine Hilfe. An der Station Vorschruppen_Vordrehen wird im Moment immer erst eine Palette (Inhalt 50 Stück) aus dem Puffer P3 abgearbeitet und dann eine aus dem Puffer P8 und das immer so weiter im Wechsel. Nun möchte ich aber, dass er 4 Paletten aus dem Puffer P3 nacheinander abarbeitet und dann 4 Paletten aus dem Puffer P8 und das auch immer so weiter im Wechsel. Dafür habe ich in den Ausgang von P3 folgendes geschrieben if Zähler_Vorschruppen_Vordrehen < 200 then @.inhalt.umlagern(vorschruppen_Vordrehen); else end und in den Ausgang von P8 if Zähler_Vorschruppen_Vordrehen >= 200 AND Zähler_Vorschruppen_Vordrehen < 400 then @.inhalt.umlagern(vorschruppen_Vordrehen); else end Problem: Nachdem die ersten 4 Paletten aus P3 umgelagert worden sind, werden die Paletten aus P8 nicht umgelagert. Datei ist angehängt. 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: 10. Apr. 2017 19:54 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Hallo Lele, Dienste im Importer sind nicht gesetzt! Bitte sauber arbeiten. Zitat: Nun möchte ich aber, dass er 4 Paletten aus dem Puffer P3 nacheinander abarbeitet und dann 4 Paletten aus dem Puffer P8 und das auch immer so weiter im Wechsel.
Was auch immer die Idee hinter der Stuerung ist, leider verstehe ich sie nicht. die Logik ist (n ist der Rhythmus. In deinem Falle n:=4): Init Z:= 0;--Variable Integer Code:
--!!!!Pseudocode für Ausgang beider Stationen. wenn Station1 auslagern will prüfe: wenn Z < n --> dann auslagern /*Bedingung prüft ob Anzahl erreicht zum Beenden für Station1*/ setze Z := Z+1;wenn Station2 auslagern will prüfe: wenn Z > n-1 --> dann auslagern /*Bedingung prüft ob Anzahl erreicht zum Start für Station2*/ wenn Z + 1 = 2 * n dann Z:= 0; /*Bedingung prüft ob Anzahl erreicht zum Beenden für Station2*/ sonst Z := Z+1;
------------------ „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: 11. Apr. 2017 11:31 <-- editieren / zitieren --> Unities abgeben:
Ich habe die Variable V erstellt und folgenden Code für den Ausgang P3 und Ausgang P8 geschrieben if P3.AusStBug then -- wenn P3 auslagern will if Z < 4 then @.inhalt.umlagern(vorschruppen_Vordrehen) Z := Z+1 end elseif P8.AusStBug then -- wenn P8 auslagern will if Z > 4-1 then @.inhalt.umlagern(vorschruppen_Vordrehen) if Z+1 = 2 * 4 then Z := 0 else Z := Z+1 end end end Ich habe verschiedene Methoden für "wenn Station auslagern will" aber iwie hat keine richtig funktioniert. Kannst du mir sagen welche ich da am besten nehme? 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: 11. Apr. 2017 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
so müsste es gehen Code: var n:integer n:= 4 if current.Z = 2 * n then current.Z:= 0; end; switch ?.name case "St1" waituntil current.Z < n and ?.bereit and current.Ziel.bereit prio 1 case "St2" waituntil current.Z > n-1 and ?.bereit and current.Ziel.bereit prio 2 end @.umlagern(current.Ziel) current.Z:= current.Z + 1;
------------------ „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: 11. Apr. 2017 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Die Aus-Steuerung darf dabei nur einmal aktiviert werden. --> AusStEinmal := true; 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: 11. Apr. 2017 14:40 <-- editieren / zitieren --> Unities abgeben:
|
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 12. Apr. 2017 00:10 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
so hab mal dein Modell angeschaut.. anbei: Methoden (ich hofe es sind alle, die ich geändert habe) in .txt. Es sind leider mehr als 80 BEs, sodass ich das Modell nicht speichern kann. -------------------------- [*] Eine Tabelle anlegen. So ganz traue ich nicht der If-Anfrage in Broker (mal geht es, mal net. In kleinen Test gab es keine Probleme. In diesem Modell ist es schwierig zu beurteilen.). Die Tabelle verhindert den Mehraufruf in waituntil. [*] Z Init auf -3 [*] Inhalt_P4 ist kein Monitoring, da für Auslagerung verwendet. So wie du es dritte hast, bleibt bei mir eine Box auf Puffer, was nicht der Sinn sein kann. ------------------------- Womit ich mich nicht beschäftigt habe: Logik und Produktion selbst. d.h. es ist kein Verifizieren!!!!. Kontrolliere alles genau, so ganz sicher bin ich mir nicht!!! 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 |
nadin1223 Mitglied Ing.
Beiträge: 949 Registriert: 29.03.2016
|
erstellt am: 12. Apr. 2017 00:23 <-- editieren / zitieren --> Unities abgeben: Nur für Lele01
Die Lösung von Bangsow ist auch eine nette Möglichkeit um Mehraufruf zu verhindern ------------------ „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 |