| 
Autor
 | 
Thema:  Umlagern (1238 mal gelesen)
 | 
 
 
                        sven732 Mitglied Student
  
  
        Beiträge: 13 Registriert: 24.02.2007 
                         | 
                        
                         
                                                 
                        erstellt am: 18. Aug. 2007 13:56       <-- editieren / zitieren -->           Unities abgeben:           
                        
  Hallo, ich möchte über eine Methode eine bestimmte Anzahl von Bes aus dem Lager in eine Senke umlagern und zwar begonnen vom ersten belegten Lagerplatz bis zum letzten Lagerplatz.  Wie kann ich dies machen?
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                        
                        Kepheus Mitglied Student
  
  
        Beiträge: 22 Registriert: 13.03.2007 IBM ThinkPad R51e Intel Celeron M 1,5 GHz 512 MB Ram<P>Windows XP SP2<P>Plant Simulation 7.6 
                         | 
                        
                         
                                                 
                        erstellt am: 20. Aug. 2007 07:55       <-- editieren / zitieren -->           Unities abgeben:            Nur für sven732  
                         |  
                        
                        LaBonita Mitglied Dipl.-Math.
   
  
        Beiträge: 151 Registriert: 26.07.2007 eM-Plant 7.5 bis 8.1 VB Java C# 
                         | 
                        
                         
                                                 
                        erstellt am: 20. Aug. 2007 11:44       <-- editieren / zitieren -->           Unities abgeben:            Nur für sven732  
                        
  Hallo sven732, ich vemute Du möchtest auf den Inhalt eines Lageres zugreifen. Da ein Lager keine fest vorgegebene Verweil- oder Bearbeitungszeit hat, sind hier alle Teile immer nach dem FIFO prinzip zu erreichen. Du kannst dann auf unterschiedliche Arten auf die BEs zugreifen. Indem Du
  Code: for i := 1 to current.Lager.numMU loop     current.Lager.cont.move(ziel); next;
   kannst Du immer auf das Element zugreifen, dass nach dem FIFO Prinzip als nächstes umgelagert werden soll. Etwas schwieriger wird es, wenn Du platzbezogen zugreifen willst, weil Du dann prüfen musst, ob der Platz auf belegt ist. PlantSimulation  hat da eine etwas lustige Art der Zuordnung. Wir hatten das Problem demletzt auch und ein Kollege hatte es dann folgendermaßen gelöst:
 Code: for i := 1 to current.Lager.xDim loop     for j := 1 to current.Lager.yDim     loop         if current.Lager[i,j].occupied         then             current.Lager[i,j].move(ziel);         end;     next; next;
   Hilfe zum direkten Zugriff findest Du in der PlantSimulation Hilfe. Nur die Lustige Belegung des Lagers ist nirgends beschrieben. Also einfach geht es mit "cont" und wenn Du bestimmte Eigenschaften brauchst, dann musst Du halt zirkulieren und prüfen, ob da überhaupt etwas liegt.Viel Erfolg!!! Gruß, LaBonita Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                        
                        sven732 Mitglied Student
  
  
        Beiträge: 13 Registriert: 24.02.2007 
                         | 
                        
                         
                                                 
                        erstellt am: 20. Aug. 2007 19:04       <-- editieren / zitieren -->           Unities abgeben:           
                        
  Hallo, es hat funktioniert. Ich kann jetzt eine bestimmte Anzahl von Bes umlagern. Allerdings funktioniert die Umlagerstrategie Fifo nur bedingt. Wenn ich 20 Lagerplätze zur Verfügung habe, diese belegt sind und ich 5 Bes umlagern lasse, dann werden die Lagerplätze 1 - 5 umgelagert. D.h. die neu ankommenden Bes werden wieder auf die Lagerplätze 1 - 5 gelegt und beim nächsten Umlagern auch umgelagert. Die restlichen 15 Bes bleiben im Lager. Man stelle sich sowas bei Obst vor. Das Lager würde nur so vor sich hinfaulen. Wie kann ich es lösen, dass ein richtiges Fifo ausgeführt wird. D.h. dass zuerst Lagerplatz 1 - 5 dann 6 - 10, 11 - 15, usw. umgelagert werden. Ist es auch möglich, dass, sofern die Lagerplätze 1 - 5 frei geworden sind, die anderen Bes im Lager einfach um diese 5 Plätze nach vorne rücken und neu ankommende bes die hinteren Lagerplätze 15 - 20 belegen? Gruss Sven732
  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                        
                        LaBonita Mitglied Dipl.-Math.
   
  
        Beiträge: 151 Registriert: 26.07.2007 eM-Plant 7.5 bis 8.1 VB Java C# 
                         | 
                        
                         
                                                 
                        erstellt am: 20. Aug. 2007 19:39       <-- editieren / zitieren -->           Unities abgeben:            Nur für sven732  
                        
  Hallo sven732, ich liebe es, wenn PlantSimulation nicht das macht, was man eigentlich erwarten würde. Alos FIFO ist nicht immer FIFO. Anyway - habe meine Idee mal ausprobiert und es tut. Jedes Element hat einen Eintrittszeitpunkt. Jetzt muss Du halt durch alle Elemente durchgehen und Dir immer das Element suchen, das den frühesten Eintrittszeitpunkt hat. Als Beispiel der folgende Code: Code: is    local         i, j, k, indI, indJ: integer;         eTime, minETime: time; do     minETime := 1000000000; 	     for k := 1 to 5 loop         for i := 1 to current.Store.xDim         loop             for j := 1 to current.Store.yDim             loop                 if current.Store[i, j].occupied                 then                     eTime := current.Store[i, j].cont.entryTime; 				                     if minETime = 1000000000                     then                         indI := i;                         indJ := j; 						                         minETime := eTime;                     elseif eTime < minETime                     then                         indI := i;                         indJ := j; 						                         minETime := eTime;                     end;                 end;             next;         next; 		         current.Store[indI, indJ].move(current.Store1);         minETime := 1000000000;     next; end;
 
  Hierbei werden immer die am längsten gelagerten 5 Elemente aus dem lager geholt und in ein anderes Lager verlegt. Vielleicht kannst Du es anpassen und dann verwenden. Gruß, LaBonita Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                        
                           Ex-Mitglied
  
                           | 
                          
                           
                           
                          erstellt am: 20. Aug. 2007 20:23       <-- editieren / zitieren -->       
                          
  @ LaBonita @ sven732 na na na Leute, bleibt mal bei der Realität! @ LaBonita    Zitat:
  for i := 1 to current.Lager.xDim loop     for j := 1 to current.Lager.yDim     loop         if current.Lager[i,j].occupied         then             current.Lager[i,j].move(ziel);         end;     next; next;
 
  for j := 1 to current.Lager.yDim loop     for i := 1 to current.Lager.xDim     loop         if current.Lager[i,j].occupied         then             print current.Lager[i,j].inhalt;         end;     next; next; ist dasselbe wie: for i:=1 to lager.anzahlbes loop		 		print i, chr(9), lager.be(i); next; ohne "belegt"-Überprüfung und ohne Überprüfung A L L E R Lagerplätze ,oder ????? @ sven732 @ LaBonita Wenn es FIFO sein soll, dann nehmt doch einfach einen Pufferbaustein. Warum hierbei umständlich mit dem Lagerbaustein hantieren ????  ------------------ Stephan Römberg
 [Diese Nachricht wurde von COMAU am 20. Aug. 2007 editiert.]  |  
                          
                        LaBonita Mitglied Dipl.-Math.
   
  
        Beiträge: 151 Registriert: 26.07.2007 eM-Plant 7.5 bis 8.1 VB Java C# 
                         | 
                        
                         
                                                 
                        erstellt am: 21. Aug. 2007 10:28       <-- editieren / zitieren -->           Unities abgeben:            Nur für sven732  
                        
  Hallo Stephan, zunächst mal - da kann man vielleicht auch den Platzpuffer für verwenden, wenn man die Bearbeitungszeit auf 0 setzt und er ansonsten keine ungewollten Eigenschaften mitbringt - dafür kenne ich das Problem nicht gut genug. Zu Deiner Anmerkung mit:   Zitat: ist dasselbe wie:for i:=1 to lager.anzahlbes loop print i, chr(9), lager.be(i); next; 
  würde ich jedoch gerne bemerken, dass der Grundgedanke war die Teile in der Ankunftsreihenfolge wieder raus zu geben und nicht irgendwie raus zu bekommen. Das funktioniert mit der Methode, die Du beschrieben hast, aber leider nicht (zumindest nicht bei meinem Testmodell - mehrdimensionales Lager). Anyway - das Schöne bei PlantSimulation ist: Es gibt (fast) immer eine Lösung und 2 Lösungen unterschiedlicher Personen sind (fast) nie gleich ;-) Gruß, LaBonita Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                       
   
 | | Auszubildender zum Elektroniker für Betriebstechnik (m/w/d) |  ENERGY THAT CHANGES: Als ein global führender Spezialist für Photovoltaik-Systemtechnik schafft SMA heute die Voraussetzungen für die dezentrale und erneuerbare Energieversorgung von morgen. SMA wurde 1981 gegründet, hat ihren Sitz in Niestetal bei Kassel und ist mit Vertriebs- und Servicegesellschaften in 20 Ländern weltweit präsent. Deine Vorteile bei uns be flexible....  |  | Anzeige ansehen | Ausbildung, Studium |  
  |  
 
                           Ex-Mitglied
  
                           | 
                          
                           
                           
                          erstellt am: 21. Aug. 2007 13:18       <-- editieren / zitieren -->       
                          
   @LaBonita naja, das hättest Du garnicht testen brauchen, denn aus dem Zitat geht ja wohl eindeutig hervor, worauf ich   for i:=1 to lager.anzahlbes loop print i, chr(9), lager.be(i); next;
 
  bezogen habe, oder ?
  Wenn nun ein mehrdimensionales Lager genutzt werden soll, dann gehts mit 2 weiteren Zeilen so:
 is  i:integer; tab:table[object,real]; do tab.create; for i:=1 to lager.anzahlbes loop tab[1,tab.ydim+1]:=lager.be(i); tab[2,tab.ydim]:=lager.be(i).eintrittszeit; next; tab.sortieren(2,"auf"); for i:=1 to min(5,tab.ydim)  loop tab[1,i].umsetzen(ziel); next; end;  ------------------ Stephan Römberg
 
 [Diese Nachricht wurde von COMAU am 22. Aug. 2007 editiert.]  |  
                          
 | Anzeige.:
  Anzeige: (Infos zum Werbeplatz >>)
    |