Autor
|
Thema: Attribut-Methoden als Verweis zurückgeben (1384 mal gelesen)
|
aloetscher Mitglied Logistiksimulation
Beiträge: 10 Registriert: 03.06.2005
|
erstellt am: 05. Jul. 2005 10:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich habe ein Problem mit dem Zuweisen einer Attribut-Methode an einen Sensor per SimTalk. Der Befehl sieht dem Konzept nach folgendermassen aus: Weg.erzeugeSensor(10, "Absolut", ref(@.methTuEtwas), true, false); Das Problem ist nun, dass die Methode nicht wie erwartet als Referenz an den Sensor übergeben wird, sondern aufgerufen wird. Auch die folgenden Versionen haben nicht funktionert: - ref(@).methTuEtwas - @.methTuEtwas Vielleicht weiss jemand eine Lösung für dieses Problem. Vielen Dank schon im voraus. Adrian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Opa Mitglied Selbständiger Simulationsexperte
Beiträge: 62 Registriert: 16.06.2005 eM-Plant 7.6 / 8.2 Development License
|
erstellt am: 05. Jul. 2005 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für aloetscher
Hi, ich fürchte, das geht nicht. SimTalk meldet, dass der Pfad zur Methode kein gültiger Pfad sei, wenn man das direkt versucht: is s: string; o: object; do s:=to_str(@); s:=s+".Methode"; -- so heisst die Methode in den benutzerdefinierten Attributen print s; -- ".BEs.Fahrzeug:1.Methode" o:=str_to_obj(s); -- Fehlermeldung "'.BEs.Fahrzeug:1.Methode' ist kein gültiger Pfad." Weg.erzeugeSensor(4, "Laenge", o, true, false); end; Das ist auch im Fenster "Attribute und Methoden anzeigen" zu sehen. Da hat die Methode die Signatur VOID. Offensichtlich werden Methoden, die als bendef. Attribute angegeben sind, von eM-Plant gesondert behandelt. Aber warum machst Du das nicht so: Stelle die Methoden, die den BEs zugeordnet werden sollen, einfach in's Netzwerk. Gib dann dem BE die Stringvariable mit absolutem Pfad auf die jeweilige Methode mit. Dann kannst Du die Stringvariable mit dem absoluten Pfad mit str_to_obj() dem Sensor übergeben (s.o.). Die Methoden müssen ja nicht im BE stehen, es reicht ja, zu wissen, welche Methode gemeint ist. Sieht dann so aus: Einganssteuerung Weg: is o: object; do o:=str_to_obj(@.MethPfad); -- in MethPfad steht der Pfad zur Methode Weg.erzeugeSensor(4, "Laenge", o, true, false); end; Gruß [Diese Nachricht wurde von Opa am 05. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aloetscher Mitglied Logistiksimulation
Beiträge: 10 Registriert: 03.06.2005
|
erstellt am: 05. Jul. 2005 13:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Opa Vielen Dank für Deine schnelle Antwort. Ich habe das Problem nun mit deiner Beschreibung lösen können, indem ich - eine Methode für den Sensor in das Netzwerk eingebaut habe - in dieser Methode rufe ich dann meine gewünschte Methode @.methTuEtwas auf So habe ich nun nicht viele Änderungen in den Methoden anbringen müssen und bin nur ein wenig vom objektorientierten Ansatz abgekommen. Nochmals vielen Dank und Gruss, Adrian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Opa Mitglied Selbständiger Simulationsexperte
Beiträge: 62 Registriert: 16.06.2005 eM-Plant 7.6 / 8.2 Development License
|
erstellt am: 05. Jul. 2005 21:34 <-- editieren / zitieren --> Unities abgeben: Nur für aloetscher
Danke für die Blumen Dazu noch eine Bemerkung: Ich arbeite nie mit den in den Attributen hinterlegten Methoden, weil 1. Man muss so viel klicken, bis man an die Methode drankommt. 2. Wie man im vorliegenden Fall sieht, ist das auch manchmal problematisch, damit zu arbeiten. 3. Ehrlich gesagt habe ich auch nie verstanden, wozu das eigentlich gut sein soll, eine Methode im Objekt zu "verstecken". Vielleicht kann mir ja jemand sagen (Simulator?), wann das was bringt, die Methode als Attribut zu definieren? Würde mich echt interessieren, ob es Fälle gibt, in denen das von Vorteil ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 05. Jul. 2005 23:29 <-- editieren / zitieren -->
Hi, es gab mal jemand, der fand es ganz praktisch. s. http://ww3.cad.de/foren/ubb/Forum262/HTML/000048.shtml Hiermit kann der Anwender die Funktionalität der Bausteine (mittels Methoden) selber erweitern. Geht eigentlich genauso ueber die Netze wie Du schon beschrieben hast. Man kann aber hiermit die selbstdefinierten Methoden wie die festimplementierten Bausteinmethoden aufrufen. Geht auch ueber Netzemodelle. Der Methodenaufruf ist aber vermutlich etwas aufwendiger. Der Eingabeaufwand ueber Netze ist auch meiner Meinung nach, weniger aufwendig. Gruss ------------------ DER SIMULATOR
[Diese Nachricht wurde von Simulator am 05. Jul. 2005 editiert.] |
Homer Simpson Mitglied
Beiträge: 345 Registriert: 14.09.2005
|
erstellt am: 14. Sep. 2005 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für aloetscher
Manchmal kann man kein Netzwerk verwenden, in die man die Methode einsetzen könnte, z.B. bei BEs. So könnte man beispielsweise unterschiedlichen BE-Klassen eine Attributmethode namens "starteArbeit" geben, die man aufruft, sobald ein BE die Station betritt. Das BE kann dann unterschiedlich reagieren, wenn man die Methoden anders implementiert. Die Möglichkeit, dass Objekte unterschiedlich auf eine Methode reagieren können, ist eine zentrale Eigenschaft der Objektorientierung. Man nennt dies übrigens Polymorphie. Jetzt wäre es nur noch schön, wenn man die fest eingebauten Standardmethoden überdefinieren könnte. Eine Kleinigkeit am Rande: Wird in eM-Plant 7.5 eine Attributmethode namens "tooltip" angelegt, so wird sie aufgerufen, wenn man den Mauszeiger auf das Objekt bewegt. Der Rückgabewert der Methode wird als Tooltip angezeigt. So kann man z.B. schnell wichtige Werte anzeigen, beispielsweise einen Statistikwert, das Ziel eines Fahrzeugs, den Dienst eines Werkers und so weiter. Wenn man einen String zurückgibt, kann man sogar einen mehrzeiligen Tooltip erzeugen, z.B. mittels "return sprint(?.numIn, chr(10), ?.numOut);". Man sollte in einer solchen Methode aber keinesfalls den Modellzustand ändern... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|