Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Frage zur Ablaufsteuerung allgemein in eM-Plant

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:  Frage zur Ablaufsteuerung allgemein in eM-Plant (2033 mal gelesen)
bibo234
Mitglied
Student


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

Beiträge: 25
Registriert: 08.03.2005

erstellt am: 02. Mai. 2005 18:28    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 liebes Board,

also ich stehe wiedereinaml vor einem riesigen Problem. Und zwar will ich in der Init-Methode einer selbst erstellten Klasse eine zweite Methode aufrufen, die immer in bestimmten Zeitabständen wieder aktiv werden soll, dazu habe ich in der zweiten Methode eine Endlosschleife eingebaut, die nur eine Void-Methode ist ohne Rückgabewert, und die nur zu bestimmten Zeiten aktiv wird und sich dann wieder suspendiert mit waituntil. Nun habe ich allerdings das Problem, daß die Init-Methode die diese Endlosschleifenmethode aufruft nie terminiert bzw. nie die auf den Aufruf der Endlosschleifenmethode folgenden Anweisungen je abarbeitet. Nun habe ich die Frage ob das außer mit einem Generator (wenn es damit überhaupt möglich ist, in jedem Falle ist es schwierig diesem die für die Zeitsteuerung notwendigen Parameter mitzugeben) mit irgendwelchen Programmierkonstrukten möglich ist, daß diese Void-Methode einfach aufgerufen wird und dann ohne zu warten auf eine Antwort die nächsten Anweisungen abgearbeitet werden, die ja ohnehin nicht vorgesehen ist wie es auch in anderen OO-Sprachen möglich ist.


vielen lieben Dank für eure Hilfe im Voraus,
Christian

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


Ex-Mitglied

erstellt am: 02. Mai. 2005 20:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

versuchs mal ganz einfach mit:

ref(methode).methaufr(0,<übergabeparameter1,übergabeparameter2,...> );

in Deiner init-Methode

Gruss

------------------
DER SIMULATOR 

bibo234
Mitglied
Student


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

Beiträge: 25
Registriert: 08.03.2005

erstellt am: 02. Mai. 2005 21:46    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, erstmal vielen Dank für deine Hilfe Simulator, das könnte auch der Weg sein der mich  an mein Ziel bringt, aber bei mir tritt daraufhin der Fehler auf: Ereignisverwalter zum Einordnen des Ereignisses fehlt, habe deswegen auch schon nachgeschaut aber nichts Brauchbares gefunden. Außerdem habe ich festgestellt daß meine Endlosschleifenkonstruktion irgendwie zu den falschen Zeitpunkten aufgerufen wird:

from
    until false  
    loop
    nächste_zeit := self.~.Ereignisverwalter.Zeit + 3600 ;
    waituntil aufrufer.~.Ereignisverwalter.Zeit >= nächste_zeit - 1 prio 1;
tueirgendwas;
        print(zeit); --Pseudocode
end;

wobei dann Zeiten ausgegeben werden wie 1:30:00.0000, 3:00:00.0000, 4:00:00.0000 also auch mit völlig unterschiedlichen Abständen, und nun die Frage ob das an irgendwelchen Einstellungen liegt (Zeitgranularitäten o.ä.) oder an der Methode selbst oder oder oder.

wäre sehr nett wenn du auch auf diese 2 Probleme eine Antwort hast
viele Grüße,
Christian

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


Ex-Mitglied

erstellt am: 02. Mai. 2005 23:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


methaufr.JPG

 
Hi,

das könnnte nicht nur - das ist der Weg der Dich ans Ziel bringen wird!

Die Frage habe ich übrigens erwartet.

Die ereignisortientierten Simulationsmodelle brauchen natürlich einen Ereignisverwalter der die Ereignisse chronologisch verwaltet.

Ohne Ereignisverwalter wird wohl auch Dein Simulationsmodell nicht laufen oder ?

Wobei da fallen mir so seltsame Befehle auf, wie:

"self.~.Ereignisverwalter.Zeit"
"waituntil aufrufer.~.Ereignisverwalter.Zeit >= nächste_zeit - 1"

was ist denn der Unterschied zwischen   "aufrufer.~.ereignisverwalter.zeit"  und "self.~.Ereignisverwalter.Zeit" ????

Raus damit!

So funktiontierst mit Ereignisverwalter (siehe Anhang)

Das ganze gibt´s natürlich auch in einer Variante ohne Ereignisverwalter nämlich mit :
ref(methode).neueaufrufkette.

Gruss

------------------
DER SIMULATOR   

[Diese Nachricht wurde von Simulator am 02. Mai. 2005 editiert.]

bibo234
Mitglied
Student


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

Beiträge: 25
Registriert: 08.03.2005

erstellt am: 03. Mai. 2005 00:29    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

Vielen, vielen Dank erstmal für die sehr flinke Antwort, mein Betreuer wird froh sein, daß es dich gibt, sonst müßte ich ihn ja immerzu mit solchen Implementierungsdetails quälen *g*,

Zitat:
Original erstellt von Simulator:
"self.~.Ereignisverwalter.Zeit"
"waituntil aufrufer.~.Ereignisverwalter.Zeit >= nächste_zeit - 1"

was ist denn der Unterschied zwischen   "aufrufer.~.ereignisverwalter.zeit"  und "self.~.Ereignisverwalter.Zeit" ????
[/B]


also das aufrufer ist nur ein Zeiger auf das die Methode aufrufende Objekt, den ich immer mitschleifen will, um das ganze dem Visitor-Design-Pattern ähnlich nachzuempfinden (was ich aber vergessen hatte zu ändern), das self.~ sagt aus daß die Methode in der dieser Schnipsel aufgerufen wird, sich leider in einer Unternetzwerk des Modelles befindet und daher habe ich auch das Problem mit dem Ereignisverwalter, der sich auf der übergeordneten Ebene befindet habe, daher habe ich das Problem immernoch, aber ich versuche es gerade zu umgehen indem ich den Methodenaufruf auf die oberste Ebene in die Init-Methode schreibe, aber da tritt derselbe Fehler wieder auf obwohl die aufrufende Methode nun in der gleichen Ebene ist, allerdings die aufgerufene Methode ist unter .Informationsfluss.aufgerufeneMethode zu finden, vielleicht ist ja gerade das das Problem; aber ich versuche noch die Variante ohne Ereignisverwalter obwohl ich ja nun ohnehin einen in meinem Modell habe um das ganze überhaupt starten zu können, aber es scheint primazu funktionieren mit ref(methode).neueAufrufkette(übergabeparameter);

Danke vielmals für diesen sehr guten Hinweis !!
Nun habe ich, zumindest vorerst, nur noch das Problem, daß aus irgendeinem Grunde die Endlosschleifen mit dem Waituntil nicht alle 3600 s durchläuft sondern auch ab und zu mal 5400 s und 4500 s, nur warum könnte er das nur tun ?

Liebe Grüße Simulator,
Christian

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


Ex-Mitglied

erstellt am: 03. Mai. 2005 12:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

den Ereignisverwalter kann man (ohne Pfad) innerhalb der Netzhierarchie ueberall aufrufen !

Die von init aufgerufene Methode sollte dann schon innerhalb der Netzhierarchie und nicht in der Klassenbibliothek liegen.

Ich vermute aber, das hast Du schon selber herausbekommen oder ?

Wenn mit Ereignisverwalter, dann
ref(methode).methaufr(0,<übergabeparameter1,übergabeparameter2,...> );

Die Methode wird dann chronologisch abgearbeitet. (siehe hierzu Online-Hilfe)

ref(methode).neueaufrufkette  wartet mit der Abarbeitung.

Gruss

------------------
DER SIMULATOR  

[Diese Nachricht wurde von Simulator am 03. Mai. 2005 editiert.]


Ex-Mitglied

erstellt am: 05. Mai. 2005 09:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


methaufr02.JPG

 
Hi,

hier noch eine Variante -ohne Endlos-Schleife - vielleicht noch etwas einfacher.

Gruss

------------------
DER SIMULATOR 

bibo234
Mitglied
Student


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

Beiträge: 25
Registriert: 08.03.2005

erstellt am: 19. Mai. 2005 23:44    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

Nochmals vielen Dank für die hilfreichen Hinweise ,

ich gebe zu, ich bin ein bißchen spät dran, zwischenzeitlich hat mich mein Betreuer auch ein bißchen beschäftigen können mit kleineren Problemchen.
Zwischenzeitlich bin ich auch darauf gekommen eigentlich alle Methodenaufrufe die man regelmäßig machen will halt immer am Ende einer Methode sich dann selbst wieder in die zukünftige Ereigniskette einzureihen (wie das auch in anderen Simulationssprachen wie GPSS intern gemacht wird).

Liebe Grüße,
Christian

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