Autor
|
Thema: Rüstzeiten anpassen (3079 mal gelesen)
|
NecDrop Mitglied Student
Beiträge: 43 Registriert: 22.08.2012 Plant Simulation 10.1
|
erstellt am: 18. Sep. 2012 12:26 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte die Rüstzeiten der Einzelstationen abhängig von den eintreffenden BEs steuern. Es existieren folgende Rüstvorgänge: Farbwechsel (Rüstdauer 5 min) Längenwechsel (Rüstdauer 10 min) Breitenwechsel (Rüstdauer 12 min) Die BEs die ich erzeuge wurden diese drei Attribute (Farbe, Länge, Breite) zugewiesen. Gerüstet werden soll immer, wenn sich der Wert der Farbe, der Länge, der Breite oder mehrere von ihnen ändern. BSP 1: Wenn sich BE1 mit Farbe_1 auf der Einzelstation befand und das neu eingetroffene BE2 Farbe_2 hat, sollen 5 min umgerüstet werden. BSP 2: Wenn sich BE1 mit Farbe_1 und Länge_1 auf der Einzelstation befand und das neu eingetroffene BE2 Farbe_2 und Länge_2 hat, sollen 15 min (5 min + 10 min) gerüstet werden. Wie kann ich diese Anpassung der Rüstzeiten OHNE Rüstzeitmatrix darstellen? Hatte überlegt der Einzelstation einen Beobachter "Ruestet" zuzuweisen der eine Methode ausführt. Könnte es so funktionieren? Wenn ja, wie könnte so eine Methode aussehen? Viele Grüße NecDrop 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: 18. Sep. 2012 14:38 <-- editieren / zitieren --> Unities abgeben: Nur für NecDrop
Das mit dem Beobachter funktioniert nicht, er wird aufgerufen, wenn das Rüsten beginnt und endet. Sie müssen das Rüsten anstoßen, bevor das Teil auf die Station umgelagert wird (z.B. Ausgangssteuerung Vorgänger). Sie könnten Farbe, Länge und Breite als benutzerdefinierte Attribute in der Maschine anlegen und im Teil ein zusätzliches Attribut mussRüsten (boolean, Standard false). Im Vorgänger können Sie dann die Werte des BEs mit denen der Maschine vergleichen, die Rüstzeit der Maschine setzen, das Attribut des BEs mussRüsten auf true setzen (wenn nötig) und dann das Teil umlagern. Die Maschine müsste dann in Abhängigkeit von einem benutzerdefinierten Attribut rüsten--> Name des Attributes eintragen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NecDrop Mitglied Student
Beiträge: 43 Registriert: 22.08.2012 Plant Simulation 10.1
|
erstellt am: 18. Sep. 2012 16:05 <-- editieren / zitieren --> Unities abgeben:
Danke schön für die sehr schnelle Antwort Ich habe ein paar Fragen zu Ihrem Vorgehen: 1) Müssten die Attributwerte der Maschine dann nicht nur temporär sein? Also wenn für Breite=1 gerüstet wurde muss die Maschine den Wert 1 haben, wenn nun aber für Breite=2 gerüstet wird, muss sich der Wert auf 2 ändern, da ich ja keine doppelte Wertdefintion für ein und dasselbe Attribut haben kann. 2) Leider kenne ich kein Vorgehen, wie ich die Werte der BEs mit denen der Maschine vergleichen kann. Wie sähe denn eine Möglichkeit zur Umsetzung einer solchen Methode aus? [Diese Nachricht wurde von NecDrop am 18. Sep. 2012 editiert.] 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: 18. Sep. 2012 16:22 <-- editieren / zitieren --> Unities abgeben: Nur für NecDrop
So kompliziert habe ich das gar nicht gemeint. Maschinenattribute: Legen Sie einfach eine Eingangssteuerung in der Maschine an, in der Sie die Attribute des BEs auf die Maschine übertragen: Code:
is do ?.breite:=@.breite; ?.höhe:=@.höhe; ?.farbe:=@.farbe; @.mussRüsten:=false; --falls Sie das Spiel mehrfach hintereinander --spielen wollen end;
Damit weiß die Maschine, wofür sie gerüstet war, falls das Teil schon fort ist. @ ist das aktuelle Teil, ?.nf ist die Nachfolger-Maschine Das Vergleichen in der Ausgangssteuerung könnte dann wie folgt aussehen:
Code:
is do if @.breite /= ?.nf.breite then ?.nf.rüstzeit:=...; @.mussRüsten:=true; end; --analog für Farbe und höhe end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NecDrop Mitglied Student
Beiträge: 43 Registriert: 22.08.2012 Plant Simulation 10.1
|
erstellt am: 18. Sep. 2012 17:35 <-- editieren / zitieren --> Unities abgeben:
Ich habe Ihre Anweisungen befolgt. Teilweise klappt es auch schon sehr gut. Aber leider zeigt Plant noch einige Fehler auf: 1) Plant zeigt immer kurz bevor die BEs auf die Maschine umgelagert werden eine Fehlermeldung an. Und zwar: "Maschine kann nicht gerüstet werden: Das BE benötigt ein benutzerdefiniertes Attribut des Typs String mit dem Namen mussRüsten. Möchten Sie die Simulation anhalten?" Aber das Attribut mussRüsten muss ja von Typ boolean sein! Wieso wieso will Plant, das es ein String ist bzw. was habe ich falsch gemacht? 2) Wenn ich bei der auftretenden Fehlermeldung die Simulation NICHT anhalte, wird das BE auf die Maschine umgelagert und die Rüstzeit passt sich an. Die Fehlermeldung erscheind jedoch weiterhin immer kurz bevor das BE umgelagert wird. Ich muss die Simulation also immer durch klicken "manuell" weiterlaufen lassen. 3) Leider sind die Rüstzeiten noch nicht 100%ig angepasst. Die Rüstzeit ändert sich wie gewollt bei Änderung der Attributwerte. Aber wenn z.B zwei identische BEs mit identischen Attributwerten nacheinander auf der Maschine gerüstet werden, müsste Plant beim zweiten BE erkennen, dass die Werte identisch sind und demzufolge KEINE Rüstvorgänge durchfühen. Rüstvorgänge sollen NUR bei Änderung der Werte erfolgen. Die Rüstzeiten sind beim zweiten BE jedoch dieselben wie beim ersten. 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: 18. Sep. 2012 17:50 <-- editieren / zitieren --> Unities abgeben: Nur für NecDrop
Okey, mein Fehler. Das wird so nicht gehen. Die Rüstzeit wird nur berücksichtigt, wenn der Wert sich ändert. Wenn nicht gerüstet werden soll, muss der Wert gleichbleiben (damit scheidet mussRüsten aus). Am Besten wäre es, wenn Sie einen String basteln aus Höhe, Breite und Farbe und diesen als z.B. Rüstattribut dem Teil mitgeben --> Rüsten in Abhängigkeit vom Rüstattribut--> Wenn der String sich ändert, wird gerüstet. Den Rest so lassen. [Diese Nachricht wurde von Bon Simul am 18. Sep. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
NecDrop Mitglied Student
Beiträge: 43 Registriert: 22.08.2012 Plant Simulation 10.1
|
erstellt am: 20. Sep. 2012 14:15 <-- editieren / zitieren --> Unities abgeben:
|
NecDrop Mitglied Student
Beiträge: 43 Registriert: 22.08.2012 Plant Simulation 10.1
|
erstellt am: 15. Okt. 2012 15:20 <-- editieren / zitieren --> Unities abgeben:
Nach einiger Zeit habe ich mich wieder dieser Problematik gewidmet. Zur Erinnerung: Die Einzelstation soll ihre Rüstzeiten, je nach Rüstvorgängen der BEs, anpassen. Den BEs habe ich jeweils die benutzerdefinierten Attribute "Breite", "Höhe" und "Länge" mit dem jeweiligen Wert (z.B. 1, 2, 3, ...) als string zugewiesen. Den Einzelstationen haben ich ebenfalls diese Attribute als string (Wert immer 0) zugewiesen. In der Eingangssteuerung der Einzelstation befindet sich Code1:
------------------------- is do ?.breite:=@.breite; ?.höhe:=@.höhe; ?.farbe:=@.farbe; end; ------------------------- In der Ausgangsteuerung der vorgelagerten Station befindet sich Code2: ------------------------- is do if @.Breite = ?.nf.Breite then ?.nf.ruestzeit:=0; end; if @.Breite /= ?.nf.Breite then ?.nf.ruestzeit:=12; end; if @.Länge = ?.nf.Länge then ?.nf.ruestzeit:=0; end; if @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=10; end; if @.Farbe = ?.nf.Farbe then ?.nf.ruestzeit:=0; end; if @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=5; end; if @.Breite = ?.nf.Breite and @.Länge = ?.nf.Länge then ?.nf.ruestzeit:=0; end; if @.Breite /= ?.nf.Breite and @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=22; end; if @.Breite = ?.nf.Breite and @.Farbe = ?.nf.Farbe then ?.nf.ruestzeit:=0; end; if @.Breite /= ?.nf.Breite and @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=17; end; if @.Länge = ?.nf.Länge and @.Farbe = ?.nf.Farbe then ?.nf.ruestzeit:=0; end; if @.Länge /= ?.nf.Länge and @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=15; end; if @.Farbe = ?.nf.Farbe and @.Breite = ?.nf.Breite and @.Länge = ?.nf.Länge then ?.nf.ruestzeit:=0; end; if @.Farbe /= ?.nf.Farbe and @.Breite /= ?.nf.Breite and @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=27; end; @.umlagern(?.nf); end; ------------------------- Im Ansatz klappt es auch. Die Maschine passt mit Code1 ihre Attributwerte immer denen der "ankommenden" BEs an und passt gemäß Code2 die Rüstzeit an. Dies geschieht allerdings nur, wenn sich ALLE DREI "Rüstattribute" (Breite, Farbe und Länge) ändern. Ändert sich nur eins (z.B. nur die Farbe) ist die Rüstzeit immer 0, obwohl eigentlich 5 Minuten gerüstet werden sollte (siehe Code2). Liegt in der Methode noch ein Fehler vor? Erkennt ihn jemand? Viele Grüße NecDrop 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:03 <-- editieren / zitieren --> Unities abgeben: Nur für NecDrop
Sie sollten mit der komplexesten Bedingung beginnen und sich dann zu den einfacheren Bedingungen "vorarbeiten", sonst passiert es, das Bedingungen "weiter unten", den Wert wieder ändern: Code:
if @.Farbe /= ?.nf.Farbe and @.Breite /= ?.nf.Breite and @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=27; elseif @.Länge /= ?.nf.Länge and @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=15; elseif @.Breite /= ?.nf.Breite and @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=17; elseif @.Breite /= ?.nf.Breite and @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=22; --... usw.end;
[Diese Nachricht wurde von Bon Simul am 15. Okt. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Systemplaner (m/w/d) Versorgungstechnik | VIVAWEST ist einer der führenden Wohnungsanbieter in NRW und bewirtschaftet rund 120.000 Wohnungen in ca. 100 Kommunen an Rhein und Ruhr. Für den Bereich Bestandstechnik, Fachbereich Technische Gebäudeausrüstung, suchen wir zum nächstmöglichen Zeitpunkt einen Mitarbeiter.
- Gewährleistung der klima- und unternehmensstrategiekonformen Planung einschließlich der Dokumentation von ...
| Anzeige ansehen | Gebäude-, Versorgungs-, Sicherheitstechnik |
|
NecDrop Mitglied Student
Beiträge: 43 Registriert: 22.08.2012 Plant Simulation 10.1
|
erstellt am: 16. Okt. 2012 10:31 <-- editieren / zitieren --> Unities abgeben:
Danke für den Tip. Das werde ich ab jetzt beachten! Nach ein wenig rumprobieren klappts nun mit:
is do if @.Farbe /= ?.nf.Farbe and @.Breite /= ?.nf.Breite and @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=27; elseif @.Breite /= ?.nf.Breite and @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=17; elseif @.Breite /= ?.nf.Breite and @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=22; elseif @.Länge /= ?.nf.Länge and @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=15; elseif @.Farbe /= ?.nf.Farbe then ?.nf.ruestzeit:=5; elseif @.Länge /= ?.nf.Länge then ?.nf.ruestzeit:=10; elseif @.Breite /= ?.nf.Breite then ?.nf.ruestzeit:=12; elseif @.Farbe = ?.nf.Farbe and @.Breite = ?.nf.Breite and @.Länge = ?.nf.Länge then ?.nf.ruestzeit:=0; elseif @.Breite = ?.nf.Breite and @.Farbe = ?.nf.Farbe then ?.nf.ruestzeit:=0; elseif @.Länge = ?.nf.Länge and @.Farbe = ?.nf.Farbe then ?.nf.ruestzeit:=0; elseif @.Breite = ?.nf.Breite and @.Länge = ?.nf.Länge then ?.nf.ruestzeit:=0; elseif @.Farbe = ?.nf.Farbe then ?.nf.ruestzeit:=0; elseif @.Länge = ?.nf.Länge then ?.nf.ruestzeit:=0; elseif @.Breite = ?.nf.Breite then ?.nf.ruestzeit:=0; end; @.umlagern(?.nf); end; Vielleicht kann jemand in Zukunft noch was damit anfangen :-)
Schöne Grüße NecDrop Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |