Hallo Liebe Plant Simulation Community,
bin ziemlich verzweifelt und nachdem ich in meinem privatem Umfeld niemand gefunden hab der mir helfen kann, wende ich mich nun an diese Plattform. Ich hoff und wär sehr dankbar wenn mir jemand hilf, bzw. mir den Fehler ersichtlich macht.
Ich arbeite im Rahmen meiner Abschlussarbeit mit der SW Plant Simulation. Bin Neuling in dieser Materie und hab mir alles selbst angeignet und beigebracht. Jedoch sind meine angelernte Kenntnisse an die Grenze der Machbarkeit angelangt.
Case: Ich habe zwei Fertigungslinien die an einer Stelle mit einem Queverschiebewagen (Fahrzeug welches auf einer Straße pendelt) verbunden sind. Links von der querliegenden Straße zwei Bedienstationen(sprich die Eingänge) und rechts eine Förderstrecke und eine Senke(Ausgänge). Die Stationen nehmen ein Fördergut auf bearbeiten diese und dann melden an eine Warteschlange einen Auftrag der dann vom Wagen gelesen wird. Sobald er frei ist, kommt dieser dann. Je Linie hab ich 6 verschiedene Födergüter, drei davon sollen über den Wagen an die angeschlossene Linie "übergeben" werden, die anderen drei sollen auf dem Wagen diagonal zu der anderen Linie versetzt werden. Die Straße hat vier Sensoren(welche die Fahrsteuerung und Entladen übernehmen). Die Richtung der Straße zeigt nacht unten: Sensor1(oben:Eingang), Sensor2(unten:Eingang), Sensor3(oben:Ausgang) und Sensor4(unten:Ausgang).
Problem: Das Rufen des Wagens und die Fahrsteuerung, die Aufnahme und diagonale Versetzung funktionieren prima. Jedoch gibts ein Problem mit den Fördergütern die eigentlich nur geraude aus weiterfahren sollen. Der Wagen nimmt sie auf, fährt zum anderen Ende der Straße und übergibt die Teile dennoch and den richtigen Empfänger. Ich schaff es nicht, dem Wagen diese unnötige Zusatzfahrt zu unterbinden. Ich arbeite mit einem benutzdefiniertem Attribut (typ string: ja oder nein) welcher entscheiden soll ob das Teil sofort in die Senke kommt oder noch zu einer weiteren Bearbeitung an die andere Linie gebracht wird. Habs mit verschiedenen Methoden für die Entladung des Wagens probiert (Kurze oder ausführliche mit Teilenmen), aber hilf alles nichts.
Kann mir jemand vlt helfen??
Das ist die Methode(die sich an den Namensteile orientiert)
(SensorID : integer)
is
Transportauftrag : integer;
Lackieren : string;
do
@.anhalten;
if @.belegt and @.inhalt.Lackieren = "ja" then
inspect @.inhalt.name
when "Werkstueck2mx_1_2k" then
when "Werkstueck2m_1_2k" then
when "Werkstueck3m_1_2k" then
@.Zielsensor:=SensorID;
waituntil .Modelle.Produktion.BF4.leer prio 1;
@.inhalt.umlagern(.Modelle.Produktion.BF4);
when "Werkstueck1m_4_2k" then
when "Werkstueck2mx_2_2k" then
when "Werkstueck2m_4_2k" then
@.Zielsensor:=SensorID;
waituntil .Modelle.Produktion.BF4.leer prio 1;
@.inhalt.umlagern(.Modelle.Produktion.BF4);
end;
end;
if @.belegt and @.inhalt.Lackieren = "nein" then
inspect @.inhalt.name
when "Werkstueck_2k" then
when "Werkstueck1m_2_2k" then
when "Werkstueck2m_2_2k" then
waituntil .Modelle.Produktion.WA1.leer prio 1;
@.inhalt.umlagern(.Modelle.Produktion.WA1);
when "Werkstueck1m_1_2k" then
when "Werkstueck1m_3_2k" then
when "Werkstueck2m_3_2k" then
waituntil .Modelle.Produktion.WA1.leer prio 1;
@.inhalt.umlagern(.Modelle.Produktion.WA1);
end;
end;
if @.leer and .Modelle.Produktion.Methoden.Transportauftragliste.leer then
@.pausieren;
waituntil .Modelle.Produktion.Methoden.Transportauftragliste.dim > 0 prio 1;
@.Zielsensor:=.Modelle.Produktion.Methoden.Transportauftragliste.entnehmen;
@.entpausieren;
if @.Zielsensor = 1 then
@.rueckwaerts:=true;
end;
if @.Zielsensor = 2 then
@.rueckwaerts:=false;
end;
@.fahren;
end;
end;
Eine andere Variante(kürzere Methode). Da verwende ich den "Entscheidungsattribut" als booleanischen Wert, fals bzw. true:
(SensorID : integer)
is
Transportauftrag : string;
Lackieren : boolean;
do
@.anhalten;
if not @.leer and @.inhalt.Lackieren=true then
waituntil .Modelle.Produktion.BF4.leer prio 1;
@.zielort:=.Modelle.Produktion.VW_Weg.SensorID(1);
if @.angehalten=true then
@.inhalt.umlagern(.Modelle.Produktion.BF4);
end;
end;
if not @.leer and @.inhalt.Lackieren=false then
waituntil .Modelle.Produktion.WA1.leer prio 1;
@.zielort:=.Modelle.Produktion.VW_Weg.SensorID(2);
if @.angehalten=true then
@.inhalt.umlagern(.Modelle.Produktion.WA1);
end;
end;
if @.leer and .Modelle.Produktion.Methoden.Transportauftragliste.leer=true then
@.pausieren;
end;
waituntil .Modelle.Produktion.Methoden.Transportauftragliste.dim > 0 prio 1;
Transportauftrag:=.Modelle.Produktion.Methoden.Transportauftragliste.entnehmen;
@.entpausieren;
if Transportauftrag = "BS_Bohren" then
@.rueckwaerts:=true;
end;
if Transportauftrag = "BS_Fraesen" then
@.rueckwaerts:=false;
end;
@.fahren;
end;
So das war jetzt bisschen eine ausführliche Erörterung, aber inhaltlich keine großer Act. Jedoch fehlt mir die Erfahrung bzw. Wissen und kann leider meinen Fehler nicht finden.
Vielen Dank!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP