Hallo zusammen,
nachdem ich in den letzten Monaten fleißig Forenbeiträge gelesen habe, die mir oft weitergeholfen haben, hab ich nun ein Problem für das ich keine Lösung finde.
Meine Problemstellung ist folgende:
Ich messe mit Parametern den Abstand zwischen einer Kurve und einer Fläche. Mit einer Reaction, die auf eine Parameteränderung reagiert ("ON-OFF-Schalter), möchte ich eine Art Optimierung starten.
Solange der Parameter mit dem gemessenem Abstand kleiner ist als ein Sollabstand sollen die Punkte mit denen die Kurve gesteuert wird verändert werden. Dies soll solange passieren bis der gemessene Abstand größer ist als der Sollabstand.
Ich habe das mit einer Reaction mit einer Knowledgeware action realisiert. Leider macht die for-Schleife Probleme.
Ich habe ein vereinfachtes Beispiel dazu aufgebaut. Das angehängte Bild zeigt die vorhandene Geometrie, Parameter und Formeln.
Im ersten Versuch hab ich folgende Reaction erstellt.
Source type: Selection
Sources: schalter
Available events: ValueChange
Knowledgeware action
Code:
let i = 1
let a(Length)
if schalter == "on"
{
for i while mindest < soll
{
a = steuer
steuer = a + 1mm
}
}
Dieser Versuch scheitert. CATIA hängt sich auf, da wahrscheinlich die Schleife unendlich lang läuft, da nach einem Schleifendurchlauf der Parameter mindest=distance(test\Surface.1,test\Line.1) nicht aktualisiert wird.
Im zweiten Versuch habe ich die for-schleife weggelassen:
Source type: Selection
Sources: schalter
Available events: ValueChange
Knowledgeware action
Code:
let a(Length)
if schalter == "on"
{
if mindest < soll
{
a = steuer
steuer = a + 1mm
}
}
Diese Reaction funktioniert. Schalte ich nun händisch den Parameter schalter immer wieder von "on" auf "off" usw... läuft die Reaction immer einmal durch und nach ein paar Durchläufen habe ich den gewünschten Mindestabstand. Anscheinend wird der Parameter mindest jedes Mal wenn die Reaction ausgelöst wird aktualisiert.
Manuell zu klicken ist aber eigentlich nicht mein Ziel ;)
Nachdem ich weitere Versuche mit der Schleife gemacht habe, die nicht erfolgreich waren, bin ich auf eine "Workaround"-Lösung gekommen.
Ich lasse die Reaction aus dem zweiten Versuch und erstelle noch eine zweite, in der ich das "Schalter ein-ausschalten" automatisiere:
Source type: Selection
Sources: echter_schalter
Available events: ValueChange
Knowledgeware action
Code:
let j = 1
if echter_schalter == "ON"
{
for j while mindest < soll
{
schalter = "off"
schalter = "on"
}
}
Damit funktionierts dann
Trotzdem würd mich interessieren ob es eine Möglichkeit gibt, das ganze mit einer Reaction zu automatisieren.
Nach meinen Versuchen denke ich, dass die Reaction aus dem ersten Versuch nicht funktioniert, weil der Parameter mindest = distance(test\Surface.1, test\Line.1) nicht aktualisiert wird nach jedem Schleifendurchlauf.
Gibt es eine Möglichkeit einen Befehl zur Aktualisierung des Parameters in die Reaction einzubauen?
Befehle wie:
mindest.Update
mindest -> Update
funktionieren nicht. Auch nicht beim ganzen Part (testpart.Update , testpart -> Update) oder zb. der Line (test\Line.1.Update, test\Line.1 -> Update)
Die CATIA Hilfe zum Knowledge Advisor habe ich auch schon durchgeforstet.
Auch für andere Ideen das Problem zu lösen bin ich dankbar. 
Vielen Dank schon mal
Grüße
Gabriel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP