Autor
|
Thema: Lieferliste bei Quelle (4996 mal gelesen)
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 08. Okt. 2012 14:14 <-- editieren / zitieren --> Unities abgeben:
Hallo! Brauche dringend hilfe! habe bei der quelle eine liferliste erstellt und zu jedem in der Liste stehenden Be mittels table einige Attribute erstellt. Jetzt will ich aber erst dem Attribut nach einer einzelstation einen wert zuweisen funktioniert auch nur wenn ich dann später in einer methode zb if @.attributname="1" then... aufrufe kennt er den namen nicht, da er den wert nicht sieht obwohl er in der liste vorhanden ist. Bitte um Rat!! Mfg 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: 08. Okt. 2012 17:46 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Sie müssen auf jeden Fall die Attribute in der Klassenbibliothek im BE im Blatt Benutzerdefinierte Attribute anlegen. In der Lieferliste können Sie dann Werte festlegen oder später darauf zugreifen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 08. Okt. 2012 19:22 <-- editieren / zitieren --> Unities abgeben:
Kann ich dann eine lieferliste anlegen in der ich zb. zwei mal das selbe be habe d.h. der selbe Name aber mit unterschiedlichen benutzerdefinierten Attribute? Wenn ja kannst du mir sagen wie ich mittels Methode die werte dieser Attribute zuweisen kann. Mfg 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: 08. Okt. 2012 21:29 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Von der Klassenbibliothek aus werden alle benutzerdefinierten Attribute an die Kinder im Netzwerk vererbt. Deshalb haben normalerweise alle BEs der selben Klasse die selben Attribute. Die benutzerdefinierten Attribute können Sie verwenden, um Ihre BEs genauer zu bestimmen. So können Sie zum Beispiel ein Attribut Farbe festlegen und diesem Attribut in der Lieferliste unterschiedliche Werte zuweisen ("rot","blau" usw.). Sie können auch spezielle Attribute nur für ein BE in der Lieferliste setzen und die anderen Werte auf dem Standardwert lassen. Auf dei BEs können Sie in den Steuerungen mit @ zugreifen, ein Attribute setzen Sie mit := z.B. @.farbe:="grün"; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 11. Okt. 2012 12:27 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmals, Hab noch eine frage. Hab die Bearbeitungszeiten in eine tabelle geschrieben und will nun manche davon um einen wert erhöhen bei denen ihr Attribut einen bestimmten wert hat. zb. if @.kapa>0 then @.bearbeitungszeit:=@.bearbeitungszeit*@.kapa; end; kapa ist das Attribut so funktioniert es aber nicht bitte um einen Tipp! Mfg
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. Okt. 2012 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Wenn Sie die Werte in einer Tabelle ändern wollen, dann müssen Sie mit <tabelle>[x,y] auf die Werte zugreifen, das könnte dann wie folgt aussehen:
Code:
if @.kapa>0 then bearbeitungszeit[1,1]:=bearbeitungszeit[1,1]*@.kapa; end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 15. Okt. 2012 12:14 <-- editieren / zitieren --> Unities abgeben:
Danke! hab noch ne bitte, wenn ich mehrere einzelstationen habe will ich wenn ein bestimmtes be kommt dass es dann auf eine beliebige einzelst. umgelagert wird und eine andere gesperrt wird bis das be aus der einzelstation wieder draußen ist. habs mit einer kartei probiert dass ich alle einzelst. die leer und bereit sind hineinspeichere funktioniert aber nicht. Mfg 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: 15. Okt. 2012 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 15. Okt. 2012 20:33 <-- editieren / zitieren --> Unities abgeben:
Unter bestimmtes be mein ich nur wenn Attribut einen best. wert hat hier aber nicht relevant da ich das weiß. Also einfach ein be. Und das zweite mein ich dass eine zweite einzelstation gesperrt also der Eingang gesperrt werden soll. Lg 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: 15. Okt. 2012 21:49 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Alle "verfügbaren" Maschinen in eine Liste zu schreiben, ist keine gute Idee, da sich der Zustand der Maschinen laufend ändert. Sie können allerdings eine Liste(Tabelle) mit allen Maschinen anlegen und vor jeder anstehenden Umlagerung (oder periodisch) prüfen, welche Ihrer Maschinen verfügbar (bereit, eingangGesperrt=false und leer) ist. Wenn Sie etwas passendes finden, können Sie das wartende BE umlagern. Sie können es auch mit einer waituntil-Anweisung lösen, bei einer großen Anzahl von Maschinen und einer Reihe von Bedingungen je Maschine wird das allerdings schnell kompliziert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 16. Okt. 2012 09:13 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 16. Okt. 2012 19:56 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Das kann man auch mit einer Tabelle organisieren (2 Spalten, Datentyp Object). In der ersten Spalte könnten alle Maschínen stehen, die ein "langes" BE aufnehmen können und in der zweiten Spalte, die Maschinen, die jeweils bei Belegung der Maschine aus der ersten Spalte blockiert werden. Dann können Sie die Zeile in der Tabelle suchen, in der die Maschinen aus beiden Spalten einer Zeile leer sind. Bei kurzen Teilen können Sie dann in der gesamten Tabelle suchen. Ich würde zum Umlagern eine Methode schreiben, die alle paar Sekunden (oder Minuten, das hängt von Ihrer Taktzeit ab) von einem Generator aufgerufen wird. Die Methode erkennt das Teil und durchsucht die Tabelle nach einer (oder zwei) freien Maschinen. Wenn nichts frei ist, passiert nichts, sonst wird das Teil umgelagert. Damit die langen Teile keine kurzen blockieren, können Sie zwei Eingangsplätze definieren und abwechselnd abfragen...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 17. Okt. 2012 10:13 <-- editieren / zitieren --> Unities abgeben:
Versteh ich nicht. geht das nicht einfacher indem ich abfrage welche maschinen bereit sind und leer und diese in eine tabelle speichere und eine variable mitlaufen lasse und wenn diese größer 2 ist ich auf den ersten Eintrag in der Tabelle umlagere und den zweiten sperre und dann mit waituntil erster Eintrag ist wieder leer den zweiten Eintrag wieder entsperre? is i:integer; o,k bject; do --überprüft welche hauben leer und bereit sind und speichert sie dann in kartei if haube1.bereit and haube1.leer then tabelle1.schreibeZeile(1,variable,haube1); i:=i+1; variable:=variable+1; end; if haube2.bereit and haube2.leer then tabelle1.schreibeZeile(1,variable,haube2); variable:=variable+1; i:=i+1; end; if haube3.bereit and haube3.leer then tabelle1.schreibeZeile(1,variable,haube3); variable:=variable+1; i:=i+1; end; if i>=2 then o:=tabelle1[1,1]; @.umlagern(tabelle1[1,1]); tabelle[1,2].EingangGesperrt:=true; k:=tabelle[1,2]; waituntil o.leer prio 1; k.EingangGesperrrt:=false; end; 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: 17. Okt. 2012 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Theoretisch funktioniert Ihr Ansatz, wenn die gesperrte Maschine in keinerlei Beziehung zu der arbeitenden Maschine steht. Wenn es eine Beziehung gibt (z.B. steht in der Nähe, blockiert durch Fördertechnik, gemeinsamer Bediener...), ist Ihr Ansatz falsch, sie müssen dann die Maschinen paarweise betrachten, vor allem, wenn die Maschinen einzeln belegt werden können. Wenn der Eingang gesperrt ist, ist die Maschine trotzdem bereit. Sie müssen eingangGesperrt mit in Ihre Abfrage aufnehmen.
Code:
if haube1.bereit and haube1.leer and haube1.eingangGesperrt=false then ...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 17. Okt. 2012 12:35 <-- editieren / zitieren --> Unities abgeben:
Ich brauche es dafür dass ich mehrere maschinen habe die alle gleich sind und in denen ein be passt nur wenn ein großes be kommt benötigt dieses zwei maschinen. FUnktioniert mein Ansatz hier wenn nicht kannst du mir deinen Ansatz kurz aufschreiben? Lg 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: 17. Okt. 2012 21:13 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 18. Okt. 2012 17:36 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 19. Okt. 2012 08:28 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 22. Okt. 2012 09:40 <-- editieren / zitieren --> Unities abgeben:
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 22. Okt. 2012 09:44 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 28. Okt. 2012 18:40 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 29. Okt. 2012 09:02 <-- editieren / zitieren --> Unities abgeben:
will zb. von einem puffer auf die zweite parallelstation den gesamten inhalt umlagern aber er lagert nur zwei auf die zweite und das erste Be im puffer wird auf die erste parallestation umgelagert. zur info quelle-p1-p2-senke warum? 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: 29. Okt. 2012 21:03 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 02. Nov. 2012 10:17 <-- editieren / zitieren --> Unities abgeben:
Funktioniert schon, wie kann man überhaupt auf die aufenhaltszeit zugreifen die ein be in einem baustein hat. zb. hab eine quelle die eine ausgangssteuerung besitzt in der steht wenn beim nachfolgenden puffer kapazität vorhanden ist wird es zu diesem puffer umgelagert wenn nicht soll das be eine betsimmte zeit warten wenn dann der puffer noch immer nicht frei ist dann wird abgebrochen? Mfg 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: 02. Nov. 2012 11:37 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 04. Nov. 2012 10:26 <-- editieren / zitieren --> Unities abgeben:
das funktioniert bei mir aber nicht. Hab jetzt zb eine quelle und eine methode für die ausgangssteuerung. methode: if @.name="h" then waituntil ereignisverwalter.zeit=60 prio 1; @.umlagern(senke); end; hier müsste er ja nach 60 min das be umlagern oder? bei mir tut sich nichts. Wieso? mfg 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: 05. Nov. 2012 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Die Steuerung müsste beides enthalten, den "Geradeauslauf" und die Umlagerung in die Senke, z.B. Code:
if @.name="h" then waituntil (ereignisverwalter.zeit-@.eintrittszeit >=3600) or (nachfolger.leer and nachfolger.bereit) prio 1; if nachfolger.leer and nachfolger.bereit then @.umlagern(nachfolger); else @.umlagern(senke); end; end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 06. Nov. 2012 17:17 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 07. Nov. 2012 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
Tja, bei mir funktioniert es. Wenn Sie ereignisverwalter.zeit in einer waituntil Anweisung verwenden wollen, dann muss in der Simulation eine Menge passieren (sonst hat der Ereignisverwalter zu wenige Ereignisse zu verwalten). Zeiten, in denen nichts passiert, überspringt die Simulation. In größeren Simulationen ist das kein Problem (da gibt es immer genügend Ereignisse). Bei kleineren Simulationen müssten Sie sich einen kleinen Bypass legen. Dafür setzen Sie eine Quelle und eine Senke ins Modell ein, verbinden diese durch eine Kante und stellen einen Abstand von einer Minute ein. Dann stehen immer genügend Ereignisse zur Verfügung. Eine weitere Möglichkeit ist, dass Sie die Methode regelmäßig durch einen Generator aufrufen lassen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 07. Nov. 2012 10:14 <-- editieren / zitieren --> Unities abgeben:
kann ich die zweite bedingung auch weglassen zb if @.name="h" then waituntil (ereignisverwalter.zeit-be.eintrittszeit>=3600)prio 1; if nachfolger.leer and nachfolger.bereit then be.umlagern(nachfolger) else .. end; end; wartet er dann 60 min und schaut dann ob der nachfolger frei ist wenn ja lagert er um? Mfg 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: 07. Nov. 2012 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
|
madras25 Mitglied
Beiträge: 18 Registriert: 08.10.2012
|
erstellt am: 07. Nov. 2012 10:37 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 07. Nov. 2012 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für madras25
eigentlich nicht; das or bewirkt, dass die erste Bedingung, die erfüllt ist, zum Umlagern führt (entweder oder), wenn der Nachfolger das Teil aufnehmen kann oder spätestens nach 3600 Sekunden. Wenn Sie die zweite Bedingung weglassen, dann wird nach 10 Minuten geprüft, ob das Teil auf den Nachfolger oder in die Senke umgelagert wird. Für die Simulation ist das ein gewaltiger Unterschied. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |