Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Wegsuche von BEs anhand allowance-list

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Wegsuche von BEs anhand allowance-list (1250 mal gelesen)
hadebur
Mitglied


Sehen Sie sich das Profil von hadebur an!   Senden Sie eine Private Message an hadebur  Schreiben Sie einen Gästebucheintrag für hadebur

Beiträge: 4
Registriert: 30.06.2015

erstellt am: 30. Jun. 2015 18:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Szenario_04.zip

 
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


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 01. Jul. 2015 08:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hadebur 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von hadebur an!   Senden Sie eine Private Message an hadebur  Schreiben Sie einen Gästebucheintrag für hadebur

Beiträge: 4
Registriert: 30.06.2015

erstellt am: 01. Jul. 2015 19:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


frame.JPG


test_neu.JPG

 
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


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 02. Jul. 2015 08:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hadebur 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von hadebur an!   Senden Sie eine Private Message an hadebur  Schreiben Sie einen Gästebucheintrag für hadebur

Beiträge: 4
Registriert: 30.06.2015

erstellt am: 04. Jul. 2015 19:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Aber selbst wenn ich vor dem ersten Suchen den Zeiger auf 1,1 setze findet er nicht den gewünschten Wert, also kein true...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 06. Jul. 2015 12:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hadebur 10 Unities + Antwort hilfreich

welchen Datentyp hat Ihre Spalte?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

hadebur
Mitglied


Sehen Sie sich das Profil von hadebur an!   Senden Sie eine Private Message an hadebur  Schreiben Sie einen Gästebucheintrag für hadebur

Beiträge: 4
Registriert: 30.06.2015

erstellt am: 07. Jul. 2015 11:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz