Autor
|
Thema: Problem mit ? und @ (2073 mal gelesen)
|
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 13. Feb. 2009 14:08 <-- editieren / zitieren --> Unities abgeben:
/*Hallo, ich bin langsam am verzweifeln. Irgendwie klappt daws mit ? oder @ bei mir nie. Ich habe eine Förderstrecke47 mit Sensor. Eine BE auf einem WT ruft am Sensor meine Mehode auf. Diese Methode soll einen Pufferbestand prüfen und die Typen der Inhalte der WT zählen. Code: */ is etyp,gtyp : string; i,j,k,l,m,x,y : integer; do x:=Netzwerk.Puffer.AnzahlBEs; m:=0; k:=0; l:=0; if x > 0 then for i := 1 to x loop gtyp := Netzwerk.Puffer.BEStueck(i).typ; -- Zeile 15 if gtyp = "a" then m := m+1; end; if gtyp = "b" then k := k+1; end; if gtyp = "c" then l := l+1; end; next; end; print "PufferBestand: EGW1= ",k,"; EGW2= ",l,"; EGW3= ",m; /*[...]
Soweit macht der Debugger alles, bis er bei i=x angekommen ist. Dann gibt er die Fehlermeldung: Fehler in Methode in Zeile '15': Unbekannter Name typ Zeile 15 ist die, wo 'gtyp' gesetzt wird. Das passiert auch wenn ich die Simulation laufen lasse und eine WT mit BE die Methode startet. Keine Ahnung warum und wieso das so ist, wo es doch für i<x funktioniert. Danach will ich mit den gezählten Typen auf den Variablen k,l,m gespeichert den Typ der aufrufenden BE vergleichen, um zu wissen ob diese BE in den Puffer abgeladen werden darf oder der WT mit BE in eine Warteschleife fahren muss. Code: */ print @.inhalt.typ; /*
Damit wollte ich den Typ in der Konsole anzeigen lassen. Jetzt soll die BE vom WT entweder in den Puffer oder in eine Warteschleife fahren.
Code: */ etyp := @.inhalt.typ; if etyp = "a" then if m=0 then ?.inhalt.move(Netzwerk.Puffer); end; if k = 0 and (m+l) >= j then ?.umlagern(Förderstrecke48); end; if l = 0 and (m+k) >= j then ?.umlagern(Förderstrecke48); end; ?.inhalt.move(Netzwerk.Puffer); end; /*[...]*/ end;
/* Ich hab die Methdoe Stück für Stück aufgebaut und von ganz einfachen umlagern in den Puffer bis hierher programmiert. Vorher hat es fast immer mit @ oder ? als Bezeichner geklappt. jetzt gibt es egal wo ich ? oder @ einsetze immer Fehlermeldungen: Fehler in Methode in Zeile ... : Unbekannter Name typSagt mir bitte was ich falsch mache. Gruß tauli */ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pom Mitglied Dipl.-Ing. (FH)
Beiträge: 182 Registriert: 25.08.2006
|
erstellt am: 13. Feb. 2009 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für tauli
Hi, ist das Attribut Typ im WT oder im BE hinterlegt? Weil der Befehl
Code:
Netzwerk.Puffer.BEStueck(i).typ
nur das WT betrachtet und nicht den Inhalt.Code:
Netzwerk.Puffer.BEStueck(i).inhalt.typ
könnte dann die Lösung sein. MFG Patrick
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 16. Feb. 2009 08:40 <-- editieren / zitieren --> Unities abgeben:
Im Puffer liegen nur die BE als BEStueck(i). Das Attribut ist dem BE zugeordnet. Unabhängig davon kommt die Fehlermeldung wenn ich im Puffer und auf der Föderstrecke am Sensor das Attribut der BE meiner Variablen übergeben will. Nur zum Verständnis: Wenn ein WT mit BE an einem Sensor aufläuft, ruft er doch die Methode auf die am Sensor hinterlegt ist. Dann kann ich doch mit '?.inhalt.typ' auf das Attribut der BE zugreifen, weil das '?' auf das Objekt in dem Fall WT verweist was die Methode aufgerufen hat. Der Inhalt wäre dann die BE und der Typ mein Attribut. Oder ist die Förderstrecke das aufrufende Objekt? Dann muss ich ja '?.inhalt.inhalt.typ' schreiben. Dann verwirrt die Hilfe aber, bzw. die Erklärung zum '?'. Ich versuch das mal so und bleibe weiter beim '?' als Bezeichner, '@' ist immer falsch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der simulant Mitglied
Beiträge: 71 Registriert: 28.02.2007 ----------- der simulant
|
erstellt am: 16. Feb. 2009 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für tauli
Hallo tauli, zu Deinem Problem mit ? und @ steht in der Hilfe eigentlich alles drin. Hilfe ? - in SimTalk und @ - in Sim Talk. ? bezieht sich immer auf das Materialflussobject (SingleProc,... oder Methode) und das @ bezieht sich auf das bewegliche Element (BE) Ich hoffe das hilft Dir weiter Gruß der simulant Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 18. Feb. 2009 13:03 <-- editieren / zitieren --> Unities abgeben:
Ok soweit klar. Dann ist in meinem Fall ja:
Code:
Förderstrecke.inhalt.inhalt.typ = ?.inhalt.inhalt.typ = @.inhalt.typ
wenn ein Sensor auf einer Förderstrecke den Inhalt eines WT und das Attribut des BEs überprüfen soll.Förderstrecke.inhalt. -- bezieht sich dann auf den Inhalt, sprich WT Förderstrecke.inhalt.inhalt. -- bezieht sich dann auf den Inhalt des WT sprich BE Förderstrecke.inhalt.inhalt.typ -- bezieht sich dann auf das Attribut Typ des BE ?.inhalt. -- bezieht sich auch auf den Inhalt der Förderstrecke ?.inhalt.inhalt. -- bezieht sich dann auf das BE ?.inhalt.inhalt.typ -- bezieht sich dann auf das Attribut Typ des BE @. -- bezieht sich auf den WT @.inhalt. -- bezieht sich das BE @.inhalt.typ -- bezieht sich dann auf das Attribut Typ Bei allen drei Schreibweisen erhalte ich das Attribut der BE auf dem WT das am Sensor der Förderstrecke die MEthode aufgerufen hat. Oder wie? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pom Mitglied Dipl.-Ing. (FH)
Beiträge: 182 Registriert: 25.08.2006
|
erstellt am: 19. Feb. 2009 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für tauli
Grundsätzlich nein. Weil mit ?.Inhalt der Inhalt des Objektes angesprochen wird und nicht das BE welches die Methode ausgeführt hat. Dies kann, wenn nur ein BE im Objekt vorhanden ist, sich gleich wie @ verhalten. Auf einer Förderstrecke aber befinden sich meist meherer BEs, weshalb ?.Inhalt nur das erste BE auf der Förderstrecke anspricht. Es Hilft immer ein einfaches Modell zu erstellen, welches nur das Problem beinhaltet. Sieh Bild. Grüße Patrick [Diese Nachricht wurde von pom am 19. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 19. Feb. 2009 09:33 <-- editieren / zitieren --> Unities abgeben:
Danke das bestätigt mich. Also das was du da aufgebaut hast, hab ich auch gemacht. Mit print teste ich immer in der Console ob meine Codes richtig sind. Und wenn ich das oben als Print-Anweisung in der Console ausgeben lasse, muss man sagen grundsätzlich JA. '@.inhalt' gibt das gleiche aus wie '?.inhalt.inhalt'. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pom Mitglied Dipl.-Ing. (FH)
Beiträge: 182 Registriert: 25.08.2006
|
erstellt am: 20. Feb. 2009 06:54 <-- editieren / zitieren --> Unities abgeben: Nur für tauli
|
tauli Mitglied Student
Beiträge: 23 Registriert: 28.01.2009
|
erstellt am: 20. Feb. 2009 08:00 <-- editieren / zitieren --> Unities abgeben:
Aha ok. Ich bin davon ausgegangen das ? auf die Einheit zugreift die sich gerade am Sensor befindet und die Methode damit ausgelöst hat. Also muss ich die Einschränkung haben das maximal eine BE auf die Förderstrecke passt. Bei Stationen, wo nur eine Einheit draufpasst geht es dann immer? Danke tauli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pom Mitglied Dipl.-Ing. (FH)
Beiträge: 182 Registriert: 25.08.2006
|
erstellt am: 20. Feb. 2009 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für tauli
Aus diesem Grund gibt es @. @ spricht immer das BE an welches die MEthode aufruft bzw. auslöst. Bei einer Einzelstation kann ? ggf. Void sein wenn die Methode im Heck ausgeführt wird. Da das BE zum Zeitpunkt der Ausführung die Station bereits verlassen hat, auch dort würde man ehr mit @ arbeiten. Grüße Patrick
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |