Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Über Makro im Part ein Product steuern

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:  Über Makro im Part ein Product steuern (2188 mal gelesen)
Nixon
Mitglied
Student


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

Beiträge: 22
Registriert: 17.08.2010

i5-760
GTX 460 1GB
4GB DDR3 1066
60GB SSD OCZ Vertex2
2x300GB SATA

erstellt am: 21. Feb. 2011 15:22    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

Guten Tag zusammen,

Nachdem ich die letzten Tage vergeblich damit verbracht habe Informationen zum Thema aus dem Forum zu bekommen und mir mein Makro zu schreiben, stelle ich nun meine Frage:

Ich möchte in einem Part ein Makro starten lassen (dies wird auch ausserhalb von Catia geschehen, da bin ich aber noch nicht), welches Veränderungen in dem entsprechenden Product veranlasst. Die Änderungen sind in-/aktivierung von Komponenten und Beziehungen.
Mein bisheriger Fortschritt sieht so aus:
Sub CATMain()

Dim windows1 As Windows
Set windows1 = CATIA.Windows

Dim specsAndGeomWindow1 As SpecsAndGeomWindow
Set specsAndGeomWindow1 = windows1.Item("Federpaket.CATProduct")

specsAndGeomWindow1.Activate

If "Part1\Anzahl" = "2" Then

Dim parameters1 As Parameters
Set parameters1 = product1.Parameters

Dim boolParam1 As BoolParam
Set boolParam1 = parameters1.Item("Product1\Part.1\Aktivierungsstatus der Komponente")

boolParam1.Value = True

Dim boolParam1 As BoolParam
Set boolParam1 = parameters1.Item("Product1\Bedingungen\Flächenkontakt.1\Flächenkontakt.1\Aktivität")

boolParam1.Value = False

Dim parameters2 As Parameters
Set parameters2 = product1.Parameters

Dim boolParam2 As BoolParam
Set boolParam2 = parameters2.Item("Product1\Bedingungen\Winkel.1\Winkel.1\Aktivität")

boolParam2.Value = False

Ich habe dies u.a. auch mit der Makroaufzeichnung erstellt um an die Befehle zu kommen.
Der Sinn hier hinter ist: Ist die Anzahl im Part auf 2 gestellt so sollen auch nur die Parts 1&2 im Product aktiviert sein und auch nur die entsprechenden Beziehungen, je ein Winkel und ein Flächenkontakt.
Meine Frage dazu: Ich springe ja zwischen Part und Product hin und her und bekomme bei der Aufzeichnung des Makros einen sehr langen Code für sehr wenig Aktionen. die sind bestimmt nicht alle nötig, jedoch weiss ich nicht was ich rausschmeissen kann. Im Grunde ist es ja nur:
if anzahl = 2
product1.part1.activate.. true
product1.part2.activate.. true
product1.part3.activate.. false etc..
product1.bedingungen.winkel.1.activate.. true
product1.bedingungen.kontakt.1.activate.. true
und die restlichen bedingungen wieder false

In der KWA-Regel hab ich das Problem ohne weiteres gelöst, hier komme ich jedoch nicht weiter.

Über eine freundliche Hilfe würde ich mich sehr freuen,

Nixon

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tberger
Mitglied
Application Manager CATIA V5 / V6


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 21. Feb. 2011 18:49    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 Nixon 10 Unities + Antwort hilfreich


STEUERUNG_OHNE_MAKRO.png

 
Hallo Nixon,

so etwas kannst du auch mit Parametern und Formeln in der Baugruppe und ganz ohne Makros erreichen (s.Bild) - wenn es deine Aufgabenstellung erlaubt.

------------------
Grüße aus dem Thurgau
Thomas

+++++++++++++++++++++++++++++++++

CATIA - eine Laune der Natur ...

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: 21. Feb. 2011 18:51    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 Nixon 10 Unities + Antwort hilfreich

Servus
Es könnte ggf funktionieren wenn du den Wert des Parameters gleich in einer Zeile setze (ohne Zuweisung zu Variable) zB (ungetestet):
Code:
parameters1.Item("Product1\Part.1\Aktivierungsstatus der Komponente").value = True
parameters1.Item("Product1\Bedingungen\Flächenkontakt.1\Flächenkontakt.1\Aktivität") = False
...

Die Lösung über eine KWA-Regel oder eine Konstruktionstabelle finde ich "schöner" (ggf auch stabiler beim Umbenennen von Parts und Bedingungen).
Warum funktioniert was nicht wie es soll? Was hast du vor?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nixon
Mitglied
Student


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

Beiträge: 22
Registriert: 17.08.2010

i5-760
GTX 460 1GB
4GB DDR3 1066
60GB SSD OCZ Vertex2
2x300GB SATA

erstellt am: 23. Feb. 2011 10:18    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

Danke für eure Hinweise!

Ich könnte es über die Parameter machen, jedoch ziehe ich bisher die Makrolösung vor. Ich habe jetzt auf die ganzen Deklarierungen verzichtet und den Parameter direkt in einer Zeile auf true bzw false gesetzt und es funktioniert soweit. die idee, das es auf mehrere zeilen verteilt war, kam vom makro-rekorder.

Vielen Danke für die Hilfestellungen,
Nixon

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nixon
Mitglied
Student


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

Beiträge: 22
Registriert: 17.08.2010

i5-760
GTX 460 1GB
4GB DDR3 1066
60GB SSD OCZ Vertex2
2x300GB SATA

erstellt am: 23. Feb. 2011 17:21    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

Guten Abend,

Jetzt habe ich 2 Products versorgt und die Steuerung aus dem Part heraus funktioniert gut.
Im 3. Product jedoch bekomme ich nur noch Fehler, und zwar das das Verfahren Item fehlgeschlagen ist.
Egal ob ich alles vorher deklariere oder nicht, Catia gibt mir immer diesen Fehler aus.

Code:

Dim product5 As Product
Set product5 = products1.Item("Part.4")
Dim parameters4 As Parameters
Set parameters4 = product5.Parameters

parameters4.Item("Product\Part.4\Aktivierungsstatus der Komponente").value = False

parameters4.Item("Product\Bedingungen\Winkel.3\Winkel.3\Aktivität").value = False

parameters4.Item("Product\Bedingungen\Flächenkontakt.3\Flächenkontakt.3\Aktivität").value = False

Oben steht die Variante, nach der ich die anderen Makros aufgebaut habe (Ausschnitt aus der Mitte, die Befehle gibt es in unterschiedlicher Form etliche Male).

Was kann der Grund dafür sein, dass diese Item-Funktion nicht funktioniert?

Code2:

Dim product2 As Product
Set product2 = products1.Item("Part.2")
Dim parameters1 As Parameters
Set parameters1 = product1.Parameters

Dim boolParam1 As Parameter
Set boolParam1 = parameters1.Item("Product\Part.2\Aktivierungsstatus der Komponente")
boolParam1.Value = False

Wenn ich vorher deklariere stoppt das Makro erst beim 2. auftauchen von 'Item', egal ob dieser auch komplett deklariert ist oder nicht.
Vielen Dank im vorraus,

Nixon

[Diese Nachricht wurde von Nixon am 23. Feb. 2011 editiert.]

[Diese Nachricht wurde von Nixon am 23. Feb. 2011 editiert.]

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: 23. Feb. 2011 19:01    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 Nixon 10 Unities + Antwort hilfreich

Servus
Willst du wirklich im Part.2 bzw Part.4 was ändern? Sollte es bei dir nicht das CATPrduct sein?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nixon
Mitglied
Student


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

Beiträge: 22
Registriert: 17.08.2010

i5-760
GTX 460 1GB
4GB DDR3 1066
60GB SSD OCZ Vertex2
2x300GB SATA

erstellt am: 24. Feb. 2011 10:04    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,

die absicht hinter den aufrufen von den verschiedenen parts ist, dass ich die jeweiligen parts im product aktivieren bzw inaktivieren kann.
Ich habe aber gestern abend keine ruhe gefunden und die sache fertig gemacht, habe eine lösung die funktioniert. wenn jemand interesse an den lösungen hat, schreibe ich gerne wie ich dies gelöst habe.
MfG, nixon

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: 24. Feb. 2011 10:12    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 Nixon 10 Unities + Antwort hilfreich

Servus
Schon klar, aber die Parameter zum Deaktivieren von Parts und deren Bedingungen befinden sich im CATProduct.
Vergleich auch deinen ersten Beitrag. Was hattest du dort als "product1" definiert?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tberger
Mitglied
Application Manager CATIA V5 / V6


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 24. Feb. 2011 15:09    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 Nixon 10 Unities + Antwort hilfreich

Hallo Nixon,
ja, ich interessiere mich für deine Lösung - vielleicht kann ich ja auch noch was lernen. Ich würde dich aber bitten ebenso wie wir alle, die uns im Forum beteiligen, sie "öffentlich" in einem Beitrag hier zu setzen. Es sei den es ist soooo geheim und du bekommst schon Patentgebühren dafür 

------------------
Grüße aus dem Thurgau
Thomas

+++++++++++++++++++++++++++++++++

CATIA - eine Laune der Natur ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Konstrukteur/in, Technischer Zeichner/in

HMT ist ein Familienunternehmen in zweiter Generation, das bereits seit 1971 im Maschinenbbau verortet ist. Mit aktuell rund 60 Mitarbeitern hat sich HMT stetig weiterentwickelt und zählt heute zu den bedeutendsten Herstellern von Rauchgasarmaturen. HMT ist in weiteren Bereichen solide gewachsen und hat sowohl räumlich wie personell in die Herstellung von Großanlagen-Komponenten nach Kundenvorgaben, Baugeräten, Containern, Laser-Zuschnitten und Kantteile expandiert....

Anzeige ansehenTechnischer Zeichner, Bauzeichner
Nixon
Mitglied
Student


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

Beiträge: 22
Registriert: 17.08.2010

i5-760
GTX 460 1GB
4GB DDR3 1066
60GB SSD OCZ Vertex2
2x300GB SATA

erstellt am: 24. Feb. 2011 16:21    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,
Dann beschreibe ich mal kurz den Zweck des Makros:
In meinem Part habe ich Parameter angelegt mit denen ich verschiedene Products steuern kann. So gibt es z.B. den Parameter 'Anzahl' der die Anzahl der Komponenten im Product regeln soll. Nun hatte ich die Aufgabe ohne KWA-Anwendungen eine Regel zur Steuerung des Products zu erschaffen. Dafür habe ich die Makros erstellt, die über ein Catia-externes Programm angestoßen werden sollten. Die Makros aktivieren/inaktivieren die der Anzahl entsprechenden Komponenten sowie deren zugehörige Bedingungen.
Hier das Makro für 2 aktivierte Komponenten:
(Komponente 1 ist immer aktiv und wird nicht behandelt)

Language="VBSCRIPT"

Sub CATMain()

Set windows1 = CATIA.Windows

Set specsAndGeomWindow1 = windows1.Item("Product-Name.CATProduct")

specsAndGeomWindow1.Activate

Dim productDocument1 As Document
Set productDocument1 = CATIA.ActiveDocument

Dim product1 As Product
Set product1 = productDocument1.Product

Dim products1 As Products
Set products1 = product1.Products


Dim product2 As Product
Set product2 = products1.Item("Part-Name.2")
Dim parameters1 As Parameters
Set parameters1 = product1.Parameters

parameters1.Item("Product-Name\Part-Name.2\Aktivierungsstatus der Komponente").value = True

parameters1.Item("Product-Name\Bedingungen\Flächenkontakt.17\Flächenkontakt.17\Aktivität").value = True

parameters1.Item("Product-Name\Bedingungen\Winkel.18\Winkel.18\Aktivität").value = True


Dim product3 As Product
Set product3 = products1.Item("Part-Name.3")
Dim parameters2 As Parameters
Set parameters2 = product2.Parameters

parameters1.Item("Product-Name\Part-Name.3\Aktivierungsstatus der Komponente").value = False

parameters1.Item("Product-Name\Bedingungen\Flächenkontakt.20\Flächenkontakt.20\Aktivität").value = False

parameters1.Item("Product-Name\Bedingungen\Winkel.21\Winkel.21\Aktivität").value = False


Dim product4 As Product
Set product4 = products1.Item("Part-Name.4")
Dim parameters3 As Parameters
Set parameters3 = product3.Parameters

parameters1.Item("Product-Name\Part-Name.4\Aktivierungsstatus der Komponente").value = False

parameters1.Item("Product-Name\Bedingungen\Flächenkontakt.22\Flächenkontakt.22\Aktivität").value = False

parameters1.Item("Product-Name\Bedingungen\Winkel.23\Winkel.23\Aktivität").value = False


Dim product5 As Product
Set product5 = products1.Item("Part-Name.5")
Dim parameters4 As Parameters
Set parameters4 = product4.Parameters

parameters1.Item("Product-Name\Part-Name.5\Aktivierungsstatus der Komponente").value = False

parameters1.Item("Product-Name\Bedingungen\Flächenkontakt.24\Flächenkontakt.24\Aktivität").value = False

parameters1.Item("Product-Name\Bedingungen\Winkel.25\Winkel.25\Aktivität").value = False


Dim product6 As Product
Set product6 = products1.Item("Part-Name.6")
Dim parameters5 As Parameters
Set parameters5 = product4.Parameters

parameters1.Item("Product-Name\Part-Name.6\Aktivierungsstatus der Komponente").value = False

parameters1.Item("Product-Name\Bedingungen\Flächenkontakt.26\Flächenkontakt.26\Aktivität").value = False

parameters1.Item("Product-Name\Bedingungen\Winkel.27\Winkel.27\Aktivität").value = False

End Sub

Dieses Makro hat seinen Dienst sauber erledigt, ob ich hier und da etwas besser hätte 'programmieren' können war mir nicht so wichtig wie ein funktionierendes Makro.. Unter KWA als Regel ist das ganze einfacher in der handhabung, gerade weil keine Deklarierungen nötig sind.

MfG,
Nixon

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