Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Veralgemeinerung mit Laufvariable

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:  Veralgemeinerung mit Laufvariable (566 mal gelesen)
lilo123
Mitglied
studentin

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

Beiträge: 9
Registriert: 16.06.2008

erstellt am: 26. Jun. 2008 18: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

Hallo, ich hoffe hier hat jemand einen Tip für mich...

Ich habe eine Kommissionierstr. und in 3 verschiedenen Zonen (puffer, puffer1, puffer2) wird geprüft ob die in den Paletten hinterlegten Positionen mit den Positionen der Puffer übereinstimmen.

D.h es wird geprüft ob die Palette an dem Puffer stehen bleiben soll oder nicht.
Nun mein Programm funktioniert soweit, aber ich würde gerne die Pos1,Pos2 usw mit einer Laufvariable vereinfachen, z.B. i... aber wenn ich statt pos1 posi schreibe, bekomme ich die Fehlermeldung, dass posi unbekannt ist, obwohl i natürlich als Attribut hinterlegt ist...

Hier das Programm:

is
local i:integer;
do

        if Förderstrecke.inhalt.Pos1 = Puffer.Pos1
or Förderstrecke.inhalt.pos2 = Puffer.Pos1
or Förderstrecke.inhalt.pos3 = Puffer.pos1
then Förderstrecke.inhalt.umlagern(Puffer)


elseif Förderstrecke.inahlt.Pos1 = Puffer.pos2
or Förderstrecke.inhalt.pos2 = Puffer.pos2
or Förderstrecke.inhalt.pos3 = puffer.pos2
then Förderstreke.inhalt.umlagern(puffer)

elseif Förderstrecke.inhalt.pos1 = puffer.pos3
or Förderstrecke.inhalt.pos2 = puffer.pos3
or Förderstrecke.inhalt.pos3 = puffer.pos3
then Förderstrecke.inhalt.umlagern(puffer)

elseif puffer.voll = true
then Förderstrecke.inhalt.umlagern(Förderstrecke1)

else Förderstrecke.inahlt.umlagern(Förderstrecke1)
 
end;   
 
end;

Ich hoffe jemand hat eine Idee

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

anweser
Mitglied
student


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

Beiträge: 27
Registriert: 13.08.2006

erstellt am: 27. Jun. 2008 00:48    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 lilo123 10 Unities + Antwort hilfreich

hallo Lilo123,

wenn du statt Puffer, Puffer1, Puffer2 die Namen als Puffer1, Puffer2, Puffer3 vergibst, dann hilft dir dies weiter:

------*************-------------------
is i:integer;
i1: integer;
kon: boolean;
do
if @.pos1 = @.pos2 and @.pos2 = @.pos3 then
i:= @.pos1;
for i1:= 1 to 3 loop
kon:= execute(sprint(":boolean is do if ",i,"=Puffer",to_str(i1),".Pos",to_str(1)," then  return true; else return false; end; end; "));
if kon= true then
execute(sprint("is do if",to_str(@),".umlagern(Puffer",to_str(i1),") = false then",to_str(@),".umlagern(Förderstrecke1); end; end;"));
exitloop;
end;
next; 
else
@.umlagern(Förderstrecke1);
end;
end;
----------------***************


sonst, da du nur 3 Zustände hast dann kanst du auch so schreiben:
----------------***************
if @.pos1 = @.pos2 and @.pos2 = @.pos3 then
i:= @.pos1;
inspect i;
when 1 then
@.umlagern(Puffer);
when 2 then
@.umlagern(Puffer1);
when 3 then
@.umlagern(Puffer2);
end;
if @.buchpos = ? then
@.umlagern(Förderstrecke1);
end;
else
@.umlagern(Förderstrecke1);
end;
-------------------**********
Ich würde dagegen eine Tabelle anlegen mit 2 Spalten [obj,integer]. Die Tabelle nach Pos1 suchen und nach obj umlagern also so
------------------**********
is
do
if @.pos1 = @.pos2 and @.pos2= @.pos3 then
tabelle.setzeZeiger(0,0);
if Tabelle.finden({2,1}..{2,*},@.pos1) = true then
if @.umlagern(Tabelle[1,Tabelle.ZeigerY]) = false then
@.umlagern(Förderstrecke);
end;
else
@.umlagern(Förderstrecke);
end;
end;
----------------------*************

ich hoff es hilft weiter   


Zur Erklärung: Alles was mit .Modelle.Netzwerk.(...) zu tun hat wird einfach runter gelesen. d.h. .Modelle.Netzwerk.Puffer.posi muss auch eine Variable posi enthalten. (.Modelle.Netzwerk.Puffer.to_str("pos"+to_str(i)): hier sucht es nach Vaiable to_str)

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

lilo123
Mitglied
studentin

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

Beiträge: 9
Registriert: 16.06.2008

erstellt am: 03. Jul. 2008 10:30    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

Hallo, ich habe das Problem jetzt folgendermassen gelöst:


(SensorID : integer)
is
local i:integer;
 
do

for i:= 1 to förderstrecke.inhalt.position.yDim loop

......  if förderstrecke.inhalt.position[1,i]= 55001000

                  or förderstrecke.inhalt.position[1,i]= 55002000
  or förderstrecke.inhalt.position[1,i]=55002100
  or förderstrecke.inhalt.position[1,i]=55002200
            or förderstrecke.inhalt.position[1,i]=55003000

                and förderstrecke.inhalt.position[1,i]<1

                then förderstrecke.inhalt.umlagern(puffer)

        else förderstrecke.inhalt.umlagern(förderstrecke1)
        end;
next;
 
if puffer.belegt=true
then förderstrecke.inhalt.umlagern(förderstrecke1)
end;
 
end;


Allerdings bekomme ich manchmal die Fehlermeldung "Ein VOID kann keine Methode Position empfangen", in der Zeile mit den Pünktchen davor.

Hat jemand eine Idee was ich falch gemacht habe?

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

anweser
Mitglied
student


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

Beiträge: 27
Registriert: 13.08.2006

erstellt am: 03. Jul. 2008 19:02    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 lilo123 10 Unities + Antwort hilfreich

Hallo 

Deine For-Schleife läuft weiter, obwohl du schon das objekt umgelagert hattest (Also die Warnung, wird wahrscheinlich jedes mal rauskommen, wenn i beim umlagern /= Ydim ist).
Um das zu beheben, musst, nach erfolgreichen Umlagern die Methode ganz verlassen, also "Return;" oder
die for-schleife verlassen mit "exitloop;" werden.

Dann müsste es funktionieren.

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

lilo123
Mitglied
studentin

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

Beiträge: 9
Registriert: 16.06.2008

erstellt am: 03. Jul. 2008 21:50    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

Ja, darüber hab ich auch schon nachgedacht, aber ich verstehe nicht, die anderen beiden Methoden, die haargenauso aufgebaus einwandfrei funktionieren.

Wo muss denn das return oder exitloop dann hin in meine Schleife?
Vor dem letzten end? Denn sonst wird die Schleife ja nach dem ersten Durchlauf (also i=1) unterbrochen.

Besten Dank und Liebe Grüße,
Lilo

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

anweser
Mitglied
student


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

Beiträge: 27
Registriert: 13.08.2006

erstellt am: 04. Jul. 2008 11:05    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 lilo123 10 Unities + Antwort hilfreich

hallo lilo123,

Die Bedingung für das Verlassen lautet: "wenn ich umgelagert habe: beenden". also z.B.:  "then förderstrecke.inhalt.umlagern(puffer); exitloop;".

Zu frage wieso bei einer Methode nicht?: ""Allerdings bekomme ich manchmal die Fehlermeldung "Ein VOID kann keine Methode Position empfangen", in der Zeile mit den Pünktchen davor."" +  ""Ja, darüber hab ich auch schon nachgedacht, aber ich verstehe nicht, die anderen beiden Methoden, die haargenauso aufgebaus einwandfrei funktionieren.""
:= Meine Überlegung ging volgendermaßen, for-variablen Grenze wird nur einmal abgefragt: also das Produkt ist schon mal Drauf. Unter Punktchen verstehe ich die Erste Ziele in For-Schleife. Und da du die Schleife nicht aktiv beendest, aber den Inhalt der Tabelle von Be abfragst, ist nach einer gelungenen Umlagerung kein Be mehr drauf und es gibt, die von dir genannte Fehlermeldung. Am sonsten ist, soweit ich es beurteilen kann, die Methode so richtig.

Wieso jetzt die anderen zwei Methoden keine Fehlermeldung produzieren, kann ich so auf anhieb nicht beantworten. Hast du vielleicht schon den i Wert und Ydim bei der Umlagerung mal rausgeschrieben und gekuckt, wann umgelagert wird? Also wie Heufig läuft die for-Schleife unnötig weiter.

Viel Spaß 

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