Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Auftragseingangssteuerung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Auftragseingangssteuerung (1917 mal gelesen)
Ü-EI
Mitglied


Sehen Sie sich das Profil von Ü-EI an!   Senden Sie eine Private Message an Ü-EI  Schreiben Sie einen Gästebucheintrag für Ü-EI

Beiträge: 3
Registriert: 04.02.2014

erstellt am: 04. Feb. 2014 02:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


BILD1.png

 
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

sjerenz
Mitglied
Planer


Sehen Sie sich das Profil von sjerenz an!   Senden Sie eine Private Message an sjerenz  Schreiben Sie einen Gästebucheintrag für sjerenz

Beiträge: 33
Registriert: 15.07.2013

Plant Simulation 10.1

erstellt am: 04. Feb. 2014 12:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Ü-EI 10 Unities + Antwort hilfreich

Hallo,
deine Lösung ist prinzipiell richtig und muss nur bis zum Ende weiter geführt werden, d.h. bis zum Auslösen einer Produktion und dem anschließenden schrittweisen Umlagern aller Teile.

Ausgangspunkt ist die Kundenanfrage:
1. Prüfung, ob Bestand im Warenlager_Kunde ausreichend?
--> ja: Auslagern der betreffenden Elemente  (bspw.: "Wareneingangslager_Kunde.BE.umlagern (Senke);" in einer for-Schleife für die Anzahl)
--> nein: merken wie viele fehlen
2. Prüfung, ob Bestand im Warenlagerausgangslager ausreichend?
--> ja: Auslagern der betreffenden Elemente zum Wareneingangslager_Kunde; Auslagern zur Senke
--> nein: merken wie viele fehlen
3. Prüfung, ob Bestand im Warenlagereingangslager ausreichend?
--> ja: Auslagern der betreffenden Elemente zum Warenlagereingangslager; Auslagern zum Wareneingangslager_Kunde; Auslagern zur Senke
--> nein: merken wie viele fehlen
4. Produktion der fehlenden Teile starten
--> Einstellung Quelle: Erzeugungszeitpunkt: "Anzahl einstellbar"
--> für die Produktion: die Anzahl der zu produzierenden Teile hochsetzen (Quelle.Anzahl:="alter Wert + fehlende Teile")

Falls weitere Fragen sind oder Probleme bei der Umsetzung, einfach schreiben.

Grüße
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ü-EI
Mitglied


Sehen Sie sich das Profil von Ü-EI an!   Senden Sie eine Private Message an Ü-EI  Schreiben Sie einen Gästebucheintrag für Ü-EI

Beiträge: 3
Registriert: 04.02.2014

erstellt am: 04. Feb. 2014 14:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank,

für die extrem schnelle Antwort 

ich werde mich gleich dransetzten und es ausprobieren.

MFG

Ü-EI

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ü-EI
Mitglied


Sehen Sie sich das Profil von Ü-EI an!   Senden Sie eine Private Message an Ü-EI  Schreiben Sie einen Gästebucheintrag für Ü-EI

Beiträge: 3
Registriert: 04.02.2014

erstellt am: 05. Feb. 2014 04:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe jetzt nochmal dran gearbeitet und die Methode hat folgendes Problem: Die Quelle produziert die benötigte Anzahl an BEs was schonmal gut ist. Das Wareneingangslager lagert aber immer nur 1  Teil auf den Puffer über, den ich vor die Einzelstation gemacht habe (um zu sehen ob der umlagerungsprozess funktioniert, weil die Einzelstation nur 1 BE aufnehmen kann), anstatt der z.B. 10 BEs die eigentlich benötigt würden.
Ich denke der Fehler liegt in Zeile 68 (diese markiere ich noch...) weil die Methode nach dem waituntil nicht mehr weitermacht. Es ist möglicherweise der falsche Methodenausdruck für das was ich bezwecken will. Im Gesamten denke ich aber, dass es in etwa hinkommen dürfte von der Programmierung der Methode

Ich habe folgende Methode geschrieben:
is
i:integer;
a:integer;
b:integer;
c:integer;


do
Quelle.Anzahl := Lagerabgang_Kunde-a-b-c;

if Wareneingangslager_Kunde.anzahlBEs >= (Lagerabgang_Kunde+Sicherheitsbestand_Kunde)
 
then

for i:=1 to Lagerabgang_Kunde loop
Wareneingangslager_Kunde.inhalt.umlagern (Senke);
next;

else  a:= Wareneingangslager_Kunde.anzahlBEs;


if Warenausgangslager.anzahlBEs >= (Lagerabgang_Kunde - a)
 
then

for i:=1 to Lagerabgang_Kunde-a loop
Warenausgangslager.inhalt.umlagern (Wareneingangslager_Kunde);
waituntil Wareneingangslager_Kunde.anzahlBEs = Lagerabgang_Kunde prio 1;
 
for i:=1 to  Lagerabgang_Kunde loop
Wareneingangslager_Kunde.inhalt.umlagern (Senke)
next;
next;
 
else b:= Warenausgangslager.anzahlBEs;


if Wareneingangslager.anzahlBEs >= (Lagerabgang_Kunde-a-b)

then

for i:=1 to Lagerabgang_Kunde-a-b loop
Wareneingangslager.inhalt.umlagern (Puffer);
waituntil Puffer.anzahlBEs = Lagerabgang_Kunde-a-b prio 1;

waituntil Warenausgangslager.anzahlBEs = Lagerabgang_Kunde-a prio 1;
for i:=1 to Lagerabgang_Kunde-a loop
Warenausgangslager.inhalt.umlagern (Wareneingangslager_Kunde);
waituntil Wareneingangslager_Kunde.anzahlBEs = Lagerabgang_Kunde prio 1;

for i:=1 to  Lagerabgang_Kunde loop
Wareneingangslager_Kunde.umlagern (Senke)
next;
next;
next;
 
else c:=Wareneingangslager.anzahlBEs;

if a+b+c < Lagerabgang_Kunde+Sicherheitsbestand_Kunde
 
then

for i:=1 to Lagerabgang_Kunde-a-b-c loop
Quelle.umlagern (Wareneingangslager);

waituntil Wareneingangslager.anzahlBEs = Lagerabgang_Kunde-a-b prio 1;
if Wareneingangslager.anzahlBEs = Lagerabgang_Kunde-a-b
then
for i:=1 to Lagerabgang_Kunde-a-b loop
Wareneingangslager.inhalt.umlagern (Puffer);
waituntil Warenausgangslager.anzahlBEs = Lagerabgang_Kunde-a prio 1;
for i:=1 to Lagerabgang_Kunde-a loop
Warenausgangslager.inhalt.umlagern (Wareneingangslager_Kunde);
waituntil Wareneingangslager_Kunde.anzahlBEs = Lagerabgang_Kunde prio 1;
for i:=1 to  Lagerabgang_Kunde loop Wareneingangslager.umlagern (Senke);

next;
next;
next;
end;
next;


end;
end;
end;
end;
end;

Ich bin mit den next und end am Ende auch etwas durcheinander gekommen  Es wurde immer ein Syntaxfehler angezeigt nur bei dieser Kombination nicht...Weiß aber nicht ob das so richtig ist.

Vielen Dank für eure Mühe

MFG

Ü-EI

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

sjerenz
Mitglied
Planer


Sehen Sie sich das Profil von sjerenz an!   Senden Sie eine Private Message an sjerenz  Schreiben Sie einen Gästebucheintrag für sjerenz

Beiträge: 33
Registriert: 15.07.2013

Plant Simulation 10.1

erstellt am: 05. Feb. 2014 13:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Ü-EI 10 Unities + Antwort hilfreich

Hallo,
folgende Anmerkungen:
- die Initialisierung von "i" darf nicht sein (wird als lokale Variable in der for-schleife genutzt und dort auch automatisch initialisiert)
- die Zuweisung für a, b und c fehlt am Anfang ?!? (es erfoglt erst eine in den Schleifen)
- Die Bestimmung der neuen Anzahl der zu produzierenden Teile erfolgt zu früh und damit eventuell falsch (wenn negitive Größen entstehen). Auch die alte Anzahl ist nicht berücksichtigt. Die Quelle produziert nur, wenn die Lager nicht genug Bestand haben. Also dort erst die Zuweisung.
- Wieso hast du ein "waituntil" beim Umlagern vom Warenausgangslager in Wareneingangslager_Kunde? Du lagerst die bekannte Anzahl um und bist dann in dem Schritt fertig.
- Das "next" sollte dann auch vor die nächste for-Schleife. (erst komplette Umlagerung ins nächste Lager dann die Umlagerung in die Senke. (vorher einfach die Lagergröße dementsprechend anpassen)
- Wichtig bei "waituntil": Es muss ein beobachtbares Attribut sein.
- Für das Umlagern bei notwendiger Produktion:
1. produzierende Anzahl festlegen
2. Teile umlagern lassen ins Wareneingangslager
3. Teile umlagern zur Einzelstation - zwischen den Umlagervorgänge die Produktionszeit warten (entweder du kennst die Zeit oder du wartest bis die Station wieder leer ist bzw. wieder bereit ist)
4. weitere Umlagerungen

--> die "next"-Befehle direkt bei den jeweiligen Schleifen, es sei denn es ist beim Ablauf wichtig quasi Gleichzeitigkeit zu erstellen. Sollte in dem Beispiel nicht der Fall sein.
--> waituntil weglassen, außer beim Warten auf die durchgeführte Produktion vielleicht


Grüße
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz