Autor
|
Thema: Zugriff auf CATIA in Batch Modus von external App (1286 / mal gelesen)
|
PierreM21 Mitglied Software Entwickler / Mechanik Engineer
Beiträge: 6 Registriert: 11.12.2020 Intel(R) Xeon(R) Gold 6144 CPU @ 3.50GHz 3.49 GHz (2 Prozessoren) 24GB RAM Windows 10 64b
|
erstellt am: 11. Dez. 2020 11:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe eine C# App, die eine Schnittstelle zu CATIA V5 hat, bzw. die CATIA einige Aufgaben machen lässt. Die Verbindung zu CATIA erfolgt wie folgt: _catia = (Application)Interaction.GetObject(null, "CATIA.Application"); oder mit der CreateObject Methode. Die Aufgaben sind Rechnen intensiv und fordern keine Interaktionen mit einem User. Von daher die Idee, dieses Prozess mit CATIA im Batch Modus durchzuführen. Das ist auch mein Problem, deswegen die Frage hier. CATIA im Batch Modus zu starten kann ich machen aus einer .bat Datei die das Befehl call %PfadInstalationsOrdner%\CNEXT.exe -macro %PfadMakro%\StartMacro.CATScript -batch -nowindow beinhaltet. Dabei kann mit dem Schlüsselwort -macro eine vorgeschriebene CATScript ausführen lassen. Das gelingt auch bei mir und meine erste Idee ist denn gewesen, diese Makro meine C# App zu exekutieren: " Language="VBSCRIPT" Sub CATMain() dim sh,s Set sh = CreateObject("WScript.Shell") s ="pfad\MyC#App.exe" sh.Run s, 1, false End Sub " Gelingt auch, allerdings findet die C# App das Catia Objekt mit Interaction.GetObject nicht. Über den TaskManager sehe ich auch CATIA nicht (wird CATIA geschlossen, sobald das Script ausgeführt ist, sprich in meinem Fall sofort?). Weitere Idee wäre, dass das Catia Objekt der C# Eintrittsmethode als Parameter gegeben wird. Ich meine das geht nicht. Idealerweise wäre wenn direkt aus C# her Catia in Batch modus gestartet werden könnte. Geht das? Andere Idee, wäre die CATIA relevanten Klassen aus der C# Anwendung in dem Skript zu übersezten, und das Rest als DLLs dem Skript zur Verfügung zu stellen. Wäre aufwendig und nach dem, was ich gegooglt habe, würde die Registrierung in Windows von diesen DLLs -> KO Kriterium bei mir, das Tool soll endlich auf andere Maschinen laufen können. Also ich freue mich auf Hinweisen, wenn Ihr mal dieser Problematik konfrontiert wurdet! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Dez. 2020 16:47 <-- editieren / zitieren --> Unities abgeben: Nur für PierreM21
Servus Willkommen im Forum. Eine Idee hab ich: Versuch mal deine C#-App statt per Shell über CATIA.SystemService.ExecuteProcessus auszuführen, dann sollte Catia warten bis der Prozess abgeschlossen ist (und erst dann sich beenden). Gruß Bernd EDIT: Eventuell kann es aber sein, dass dann Catia nicht mehr ansprechbar ist bzw nicht reagiert ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Dez. 2020 19:02 <-- editieren / zitieren --> Unities abgeben: Nur für PierreM21
Servus Mir ist noch was eingefallen: Catia starten bzw darauf zugreifen und per Code: CATIA.Visibility = False CATIA.Interactive = False
die Session verdecken bzw nicht manuell bedienbar setzen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PierreM21 Mitglied Software Entwickler / Mechanik Engineer
Beiträge: 6 Registriert: 11.12.2020 Intel(R) Xeon(R) Gold 6144 CPU @ 3.50GHz 3.49 GHz (2 Prozessoren) 24GB RAM Windows 10 64b
|
erstellt am: 14. Dez. 2020 11:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, danke für die Antworten. Das mit "CATIA.SystemService.ExecuteProcessus" ist denke ich eine gute Idee, bzw. ist das was ich machen muss. Somit ist schon mal sicher gestellt, dass Catia nicht weg rennt, bevor mein Prozess fertig ist. Ich habe es auch probiert, allerdings bring es mir noch nicht am Ziel. Ich sehe aber jetzt wohl Catia im Task Manager erscheinen, also schon ein Schritt nach vorn. Trotzdem scheitert es bei dem Interaction.GetObject: Code:
try { LogWriter.Write("try catia connection"); _catia = (Application)Interaction.GetObject(null,"CATIA.Application"); } catch (Exception) { LogWriter.Write("catia connection failed"); return false; }LogWriter.Write("catia connection succed"); return true;
Die App hängt an dieser Stelle, im log bekomme ich weder, dass es die Verbindung hergestellt wurde, noch dass sie gescheitert ist. Scheint so zu sein, dass das Microsoft.VisualBasic.Interaction.GetObject() keine geeignete Methode ist in meinem Szenario. So ich werde jetzt an dieser Stelle bohren... Ich halte euch auf dem Laufenden! Dass mit Visibility und Interactive auf False bringt mir ca. 20% Zeit Gewinn, ist schon mal was. Ich erwartete aber deutlich mehr Gewinn wenn es mit dem Batch Modus klappt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Dez. 2020 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für PierreM21
Servus Pierre Bei ExecuteProcessus Catia wartet bis das aufgerufene Programm fertig ist bzw beendet wurde. Dabei reagiert es nicht auf Usereingaben und vermutlich lässt sich nicht per GetObject auf die Session zugreifen (gesperrt). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PierreM21 Mitglied Software Entwickler / Mechanik Engineer
Beiträge: 6 Registriert: 11.12.2020 Intel(R) Xeon(R) Gold 6144 CPU @ 3.50GHz 3.49 GHz (2 Prozessoren) 24GB RAM Windows 10 64b
|
erstellt am: 14. Dez. 2020 23:53 <-- editieren / zitieren --> Unities abgeben:
Ja, das stimmt. Habe schließlich einen Weg gefunden, und zwar bin zurück auf meine WScript.Shell Object: beim Ausführen kann man als dritte Argument ein Bool geben, der bestimmt, ob das Skript auf das Prozess Ende warten muss. Gibt man true, wartet eben das Skript, somit bleibt CATIA auch erhalten, und ist sogar dabei nicht gesperrt, sprich es kann von anderen Prozesse zugegriffen werden. -> geschafft! Code:
Language="VBSCRIPT"Sub CATMain() dim sh,s Set sh = CreateObject("WScript.Shell") s ="pfad\MyC#App.exe" sh.Run s, 1, true End Sub
Allerdings in meinem Szenario (ich fahre ein Mechanismus in vielen Positionen an und messe dabei Abständen), stelle ich fest, dass das batch Modus zwecks Rechnungszeit mir wenig bis nichts bring (zum Fall wo CATIA einfach unsichtbar/un-interaktiv gemacht wird)! Shade bzw komisch, hatte im Bezug zu diesem Artikel viel mehr erwartet: https://v5vb.wordpress.com/2010/09/26/exec-scripts-in-batch-mode/ Er erzielt anscheinend eine 50x Verbesserung.
------------------ Pierre Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Dez. 2020 19:08 <-- editieren / zitieren --> Unities abgeben: Nur für PierreM21
Hi Pierre In dem verlinkten Beispiel ist der Zeitgewinn sicher nur so hoch, da das Laden und Darstellen der Zeichnung im Vergleich zum Auslesen einiger Parameter sehr viel mehr Zeit braucht. (eventuell würde dafür auch oDocument.Read reichen) Bei dir ist das Updaten der Baugruppe (Position) und das Messen das zeitaufwändige. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PierreM21 Mitglied Software Entwickler / Mechanik Engineer
Beiträge: 6 Registriert: 11.12.2020 Intel(R) Xeon(R) Gold 6144 CPU @ 3.50GHz 3.49 GHz (2 Prozessoren) 24GB RAM Windows 10 64b
|
erstellt am: 16. Dez. 2020 14:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, ja wahrscheinlich. Bei mir wird bei jeder Iteration: 1- Commands verstellt 2- ein Mechanismus upgedated (_mechanism.PutCommandValues(settings); ) 3- Abstandsmessungen zwischen Gruppen durchgeführt Die Aktionen sind nicht sehr GUI belastend, somit nachvollziehbares geringes Gewinn. Ist so! Auf jeden Fall danke für die Tipps und schöne Zeit wünsche ich dir! ------------------ Pierre Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|