Autor
|
Thema: Sortierer (1030 mal gelesen)
|
Micha80 Mitglied Student
Beiträge: 27 Registriert: 10.11.2004
|
erstellt am: 09. Dez. 2004 13:55 <-- editieren / zitieren --> Unities abgeben:
Hallo! Wieder habe ich ein Problemchen... Ich versuche in einem Sortierer die Fördergüter per Code zu sortieren nach gewissen Kriterien z.B.Bearbeitungszeit. Wie kann ich herausfinden welche Teile sich momentan im Sortierer befinden? dacht mir das so for x to y .bes.palette.kindnr(x)... --Sortieralgorithmus... next weiß aber nicht wie ich x wählen soll, da sich im Sortierer evtl. nur be.kindnr1 und kindnr9 aufhalten aber nicht 2-8. In VB wäre es so etwas wie eine "for each objekt in Sortierer", aber emplant kennt das nicht. Danke für jede Hilfe! Gruß Micha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Dez. 2004 17:44 <-- editieren / zitieren -->
Hallo Micha80, Schau mal in der Hilfe unter "Methoden für den Inhalt der Materialflußbausteine". Dort ist mit einem kleinen Beispiel beschrieben, wie Du den Inhalt z.B. eines Sortierers in eine Tabelle schreiben kannst. anbei eine Schleife, die Dir die Werte aus der Tabelle ausliest: i : integer; obj : object; . . . for i:=1 to tabelle.xdim loop obj:=tabelle[i,1]; .. sortieralgorithmus next; überprüf nochmal beim sotierer ob die be´s in die Tabellenspalten (x) oder Tabellenzeilen (y) geschrieben werden. Obiges Beispiel liest die Spalten aus. Wenn andersherum dann wird tabelle.xdim zu tabelle.ydim und tabelle[i,1] zu tabelle[1,i]; Gruß
------------------ DER SIMULATOR |
Micha80 Mitglied Student
Beiträge: 27 Registriert: 10.11.2004
|
erstellt am: 10. Dez. 2004 14:21 <-- editieren / zitieren --> Unities abgeben:
Yiep, genau das ist das was ich suche!!!! bis auf eine Kleinigkeit: es wird zwar nun richtig sortiert aber beim Umlagern kommt es zur Fehlermeldung „ein VOID kann keine Methode ‚umlagern’ empfangen.“ Wie kommt es dazu? Liegt es am Bug/Heck Sensor? …noch was ist mir als Anfänger von Simtalk aufgefallen - man kann keine „globalen“ Arrays wie in anderen Programmiersprachen erzeugen, ist das richtig ?(man muss also generell den Umweg über Tabellen machen; in der Hilfe kam ich bei „Array“ auf "sendeNachricht an" und das ist was total anderes)? Danke&Sorry für die vielen Fragen! Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 10. Dez. 2004 16:36 <-- editieren / zitieren -->
Hallo Micha80, Diese Meldung erscheint, wenn Du z.B. in der Ausgangsteuerung (Methode) versuchst ein BE umzulagern, daß nicht mehr auf dem Baustein liegt sondern schon umglagert wurde. Wenn in der Ausgangssteuerung eine Methode eingetragen ist und der Sensor auf "BUG" steht, muß die Methode das BE selber umlagern (durch @.umlagern). Wenn der Sensor auf "HECK" steht-dann nicht!!, d.h. wenn in der Methode noch "@.umlagern" steht, dann wird das aktuelle Be (@) nun nicht mehr auf dem Baustein "gefunden" und es kommt zu der entsprechenden Meldung Von der Funkionalität sind die sog. Arrays und Tabellen/Listen/Karteien ähnlich und werden in eM-Plant zum globalen Datenzugriff verwendet. Du kannst aber in der Methode auch lokale Tabellen (arrays) anlegen die genauso aufgerufen werden wie die globalen tabellen tabelle[x,y]. Ein praktischer Aspekt ist,daß Du den (globalen) Tabellen-Objektinhalt immer auch manuell direkt editieren kannst z.B. EXCEL-Werte einfügen. "sendeNchricht an" (engl. sendmessage) ist eine Funktion um mit den 3D-Objekten in eM-Plant zu kommunizieren also auch Arrays im 3D-Bereich mit Werten zu belegen und hat unmittelbar nichts mit den Tabellenstrukturen (s.o.) zu tun. Gruß
------------------ DER SIMULATOR |
Micha80 Mitglied Student
Beiträge: 27 Registriert: 10.11.2004
|
erstellt am: 19. Dez. 2004 23:39 <-- editieren / zitieren --> Unities abgeben:
Hallo & sorry für verspätete Rückmeldung! Der Sensor steht auf BUG aber es kommt komischerweise trotzdem zur Fehlermeldung. Kann es sein das eMPlant das Fördergut weiterleitet oder den Aufruf abschließt, bevor meine Schleifen durchlaufen sind? Das Teil befindet sich aber noch im Sortierer (wurde also noch nicht umgelagert, wäre aber im Prinzip egal, da man den Bes...kindnr() Befehl aufrufen kann wo man will). Bloß das Programm "tut so als wäre es verschwunden". Bin total ratlos! Micha
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 20. Dez. 2004 02:18 <-- editieren / zitieren -->
Hallo Micha80, komisch, so ein Phänomen hatte auch keyfa. Ich habe mal die Sache mit kindnr(i) in einem kleinen Modell nachvollzogen. Bei kindnr mußt Du auf folgendes achten: Sobald ein Be (z.B. per Senke) Dein Modell verläßt oder ein neues Be (z.B. Quelle) in Deinem Modell erzeugt wird, wird die Anzahl der "Kinder" neu bestimmt und damit auch die kindnr neu zugeordnet ! Anbei eine kleine Methode die Du mal als Eingangssteuerung Deines Sortierers benutzen kannst um zu verdeutlichen wie die kindnr-Zuordnung sich dynamisch verändert. is i :integer; do print; for i:=1 to .bes.fördergut.anzahlkinder loop print i,chr(9),.bes.fördergut.kindnr(i); next; end; Hiermit kannst Du auch ueberprüfen wo das Teil geblieben ist, denn wenn z.B. nur noch 6 Be´s im System sind, gibt es kein kindnr(7) mehr. Gruß ------------------ DER SIMULATOR |
Micha80 Mitglied Student
Beiträge: 27 Registriert: 10.11.2004
|
erstellt am: 22. Dez. 2004 14:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Simulator, Ich glaube gerade eine mystische Eingebung gehabt zu haben... habe es verstanden!!! Kann man um das VOID Prob zu umgehen, die Methode des Sortierers immer aufrufen bzw zu bestimmten Zeiten und nicht erst wenn ein neues Teil rein bzw rausgeht? Danke! DANKE DANKE! :-))) Micha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Dez. 2004 18:11 <-- editieren / zitieren -->
Hallo Micha80, bin auch erst darauf gekommen, nachdem ich ein kleines Modell hierzu geschrieben habe! ist aber - glaube ich - schon logisch oder ? Nun zu Deiner Frage. Klar geht das. Hierzu gibt es (unter "Informationsbausteinen") den sog. Generator-Baustein. Den Generator kannst Du so konfigurieren, daß er immer zu einem vorgegebenen Zeitinterval (Takt) Deine Methode aufruft. Näheres siehe eM-Plant-Hilfe. Gruß
------------------ DER SIMULATOR |