Autor
|
Thema: Makroausführung testen (1613 mal gelesen)
|
Helmut Steeg Mitglied Programmierer
Beiträge: 19 Registriert: 30.05.2007 Catia V5R16
|
erstellt am: 26. Sep. 2007 15:58 <-- editieren / zitieren --> Unities abgeben:
sodele, ich bins mal wieder Besteht eine Möglichkeit zu testen, ob im geöffneten Catia aktuell gerade ein Makro ausgeführt wird? Ich habe das Problem, das ich ein Formular mit einer Liste von Skripten habe, die ich von dort aus starte. Wenn mir allerdings ein Benutzer wild drin rumklickt (oder in Anwender-deutsch sagt 'ich hab bloss probiert, wie das geht'), bleibt ab und zu das CATIA stehen. Diese Stelle ist auch nicht wirklich das grosse Problem, da ich im Click-Ereignis der Listbox vor der Ausführung die Listbox deaktiviere und danach wieder einschalten kann. Wenn der Benutzer allerdings das Formular schliesst und danach wieder öffnet, weiss ich nicht, ob gerade ein Makro ausgeführt wird und der Benutzer kann daher unter Umständen ein Makro doppelt ausführen und Catia rennt mir wieder in die Ewigen Chipgründe. Die Idee wäre jetzt, beim Öffnen des Formulars Catia zu checken, ob gerade ein Makro läuft und dann auf das Ende der Ausführung warten. Gefunden hab ich in der Hinsicht leider nichts. Ausgeführt werden die Skripte via SystemService.ExecuteSkript() Catia Version V5R16 OS: Windows Sprache: VB/VBA oder C#, egal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 26. Sep. 2007 19:31 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Hallo, im Grunde arbeitet V5 diesbezüglich wie ein Schachspiel: Es kann immer nunr einer einen Zug machen. Will sagen: Wenn V5 gerade ein Makro ausführt, kann der User nixhts anderes in V5 machen. Man kann in V5 keine parallelen Prozesse laufen lassen. Die Gefahr besteht somit eher darin, dass bei mehrmaligen Betätigen des Makros auch das Makro mehrmals hintereinander ausgeführt wird. Daher wird sich v5 verbabschieden. Hier hilft nur eine konsequente Fehlerroutine. SG Jens Hansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Helmut Steeg Mitglied Programmierer
Beiträge: 19 Registriert: 30.05.2007 Catia V5R16
|
erstellt am: 27. Sep. 2007 13:05 <-- editieren / zitieren --> Unities abgeben:
Ja, das mit der Doppelausführung ist klar. Das hab ich auch schon größtenteils verhindert (bis auf eben das Problem mit dem Formular schliessen und neu öffnen). Das Problem ist eher, kann ich irgendwie feststellen, ob gerade ein Makro läuft? im SystemService-Objekt kann ich ja ein Skript/Prozess starten, aber ich seh nichts zum Checken ob gerade etwas ausgeführt wird. Wenn das möglich wäre, wäre mein Problem gelöst und die Benutzer könnten wild rumklicken, wie sie gerade lustig sind und ich bin trotzdem noch sicher, das CATIA weiterhin funktioniert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 27. Sep. 2007 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Hm.. soweit aber mein Verständnis reicht, kann doch während der Ausführung des Makros kein anderer Befehl - auch kein anderes Makro - ausgeführt werden. Demnach kann der User rein theoretisch auch nichts wildes anklicken; oder liege ich da komplett falsch ?? SG Jens Hansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Helmut Steeg Mitglied Programmierer
Beiträge: 19 Registriert: 30.05.2007 Catia V5R16
|
erstellt am: 27. Sep. 2007 13:38 <-- editieren / zitieren --> Unities abgeben:
Doch, ich hab festgestellt, das es geht - aber CATIA fängt dann entweder an zu würfeln oder es bleibt irgendwo stehen und man muss den CNEXT-Prozess erschiessen Ich habe wie gesagt, eine Listbox in einem VBA-Formular, in dem ich Skriptaufrufe per Doppelklick ausführe. Wenn ein Benutzer jetzt hergeht, ein Skript startet - welches dann z.B. bei einem Selection.SelectElement2() wartet - und sofort entweder das gleiche Skript oder ein anderes neu startet, platzt alles Aber ich kann direkt vor dem SystemService.ExecuteScript() Aufruf die Listbox abschalten und danach wieder einschalten, dann ist das Problem nicht mehr existent. Ich würde jetzt gerne beim Öffnen des Formulars prüfen, ob gerade ein Skript ausgeführt wird - also das Formular "benutzersicher" machen. Gruss, Helmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 27. Sep. 2007 14:44 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Hm ... sieht schlecht aus Als Ausweg würde mir einfallen, einen Paramter im Part zu erzeugen und diesem einen Wert geben. Wenn das Formular ausgeführt wird könnte der Parameter abgefragt und ausgelesen werden.... nur so als Idee. Viel Erfolg Jens Hansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bobby_Joe2001 Mitglied Konstrukteur
Beiträge: 81 Registriert: 15.01.2006
|
erstellt am: 27. Sep. 2007 19:10 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Hallo, das mit dem Parameter erstellen wird wahrscheinlich auch nicht funktionieren, da ja dann CATIA schon wieder angesprochen wird. Da würd ich mir lieber irgendwo ne Datei anlegen (Home, Temp?!) und nach der Skriptausführung löschen. Nur dann besteht das Problem, dass du nicht festellen kannst ob ein Skript läuft oder vielleicht unterbrochen wurde und die Datei noch existiert. Viele Grüße ------------------ Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen. Konrad Adenauer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Helmut Steeg Mitglied Programmierer
Beiträge: 19 Registriert: 30.05.2007 Catia V5R16
|
erstellt am: 27. Sep. 2007 19:15 <-- editieren / zitieren --> Unities abgeben:
|
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 28. Sep. 2007 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Hallo, wenn das Problem lediglich die nicht zu kontrollierenden Finger des Users sind prbiere es doch einmal damit: Catia.Interactive = False Dann kann der User klicken wie ein Weltmeister: Catia reagiert nicht mehr. Am Ende wieder ein Catia.Interactive = True und weiter gehts. Lediglich ein Errorhandling muss du noch einbauen: wenn das Makro abbricht oder sich aufhängt muss du gewährleisten, das Catiawieder ansprechbar ist. Sonst bleibt nur noch das Kill im Task... Gruß TotmTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 28. Sep. 2007 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Die Idee mit Interactive=False hatte ich auch aber leider sieht es so aus, dass zwar die Symbolleisten inativ sind, allerdings die Menüeinträge weiterhin verfügbar sind; Datei öffnen und sowas ist demnach weiterhin möglich. SG Jens Hansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bobby_Joe2001 Mitglied Konstrukteur
Beiträge: 81 Registriert: 15.01.2006
|
erstellt am: 28. Sep. 2007 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Steeg
Zitat: Original erstellt von Helmut Steeg: Ja, und das Problem ist zusätzlich, das ich in fremde Skripte eventuell nichts einbauen kann, weil die obfuskiert sind... naja, muss ich halt mit 75% leben statt 100%
Hi, du kannst ja ein Zwischenskript bauen, dass das "Richtige" aufruft und nur diese Datei erstellt. Dieses "vorgeschaltete" Skript wartet dann bis das andere beendet ist und kann so gut wie nie abstürzen, weil es ja nicht viel mehr macht als eine Datei vor Beginn anzulegen und hinterher zu löschen. Stürzt dein "richtiges" Skript ab, kriegt dein "vorgeschaltetes" Skript einen Fehler, den du mit Err abfängst. In die Datei, die du vor der Ausführung des "richtigen" Skripts erstellst schreibst du den Namen vom Makro und Datum+Uhrzeit wanns gestartet wurde. Wenn der User noch ein Makro starten will dann prüfst du, ob die Datei existiert und brichst ab falls sie da ist. Bzw. lässt nach einer Laufzeit von z.B. über 10 min zu, das zu ignorieren und warnst vor einem Totalabsturz von CATIA. Das sollte eine sichere Lösung sein. Viele Grüße ------------------ Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen. Konrad Adenauer [Diese Nachricht wurde von Bobby_Joe2001 am 28. Sep. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |