Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Zugriff auf CATIA in Batch Modus von external App

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:  Zugriff auf CATIA in Batch Modus von external App (1286 / mal gelesen)
PierreM21
Mitglied
Software Entwickler / Mechanik Engineer

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

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 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,

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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Dez. 2020 16:47    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 Nur für PierreM21 10 Unities + Antwort hilfreich

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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 11. Dez. 2020 19:02    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 Nur für PierreM21 10 Unities + Antwort hilfreich

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

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

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 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 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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 14. Dez. 2020 11:56    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 Nur für PierreM21 10 Unities + Antwort hilfreich

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

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

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 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

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


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 15. Dez. 2020 19:08    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 Nur für PierreM21 10 Unities + Antwort hilfreich

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

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

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 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 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 >>)

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