Hallo,
in mein Lager werden 3 verschiedene BEs eingelagert (Name: Teil1, Teil2 und Teil3), die mit dem Fahrzeug an 3 Linien (epm1, epm2, epm3) transportiert werden müssen. Es wird geprüft, welche der Teile benötigt werden (emp*.leer). Dann soll gepüft werden ob die Teile im Lager vorhanden sind und, falls ja, auf das Fahrzeug umgelagert werden.
Mein Problem war, dass bei bisherigen Versuchen die Reihenfolge stimmen musste. Wurden bspw. alle 3 Teile benötigt, aber das zuletzt eingelagerte BE war ein "Teil3", dann wurde nur dieses umgelagert.
(sensorID:integer)
is
do
if sensorID = 1 and lager.belegt then
@.anhalten;
if lager.inhalt.name="Teil1" and epm1.leer then
@.pausieren(30);
lager.inhalt.umlagern(@);
end;
if lager.inhalt.name="Teil2" and epm2.leer then
@.pausieren(30);
lager.inhalt.umlagern(@);
end;
if lager.inhalt.name="Teil3" and epm3.leer then
@.pausieren(30);
lager.inhalt.umlagern(@);
end;
@.fahren;
end;
end;
Der Fehler dürfte sein, dass er bei dem if nur den Namen des zuletzt eingelagerten BEs prüft und dieses dann umlagert, richtig? Wird umgekehrt zur Methode eingelagert, dann ist aller super. Andernfalls wird ggf. nur das zuletzt eingelagerte Teil auf das Fahrzeug (@) umgelagert.
Ich habe testweise für jedes Teil einen eigenes Lager angelegt und lasse, über die Ausgangsteuerung der Quelle, die Teile auf das entsprechende Lager verteilen. Sodas funktioniert, ist aber natürlich nicht sonderlich elegant. Wie kann ich stattdessen nur ein Lager verwenden und dieses komplett durchsuchen?
Methode:
(sensorID:integer)
is
do
if sensorID = 1 then
@.anhalten;
if epm1.leer then
if lager1.belegt then
lager1.inhalt.umlagern(@);
end;
end;
if epm2.leer then
if lager2.belegt then
lager2.inhalt.umlagern(@);
end;
end;
if epm3.leer then
if lager3.belegt then
lager3.inhalt.umlagern(@);
end;
end;
@.fahren;
end;
end;
Diese Methode kann ich vermutlich noch mit "if epm*.leer and lager*.belegt" kürzen, richtig?
Vielen Dank im Voraus! 
Gruß
Manuel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP