Autor
|
Thema: Sortierkriterium (1521 mal gelesen)
|
optimierer Mitglied
Beiträge: 4 Registriert: 28.12.2004
|
erstellt am: 28. Dez. 2004 13:04 <-- editieren / zitieren --> Unities abgeben:
Hallo "Mit-Simulatoren", arbeite z.Z. an der Abbildung einer Werkstattfertigung. Diese soll verschiedene Auftragstypen auf mehreren Einzelstationen bearbeiten. Vor dieser Bearbeitung soll eine Sortierung der BEs nach benutzerdefinierten Attributen (z.B. Prio, Zufall) erfolgen. Ich habe nun eine Methode Namens "Sortierkriterium" geschrieben, die folgenden Quellcode enthält (vereinfachte Version): : real is do result := @.Sortierattribut; end; Diese Methode rufe ich in den Sortieren beim Punkt "Sortierkritierium" --> "Methode" und Auswahl von "Sortierkritierum" auf. Wie muss nun die Ausgangssteuerung meines Sortierers aussehen, dass er genau das BE umlagert, was laut Methode als nächstes umzulagern ist? Sobald ich schreibe "@.umlagern" wird für den Fall, dass das erste BE umgelagert wird, dieses - also das aufrufende - BE umgelagert. Für alle weiteren Fälle wird das "richtige" BE umgelagert. Wie schaffe ich es, dass auch bei der ersten Sortierung das richtige BE umgelagert wird? Herzlichen Dank für eure Hilfe!!! Viele Grüße und noch einen wunderschönen Tag, optimierer
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 28. Dez. 2004 13:52 <-- editieren / zitieren -->
Hallo Optimierer, Stell mal folgendes am Sortierer ein (Reiter "Attribut"): Sortierkriterium: "Be-Eigenschaft" und daneben "freies Attribut" und darunter <Dein Attributname> und raaauuuus mit den Umlagerungs-Methoden in der Ausgangssteuerung! Das Umlagern kann das eM-Plant viel besser als wir Anwender. Das mit dem Umlagern (@) erklärt sich, wie folgt: @ bezeichnet ja das aktuelle BE auf einer Station. Da der Sortierer in dem Sinn keinen Zeitverbrauch (außer Zyklus-/Erholzeit, die wahrscheinlich = 0 sind) hat, wird das 1. Be, das den Sortierer betritt, sofort (nach 0 Sek) die Ausgangssteuerung aufrufen, -sonst erst nach der jeweiligen Bearbeitungszeit-. Gruß ------------------ DER SIMULATOR |
optimierer Mitglied
Beiträge: 4 Registriert: 28.12.2004
|
erstellt am: 28. Dez. 2004 14:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Simulator, leider kann ich die Ausgangssteuerung nicht löschen, da ich dort noch weitere Anweisungen stehen habe. Weiterhin kann ich bei den Sortierern nicht als Sortierkriterium das freie Attribut wählen, da ich in der Methode Sortierkriterium weitere wichtige Anweisungen für andere Sortieralgorhytmen stehen habe. Die Ausgangssteuerung der Sortierer wird erst dann ausgeführt, wenn eine bestimmte Anzahl an BEs von der Quelle generiert wurde. Anschließend beendet die Quelle die Generierung und die Sortierung der z.B. ersten 10 Aufträge soll abgearbeitet werden. Wie kann ich für diesen Fall sicherstellen, dass bereits das erste BE nach der Sortierung umgelagert wird. Wenn ich in der Ausgangssteuerungsmethode der Sortierer schreibe "@.umlagern" wird im ersten Fall das aufrufende - also erste BE, was den Sortierer betritt - und anschließend die richtigen BEs umgelagert. Ganz lieben Dank für Eure Hilfe!!! Beste Grüße, optimierer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 28. Dez. 2004 15:59 <-- editieren / zitieren -->
Hallo Optimierer, ich habe nichts von Löschen der Ausgangssteuerung geschrieben sondern von den Umlagerungsmethoden - also @.umlagern- in den Ausgangssteuerungen. Wenn Du das Kontrollkästchen an der Ausgangssteuerung auf "HECK" stellst, brauchst Du normalerweise kein @.umlagern mehr, weil eM-Plant dann selbstständig umlagert. Du sparst Dir viel Zeit wenn Du einige Aufgaben auch eM-Plant überläßt. Und glaube mir,das "Umlagern" von BE´s beherrscht das System perfekt! : - ); Nun zu dem Fuellstand des Sortierers S: Dies kannst Du eleganter mit 2 Befehlen in der Eingangs/Ausgangssteuerung erledigen. Eingangssteuerung: if ?.anzahlbes<Fuellstand then ?.ausganggesperrt:=true; else ?.ausganggesperrt:=false; end; Ausgangssteuerung: ?.ausganggesperrt:=true; Jetzt lagert der Sortierer immer erst ab einem vorgegebenen Füllstand um; somit wird auch das 1. "eingetretene" Be in der vorgegebenen Sortierreihenfolge umgelagert. In der INIT- oder RESET-Methode (im Netzwerk) noch
deletemovables; sortierer.ausganggesperrt:=true; damit zu Beginn der Simulation die BE´s geloescht werden und der Sortiererausgang zu ist. Jetzt muß nur noch der Sortieralgorithmus gecheckt werden und schon können wir uns auf Silvester einstimmen. Gruß ------------------ DER SIMULATOR |
optimierer Mitglied
Beiträge: 4 Registriert: 28.12.2004
|
erstellt am: 29. Dez. 2004 10:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Simulator, Danke für Deine wiederholt schnelle Hilfe. Ich habe Deine Tipps umgesetzt und es funktioniert fast einwandfrei. Einzigstes Problem: Wenn der Sortierer erst nach dem Eingang von 10 BEs beginnen soll umzulagern (z.B. absteigend nach ID der BEs, d.h. das 10. als Erstes) wird leider zu Erst das 9. und anschließend das 10. BE umgelagert. Habe bereits sowohl bei der Eingangs- als auch Ausgangssteuerung folgenden Befehl eingebaut: ?.Sortieren in der Hoffnung, dass der jeweilige Sortierer kurz vor der ersten Umlagerung nochmals sortiert. Leider ohne Erfolg. Reihenfolge ist dann so: 9, 10, 8, 7, 6, 5, ... Wie kann ich gewährleisten, dass auch das letzte BE, das den Sortierer betritt, bei der ersten Sortierung berücksichtigt wird? Ganz herzlichen Dank!!! Wünsche allen Forum-Beteiligten einen guten Start in 2005. Viele Grüße, optimierer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 29. Dez. 2004 14:13 <-- editieren / zitieren -->
Hallo Optimierer, hmmm interessant !, ist das nun korrekt bzw. nachvollziehbar, wie sich der Sortierer verhält oder nicht ? auf alle Fälle wird die Eingangsmethode, die den Ausgang öffnet bzw. schließt vor dem Sortieren ausgeführt. Ich habe hier zu folgende Erklärung (nach einigem Nachdenken) Bis dato haben wir immer von einem "Betreten" des Sortierers gesprochen. Die Eingangsteuerung wird aber in diesem Fall ausgeführt sobald ein BE mit seiner vorderen Spitze "anklopft" d.h. noch nicht tatsächlich umgelagert und auf dem Sortierer liegt. Deshalb wird das 10. Teil beim Sortiervorgang nicht berücksichtigt. Nun zur Lösung. Was Du machen mußt ist die Eingangsmethode etwas zu verzögern, sodaß sie erst ausgeführt wird nachdem das Teil auf dem Sortierer liegt. D.h. wenn Du die Ausführung der Eingangsmethode leicht verzögerst indem Du ein "wait(0.0001);" vor die 1. Anweisung in der Eingangssteuerung schreibst, dann wird erst sortiert und dann der Ausgang geöffnet. Gruß ------------------ DER SIMULATOR |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|