Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  kopfgesteuerte Schleife (while)

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:  kopfgesteuerte Schleife (while) (4523 mal gelesen)
SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 08. Dez. 2011 11: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


while.png

 
Ein herzliches Hallo an alle Planter!

In meinem Lagermodell werden durch eine Zufallsverteilung Lose erzeugt, wenn der Lagerbestand (indirekter/Bestand_Parallelstation + direkter Bestand/Bestand_Lager) unter einem bestimmten Niveau fällt (Meldebestand). In meinem Modell wird die Erzeugungsmethode bei jedem Lagerausgang aufgerüfen, um die Bestandsbedingung zu überprüfen. Wenn der Lagerbestand < Meldebestand ist, sollen so viele Lose erzeugt werden, sodass Lagerbestand > Meldebstand gilt!
Dieses wollte ich mit einer while Schleife realisieren (siehe Screenshot; Auszug meiner Erzeugungsmethode). Jedoch hängt sich die Software direkt nach Simulationsbeginn auf und bekomme seit einiger Zeit das Problem nicht gelöst und bin für jeden Tipp dankbar...

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

SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 08. Dez. 2011 11:41    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

Edit: Die Auslagerungsmethode wird über einen Generator gesteuert, sodass nach einer bestimmten Zeitspanne ein Los entnommen wird (ebenfalls Zufallsverteilung)

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: 08. Dez. 2011 15:19    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 SnopyPlant 10 Unities + Antwort hilfreich

Sie müssen die BEs direkt im Lager oder Ihrer Parallelstation erzeugen. Die Simulation bleibt während der Schleifenausführung stehen, es findet also keine Umlagerung von puffer_eingang auf parallelstation statt (und so läuft die Schleife ewig).

Wenn Sie puffer_eingang verwenden wollen, dann warten Sie nach der Erzeugung in der Schleife jeweils, bis puffer_eingang leer ist, das sollte auch helfen:

Code:

waituntil puffer_eingang.leer prio 1 ;

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

SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 09. Dez. 2011 14:18    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

Anfangs habe ich die BEs in der Parallelstation erzeugt, hat aber nicht so gut funktioniert wie die Variante mit dem vorgelagerten Puffer.
Der Tipp mit der waituntil-Funktion funktioniert wunderbar =)

Den Fall, wenn der Lagerbestand gleich 0 ist werde ich zunächst vernachlässigen und umgehen (deshalb Editierung Beitrag!)

[Diese Nachricht wurde von SnopyPlant am 10. Dez. 2011 editiert.]

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

SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 10. Dez. 2011 11:43    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


Tabelle.png

 
Eine andere Sache an der ich die letzten Tage/Woche gescheitert bin, ist das mitschreiben und speichern von Daten in einer Tabelle. Ich möchte in der Tabelle "Tab_LagerEingang" einmal den Erzeugungszeitpunkt des Loses speichern (wenn Bestand < Meldebestand), den Eingangszeitpunkt in das Lager und die Anzahl der erzeugten BEs/Menge.

1) Ich bin mir unsicher/ungeübt in welcher Methode ich die Speicherung implementieren soll
   - in der Erzeugungsmethode zwischen while und if?
   - oder in einer anderen Methode, die z.B. die Ausgangssteurung des Puffer_Eingang Bausteins betrachtet

Für den zweiten Fall sieht mein Speicherungscode wie folgt aus:

Code:
is
i:integer;
do

if Puffer_Eingang.AusSt = void then

for i:=1 to Tab_LagerEingang.YDim loop
Tab_LagerEingang["Eingangszeitpunkt",i]:=Ereignisverwalter.Zeit;
Tab_LagerEingang["Menge",i]:=Erzeugtes_Los;
next;

end;
end;


Jedoch wird zu keinem Zeitpunkt etwas in die Tabelle eingetragen...wie gehabt, bin ich über jeden Tipp sehr dankbar! Den Eintritt des Loses in das Lager würde ich über die Eingangssteurung speichern wollen

[Diese Nachricht wurde von SnopyPlant am 10. Dez. 2011 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: 11. Dez. 2011 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 SnopyPlant 10 Unities + Antwort hilfreich

Als Ort wäre die Erzeugungsmethode richtig.
Hier können Sie die Anzahl ermitteln (in der while-Schleife) und dann einen Eintrag in die Tabelle erzeugen (nach der while-Schleife).

Sie können dazu die Methode tabelle.schreibeZeile (siehe Hilfe) verwenden. Ich glaube nicht, dass Sie unterschiedliche Zeiten für das Erzeugen des Loses und das Eintreten in das Lager benötigen.


Die Erzeugungstabelle sollte Sie dann innerhalb einer Initialisierungsmethode leeren (tabelle.loeschen).

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

SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 11. Dez. 2011 14:48    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

Danke für die Hilfe! Jedoch funktioniert meine Methode noch nicht so richtig:

Code:
     
for j:=1 to Tab_LagerEingang.YDim loop
      Tab_LagerEingang.setzeZeiger("Bestellzeitpunkt",j);
      Tab_LagerEingang.find({"Bestellzeitpunkt",j}..{"Bestellzeitpunkt",*},void);
      freie_Zeile:=Tab_LagerEingang.ZeigerY;
  next;

    Tab_LagerEingang.schreibeZeile("Bestellzeitpunkt",freie_Zeile,Ereignisverwalter.Zeit);
Tab_LagerEingang.schreibeZeile("Menge",freie_Zeile,Erzeugtes_Los);


Wenn ich die for-Schleife weg lasse, überspeichert mir Funktion immer den Eintrag in der Tabelle ("Bestellzeitpunkt,1). Dies wollte ich mit einer for-Schleife umgehen, indem in der Tabelle eine freie Zeile in der Spalte gesucht wird und dort die Daten abgespeichert werden. Allerdings bekomme ich eine Fehlermeldung:

"Falscher Datentyp für ... time übergeben, string erwartet
--> Meine Laufvariable j ist anscheinend 0 und es kommt zum Datenformatkonflikt, aber wieso!?


Edit: Den Zeitpunkt des eintretenden Loses benötige ich für die Ermittlung der Bearbeitungszeit der Parallelstation, da ich hier in diesem Modell ebenfalls eine Wahrscheinlichkeitsfunktion hinterlegt habe

[Diese Nachricht wurde von SnopyPlant am 11. Dez. 2011 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: 11. Dez. 2011 17: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 Nur für SnopyPlant 10 Unities + Antwort hilfreich

Die jeweils nächste freie Zeile ist:
Code:

tabelle.yDim+1


Sie brauchen dafür keine Suche. SchreibeZeile übergeben Sie alle Werte, die Sie in die Zeile schreiben wollen (als Übergabeparameter).
Dann bliebe folgendes übrig:

Code:

Tab_LagerEingang.schreibeZeile.(1,Tab_LagerEingang.yDim+1,
  Ereignisverwalter.Zeit,Erzeugtes_Los);

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

SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 12. Dez. 2011 09:20    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


Tabelle.png

 
Es funktioniert natürlich wunderbar,danke!

Habe gleichen Lösungsansatz für die Tabelle meines Lagerausgangs verwendet:

Code:
Tab_LagerAusgang.schreibeZeile(1,Tab_LagerEingang.yDim+1,Ereignisverwalter.Zeit,Ausgelagertes_Los);

Es werden allerdings die Daten nicht wie bei der Erzeungstabelle lückenlos in die Zeilen geschrieben...außerdem werden manche Datensätze nicht erfasst (In diesem Fall wird jede 1:20 ein zufälliges Los aus dem Lager entnommen). Steckt der Fehler im Detail?

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: 12. Dez. 2011 19:24    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 SnopyPlant 10 Unities + Antwort hilfreich

versuchen Sie es einmal damit
Code:

Tab_LagerAusgang.schreibeZeile(1,Tab_LagerAusgang.yDim+1,Ereignisverwalter.Zeit,Ausgelagertes_Los);



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



Mechanikdesign-Ingenieur für die Vielstrahl-Elektronenmikroskopie (m/w/x)
Sich etwas Neues trauen, über sich hinauswachsen und dabei die Grenzen des Machbaren neu de?nieren. Genau das ist es, was unsere Mitarbeiter täglich leben dürfen und sollen. Um mit unseren Innovationen das Tempo vorzugeben und Großartiges zu ermöglichen. Denn hinter jedem erfolgreichen Unternehmen stehen eine ganze Menge faszinierender Menschen.
Die Mitarbeiter von ZEISS arbeiten in einem offenen und modernen Umfeld mit zahlreichen Entwicklungs- und Weiterbildungsmöglichkeiten....
Anzeige ansehenProduktdesign, Industriedesign
SnopyPlant
Mitglied



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

Beiträge: 21
Registriert: 03.11.2011

Plant Simulation Student Version 10.0.2

erstellt am: 12. Dez. 2011 20: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

funktioniert natürlich...manchmal sieht man den Wald vor lauter Bäumen nicht! =/

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