Autor
|
Thema: Globale Methode in SimTalk für Anzahl aktiver eM-Plant Instanzen? (1075 mal gelesen)
|
Pattex Mitglied
Beiträge: 19 Registriert: 10.01.2007 eM-Plant 7.5 unter Win XP
|
erstellt am: 04. Jan. 2008 22:16 <-- editieren / zitieren --> Unities abgeben:
Hallo und erstmal ein gutes neues Jahr zusammen! Folgendes Problem: Es ist ja möglich, mehrere Instanzen von eM-Plant 7.5 gleichzeitig auf einem Rechner zu öffnen und laufen zu lassen. Genau das möchte ich verhindern - eM-Plant bzw. das Modell XY darf gleichzeitig immer nur 1x aktiv sein. Dazu habe ich mir Folgendes überlegt: Mittels einer AutoExec-Methode möchte ich: 1. abfragen, wie oft eM-Plant oder das Modell XY aktuell auf dem Rechner ausgeführt wird (1x,2x,...). -->Dazu habe ich jedoch noch keine Methode in SimTalk gefunden, die genau das macht!!! 2. Wenn der Rückgabewert > 1 ist, dann soll eM-Plant beendet werden. Kennt jemand eine solche Methode oder hat einen anderen Lösungsvorschlag? Für Tipps bin ich jederzeit dankbar!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 05. Jan. 2008 03:05 <-- editieren / zitieren -->
nun Pattex, was willst Du gerade ? Erwartest Du, dass die (in meinen Augen) 3-4 erfahrenen Nutzer in diesem Forum Dir jetzt Deine nicht zu Ende gedachten eigenen Vorstellungen fuer Dich zu Ende denken ? So ist es wohl ! Beschreibe doch mal die eigentliche Aufgabenstellung und versuche nicht jemanden aus diesem Forum vor Deinen eigenen gedanklich eingeschränkten Karren zu spannen! Das ist nicht mein Sinn dieses Forums ! ------------------ Der Simulator
[Diese Nachricht wurde von Simulator am 05. Jan. 2008 editiert.] |
Pattex Mitglied
Beiträge: 19 Registriert: 10.01.2007 eM-Plant 7.5 unter Win XP
|
erstellt am: 05. Jan. 2008 13:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Simulator, Das ist die Aufgabenstellung: Ich habe ein Modell erstellt, das permanent überwacht, ob in einem Quell-Verzeichnis neue Input-Daten vorliegen, diese dann einliest, eine Optimierung durchführt und die Output-Daten in ein Ziel-Verzeichnis schreibt. Nun habe ich beobachtet, dass es vorkommt, dass das Modell von den Benutzern mehrmals gleichzeitig geöffnet wurde. Es sind dann mehrere identische Modelle gleichzeitig aktiv, die diese Funktion erfüllen, was daraufhin zu Problemen führt. Dies möchte ich verhindern - es darf max. immer nur 1 Modell geöffnet werden. Und nun wieder zu meiner Frage: Gibt es eine globale Methode in SimTalk, mit der ich abfragen kann, wie oft eM-Plant oder das Modell aktuell geöffnet ist? Ich habe intensiv in der eM-Plant Hilfe nach so einer Methode gesucht, habe jedoch nichts gefunden, was mir bei diesem Problem weiterhilft. Nobody is perfect, vielleicht kennt jemand im Forum eine solche Methode? Daher wende ich mich an das Forum. Ich beabsichtige NICHT, irgendwen vor irgendeinen Karren zu spannen!!! Viele Grüße, Pattex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Homer Simpson Mitglied
Beiträge: 345 Registriert: 14.09.2005
|
erstellt am: 05. Jan. 2008 17:38 <-- editieren / zitieren --> Unities abgeben: Nur für Pattex
Meines Wissens gibt es keine einfache Möglichkeit dieses Problem zu lösen. Ich könnte mir aber vorstellen, dass folgender Ansatz funktioniert: Man lege eine Datei an, z.B. C:\TEMP\semaphore.txt, die in einer autoexec-Methode zum Schreiben geöffnet wird. Wird das Modell geschlossen, so sollte (theoretisch) auch automatisch die Datei geschlossen werden. Wird das Modell ein zweites Mal geöffnet und die autoexec-Methode ausgeführt, so müsste das Öffnen der Datei fehlschlagen, da sie ja bereits zum Schreiben geöffnet wurde. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 05. Jan. 2008 19:09 <-- editieren / zitieren -->
@ Homer Simpson das hatte ich auch gedacht, aber Du kannst via "dateischnittstelle.oeffnen" von verschiedenen eMPlant-Instanzen quasi gleichzeitig auf eine Datei zugreifen bzw. schreiben. Habs ausprobiert Weitere Idee war via initDDE(servername) =(true/false) herauszufinden ob ein bestimmter eMPlant-Prozess läuft. Hat allerdings auch nicht funktioniert. @Pattex hier eine Methode, mit der Du die Anzahl der Tune-Prozesse abfragen kannst is str :string; i :integer; do ds.schliessen; -- = dateischnittstelle str:=sprint("tasklist /fi \"imagename eq Tune.exe\" /nh /fo csv | find /c \"Tune.exe\" >", ds.dateiname); -- print str; print system (str); ds.oeffnen; i:=str_to_num(ds.lesezeile); ds.schliessen; if i<=1 then print "IO"; else print sprint("es sind",i, "eMPlant-Anwendungen ","geöffnet"); end; end;
------------------ Der Simulator |
Pattex Mitglied
Beiträge: 19 Registriert: 10.01.2007 eM-Plant 7.5 unter Win XP
|
erstellt am: 06. Jan. 2008 12:59 <-- editieren / zitieren --> Unities abgeben:
@ Homer Simpson & Simulator: SUPER! Funktioniert genau so, wie es soll. Vielen Dank für die schnelle Lösung meines Problems!!! @ Simulator: Nur für mich als DOS-Laien zum Verständnis: "str:=sprint("tasklist /fi \"imagename eq Tune.exe\" /nh /fo csv | find /c \"Tune.exe\" >", ds.dateiname);" str ist der DOS-Befehl, der dann mit "system (str);" ausgeführt wird.
Was genau macht dieser DOS-Befehl? Soweit ich das nachvollziehen kann, sucht er in der Taskliste des Task-Managers nach dem Prozess Tune.exe (eM-Plant) und dann? Egal wieviele eM-Plant Instanzen ich öffne, erhalte ich für "print system (str);" immer den Wert 0. Nochmals vielen Dank und viele Grüße, Pattex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 06. Jan. 2008 14:46 <-- editieren / zitieren -->
@ Zitat:
str:=sprint("tasklist /fi \"imagename eq Tune.exe\" /nh /fo csv | find /c \"Tune.exe\" >", ds.dateiname);"
Tasklist : druckt Prozessliste /fi "imagename eq Tune.exe" : filter um Tune-Abb. zu drucken (filter) /nh : drucken ohne Spaltenkopf (no header) /fo CSV : im csv -Format (format), (obsolet) | find /c "tune.exe" : stream nach find um Anzahl der "tune"-Zeilen zu bestimmen > ds.dateiname : stream nach Dateischnittstelle print system (str) gibt den Ausführungsstatus (exitcode) des str-Befehls zurück. 0 = IO ; > 0 = anderer Status. Es hat also nichts mit der Anzahl der Tune-Prozesse zu tun. Die Anzahl wird in der vorgegebenen Datei gespeichert und nicht als exitcode des Prozesses. ------------------ Der Simulator [Diese Nachricht wurde von Simulator am 07. Jan. 2008 editiert.] |
Pattex Mitglied
Beiträge: 19 Registriert: 10.01.2007 eM-Plant 7.5 unter Win XP
|
erstellt am: 06. Jan. 2008 16:47 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|