|
Autor
|
Thema: BEs in Quelle nur erzeugen, wenn Bedingung erfüllt ist...?! (2175 mal gelesen)
|
Bachelor96 Mitglied
 Beiträge: 3 Registriert: 25.08.2014
|
erstellt am: 25. Aug. 2014 13:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ihr seid meine Rettung  Ich bin wirklich ratlos und habe schon alle Foren nach einer Lösung durchsucht, bin allerdings nicht fündig geworden. Dabei erscheint die Lösung meines Problems gar nicht so schwer... Folgende Thematik: Ich habe verschiedene Typen von BEs (26 verschiedene Typen), die ich je nach BE-Name auf die dazugehörige Bearbeitungsstation umlagere. Das habe ich mit einer Methode in der Ausgangssteuerung der Quelle mit dem Befehl "inspect @.Name ..." realisiert und das funktioniert auch. (Info: Die BEs werden in der Quelle mit der BE-Auswahl "Reihenfolge" aus einer Tabelle gelesen und erzeugt.) Jetzt kommt allerdings eine Bedingung ins Spiel: Insgesamt dürfen nur 5 BEs auf den Maschinen nach der Quelle zur selben Zeit bearbeitet werden. Erst nachdem eines der 5 BEs auf der dazugehörigen Maschine fertig bearbeitet wurde, kann ein neues beliebiges BE "nachrutschen". Und hier komme ich jetzt nicht weiter. Mein Ziel ist es, dass die Quelle nur dann das nächste BE entsprechend der Reihenfolge aus meiner Auswahl-Tabelle erzeugt, wenn die Summe (Maschine1.anzahlBEs + Maschine2.anzahlBEs + ... + Maschine26.anzahlBEs) < 5. Das erzeugte BE könnte dann sofort nach Erstellung in eine Maschine "nachrutschen". Habt ihr eine Idee, wie das in PlantSim umzusetzen ist? Aktuell habe ich das Problem nicht zufriedenstellend gelöst. Ich habe die oben erwähnte Abfrage nach der Summe der .anzahlBEs auf den Maschinen in der Ausgangssteuerung der Quelle mit Hilfe von "waituntil (Maschine1.anzahlBEs + Maschine2.anzahlBEs + ... + Maschine26.anzahlBEs) < 5" realisiert. Auf diese Weise warten einige BEs allerdings in der Quelle, bis sie "nachrutschen" können. Das ist aber nicht zweckmäßig, da dadurch die Durchlaufzeit verfälscht wird. Die Zeit, in der das BE in der Quelle wartet, darf nicht zur Durchlaufzeit gehören. Ich hoffe ihr könnt mir weiter helfen, sonst bin ich aufgeschmissen  Beste Grüße, Bachelor96 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: 26. Aug. 2014 09:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Bachelor96
Die Quelle erzeugt "Erzeugen"-Ereignisse im Ereignisverwalter. Wenn der Zeitpunkt gekommen ist, wird das Teil erzeugt. Sie können in diesen Mechanismus keine Bedingung einfügen. Für Ihr Problem gibt es mindestens zwei Lösungen: a) erzeugen Sie Ihre BEs mit SimTalk, wenn Sie diese brauchen. b) geben Sie den Teilen eine Korrektur-Zeit mit, die Sie am Ende von der Durchlaufzeit abziehen. Die können Sie in der Ausgangssteuerung der Quelle berechnen (ereignisverwalter.zeit-@.erzeugt). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bachelor96 Mitglied
 Beiträge: 3 Registriert: 25.08.2014
|
erstellt am: 26. Aug. 2014 09:38 <-- editieren / zitieren --> Unities abgeben:         
Erst einmal vielen vielen Dank für die Antwort! Leider bin ich noch nicht allzu erfahren in Plant...daher weiß ich leider nicht, wie ich beide Möglichkeiten genau umsetzen kann. Zu a):
Wie müsste eine entsprechende Methode aussehen? Wie schaffe ich es, dass er aus meiner Tabelle die BEs nacheinander einliest und dann entsprechend der Tabelle erzeugt, wenn meine Kapazitätsbedingung erfüllt ist!? Und, wo rufe ich diese auf? In der Eingangssteuerung der Quelle? Zu b):
Ich schreibe also in die Methode "... then @.umlagern(Maschine1) and ???=ereignisverwalter.zeit-@erzeugt"? Unter welchem Namen speichere ich die Korrekturzeit denn ab? Der Name muss ja später wieder genau diesem Teil zugeordnet werden können?! Und wo und wie hinterlege ich, dass die Zeit dann von der Durchlaufzeit dieses Teils abgezogen wird bevor es in der Senke vernichtet wird!? Sorry, dass ich nochmal nachfragen muss 
Viele Grüße, Bachelor96 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| | Senior Konstrukteur:in (m/w/d) für den Bereich Power Electronics | Starte mit uns durch! Accenture Automation ist ein erfolgreiches Unternehmen im Sondermaschinenbau. Wir entwerfen und bauen komplexe automatisierte Systeme für Produkte, die die Welt verändern, darunter Elektrofahrzeuge, modernste medizinische Geräte, Anlagen für saubere Energie und vieles mehr. Im Oktober 2025 wurde die ehemalige Eclipse Automation Germany ... | | Anzeige ansehen | Konstruktion, Visualisierung |
|
Bon Simul Mitglied Simulant
   
 Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 01. Sep. 2014 01:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Bachelor96
zu a) Sie könnten z.B.einen Puffer-Baustein anstatt der Quelle verwenden. Mit einer init-Methode erzeugen Sie ein erstes Teil im Puffer (siehe Hilfe: erzeugen). In der Ausgangssteuerung (Heck) der Maschine können Sie dann jeweils das nächste Teil im Puffer erzeugen. Für das Auslesen der Teile aus der Tabelle könnten Sie eine globale Variable verwenden. Der Zugriff auf die Tabellen-Zellen erfolgt mit Tabelle[spalte,zeile]. zu b) Sie könnten ein benutzerdefiniertes Attribut im BE in der Klassenbibliothek anlegen (z.B. durchLaufzeitStart), damit haben Sie dann die Zuordnung zum Teil. Die Zuweisung müsste nach @.umlagern passieren (Quelle - Ausganssteuerung). In der Senke müssten Sie dann die Durchlaufzeit für jedes Teil berechnen (z.B. ereignisverwalter.zeit-@.durchlaufZeitStart) und daraus einen Mittelwert bilden. --> dazu könnten Sie z.B. die Durchlaufzeiten der einzelnen Teile in eine Tabelle schreiben (siehe Hilfe schreibeZeile, yDim) Die Tabelle selbst besitzt eine Methode zur Berechnung des Mittelswertes. Ein gutter Platz dafür ist die endSim-Methode.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |