Autor
|
Thema: Automatische Erzeugung von Baugruppen-CGRs (1857 mal gelesen)
|
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 14. Jul. 2011 19:54 <-- editieren / zitieren --> Unities abgeben:
Mehrere Baugruppen sollen in ihrer Lage zueinander über Parameter ausgelenkt werden. Dazu habe ich ein Steuer-Part, das ein Achsensystem mit Hilfe einer Konstruktions-Tabelle auslenkt. Die zu positionierenden Baugruppen sind an das Achsensystem gekoppelt. Für jeden Auslenkungsfall der Tabelle soll ein CGR der Gesamt-Baugruppe automatisch erzeugt werden. Nach der Parameter-Änderung im Steuer-Part müßte also die oberste Baugruppe aktiviert, aktualisiert und als CGR gespeichert werden. Denyo hatte mir vor einiger Zeit mal mit einem script geholfen, das innerhalb eines Parts automatisch screenshots erzeugt, wenn Parameter über eine Tabelle geändert werden: http://ww3.cad.de/foren/ubb/Forum137/HTML/002871.shtml#000001 Ich habe schon versucht, mit dem Makro-Recorder die fehlenden Sequenzen aufzuzeichnen und mit Denyos Kernmodul zu verknüpfen, bekomme aber jede Menge Fehlermeldungen. Das betrifft sowohl die Definitionen als auch die Syntax der "ExportData"-Funktion. Ich habe auch keinerlei Referenz-Dokumente fürs CATIA scripting, nur ein paar für das normale VBA. Welches Genie kann hier weiterhelfen? ------------------ Gruß Jürgen 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. Jul. 2011 22:38 <-- editieren / zitieren --> Unities abgeben: Nur für jdahm
Servus Poste doch mal bitte einen Code-Abschnitt mit dem Fehler und die Fehlermeldung. Die Doku zur Programmierung findest du im CATIA-Installationsverzeichnis unter: ...\B19\intel_a\code\bin\V5Automation.chm Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 15. Jul. 2011 11:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, ich habe mal folgende scripte als TXT hochgeladen: 1. das Ergebnis des Makro-Recorders 2. Denyos Makro 3. mein Versuch, beides zu kombinieren Die Fehlermeldungen habe ich anschließend als GIFs hochgeladen, weiß aber nicht, ob das alles geklappt hat. Normalerweise kann man ja nur 3 Anhänge auf einmal hochladen. In meinem ATTACHMENT FILE MANAGER werden sie jedenfalls angezeigt. ------------------ Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008 CATIA V5 R21 SP3 Windows 10 Pro(64) HP EliteBook 8760w i7 CPU @ 2,5GHz 8GB RAM
|
erstellt am: 15. Jul. 2011 11:13 <-- editieren / zitieren --> Unities abgeben:
Wie ich gerade festgestellt habe, wird nur die zuletzt hochgeladene Datei angezeigt. In der Hilfe zum Upload finde ich auch keinen Hinweis, wie man mehr als 3 Dateien anhängen kann. Deswegen hier nochmal die 3 scripte. ------------------ Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 15. Jul. 2011 11:16 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Jul. 2011 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für jdahm
Servus Zu deinen einzlenen Bilder: Bild 1: Fehlt da noch " , cgr" nach dem Dateinamen? Bild 2: Wahrscheinlich hast du ein Product und nicht ein CATPart geöffnet Bild 3: Gibt es das Part überhaupt? Bild 4 (vorheriger Post): Vielleicht fällt das Script auf die Nase, da es sich ja nicht um ein Part handelt, oder die Tabelle anders heißt Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 15. Jul. 2011 15:41 <-- editieren / zitieren --> Unities abgeben:
Ja, das Steuer-Part ist zwar im Part-Design geöffnet, aber innerhalb der geladenen Gesamtbaugruppe. Um die Sache für mich zu vereinfachen, habe ich es in einem separaten Fenster geöffnet. Jetzt kann ich das vorhandene Modul einfacher einbauen. Allerdings muß ich nach der Parameter-Änderung wieder in das Fenster wechseln, in dem sich die Gesamtbaugruppe befindet, diese aktualisieren und als CGR speichern. Für das Fenster-Wechseln zeichnet der Makro-Recorder eine riesige und unübersichtliche Menge an Definitionen und Befehlen auf (siehe Anhang). Gibt es dafür keine einfachere Möglichkeit? Wie bereits erwähnt, sind in CATIA nur die Gesamt-BG in einem und das Steuer-Part im anderen Fenster geöffnet. Schön wäre es noch, wenn man durch eine Abfrage sicherstellen kann, daß das Makro nur in dem Fenster gestartet wird, in dem sich das einzelne Part befindet. ------------------ Gruß Jürgen 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. Jul. 2011 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für jdahm
Servus Also ich würde alles vom Product aus steuern (ist einfacher vom Code). ICh hab mal deinen etwas angepasst/besser strukturiert (aber nicht getestet), vielleicht hilft es dir weiter: Code: Sub CATMain()'***Product geöffnet?*** Set oFenster = CATIA.Windows If oFenster.Count = 0 Then Box = MsgBox("Es ist kein Dokument geladen!" + Chr(10) + "Das Makro kann nicht ausgeführt werden und wird beendet!", vbCritical, "Keine Dokument geladen") Exit Sub End If ObjType = TypeName(CATIA.Activedocument) If ObjType <> "ProductDocument" Then Box = MsgBox("Das aktiv geladene Dokument ist KEIN CATProduct!" + Chr(10) + _ "Bitte aktivieren sie ein CATProduct und starten sie das Makro erneut!", _ vbExclamation, "Abbruch falscher Dateityp") Exit Sub End If '***Allgemeine Definitionen*** Set oProduct = CATIA.ActiveDocument.Product Set partDocument1 = CATIA.Documents.Item("3432A75A39D531603432A75A39D76F06VPMENV DOCCAD PLOC") Set oPart = partDocument1.Part Set oRel = oPart.Relations '***Dateiname & Pfad der CGRs*** Set oFileSys = CATIA.FileSystem oPfad = "C:\Documents and Settings\jdahm\Desktop\" If (Not oFileSys.FolderExists(oPfad)) Then Box = MsgBox("Der angegebene Ordner existiert nicht!" + Chr(10) + _ "Bitte aendern Sie den Quelltext in Zeile 19", vbCritical + vbOKOnly, "Speicherpfad") Exit Sub End If oFileNameRAW = oPfad & "MOVEMENT_DESIGNTABLE_" '***Schleife für CGRs*** Set oTable = oRel.Item("DesignTable") 'hier den richtigen Namen eintragen!!! OriConfig = oTable.Configuration For i = 1 To oTable.ConfigurationsNb oFileName = oFileNameRAW & i & ".cgr" oTable.Configuration = i oPart.Update oProduct.Update oProduct.Parent.ExportData oFileName, "cgr" Next oTable.Configuration = OriConfig oPart.Update End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 15. Jul. 2011 editiert.] [Diese Nachricht wurde von bgrittmann am 15. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 15. Jul. 2011 17:38 <-- editieren / zitieren --> Unities abgeben:
Danke erstmal für die schnelle Hilfe. Leider gibt es wieder Probleme beim Debuggen. Als erstes stolpert das Makro über die "OBjType"-Abfrage. Obwohl das Fenster mit der Baugruppe aktiv ist, wird sie nicht als Product erkannt. (War nicht so schlimm, habe einfach das "Exit Sub" auskommentiert.) Die nächste Meldung kommt bei "Set partDocument1..." (siehe screenshot). Für mich ist an der Stelle auch schlecht eine Kontrolle des Partnamens möglich, da das Makro scheinbar die interne Bezeichnung aus dem VPM haben will, die für mich nicht sichtbar ist. Ich probiers nochmal mit dem separat im 2. Fenster geöffneten Part. Das läuft schon zu 80%. Ich muß nur noch die Aktivierung des jeweils anderen Fensters hinbekommen. Schönes Wochenende! ------------------ Gruß Jürgen [Diese Nachricht wurde von jdahm am 15. Jul. 2011 editiert.] 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. Jul. 2011 17:54 <-- editieren / zitieren --> Unities abgeben: Nur für jdahm
Servus Zu 1.: Versuch mal ObjType = TypeName(CATIA.Activedocument)Zu 2.:Versuch mal: Set partDocument1 = CATIA.Documents.Item("3432A75A39D531603432A75A39D76F06VPMENV DOCCAD PLOC") oder Set partDocument1 = CATIA.Documents.Item("3432A75A39D531603432A75A39D76F06VPMENV DOCCAD PLOC.CATPart") Gruß Bernd PS: Was machst du wenn das "Skelettpart" mal anders heißt? ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 15. Jul. 2011 18:09 <-- editieren / zitieren --> Unities abgeben:
Zitat: Was machst du wenn das "Skelettpart" mal anders heißt?
Deswegen favorisiere ich ja auch die Variante mit Steuer-Skeleton in separatem Fenster. Da ist es eindeutig. Ansonsten müßte man irgendwie eine User-Eingabe einbauen. Dazu fehlt mir die Erfahrung und auch die Zeit. ------------------ Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008 CATIA V5 R21 SP3 Windows 10 Pro(64) HP EliteBook 8760w i7 CPU @ 2,5GHz 8GB RAM
|
erstellt am: 15. Jul. 2011 18:43 <-- editieren / zitieren --> Unities abgeben:
Ich schaffe einfach den Wechsel vom Part-Fenster ins Product-Fenster (und zurück?) nicht. Die Befehle, die der Makro-Rekorder aufgezeichnet hat, scheinen so nicht zu funktionieren (siehe Anhang). Das ist aus meiner Sicht die einzige große Hürde, um das Makro zum Laufen zu bekommen. ------------------ Gruß Jürgen [Diese Nachricht wurde von jdahm am 15. Jul. 2011 editiert.] 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: 16. Jul. 2011 00:12 <-- editieren / zitieren --> Unities abgeben: Nur für jdahm
Servus AFAIK kann man zwischen den Fenstern zB über: CATIA.Windows.item(2).Activatebzw CATIA.Windows.item("Part1.CATPart").Activatewechseln. (siehe auch Doku). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008
|
erstellt am: 18. Jul. 2011 14:49 <-- editieren / zitieren --> Unities abgeben:
|
jdahm Mitglied Konstrukteur
Beiträge: 137 Registriert: 01.08.2008 CATIA V5 R21 SP3 Windows 10 Pro(64) HP EliteBook 8760w i7 CPU @ 2,5GHz 8GB RAM
|
erstellt am: 18. Jul. 2011 18:59 <-- editieren / zitieren --> Unities abgeben:
Bisher hatte ich den Pfad, in dem die CGRs abgelegt werden sollen, im script vorgegeben. Ich will es dem User überlassen, einen Pfad selbst zu wählen, weiß aber nicht, wie das script für die entsprechende Dialogbox oder UserForm aussehen muß. PS: Kann mir jemand vernünftige Literatur zur CATIA-Programmierung empfehlen? Die interne VB-Hilfe hätten sie auch in chinesisch schreiben können. ------------------ Gruß Jürgen 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: 18. Jul. 2011 19:16 <-- editieren / zitieren --> Unities abgeben: Nur für jdahm
Servus Als Literatur gibt es: - CATIA V5 - Makroprogrammierung mit Visual Basic Script von Dieter R. Ziethen - Kochbuch CATIA V5 automatisieren - Vom Powercopy bis zur C sharp-Programmierung von Jens Hansen sowie genügend allgemein zu Bücher zu VB (mit Sicherheit kein Fehler als Grundlage). Anbei ein Beispiel wie man eine Ordern selektieren kann: Code: set ShellApp=CreateObject("Shell.Application") 'erzeuge ein neues Objekt "Shell Application" set FolBrowser=ShellApp.BrowseForFolder(0,"Bitte wählen Sie ein Input-Verzeichnis aus.",16,17) If not FolBrowser is Nothing then 'wenn nicht Abbrechen gedrückt oder aus sonstigen Gründen 'nichts im Objekt "FolBrowser" steht, dann... folderinput=FolBrowser.Self.Path '...speichere den Pfad d. Ordners in die Variable "folderinput" End If
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 18. Jul. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |