Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Lesen von Parametern dauert sehr lang

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:  Lesen von Parametern dauert sehr lang (495 mal gelesen)
hklein06
Mitglied
Entwicklung Fahrwerk


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

Beiträge: 50
Registriert: 17.03.2006

CATIA V5 R14 HF-35
[ RS6000 AIX 5.3-ML04 ]

erstellt am: 13. Jun. 2006 07:32    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 Zusammen,

ich lese per Makro einige Parameter im Baum. Das Auslesen selbst dauert dabei sehr lange (ca. 10 sec pro Parameter).

Woran kann das liegen und wie kann ich das Beschleunigen?

Danke und viele Grüße

Holger

Hier mein Test:

Sub CATMain()

Dim ClashDocument As Documents
Dim ClashProduct As Product
Dim ClashParameters As Parameters

Set ClashDocument = CATIA.ActiveDocument
Set ClashProduct = ClashDocument.Product
Set ClashParameters = ClashProduct.Parameters

MsgBox "xxx"

Dim ClashPenetration As Dimension
Set ClashPenetration = ClashParameters.CreateDimension("ClashPenetration", "LENGTH", 0.500000)

Dim ClashSwitch As IntParam
Set ClashSwitch = ClashParameters.CreateInteger("ClashSwitch", 0)

MsgBox "yyy "&ClashPenetration.Value
Set ParameterExist = ClashParameters.Item("ClashPenetration")

MsgBox "zzz "&ParameterExist.Value
Set ParameterExist = ClashParameters.Item("ClashSwitch")

MsgBox "111 "&ParameterExist.Value

End Sub

[Diese Nachricht wurde von hklein06 am 13. Jun. 2006 editiert.]

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

Tapani.
Mitglied



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

Beiträge: 56
Registriert: 12.05.2006

erstellt am: 13. Jun. 2006 11:10    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 hklein06 10 Unities + Antwort hilfreich

Hallo Holger,

ich kann das Verhalten bei mir nicht nachvollziehen: Es geht bei mir sehr schnell. Am Code kann es also nicht liegen, wohl eher an irgendwelchen allgemeinen Einstellungen... Interessant wäre auch welches Betriebssystem und Catia-Version du verwendest. Ich habs auf Windows und R14 getestet.

CUSee You
    Tapani

------------------
Don't take life so seriously....
it's not a permanent  condition

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 13. Jun. 2006 12: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 Nur für hklein06 10 Unities + Antwort hilfreich

Hallo,

mir gehts genauso wie tapani:
Wenn ich die MsgBoxes aus deinem Code lösche und das ganze in eine Schleife packe und die Zeit messe, die das Script läuft, dann dauert das erzeugen und anziehen von 200 Parametern bei mir genau 2,9 sec.

geänderter Code:

Sub CATMain()

aa = timer

Dim ClashDocument As Documents
Dim ClashProduct As Product
Dim ClashParameters As Parameters

Set ClashDocument = CATIA.ActiveDocument
Set ClashProduct = ClashDocument.Product
Set ClashParameters = ClashProduct.Parameters

For n = 1 to 100

Dim ClashPenetration As Dimension
Set ClashPenetration = ClashParameters.CreateDimension("ClashPenetration" & n, "LENGTH" , 0.500000)

Dim ClashSwitch As IntParam
Set ClashSwitch = ClashParameters.CreateInteger("ClashSwitch" & n, 0)

Set ParameterExist = ClashParameters.Item("ClashPenetration" & n)

Set ParameterExist = ClashParameters.Item("ClashSwitch" & n)

Next

MsgBox "Zeitdauer: " & (timer - aa)

End Sub


Aber grundsätzlich ist deine Aussage richtig: Prameter anziehen dauert verhältnismässig lange, vorallem verhält sich das ganze nicht linear: setze das n im Script mal auf 1000 (also 2000 Parameter erzeugen + anziehen). Das dauert bei mir dann schon fast 5 min (und nicht 29 sec)

Siehe auch http://www.coe.org/forums/messageview.cfm?catid=10&threadid=8750&highlight_key=y&keyword1=parameters

Gruss
TomTom

------------------
tomtom1972

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

hklein06
Mitglied
Entwicklung Fahrwerk


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

Beiträge: 50
Registriert: 17.03.2006

CATIA V5 R14 HF-35
[ RS6000 AIX 5.3-ML04 ]

erstellt am: 13. Jun. 2006 13:10    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,

danke für die ausführlichen Antworten und die Tests. Wie in dem Thread bei COE beschrieben, habe ich auch ein sehr großes Product (> 2000 Models und CATParts). Dieses sind deaktiviert während ich nach dem Parameter suche.

Ich habe die Befürchtung, dass sich in den Parts und Supproducts diverse Parameter verbergen. Schade, dass es da keine Lösung (z.B. in Form von Arrays) gibt.

Im Moment benutze ich eine Group und extrahiere daraus meinen Parameter. Das ist nicht sinnvoll, funtkioniert aber ohne Zeitverzögerung.

Bis dann, viele Grüße

Holger

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 13. Jun. 2006 14:59    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 hklein06 10 Unities + Antwort hilfreich

Hallo,

es gibt schon eine Lösung. Das Problem ist erst mal folgendes:
Wenn du die Parameter eines Parts in einer Struktur über das CATIA.ActiveDocument (Root) aufrufst, hast du bei einer großen Struktur einen ganzen Haufen an Parametern, unabhängig davon, ob du die Kontenpunkte deiner Modelle deaktivierst oder nicht.

Lass mal das Script unten laufen, wenn einfach nur ein leeres CATProduct geöffnet ist.

Es werden 10 Parts mit jeweils 20 test-Parametern mit Wert "10" angelegt. Dann alle Parts deaktiviert, und die Parameter nochmals gezählt. Das selbe wie vorher. Das bringt nichts.

Dann werden die erzeugten Parameter übers Root angezogen und der Wert auf 20 gesetzt. Zeit gestoppt. Dauert lange.

Schneller geht es, die Parts in deiner Struktur durchzugehen und dort die Parameter aufzurufen. Sie werden auf den Wert 30 gesetzt. Zeit gestoppt. Und siehe da: das geht richtig schnell.

Ich bearbeite Strukturen mit mehreren 1000 Modellen und jeweils einigen 1000 Parametern. Der beschriebene Weg ist um Faktor 100 und mehr schneller !!

Ich hoffe das Script ist soweit selbsterklärend. Bis dann

TomTom

Language="VBSCRIPT"

Sub CATMain()

Set oProds = CATIA.ActiveDocument.Product.Products

For i = 1 to 10
  Set oProd = oProds.AddNewComponent("Part", "")
  Set oParams = oProd.ReferenceProduct.Parent.Part.Parameters
  For p = 1 to 20
      Set oParam = oParams.CreateDimension("test" & p, "LENGTH" , 10)
  Next
Next

iOld = CATIA.ActiveDocument.Product.Parameters.Count

CATIA.RefreshDisplay = True
CATIA.ActiveDocument.Product.Update

MsgBox "Das CATIA.ActiveDocument hat " & iOld & " Parameter"

MsgBox "Jetzt werden alle Knotenpunkte deaktiviert"

For i = 1 to oProds.Count
oProds.Item(i).DesactivateDefaultShape
Next

MsgBox "Das CATIA.ActiveDocument hat immer noch " & CATIA.ActiveDocument.Product.Parameters.Count & " Parameter" & VbLf & "vorher warens: " & iOld

MsgBox "Jetzt werden die Knotenpunkte werden wieder aktiviert"

For e = 1 to oProds.Count
    oProds.Item(e).ActivateDefaultShape
Next

MsgBox "Jetzt werden die erzeugten Parameter übers CATIA.Active.Document angezogen und auf den Wert 20 gesetzt."

aa = timer

For o = 1 to oProds.Count
  For l = 1 to 20
      sParamName = oProds.Item(o).PartNumber & "\test" & l
      Set oParam = CATIA.ActiveDocument.Product.Parameters.Item(sParamName)
  Next
Next

oldtime = timer - aa

MsgBox "das hat jetzt " & oldtime & " sec gedauert"

MsgBox "Jetzt werden die Parameter übers jeweilige Part angezogen und auf den Wert 30 gesetzt"

bb = timer

For f = 1 to oProds.Count
  Set oParams =  oProds.Item(f).ReferenceProduct.Parent.Part.Parameters
  For k = 1 to 20
      sParamName = oProds.Item(f).PartNumber & "\test" & k
      Set oParam = oParams.Item(sParamName)
      oParam.Value = 30
  Next
Next

MsgBox "das hat jetzt " & timer - bb & " sec anstatt " & oldtime & " sec gedauert"

End Sub

------------------
tomtom1972

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