Autor
|
Thema: Quelle umlagern - Befehlssuche (1418 mal gelesen)
|
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 16. Feb. 2009 13:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hätte eine Frage zu meinem Folgenden Code: (Hauptteil:string) is zeit1 : real; zeit2 : real; do zeit1:=Bea_Beh1["Bearbeitungszeit", Pos_Beh1]; zeit2:=Bea_Beh2["Bearbeitungszeit", Pos_Beh2]; if Behälter1.Inhalt.austrittsbereit and Behälter2.Inhalt.austrittsbereit then Montagestation.Bearbeitungszeit:= zeit1 + zeit2; elseif Behälter2.Inhalt.austrittsbereit then Montagestation.Bearbeitungszeit:= zeit2; elseif Behälter1.Inhalt.austrittsbereit then Montagestation.Bearbeitungszeit:= zeit1; else Montagestation.Bearbeitungszeit:=1; end; print Montagestation.Inhalt.Name; print Montagestation.Bearbeitungszeit; end; Auf dem Bild(angehängte Datei) sieht man die beiden Quellen aus welchen die Anbauteile kommen. Ich möchte nun das steuern der Bearbeitungszeiten, welche in einer Tabelle stehen, so gestalten das die Methode erkennt das die Quelle ein Teil ausgegeben hat und somit in die Tabelle schaut um die relevanten Daten zu holen. Meine Methode funktioniert net ganz, wahrscheinlich weil die Teile in der Quelle immer bereit sind umzulagern. Die Quellen sollen nur je nach Variantetyp umlagern. Um es flexibel zu halten, möchte ich aber kein Variantetyp in der Methode haben. Der Befehl "Behälter1.Inhalt.austrittsbereit" stimmt in meinem Fall nicht. Ich suche den richtigen Befehl, aber kann ihn leider nicht finden. Ich wäre für jede Hilfe dankbar Liebe Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 16. Feb. 2009 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Eine Quelle hat doch nur einen Austrittsabstand und keine Bearbeitungszeit. Damit ist eine generierte Einheit die auf der Quelle sichtbar ist, eigentlich auch immer austrittsbereit (wenn der Ausgang nicht blockiert oder gesperrt ist). Der Austrittsabstand bestimmt ja im Prinzip auch schon die Bearbeitungszeit. Bevor nicht diese Zeit abgelaufen ist wir keine austrittsbereite Einheit generiert. Ich würde bei einer Quelle das so schreiben: [code] if Quelle1.belegt and Quelle2.belegt then Montagestation.Bearbeitungszeit := Zeit1+Zeit2; end; if Quelle1.belegt then Montagestation.Bearbeitungszeit := Zeit1; end; if Quelle2.belegt then Montagestation.Bearbeitungszeit := Zeit2; end; /code] Ist natürlich dann ein Frage wo du die Methode aufrufst. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grebla Mitglied
Beiträge: 12 Registriert: 03.12.2008
|
erstellt am: 16. Feb. 2009 15:37 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Ich werde jetzt nicht nachsuchen: woher kommt dein Hauptteil? Wie erstellst du die unterschiedlichen Teile? Ist der Teiltyp in einem Attribut oder im BE Namen gekennzeichnet? Auslöser ist hoffentlich de Vorgänger mit dem Hauptteil. Was machst du, lädst du die Teile auf oder vernichtest du sie? Die Quellen erzeugen sowieso BEs; es ist meiner Meinung nach für dein Fall zu kompliziert, sie mit Methoden zu steuern. Du kannst zwischen Quellen und Montagestation Puffer setzen und eine Methode schreiben, die Teile aus dem Puffer erst dann rauslässt, wenn gebraucht. Sollst dabei den Ausgang gesperrt haben. Sobald die Station / der Puffer leer ist, erzeugt die Quelle das neue Teil. Puffer.inhalt.umlagern; Alternativ verzichtest du komplett auf Quellen und setzt Puffer oder Stationen ein. Dann erzeugst du mit einer Methode bei Bedarf deine BEs direkt auf der Station. Ich mag nicht lange schreiben, lass lieber telefonieren Schreibst du gerade die Diplomarbeit?
[Diese Nachricht wurde von grebla am 16. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 16. Feb. 2009 23:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, @Tauli and all Ja ich weiss das es mit dem Befehl nicht funktioniert. Die Frage ist welchen Befehl ich für meinen Fall nehmen sollte. Die Quellen sind andauernd belegt und darum funktioniert dieser Befehl auch nicht. Im angehängten Bild sieht man 2 Quellen, sie sollen die Behälter mit mehreren Teilen darstellen. Die Quelle gibt die Teile je nach Variante aus und die globale Variablen "Pos_Beh1/2" geben die Position für das nächste Teil im Behälter an. Nun habe ich die beiden Tabellen erstellt, wo die Zeiten für die Entnahme der einzelnen Positionen drin stehen. Nun kann ich sagen bei den Varianten XundY musst du in beiden Tabellen schauen usw., aber das möchte ich nicht. Ich möchte die Simulation flexibel halten und muss daher der Methode sagen es soll nur in die Tabellen greifen wenn die Quelle davor ein Teil umgelagert hat. Die Methode soll nur bei einem vorigen umlagern aus der Quelle auf die Montagestation Zeiten aus der jeweiligen Tabelle entnehmen. @grebla Ich habe dir eine PM geschrieben bezüglich des telefonierens. Liebe Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 17. Feb. 2009 08:11 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Wenn deine Quelle je nach Variante ein Teil ausgibt, dann ist doch theoretisch immer nur die Quelle belegt die auch das Teil bereithält für diese Variante. Die anderen Quellen sind dann leer. Damit funktioniert das mit dem 'Quelle.belegt'. Wenn das schon gar nicht so fumktioniert so wie grebla schreibt. Du kannst du mit einer 'Dummy'-Station arbeiten. Also einen Puffer, Förderstrecke oder Einzelstation nach der Quelle setzen und immer nur für entsprechende Variante auf diese umlagern. Dann ist diese 'Dummy'-Station immer nur für die jeweilige Variante belegt. Code:
if Dummy1.belegt = true and Dummy2.belegt = false then Variante 1 end;if Dummy1.belegt = false and Dummy2.belegt = true then Variante 2 end; if Dummy1.belegt = true and Dummy2.belegt = true then Variante 3 end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 17. Feb. 2009 10:47 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielleicht war das nicht ausdrücklich genug, aber ich habe 2 Quellen aus denen die Anbauteile kommen und der Inhalt der Quellen wird durch eine Ressourcentabelle gesteuert und im Prinzip wird nur der Name übertragen. d.h. die Quellen sind immer belegt. der untere Code ist mein aktueller und der funktioniert. Aber wenn ich jetzt z.B. eine Änderung der Varianten möchte, so müsste ich auch die Methode umschreiben. Um das zu verhindern möchte ich ein Code, wo überhaupt KEINE Varianten enthalten sind. In meinen Augen funktioniert das nur, wenn ich, wie erwähnt, eine Methode habe, welches erkennt das die Quelle ein Teil umgelagert hat und dann auf die dementsprechende Tabelle schaut. Code: (Hauptteil:string) is zeit1 : real; zeit2 : real; do zeit1:=Bea_Beh1["Bearbeitungszeit", Pos_Beh1]; zeit2:=Bea_Beh2["Bearbeitungszeit", Pos_Beh2]; inspect Hauptteil when "VarianteA", "VarianteF", "VarianteE" then Montagestation.Bearbeitungszeit:= zeit1 + zeit2; when "VarianteC", "VarianteD" then Montagestation.Bearbeitungszeit:= zeit2; when "VarianteM", "VarianteH" then Montagestation.Bearbeitungszeit:= zeit1; else Montagestation.Bearbeitungszeit:=1; end; print Montagestation.Inhalt.Name; print Montagestation.Bearbeitungszeit; end; Ich werde jetzt mal versuchen, denn Vorschlag von grebla umzusetzen. Ansonsten wäre ich über jeden Vorschlag erfreut. Liebe Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 18. Feb. 2009 08:57 <-- editieren / zitieren --> Unities abgeben: Nur für Tema
Das ist soweit verständlich. Wenn deine Quellen umlagern, sind die Teile automatisch auf der Montagestation. Die können nirgendwo vorher "warten". Deine Montagestation muss also wissen was sie baut und woher die Teile kommen. Die Montagestation muss also die Teile selbst je nach Variante die Teile von der Quelle umlagern. Wenn du eine Methode hast, die der Montagestation sagt welche Variante sie baut und woher sie die Teile bekommt, dann kannst du genau dort auch die Bearbeitungszeit setzen. Die Methode würde ich am Eingang der Montagestation aufrufen lassen. Dort schaut sie welche Variante des Haupteils an kommt. Ungefähr so:
Code: --prüfe Variante bei Eingang in Montagestation if Variante1 then nimm Teil von Quelle 1; setze Bearbeitungszeit1; end; if Variante2 then nimm Teil von Quelle 2; setze Bearbeitungszeit2; end; if Variante3 then nimm Teil von Quelle 1 und Quelle2; setze (Bearbeitungszeit1+Bearbeitungszeit2); end;
Damit du ohne Varianten auskommst, könntest du die 'eingegangene' Variante mit einer Variantentabelle abgleichen. Du durchsuchst also die Tabelle, bis die Variante gefunden wurde und liest dann die Werte aus die in der Tabelle der Variante zu geordnet sind.Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tema Mitglied
Beiträge: 37 Registriert: 07.01.2009
|
erstellt am: 18. Feb. 2009 11:33 <-- editieren / zitieren --> Unities abgeben:
|