Autor
|
Thema: kopfgesteuerte Schleife (while) (4523 mal gelesen)
|
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 08. Dez. 2011 11:39 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 08. Dez. 2011 11:41 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 08. Dez. 2011 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
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
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 09. Dez. 2011 14:18 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 10. Dez. 2011 11:43 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 11. Dez. 2011 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
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
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 11. Dez. 2011 14:48 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 11. Dez. 2011 17:38 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
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
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 12. Dez. 2011 09:20 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 12. Dez. 2011 19:24 <-- editieren / zitieren --> Unities abgeben: Nur für SnopyPlant
|
| 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 ansehen | Produktdesign, Industriedesign |
|
SnopyPlant Mitglied
Beiträge: 21 Registriert: 03.11.2011 Plant Simulation Student Version 10.0.2
|
erstellt am: 12. Dez. 2011 20:37 <-- editieren / zitieren --> Unities abgeben:
|