Autor
|
Thema: Wegsuche von BEs anhand allowance-list (1250 mal gelesen)
|
hadebur Mitglied
Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 30. Jun. 2015 18:33 <-- editieren / zitieren --> Unities abgeben:
Hey, ich probiere mich schon eine halbe Ewigkeit an folgendem Problem. Ich will aus einer Excel-Tabelle eine beliebige Anzahl an Produkten (BEs) auslesen - soweit so gut. Die BEs werden ausgelesen, automatisch erzeugt und auch in einen Arbeitsplan geschrieben. Ein wichtiger Bestandteil davon sollte allerdings sein, dass die Produkte quasi alleine den "erlaubten Weg" von der Quelle zur Senke finden, dafür wird von der jeweiligen Position ein Abgleich, ob die aktuellen Nachfolger ( succ(i) ) auch in der ausgelesenen Excel-Tabelle vorkommen (find-funktion). Das ganze läuft schon halbwegs, aber es ergeben sich 3 Probleme: 1. Meine Methode als Ausgangssteuerung funktioniert nicht für die Quelle 2. Wenn eine Nachfolgestation die Senke ist, muss man das Produkt darin verschieben (@.move(Drain)) Ist das wirklich notwendig? Ich erinnere mich, dass es auch ohne diesen Befehl klappt. 3. Wenn das Produkt in der Senke ist, verbleibt es da und müsste gelöscht werden (@.vernichten). Wenn dies der Fall ist wird @ zum VOID und kann nicht mehr bearbeitet werden. Kann mir hier jemand helfen? Wichtig ist vor allem, kann man, wenn @.vernichten durchgeführt wurde @ nochmal irgendwie neu definieren? Vielen dank schonmal. --------------Code------------------ is nachfolger:list[string]; zeileWeiter:boolean; zeile:integer; Name_Mus, nachfolger_name:string; a, weiter:boolean; succ_num:integer; k,i: integer; do zeileWeiter:=true; zeile:=1; while(zeileWeiter) loop weiter:=true; Name_Mus:=test_neu[1,zeile]; if Name_Mus="" then --wenn zelle = leer, steigt while-loop aus zeileWeiter:=false; else succ_num:=@.location.numSucc; --anzahl der nachfolger von aktueller station nachfolger.create; --Nachfolgerliste wird erstellt for i:=1 to succ_num loop --Füllt Liste mit Namen der Nachfolgestationen nachfolger_name:=obj_to_str(@.location.succ(i)); nachfolger.anhängen (omit(nachfolger_name,0,strlen(obj_to_str(rootframe))+2)); next; k:=1; while (weiter) loop nachfolger_name:=nachfolger.lesen(k); a:=false; a:=test_neu.finden({*,zeile},nachfolger_name); test_neu.setCursor(1,1); if nachfolger_name = "Drain" then --and @.name = Name_Mus weiter:=false; zeile:=zeile+1; @.move(Drain);--wenn ein Nachfolger=Drain dann gehe auf jeden Fall dahin @.vernichten; end; elseif a=true then -- and @.name = Name_Mus --wenn Nachfolger in allowence-list dann bewege Produkt zu dieser location weiter:=false; @.move(@.location.succ(k)) end; k:=k+1; end; end; end; end; [Diese Nachricht wurde von hadebur am 07. Jul. 2015 editiert.] [Diese Nachricht wurde von hadebur am 07. Jul. 2015 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: 01. Jul. 2015 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für hadebur
1. Meine Methode als Ausgangssteuerung funktioniert nicht für die Quelle warum nicht? Wenn Sie die Bereitstellung der Teile als Step 1 definieren, sollte es wie bei den Maschinen funktionieren. 2. Wenn eine Nachfolgestation die Senke ist, muss man das Produkt darin verschieben (@.move(Drain)) Ist das wirklich notwendig? Ich erinnere mich, dass es auch ohne diesen Befehl klappt. 3. Wenn das Produkt in der Senke ist, verbleibt es da und müsste gelöscht werden (@.vernichten). Es ist Aufgabe der Senke, BEs zu vernichten (@.vernichten ist nicht notwendig). Sie können die Senke ebenso mit Kanten verbinden (@.move ist nicht notwendig). Setzen Sie die Bearbeitungszeit der Senke auf 0, um einen Einfluss auf die Simulation zu vermeiden. Wichtig ist vor allem, kann man, wenn @.vernichten durchgeführt wurde @ nochmal irgendwie neu definieren? Nein; mit @ können Sie jeweils auf die BEs zugreifen, die Sensoren und Steuerungen auslösen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hadebur Mitglied
Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 01. Jul. 2015 19:15 <-- editieren / zitieren --> Unities abgeben:
OKay, danke schonmal für die Hilfe habe den Code umgeändert. Hatte vercheckt, dass die Methode als Eingangsbedinung nicht die ganze Zeit laufen muss, sondern nach einem Durchlauf beendet und neu geöffnet wird.Die äußere While-Schleife war also unnötig, jetzt läufts. Nur habe ich noch ein Problem: test_neu.finden({*,zeile},nachfolger_name) Dieser Befehl sollte mir ein true aussprucken, wenn der aktuell gewählte Nachfolger in einer Liste zu finden ist, aber manchmal wird ein false zurückgegeben, obwohl in dem Beispiel "Drain" definitiv ein Nachfolger in der Liste ist. Genau das selbe, wenn ich meine Produkte in der Liste nur A, B, C... nenne. if test_neu.finden({1,*},(@.name))=true then --Liest die Zeile aus, in der sich das aktuelle Produkt befindet (1.Spalte) zeile:=test_neu.ZeigerY; end; Kam das schonmal bei jemandem vor und was wurde dagegen gemacht? Un was bedeutet das test_neu.setCursor(1,1); eigentlich genau? Vielen Dank schonmal PS: Im Anhang test_neu als bereits ausgelesene Liste aus einer Excel-Datei [Diese Nachricht wurde von hadebur am 01. Jul. 2015 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: 02. Jul. 2015 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für hadebur
Plant Simulation arbeitet mit einem Zellzeiger. Der wird nach finden jeweils auf die zeile mit dem Treffer versetzt. Ein nochmaliges Aufrufen von Finden beginnt an dieser Position. Wenn Sie wieder am Anfang der Tabelle beginnen wollen, müssen sie den Zeiger zuücksetzen: tabelle.setzeZeiger(2,1); --dann suchen tabelle.finden({2,1}..{2,*},suchbegriff);
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hadebur Mitglied
Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 04. Jul. 2015 19:19 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 06. Jul. 2015 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für hadebur
|
hadebur Mitglied
Beiträge: 4 Registriert: 30.06.2015
|
erstellt am: 07. Jul. 2015 11:49 <-- editieren / zitieren --> Unities abgeben:
Also das Ganze hat sich erübrigt, das Problem lag nicht bei der "finden"-Funktion. Es lag daran, dass beim Auslesen aus der Excel-Tabelle zwei ASCII (10 und 13) mitgenommen werden, die müssen dann, wenn nur ein Wert in einer Zelle steht, abgeschnitten werden. In etwa so: liste.anhängen((omit(wert,strlen(wert)-1,2))) die beiden abgeschnittenen Zeichen sind eben dieser unsichtbare Schrott" der von Excel übrig bleibt. Jetzt funktioniert die automatische Wegsuche mit vorgegebenen erlaubten Stationen. *gelöst* Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|