Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Auftragsfertigung mit Verfallzeiten

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:  Auftragsfertigung mit Verfallzeiten (1193 mal gelesen)
mistercoolios
Mitglied
Student

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

Beiträge: 7
Registriert: 23.12.2012

erstellt am: 23. Dez. 2012 13:59    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

Hallo,

ich möchte folgendes Modell erstellen:

1. Es sollen Aufträge ankommen, wobei sich die Abstände zwischen 2 Aufträgen über einen Tag gesehen ändern. D.h. morgens und abends kommen weniger Aufträge, als mittags und das soll sich jeden Tag wiederholen, wobei auch ein Störfaktor wirken soll, sodass Abweichungen möglich sind. Die Kurve soll so ähnlich aussehen, wie die Kurve der Normalverteilung, also über einen Tag gesehen bis zu einem Maximum steigen und dann wieder fallen.
-> Wie kann man das machen? Ich habe an eine Tabelle gedacht, wo ich die Abstände für einen Tag eingebe und dann einen Störfaktor definiere, das ist doch aber sehr aufwändig. Kann man keine Funktion definieren, die die Abstände beschreibt und wenn ja welche?


2. Die ankommenden Aufträge werden in einer "Warteschlange" gesammelt und wenn die nachgelagerte Einzelstation bereit ist, wird ein Teil in der Quelle generiert und an die Einzelstation geschickt, wo es bearbeitet und an den Versand weitergeschickt wird. In diesem Fall wurde also ein Auftrag angenommen und kann somit von der "Warteschlange" gelöscht werden. Wenn jedoch die Vefallzeit eines Auftrags überschritten wird, kann dieser nicht mehr angenommen werden, wird gelöscht. Am Ende soll überprüft werden, wie viele Aufträge angenommen werden und wie viele nicht.
-> Wie programmiere ich diese "Warteschlange" und die Vefallzeiten?

Das sind die ersten beiden Probleme und darauf aufbauend gibt es noch 2 oder 3 weitere, die ich dann versuchen würde selber zu lösen...

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

mistercoolios
Mitglied
Student

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

Beiträge: 7
Registriert: 23.12.2012

erstellt am: 25. Dez. 2012 21:54    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

Problemstellung:

Ein BE kommt von der Quelle in die Förderstrecke. Damit beginnt die VERWEILZEIT auf der Förderstrecke. Kommt ein BE vor Ablauf der VERFALLZEIT auf die nachgelagerte Einzelstation und von da in den Vertrieb, ist alles gut. Andernfalls, wenn die VERFALLZEIT überschritten wird, kommt das jeweilige BE direkt in eine Senke. Ziel ist es so viele BEs in den Vertrieb zu schicken, wie möglich. Dazu wird folgendes gemacht:
Ist kein BE auf der Förderstrecke und die Einzelstation bereit, so kommt ein BE aus der 2. Quelle auf die Einzelstation und von da in einen Puffer. Der Sinn von diesem Puffer ist es, die Zahl der BEs in der Senke gering zu halten. Um das zu erreichen wird ein BE, das die Verfallzeit fast erreicht hat, aus der Förderstrecke "gelöscht" und stattdessen wird ein BE aus dem Puffer in den Vertrieb geschickt. Ich hoffe das war verständlich, wenn nicht bitte ich um Rückmeldung.

Ich habe in der Eingangssteuerung der Förderstrecke folgende Methode definiert, wobei meine Probleme als Kommentar eingefügt sind:

Code:
is
i:integer;
j:time;
k:time;
l:time;
m:boolean;
n:boolean;
o:boolean;
do
i := Anzahl_Verfallzeit_fast_erreicht;
j := Eintrittszeit --wie definieren?
k := 3:00:00 --Verfall nach 3 Stunden nach Eintritt, richtige Schreibweise?
l := Restzeit --Aktuelle Zeit - (j + k), wie aktuelle Zeit bestimmen?
--m := l <= 10:00; --weniger als 10 Minuten übrig, richtige Schreibweise?
--n := l <= 0:00;  --kann die Restzeit negativ werden?
waituntil m = true prio 5; --was bedeutet prio genau?
i := i + 1;
o := Puffergröße >= 1;
waituntil Einzelstation.gestoert and o = true prio 4;
if n = true then
@.umlagern(Senke);
Anzahl_Senke := Anzahl_Senke + 1;
elseif n = false then
    Puffer.inhalt.umlagern(Vertrieb); --wie nur ein BE umlagern?
    Puffergröße := Puffergröße - 1;
    @.vernichten; --jenes BE auf der Förderstrecke vernichten, bei welchem das
                          --Überschreiten der Verfallzeit verhindert wurde
    i := i - 1;
Fö_Eingang := Fö_Eingang -1; --weil ein BE vernichtet wurde
end;
end;

Am Ausgang der Förderstrecke wird folgende Methode aufgerufen:

Code:
is
do
waituntil Einzelstation.bereit and Einzelstation.leer prio 2;
Förderstrecke.inhalt.umlagern(Einzelstation);
Fö_Ausgang := Fö_Ausgang + 1;
end;


Grundsätzliche Frage zur waituntil-Anweisung:
Ich habe die waituntil-Anweisung in der Methode am Eingang der Förderstrecke oben benutzt. Was passiert, wenn die waituntil-Bedingung noch nicht gegeben ist, also die Methode noch geöffnet ist und genau zu dieser Zeit noch ein BE am Eingang eintritt und somit die Methode öffnen will? Ist die Methode dann blockiert?

[Diese Nachricht wurde von mistercoolios am 26. Dez. 2012 editiert.]

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

Bon Simul
Mitglied
Simulant


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

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 26. Dez. 2012 21:32    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 mistercoolios 10 Unities + Antwort hilfreich

Ein paar Antworten:

Erzeugungszeiten:
a) Sie könnten die Quelle durch einen Trigger steuern lassen (Ezeugungszeitpunkt Trigger --> siehe Hilfe)
b) Sie können bei Abstand die Option Formel wählen und eine Methode zur Berechnung des Abstands in Abhängigkeit von der Simulationszeit  programmieren
c) Quelle - Lieferliste (für ein Jahr?)...

Die Verweilzeit können Sie z.B. mit

Code:

ereignisverwalter.zeit-@.eintrittszeit


berechnen.

Einige Anmerkungen zu Ihrem Programm:

Zitat:

i := Anzahl_Verfallzeit_fast_erreicht;
j := Eintrittszeit --wie definieren?
-- macht in der Eingangssteuerung keinen Sinn, sonst
-- j:=@.eintrittszeit;


k := 3:00:00 --Verfall nach 3 Stunden nach Eintritt, richtige Schreibweise?
-- nein, Sie müssen die Zeit in Sekunden angeben (Datentyp real)


l := Restzeit --Aktuelle Zeit - (j + k), wie aktuelle Zeit bestimmen?
-- ereignisverwalter.zeit


--m := l <= 10:00; --weniger als 10 Minuten übrig, richtige Schreibweise?

-- s.o. in Sekunden oder str_to_time("...") siehe Hilfe

--n := l <= 0:00;  --kann die Restzeit negativ werden?
-- kaum


waituntil m = true prio 5; --was bedeutet prio genau?
-- priorität, bestimmt die Abarbeitung der Methoden, wenn mehrere Methoden gleichzeitig aufgerufen werden --> siehe Hilfe


i := i + 1;
o := Puffergröße >= 1;
waituntil Einzelstation.gestoert and o = true prio 4;
if n = true then
@.umlagern(Senke);
Anzahl_Senke := Anzahl_Senke + 1;
elseif n = false then
    Puffer.inhalt.umlagern(Vertrieb); --wie nur ein BE umlagern?

-- .inhalt gibt nur ein BE zurück


    Puffergröße := Puffergröße - 1;
    @.vernichten; --jenes BE auf der Förderstrecke vernichten, bei welchem das
                          --Überschreiten der Verfallzeit verhindert wurde
    i := i - 1;
Fö_Eingang := Fö_Eingang -1; --weil ein BE vernichtet wurde
end;
end;


Zitat:

Ich habe die waituntil-Anweisung in der Methode am Eingang der Förderstrecke oben benutzt. Was passiert, wenn die waituntil-Bedingung noch nicht gegeben ist, also die Methode noch geöffnet ist und genau zu dieser Zeit noch ein BE am Eingang eintritt und somit die Methode öffnen will? Ist die Methode dann blockiert?


Lesen Sie die Hilfe zu waituntil!!
Die Methode wird ein weiteres mal aufgerufen und dann suspendiert.
Das Verwenden der Waituntil-Anweisung in der Eingangssteuerung ist keine sehr gute Idee, denn es können dann viele Methodenaufrufe mit der selben Bedingung unterbrochen sein.

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

mistercoolios
Mitglied
Student

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

Beiträge: 7
Registriert: 23.12.2012

erstellt am: 27. Dez. 2012 01:38    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 Ihre Hilfe, ich habe Ihre Tipps berücksichtigt, aber anscheinend habe ich den falschen Ansatz genommen...
Hier der geänderte Quellcode:

Code:
is
i:integer;
j:real;
m:boolean;
n:boolean;
o:boolean;
p:boolean;
do
i := Anzahl_Verfallzeit_fast_erreicht;
        j := ereignisverwalter.zeit - @.eintrittszeit;
m := j >=  102000; --2 Stunden und 50 Minuten auf der Förderstrecke, d.h. noch weniger als 10 Minuten übrig bis
                           --zur Vefallzeit von 3 Stunden
n := j < 10800; --Verfallzeit noch nicht erreicht
o := j >= 108000; --Verfallzeit wurde überschritten
waituntil m = true and n = true prio 5;
i := i + 1;
p := Puffergröße >= 1;
waituntil Einzelstation.gestoert and p = true prio 4;
if o = true then
@.umlagern(Senke);
Anzahl_Senke := Anzahl_Senke + 1;
elseif o = false then
    Puffer.inhalt.umlagern(Vertrieb); --.inhalt gibt nur ein BE zurück
    Puffergröße := Puffergröße - 1;
    @.vernichten;
    i := i - 1;
    Fö_Eingang := Fö_Eingang -1;
end;
end;

Fehler, dass waituntil m = true nicht überprüfbar ist tritt auf, woran liegt das?
Ich denke es wird nicht das machen, was ich bezwecke...
Ich möchte folgendes:
1. BE kommt von der Quelle auf die Förderstrecke und stellt sich hinten an, salopp gesagt
2. Wenn innerhalb von 2 Stunden und 50 Minuten auf die Einzelstation umgelagert werden kann ist alles gut. Von da kommt das BE in den Vertrieb.
3. Wenn 2 Stunden und 50 Minuten erreicht sind, soll das BE gelöscht werden und stattdessen kommt ein vorgefertigtes BE aus dem Puffer in den Vertrieb, das ist auch noch in Ordnung.
4. Wenn 3 Stunden erreicht sind, kommt das jeweilige BE in die Senke, was dann als Opportunitätskosten zu Buche schlägt.

Mein Problem ist bei den waituntil-Anweisungen, z.B. bei "waituntil m = true and n = true" wird gewartet bis 2 Stunden und 50 Minuten überschritten wurden, jedoch 3 Stunden noch nicht. Was passiert denn, wenn das BE nun währenddessen zum Ausgang der Förderstrecke kommt und auf die Einzelstation umgelagert wird? Dieser Fall wird doch hierbei dochgar nicht berücksichtigt.
"Das Verwenden der Waituntil-Anweisung in der Eingangssteuerung ist keine sehr gute Idee, denn es können dann viele Methodenaufrufe mit der selben Bedingung unterbrochen sein" - Mir fällt nichts ein, wie ich das sonst machen kann, ich habe nur meine Quelle und Ausweichquelle, meine Förderstrecke, meinen Puffer und meine beiden Senken.

[Diese Nachricht wurde von mistercoolios am 27. Dez. 2012 editiert.]

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

Bon Simul
Mitglied
Simulant


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

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 27. Dez. 2012 13:11    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 mistercoolios 10 Unities + Antwort hilfreich

Machen Sie es doch einfach auf die folgende Weise:
Zitat:

1. BE kommt von der Quelle auf die Förderstrecke und stellt sich hinten an, salopp gesagt
2. Wenn innerhalb von 2 Stunden und 50 Minuten auf die Einzelstation umgelagert werden kann ist alles gut. Von da kommt das BE in den Vertrieb.
3. Wenn 2 Stunden und 50 Minuten erreicht sind, soll das BE gelöscht werden und stattdessen kommt ein vorgefertigtes BE aus dem Puffer in den Vertrieb, das ist auch noch in Ordnung.
4. Wenn 3 Stunden erreicht sind, kommt das jeweilige BE in die Senke, was dann als Opportunitätskosten zu Buche schlägt.

Da haben Sie die gesamte Steuerung für die Ausgangssteuerung des Puffers (ich habe das nicht getestet!!):

Code:

is
  verweilzeit:time;
do
--warten, dass die Einzelstation das Teil aufnehmen kann
waituntil einzelstation.leer and einzelstation bereit prio 1;
-- je nach Verweilzeit unterschiedliche Aktionen
verweilzeit:=ereignisverwalter.zeit-@.eintrittszeit;
--kleiner als 2:50:00 kein Problem
if verweilzeit < 10200 then
  @.umlagern(einzelstation);
elseif verweilzeit >= 10200 and verweilzeit <= 10800 then
  @.vernichten;
  Puffer.inhalt.umlagern(Vertrieb);
else
  @.umlagern(Senke);
end;

end;



Wenn das nächste BE ankommt, beginnt das Spiel von vorn.

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

mistercoolios
Mitglied
Student

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

Beiträge: 7
Registriert: 23.12.2012

erstellt am: 27. Dez. 2012 20:11    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, Sie meinten wohl "am Ausgang der Förderstrecke" und so läuft mein Modell genau, wie ich es wollte. Sie sind super 
Ich werde darauf aufbauend noch Modifikationen machen und hoffe, dass Sie mir weiterhin helfen werden, wenn Probleme auftreten sollten.
Viele Grüße

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