Autor
|
Thema: Berechnung der Bearbeitungszeit der Stationen aus den Attributen der BEs (2662 mal gelesen)
|
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 17. Apr. 2013 00:50 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe eine Problem bei der Bearbeitungszeit der Einzelstationen. Ich simuliere eine Walzstraße mit mehreren Stationen und möchte für jede der Stationen die Bearbeitungszeit anhand der Abmessungen der unterschiedlichen BEs berechnen. Da sich die BEs während des Walzprozesses verändern, gibt es für jede der Stationen eine unterschiedliche Bearbeitungsdauer. Nun habe ich zwei Fragen: 1) Kann ich Attribute eines BEs nach dem Durchlaufen einer Einzelstation automatisch anpassen lassen? (Objekt wird durch Walzen länger und weniger hoch) 2) Wie kann ich die Bearbeitungszeit auf Basis der Attribute des BEs berechnen? Die Formel wäre relativ einfach, da die Länge als Attribut hinterlegt sein soll (siehe 1) )und die Geschwindigkeit der Walzstation gegeben ist. Ich bin leider blutiger Anfänger und hoffe auf eure Hilfe! Vielen Dank, Tobias [Diese Nachricht wurde von TobIF09 am 17. Apr. 2013 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. Apr. 2013 02:00 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Die Länge können Sie am Besten mit der Ausgangssteuerung (Heck) anpassen. In der nachfolgenden Station können Sie dann in der Eingangssteuerung (+Option vor Aktionen)die Bearbeitungszeit neu berechnen z.B. Code:
is do ?.bearbeitungszeit:=num_to_time(@.länge/?.geschwindigkeit); end;
[Diese Nachricht wurde von Bon Simul am 18. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 27. Apr. 2013 12:12 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Antwort! Ich hätte noch eine weitere Frage: Ist es möglich die Dimension einer Parallelstation nach der Fläche in Metern auszulegen? Die Parallelstation soll einen Ofen darstellen, der eine vorgegebene Größe der Teile, die in diesem Ofen erhitzt werden, ist die Anzahl der Brammen im Ofen unterschiedlich. Wenn also ein Teil den Ofen verlässt möchte ich dann mit einer Wenn/Dann Formel überprüfen, ob das nächste Teil in den Ofen passt oder noch warten muss, bis das nächste Teil den Ofen verlassen hat... Vielen Dank im Voraus, Tobias
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: 27. Apr. 2013 22:52 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Zitat:
Ist es möglich die Dimension einer Parallelstation nach der Fläche in Metern auszulegen? Die Parallelstation soll einen Ofen darstellen, der eine vorgegebene Größe der Teile, die in diesem Ofen erhitzt werden, ist die Anzahl der Brammen im Ofen unterschiedlich.
Theoretisch ist es möglich, Sie bekommen aber Probleme, wenn Sie die Dimension der Parallelstation verringern wollen, die wegfallenden Plätze müssen dann leer sein. Das ist schwierig zu steuern. Einfacher ist eine "Einlaufsperre", prüfen Sie vor der Parallelstation die Fläche der Teile in der Parallelstation, wenn zu viel Teile im Ofen sind, warten Sie bis ein Teil den Ofen verlassen hat (waituntil + anzahlBEs). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 30. Apr. 2013 01:05 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 01. Mai. 2013 21:15 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Sie benötigen dafür BELänge und BEBreite und die Anzahl der BEs ungefähr so: Code:
for i:=1 to parallelStation.anzahlBEs Loop fläche:=fläche+(parallelStation.be(i).BEBreite*parallelStation.be(i).BELänge);next;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 05. Mai. 2013 13:01 <-- editieren / zitieren --> Unities abgeben:
Erstmal danke für die Antwort, hat mir sehr geholfen! Die Berechnung der Breite funktioniert schon super! (Mir ist aufgefallen, dass die Breite völlig ausreicht!) Habe nur noch ein Problem mit der waituntil Funktion. Könnte man das auch wieder mit der Breite realisieren? Bsp.: warten bis die Fläche unterhalb von 4 liegt?! Habe meinen bisherigen Quellcode mal reinkopiert, wäre klasse wenn mir jemand helfen könnte! Grüße, Tobias is i:integer; breite: real; do for i:=1 to Hubbalkenofen1.anzahlBEs Loop breite:=breite+Hubbalkenofen1.be(i).BEBreite; next; print breite; if breite > 4 then waituntil Hubbalkenofen1.anzahlBEs < 4 end; 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: 05. Mai. 2013 22:08 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
So wird das nicht gehen, Plant Simulation muss den Ausdruck in der waituntil Anweisung überwachen können. Einige Sachen funktionieren dabei nicht. Methodenaufrufe, Listenzugriffe... Wenn Sie nur warten müssen, bis ein Teil den Ofen verlassen hat, dann könnten Sie es wie folgt lösen: Code:
is i:integer; breite: real; anzahl:integer; do for i:=1 to Hubbalkenofen1.anzahlBEs Loop breite:=breite+Hubbalkenofen1.be(i).BEBreite; next; if breite > 4 then -- erst muss ein Teil den Ofen verlassen anzahl:=Hubbalkenofen1.anzahlBEs; waituntil Hubbalkenofen1.anzahlBEs < anzahl prio 1; end; @.umlagern; end;
Eine andere Möglichkeit wäre, in der Eingangssteuerung und Ausgangssteuerung des Ofens jeweils die belegte Fläche des Ofens zu berechnen. Dieses benutzerdefinierte Attribut könnten Sie dann direkt in der waituntil-Anweisung überwachen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 08. Mai. 2013 00:05 <-- editieren / zitieren --> Unities abgeben:
Hallo, leider reicht das Warten auf das Verlassen eines Teils nicht aus, da die Teile unterschiedliche Größen haben. Ist es nicht möglich zu sagen, dass erst umgelagert werden soll, wenn die breite (als eingangssteurung) >= ein bestimmter wert ist? Dann könnte man sich den Vergleich der Ein- und Ausgnagssteuerung sparen. Vielen Dank! Beste Grüße, Tobias 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. Mai. 2013 08:14 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Sie werden in dem Fall trotzdem warten müssen und dafür brauchen Sie einen "beobachtbaren" Wert. Der einfachste Weg ist die Ermittlung der Gesamtbreite über den Ofen, es ist nicht allzuviel Arbeit. Legen Sie dazu im Ofen in benutzerdefiniertes Attribut belegteBreite (real) an. Dann benötigen Sie eine Methode, die Sie in die Eingangssteuerung und Ausgangssteuerung (Heck) hängen. Die Methode könnte wie folgt aussehen: Code:
is i:integer; do ?.belegteBreite:=0; for i:=1 to ?.anzahlBEs loop ?.belegteBreite:=?.belegteBreite+?.be(i).BEBreite; next; end;
Dann können Sie in den Ausgangssteuerungen der Vorgänger warten, bis die belegte Breite des Ofens einen bestimmten Wert unterschritten hat:
Code:
waituntil ofen.belegteBreite < wert prio 1;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 08. Mai. 2013 14:27 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für den Vorschlag, klappt fast perfekt, das einzige was noch fehlt ist das Umlagern. Kann ich das auch in die Methode einbauen, obwohl diese für die Eingangs- und die Ausgangssteuerung genutzt wird? Bisher bleiben die Teile bei mir im Ofen hängen und wandern nicht aufs Förderband... Beste Grüße, Tobias 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. Mai. 2013 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Wählen Sie bei der Ausgangssteuerung des Ofens Heck (nicht Bug). Dann wird die Methode aufgerufen, wenn das Teil den Ofen bereits verlassen hat (bei Bug müsste in der letzten Zeile @.umlagern stehen). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 10. Mai. 2013 12:31 <-- editieren / zitieren --> Unities abgeben:
Leider hat sich beim ausgiebigen Testen ein Problem gezeigt: Nachdem der Ofen einmal die maximale Kapazität erreicht hat und das erste Teil diesen wieder verlässt, rückt sofort das nächste Teil nach, ohne die Kapazität zu prüfen. Dies dürfte nicht passieren, wenn das Teil größer ist als das Teil, welches den Ofen verlassen hat. Mein Quelltext sieht wie folgt aus: is i:integer; do if @.BEBreite <= 1.95 and @.WWDicke <= 0.0018 then ?.bearbeitungszeit:=9600; elseif @.BEBreite > 1.95 and @.WWDicke <= 0.0018 then ?.bearbeitungszeit:= 10200; elseif @.BEBreite <= 1.95 and @.WWDicke > 0.0018 then ?.bearbeitungszeit:=8100; else ?.bearbeitungszeit:=9000; end; ?.belegteBreite:=0; for i:=1 to ?.anzahlBEs loop ?.belegteBreite:=?.belegteBreite+?.be(i).BEBreite; next; end; Und der des Nachfolgers: is do print Hubbalkenofen1.belegteBreite; waituntil Hubbalkenofen1.belegteBreite < 35.3 prio 1; @.umlagern(Hubbalkenofen1); end; Ich hab probiert mit der PRINT Funktion den Fehler zu finden, es sieht ein bisschen danach aus, werde daraus aber auch nicht schlau...
0 2.2 3.1 4.2 5.3 7.4 9 11 12.4 13.7 14.8 15.5 16.6 17.3 18.7 20.2 22 23 24.1 26.3 28.4 29.7 31.6 33.1 35.2 37.2 --(Ofen voll)-- 75.2 --(Nach verlassen des ersten Teils)-- 76 76.4 75.2 74 75.4 75.4 77.8 78.8 81.2 81.4 82 79.8 79.2 78.8 78 77.6 76 75 75 72.2 72.2
Kann mir jemand weiterhelfen? 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: 10. Mai. 2013 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
|
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 10. Mai. 2013 13:32 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 10. Mai. 2013 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Was für eine Station ist "?" (Parallelstation ?). Sie sollten bei Ausgang des Teils nicht die Bearbeitungszeit neu setzen, deshalb ware eine extra Funktion angebracht (nur das Zählen). Wenn Sie eine Parallelstation benutzen, müssen Sie zuerst einen freien Platz suchen und dann die Bearbeitungszeit des freien Platzes ändern..., sonst ändern Sie die Bearbeitungszeit aller Plätze siehe hier: http://www.bangsow.de/detail.php?id=403 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TobIF09 Mitglied Student
Beiträge: 19 Registriert: 17.04.2013
|
erstellt am: 10. Mai. 2013 14:35 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 10. Mai. 2013 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Schwer zu sagen, zum Testen müssten Sie die print-Anweisung vor Umlagern nach waituntil setzen, um zu sehen, wann umgelagert wird. Es sollte eigentlich funktionieren. Das Berechnen der Breite könnten Sie testweise einmal von der Ausgangssteuerung des Ofens in die Eingangssteuerung des Nachfolgers legen (und dort den Ofen direct ansprechen). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
beesdauer Mitglied Student
Beiträge: 37 Registriert: 18.08.2015
|
erstellt am: 22. Sep. 2015 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Hallo, ich möchte ebenfalls ausgehend von den BEs mit einer Methode die Bearbeitungszeiten einer Parallelstation bestimmen. Dabei kommen immer 6 Bauteile, die dann gemeinsam und mit der gleichen Dauer bearbeitet werden. Bei den nächsten 6 BEs muss dann ggf eine andere Bearbeitungszeit gewählt werden. is do if @.Gewählt=3 then ?.Bearbeitungszeit=7560; elseif @.Gewählt=4 then ... end; end; ich habe es auch hiermit versucht: inspect @.gewählt when 3 then ?.BearbeitungsZeit:=str_to_time ("126:9"); when ... end; end; Die Parallelstation übernimmt die Bearbeitungszeiten nicht. Und je nachdem Welche Einstellung (Vor Aktionen, Bug, Heck) ich wähle, kommt es vor, dass die BE dann nicht umgelagert werden. Die Paralletstation ist aber über eine Kante mit einer Senke verbunden. Was ist da falsch?! [Diese Nachricht wurde von beesdauer am 23. Sep. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Redakteur (m/w/d) | Wir sind ein innovativer und weltweit führender Hersteller von Anlagen und Technologien für die Oberflächen-Feinstbearbeitung. Am Standort Rendsburg entwickeln und fertigen wir Doppelseiten-Feinschleif-, Läpp-, Polier-, Hon- und Entgratmaschinen sowie Profilschleifmaschinen und Feinschneidpressen. Wir gehören zur Precision Surfacing Solutions Gruppe mit weltweit mehr als 1000 Mitarbeitern an zehn Produktionsstandorten.... | Anzeige ansehen | Technische Dokumentation |
|
beesdauer Mitglied Student
Beiträge: 37 Registriert: 18.08.2015
|
erstellt am: 23. Sep. 2015 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für TobIF09
Ich habe es hinbekommen: Man muss natürlich bei der Parallelstation unter Zeiten -->Bearbeitungszeit: Formel auswählen und in das freie Feld die Methode zur Ermittlung der Bearbeitungszeit ziehen. Hätte ich ja schon eher herausfinden können Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |