Our 3D CAD supplier models have been moved to 3Dfindit.com, the new visual search engine for 3D CAD, CAE & BIM models.
You can log in there with your existing account of this site.
The content remains free of charge.
Hinweis | |
---|---|
Ein Beispiel zu
Merkmalalgorithmen finden Sie im Trainingskatalog ( |
Über sog. Merkmalalgorithmen werden Abhängigkeiten zwischen Variablen ausgedrückt. In der beispielhaften folgenden Abbildung sehen Sie, dass die Variable NENN durch das Produkt aus den Variablen H, B und L dargestellt wird.
NENN = '$H.x$B.x$L.'
Wählen Sie unter Speicherort die Option Nur in Tabelle oder In Geometrie und Tabelle.
(Bei Speicherort "Nur in Geometrie" kann kein Merkmalalgorithmus verwendet werden.)
Öffnen Sie unter Formel mit Klick auf das erweiterte Eingabefeld.
--> Der unter Name eingetragene Variablenname wird als erster Ausdrucksbestandteil des Merkmalalgorithmus’ ins Feld geschrieben.
Legen Sie die Zuordnung fest, welche die Variable NENN definieren soll.
--> Da es sich bei NENN um eine Textvariable handelt, lautet der Ausdruck NENN = '$H.x$B.x$L.'.
-> Die Variable NENN wird in die Auflistung aller Projektvariablen aufgenommen.
-> Die Variable NENN wird mit dem entsprechenden Icon für Merkmalalgorithmus gekennzeichnet.
(siehe Abb. „"Merkmalalgorithmus" Dialogfenster“)
Dieser Button überträgt die unter Name angezeigte Variable ins Eingabefeld.
Ein durch eine IF-Bedingung aufgebauter Algorithmus kann wie folgt aussehen:
IF ( ) THEN D3 = ELSE D3 = ENDIF
Zwischen den Klammern () geben Sie Ihre Bedingung ein (z.B. "L1.EQ.10").
Hinter THEN D3 = geben Sie den Wert ein, den D3 annehmen soll, wenn die Bedingung erfüllt wird.
Hinter ELSE D3 = steht der Wert für D3, falls die Bedingung nicht erfüllt wird. Mit ENDIF beschließen Sie die Bedingung.
IF (L1.EQ.10) THEN D3 = 20 ELSE D3 = 30 ENDIF
Sollen Fallunterscheidungen getroffen werden, kann mit ELSEIF-Anweisungen gearbeitet werden.
IF (L1.EQ.10) THEN D3 = 10 ELSEIF (L1.EQ.20) THEN D3 = 20 ELSEIF (L1.EQ.30) THEN D3 = 30 ELSE D3 = 40 ENDIF
Mehrere IF-Bedingungen hintereinander geschaltet innerhalb einer Merkmalalgorithmus-Variablen.
Die Verwendung einer einzigen IF-Bedingung mit ELSEIF-Fallunterscheidungen würde oft zu viel aufwändigeren Lösungen mit viel mehr ELSEIFs führen.
Aufbau der Bedingungen anhand eines Beispiels:
IF ( KG.EQ.'-')THEN NB1 = '$TNR. $TYP.-$KDM.-$HUB.-ZR-$WZ.' ELSE NB1 = '$TNR. $TYP.-$KDM.-$HUB.-ZR-$WZ.-$KG.' ENDIF IF ( ZAK.EQ.'-')THEN NB1 = '$NB1.' ELSE NB1 = '$NB1.-$ZAK.' ENDIF IF( YSR.EQ.'1'.AND.SIE.EQ.'-')THEN NB1 = '$NB1. ZUB-C' ELSEIF( YSR.EQ.'1'.AND.SIE.EQ.'1')THEN NB1 = '$NB1. ZUB-CL' ELSEIF( YSR.EQ.'2'.AND.SIE.EQ.'-')THEN NB1 = '$NB1. ZUB-$YSR.C' ELSEIF( YSR.EQ.'2'.AND.SIE.EQ.'1')THEN NB1 = '$NB1. ZUB-$YSR.CL' ELSEIF( YSR.EQ.'-'.AND.SIE.EQ.'1')THEN NB1 = '$NB1. ZUB-L' ELSE NB1 = '$NB1.' ENDIF |
Im ersten IF wird NB1 initialisiert.
Im zweiten IF wird an NB1 etwas drangehängt.
Im dritten IF wird nochmal etwas drangehängt.
|
Die erste IF-Bedingung muss eine eine ELSE-Alternative enthalten, damit die Initialisierung der Variablen sichergestellt ist. Die übrigen IF-Bedingungen können optional ELSE-Alternativen enthalten.
IF (OPZ1.EQ.'-' )THEN LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.' ELSE LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.' ENDIF IF (OPZ2.EQ.'-' )THEN LINAALG = '$LINAALG./' ELSE LINAALG = '$LINAALG./$OPZ2.' ENDIF...
IF (OPZ1.NE.'-' )THEN LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.' ENDIF IF (OPZ2.NE.'-' )THEN LINAALG = '$LINAALG./$OPZ2.' ENDIF...
Ebenfalls korrekt: Wenn als erstes ein einfaches Statement ohne Bedingung steht, kann auf ein "ELSE" ganz verzichtet werden, da das Statement die Variable immer initialisiert.
CNSTYPECODE = '$MODEL.$W.-$ST.-$THETA.-$TYPE.-$SPRING.' IF(K.EQ.1)THEN CNSTYPECODE = '$CNSTYPECODE.-K' ENDIF IF(FK.EQ.1)THEN CNSTYPECODE = '$CNSTYPECODE.-FK' ENDIF IF(N.EQ.1)THEN CNSTYPECODE = '$CNSTYPECODE.-N' ENDIF
Die erste Bedingung, die immer berechnet wird, muss eine Endlos-Schleife verhindern. Weitere "if...endif" rufen immer die erste Bedingung auf und fügen einen zusätzlichen Wert an.
Verwenden Sie daher in der ersten Bedingung für die ELSE-Fallunterscheidung nicht die Variable der Zuweisung.
IF (OPZ1.EQ.'-' )THEN LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.' ELSE LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.' ENDIF IF (OPZ2.EQ.'-' )THEN LINAALG = '$LINAALG./' ELSE LINAALG = '$LINAALG./$OPZ2.' ENDIF...
Nicht korrekt: (Unterschied in rot)
IF (OPZ1.EQ.'-' )THEN
LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.'
ELSE
LINAALG = '$LINAALG./$OPZ1.'
ENDIF
IF (OPZ2.EQ.'-' )THEN
LINAALG = '$LINAALG./'
ELSE
LINAALG = '$LINAALG./$OPZ2.'
ENDIF...
Stellen Sie sicher, dass Merkmalalgorithmen keine Rekursionen enthalten.
Rufen Sie für ein schnelles Testen in der Tabelle die Funktion Variablenabhängigkeiten anzeigen auf. Einfache Abhängigkeiten sind in Ordnung. Diese werden durch einen einfachen Pfeil dargestellt. Rekursive Abhängigkeiten sind Fehler. Dieser werden durch einen Doppelpfeil dargestellt. Fehler werden sowohl im Nachrichtenfenster als auch später beim Testen im Dialogfenster QA-Check angezeigt.
Die folgende beispielhafte Abbildung zeigt eine Abhängigkeit zwischen A und B.
Die folgende beispielhafte Abbildung zeigt eine rekursive Abhängigkeit. Der Variablenmanager zeigt A=B und B=A. Im Dialogfenster Variablenstruktur sehen Sie eine Doppelpfeil zwischen A und B. In der 3D Historie an betroffenen Elementen ein rotes Kreuz , das Dialogfenster Benachrichtigungen weist den Fehler aus und die 3D Ansicht zeigt kein Modell.