Guten Tag,
ich bin Anfänger in Plant Simulation und möchte eine Steuerung entwickeln, mit der es möglich ist einen Auftragseingang zu simulieren.
Konkret geht es darum:
1. Ein Kunde (Simuliert durch eine Senke und ein Wareneingangslager_Kunde (Lagerbaustein)) bestellt z.B. jede Stunde x (Variable) BEs. Dies habe ich mit einem Generator, welcher die Methode aufruft, erstellt.
2. Nun soll die Methode das Wareneingangslager_Kunde auf genügend Bestand prüfen. Ist dieser vorhanden, soll das Wareneingangslager die x BEs auf die Senke umlagern und die Methode wird geschlossen.
3. Ist dies aber nicht der Fall, soll das davorliegende Warenausgangslager des Produktionsbetriebs seinen Bestand prüfen und die fehlende Anzahl an Teilen an das Wareneingangslager_Kunde umlagern. Sobald alle BEs in das Wareneingangslager_Kunde eingegangen sind, sollen die BEs auf die Senke ungelagert werden.
4.Hat nun weder das Wareneingangslager_Kunde, als auch das Warenausgangslager nicht genug Bestand um den Bedarf an x BEs zu decken, dann soll das Wareneingangslager des Produktionsbetriebs die fehlende Anzahl an BEs auf die nachfolgende Einzelstation weiterleiten, diese BEs werden dann in das Warenausgangslager des Produktionsbetriebs eingelagert, dieser lagert diese dann an das Wareneingangslager_Kunde und dieser lagert dann die korrekte Anzahl BEs an die Senke um.
5. Haben nun alle Lager nicht genug Bestand, um die Anfrage zu decken, dann soll die Quelle die fehlende Anzahl an BEs produzieren (wahlweise auch eine festgelegte Anzahl an BEs z.B. man muss 100 Teile bestellen, wenn man aber 101 Teile benötigt muss man 200 Teile bestellen) und an das Wareneingangslager umlagern, dieses wiederrum lagert die BEs auf die Einzelstation usw. bis die BEs an der Senke ankommen.
6. Ist es möglich, dass die Quelle ausschließlich auf Anfrage einer Methode produziert? D.h. wenn der oben beschriebne Fall durch den Generator nicht ausgelöst wird, soll die Quelle nichts tun.
7. Mein Programmiertext der Methode: Verzeiht mir den wahrscheinlich komplett falschen Methodentext
is
i:integer;
do
if Wareneingangslager_Kunde.anzahlBEs >= (Lagerabgang_Kunde+Sicherheitsbestand_Kunde)
then
for i:=1 to Lagerabgang_Kunde loop
Wareneingangslager_Kunde.inhalt.umlagern (Senke);
elseif inspect Warenausgangslager.anzahlBEs >= (Lagerabgang_Kunde - Wareneingangslager_Kunde.anzahlBEs)
when Warenausgangslager.anzahlBEs >=(Lagerabgang_Kunde - Wareneingangslager_Kunde.anzahlBEs) := true
then
for i:=1 to Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs loop
Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs.umlagern (Wareneingangslager_Kunde);
elseif
inspect Wareneingangslager.anzahlBEs >= (Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs-Warenausgangslager.anzahlBEs)
when Wareneingangslager.anzahlBEs >= (Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs-Warenausgangslager.anzahlBEs) := true
then
for i:=1 to Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs-Warenausgangslager.anzahlBEs loop
Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs-Warenausgangslager.anzahlBEs.umlagern (Einzelstation);
elseif
then
Quelle for i:=1 to Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs-Warenausgangslager.anzahlBEs-Wareneingangslager.anzahlBEs loop
Lagerabgang_Kunde-Wareneingangslager_Kunde.anzahlBEs-Warenausgangslager.anzahlBEs-Wareneingangslager.anzahlBEs.umlagern (Wareneingangslager);
end;
end;
Wie ihr sicherlich erahnen könnt funktioniert es natürlich nicht. Zudem fehlt der komplette Teil, falls ein dem Wareneingangslager_Kunde vorgelagertes Lager nun Teile umlagert, dass am Ende das Wareneingangslager, sobald es den kompletten Bestand hat, dann schlussendlich auf die Senke umlagert und dann die Methode beendet wird.
Ich hoffe es ist nicht allzu kompliziert dieses Problem zu lösen.
Vielen Dank für eure Mühe.
Falls ein anderer Weg viel geschickter ist, als es mit dieser Methode zu programmieren, dann bin ich für Infos offen.
MFG
Ü-EI
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP