Autor
|
Thema: FHM nach bestimmten BEs durchsuchen (1363 mal gelesen)
|
Stugots Mitglied
Beiträge: 5 Registriert: 06.01.2014
|
erstellt am: 06. Jan. 2014 21:41 <-- editieren / zitieren --> Unities abgeben:
Hallo erstmal! Ich habe eine wahrscheinlich einfach zu beantwortende Frage: wie kann man anhand einer Methode prüfen, ob ein FHM ein bestimmtes BE enthält? In meiner Simulation können die FHM viele verschiedene BEs aufladen und ich würde die FHMs gern später anhand eines bestimmten BE sortieren. Ich komme nur leider nicht auf den benötigten Code. Bisher: if @.Inhaltsliste = BETyp3 then umlagern usw. Muss anhand der "Inhaltsliste" geprüft werden? Ist ein anderer Befehl nötig? Dass das "=" nicht ausreicht, ist mir klar, nur wie kann die Inhaltsliste durchsucht werden? Besten Dank im Voraus! 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: 06. Jan. 2014 23:10 <-- editieren / zitieren --> Unities abgeben: Nur für Stugots
Sie suchen bestimmt nach einem BE-Namen.. Die Inhaltsliste brauchen Sie nicht unbedingt. Mit anzahlBEs können Sie ermitteln, wie viele BEs auf dem FHM sind und mit BE(i) können Sie auf jedes einzelne BE zugreifen. Das alles in eine Schleife verpacken: Code:
for local i:=1 to FHM.anzahlBEs loop if BE(i).name="BETyp3" then BE(i).umlagern(ziel); exitloop; end; next;
Siehe Hilfe anzahlBEs, BE oder [] ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stugots Mitglied
Beiträge: 5 Registriert: 06.01.2014
|
erstellt am: 13. Jan. 2014 18:52 <-- editieren / zitieren --> Unities abgeben:
Hallo und vielen Dank schonmal; leider klappt es noch nicht so ganz... ich muss zugeben, dass ich als Neuling auch nicht sehr viel Erfahrung habe und noch oft Syntaxfehler einbaue. Meine Methode, die als Ausgangssteuerung fungiert, sieht folgendermaßen aus: Code:
is do for local i:=1 to @.anzahlBEs loop if BE(i).name="BETyp3" then @.umlagern(FB211); exitloop; else @.umlagern(FB663); end; next; end;
Mit der Methode stauen sich die FHMs nun am Ausgang. Muss ich den exitloop anders setzen? Das next? Und wird mit der Funktion "BE.name" denn nach dem konkreten Namen gesucht und nicht nach der Art? Also, Name im Sinne der einmaligen Namensvergabe bei Erstellung an der Quelle. Ich suche allerdings nach der übergeordneten Art, also nach einem der zwölf möglichen BE-typen. Besten Dank soweit noch einmal! 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: 13. Jan. 2014 19:04 <-- editieren / zitieren --> Unities abgeben: Nur für Stugots
|
Stugots Mitglied
Beiträge: 5 Registriert: 06.01.2014
|
erstellt am: 14. Jan. 2014 09:27 <-- editieren / zitieren --> Unities abgeben:
Ja, das ist die Frage: wie erkenne ich einen BE-Typ? Ich habe nicht einem BE ein neues Attribut zugeordnet, sondern zwölf verschiedene BEs erstellt. Dafür steht jedes BE für einen anderen Artikel in einem Kommissioniersystem. Wäre die Geschichte einfacher, wenn ich nur ein BE habe, das aber dann ein neues Attribut hat? Ich habe neue Attribute bisher nicht hinzufügen können. 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: 14. Jan. 2014 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für Stugots
wenn Sie unterschiedliche BEs erstellt haben, dann haben die BEs unterschiedliche Namen; das ist die Standard-Vorgehensweise in Plant Simulation. Wenn es darum geht, die FHM auf verschiede Fördertechnikelemente zu verteilen, dann müsste das folgende reichen:
Code:
is do if @.inhalt.name="BETyp3" then @.umlagern(FB211); else @.umlagern(FB663); end; end;
Mit Name wird der Name zurückgegeben, den Sie für das BE in der Klassenbibliothek festgelegt haben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stugots Mitglied
Beiträge: 5 Registriert: 06.01.2014
|
erstellt am: 15. Jan. 2014 14:23 <-- editieren / zitieren --> Unities abgeben:
Ok, das funktioniert nun teilweise: die Methode erkennt allerdings nur den BE-Typen, der als letztes auf das FHM geladen wurde. Wenn ein BE-Typ schon vorhanden ist und danach ein anderes hinzukommt, erkennt es die Methode nicht. Muss nun doch die Inhaltsliste durchsucht werden? Vielen Dank für Ihre Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stugots Mitglied
Beiträge: 5 Registriert: 06.01.2014
|
erstellt am: 15. Jan. 2014 15:26 <-- editieren / zitieren --> Unities abgeben:
Zur Ergänzung hier ein erster Quelltext für die Überprüfung des Attributs "Inhaltsliste" (table). Warum wird mir in der vierten Zeile gleich ein Fehler angezeigt, dass die Parameteranzahl als 1 erwartet, aber als 0 übergeben wird? Code: is i : integer; do @.Inhaltsliste.setzeZeiger(1,1); gefunden:=@.Inhaltsliste.finden({1,1}..{1,*},"Fördergut3"); if gefunden then @.umlagern(FB211); else @.umlagern(FB663); end; end;
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: 15. Jan. 2014 17:36 <-- editieren / zitieren --> Unities abgeben: Nur für Stugots
Der Methode inhaltsliste müssen Sie eine Tabelle übergeben, darin wird die Inhaltsliste gespeichert. Die Inhaltsliste enthält Objektverweise. Mit denen müssen Sie dann weiter arbeiten, z.B.: Code:
is i,k : integer; ih : table; gefunden:boolean; do ih.create; @.Inhaltsliste(ih); for i:=1 to ih.xDim loop for k:=1 to ih.yDim loop if ih[i,k].name="Fördergut3" then gefunden:=true; exitloop 2; end; next; next; if gefunden then @.umlagern(FB211); else @.umlagern(FB663); end; end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |