Numerische Operatoren und Funktionen in der erweiterten Logik verwenden
Parameter können für viele verschiedene Typen definiert werden. Dieser Abschnitt enthält Beispiele für die Verwendung von Operatoren und Funktionen für numerische Parameter in der erweiterten Logik.
Operatoren für numerische Parameter
Parameter können für ganzzahlige oder reelle numerische Typen definiert werden. Während diese Typen den Windchill Typdefinitionen entsprechen, denen der Parameter zugeordnet werden kann, werden diese intern den Java-primitiven Typen Long und Double zugeordnet, sodass sie in jedem gültigen Java-Ausdruck als Long- und Double-Variablen verwendet werden können.
Die Ausdrücke können anhand von Folgendem definiert werden:
Das Ausdruck-Feld eines Parameters, das den tatsächlichen oder den Standardwert des Parameters definiert. Weitere Informationen zur Verwendung von Ausdrücken in Parametern finden Sie unter der Registerkarte "Informationen" im Fenster "Parameter bearbeiten".
Eine Beschränkung des Typs Ausdruck erfordert, dass der Ausdruck zu einem booleschen Wert ausgewertet wird. Weitere Informationen zu Bedingungstypen von Ausdrücken finden Sie unter Ausdrucks-Editor.
Ausdrücke können auch in der erweiterten Kombinationstabelle verwendet werden. Weitere Informationen zu erweiterten Kombinationstabellen finden Sie unter Kombinationstabellen-Editor.
Arithmetische Operatoren
Arithmetische Operatoren können mit numerischen Parametern in Ausdrücken verwendet werden. Dazu gehören die binären Operatoren für die Addition (+), Subtraktion (-), Multiplikation (*) und Division (/). Beispiele für Ausdrucksbeschränkungen:
2 * a – 3 * b == c / d + e / 3
A == 2.5 * B / C – D / 7.5
Einzeleintrags- oder Unäre Operatoren - und + können auch verwendet werden (+A entspricht A).
A == -B + 2 * C
D = +A – (-C)
Anhand des Modulo-Operators (%) kann der Rest aus der Division des ersten Arguments durch das zweite Argument berechnet werden:
A == B % 7
Relationale Operatoren
Relationale Operatoren werden zum Vergleichen numerischer Unterausdrücke in Ausdrucksbeschränkungen verwendet, die als boolesche Werte ausgewertet werden müssen. Dazu zählen die folgenden Operatoren:
ist gleich (==)
größer als (>)
kleiner als (<)
größer gleich (>=)
kleiner gleich (<=)
ist ungleich (!=)
* 
Der "ist gleich"-Operator muss "==" geschrieben werden und darf nicht "=" geschrieben werden.
Wenn die linke oder rechte Seite des Ausdrucks mit dem Operator "==" einen einzelnen Ausdruck enthält, wird der Ausdruck als Zuweisung (=) behandelt. Beispiele für Ausdrucksbeschränkungen:
A == 2 * B + 3 * C
B / 4 - C / 3 == A
Sobald die Werte der Parameter B und C bekannt sind, wird der Wert des Parameters A gemäß den Formeln berechnet. Definieren Sie in den oben genannten Beispielen den Parameter A als Nicht-Eingabeparameter, sodass sein Wert von der Formel berechnet und nicht vom Benutzer eingegeben und dann durch die Formel berechnet wird. Dies bedeutet auch, dass die Eingabereihenfolge wichtig ist, wo B und C vor dem Auftreten von A definiert werden. Bei der Definition in einer anderen Reihenfolge, in der dem Parameter A der Wert vor den Parametern B und C zugewiesen wird, wird der Ausdruck als boolescher Ausdruck behandelt, bei dem der Wert des Parameters A mit dem Wert der Formel verglichen wird, die basierend auf den Werten von B und C ausgewertet wird.
* 
Wenn beide Seiten mehr als einen einzelnen Parameter enthalten, müssen alle Parameter bekannt sein, bevor die Ausdrucksbeschränkungen ausgewertet werden können.
Referenzieren von Methoden oder Ausdrucks-Fragmenten für numerische Parameter in Funktionen
Numerische Parameter können standardmäßig auch als Argumente, Standard-Java- und benutzerdefinierten Funktionen verwendet werden. Die folgenden Abschnitte bieten Alternativen zum Referenzieren einer Methode oder eines Ausdrucksfragments.
Berücksichtigen Sie in den folgenden Beispielen D_1, D_2, D_3, D_4, D_5 und D_6 als reelle Parameter (Java double), während P_1, P_2, P_3 und P_4 als Ganzzahl (Java long)-Parameter verwendet werden. Außerdem ist GeomFunctions der Name der benutzerdefinierten Klasse aus dem Paket ext.geom, das geometrische Funktionen enthält.
Den vollständigen Klassenpfad zur Methode verwenden
Der vollständig qualifizierte Name (<package path>.<class name>.<method name>) kann verwendet werden, um die Funktion anzugeben, die die Parameter als Argumente übergibt. In den nachfolgenden Beispielen wird dieser Ansatz veranschaulicht:
D_1 == java.lang.Math.cos(D_2) + java.lang.Math.sin(D_3)
P_1 == java.lang.StrictMath.addExact(P_2, P_3)
D_4 == ext.geom.GeomFunctions.area(D_5, D_6)
Mit den Importdeklarationen
Die zu importierenden Klassen können in der Datei WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties wie folgt angegeben werden:
exparser.import.1=java.lang.Math
exparser.import.2=java.lang.StrictMath
exparser.import.3=ext.geom.GeomFunctions
Wenn die obigen Importdeklaration verwendet werden, kann der Paketpfad weggelassen werden, wenn die Funktion in den Ausdrücken genannt wird:
D_1 == Math.exp(D_2)
P_1 == StrictMath.round(D_3)
D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
Statische Importdeklarationen verwenden
Statische Importdeklarationen können zunächst wie folgt in der Datei WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties wie folgt angegeben werden:
exparser.static.import.1=java.lang.Math
exparser.static.import.2=ext.geom.GeomFunctions
Sowohl der Paketpfad als auch der Klassenname können ausgelassen werden, was nur den Methodennamen zurücklässt, wenn die Funktion im Ausdruck beim Verwenden von statischen Importdeklarationen angegeben wird:
D_1 == exp(D_2)
P_1 == round(D_3)
D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
Wenn eine Methode mit dem gleichen Namen in mehreren in den statischen Importen registrierten Klassen vorhanden ist, wird ein Ausnahmefehler angezeigt. Beispiel: java.lang.Math und java.lang.StrictMath haben viele Methodennamen gemeinsam. Das Registrieren beider Klassen als statische Importe führt zu Fehlerbedingungen, wenn derartige gemeinsam verwendete Methoden in Formeln verwendet werden.
Abkürzungen (Aliasse) für Methoden verwenden
Die Zuordnung zwischen einer Abkürzung für eine Methode und dem vollständigen Pfad zur Methode kann in der Datei WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties wie folgt definiert werden:
exparser.abbreviation.1=SURFACE_AREA=ext.geom.GeomFunctions.area
exparser.abbreviation.2=ARC_TAN=java.lang.StrictMath.atan
Sobald die Zuordnung zwischen einer Abkürzung für eine Methode und ihrem vollständigen Pfad definiert ist, können Sie diese Aliasse verwenden, um auf die Funktion im Ausdruck zuzugreifen:
D_1 == ARC_TAN(D_2)
D_3 == SURFACE_AREA(D_4, D_5)
Diese Technik ist hilfreich, wenn Sie eine Methode aus einer Java-Klasse so neu definieren möchten, dass ihr Name mit dem Namen einer Funktion in einer anderen Anwendung wie Microsoft Excel identisch ist. Wenn Sie die ato.expression.rendering.context=com.ptc.wpcfg.logic.XLSExpressionRenderingContext Einstellung in der Datei WT_HOME/wt.properties festlegen, fügt das System entsprechende Aliasse hinzu, um Zugang zu den meisten numerischen, Text- und logischen Funktionen durch die Namen, die in der Anwendung Microsoft Excel verwendet werden, zu bieten. Numerische Funktionen sind u.a. ABS, ACOS, ASIN, ATAN, CEILING, COS, DEGREES, FLOOR, INT, LN, LOG, MAX, MIN, MOD, POWER, RADIANS, ROUND, ROUNDDOWN, ROUNDUP, SIN, SQRT, TAN, ACOSH, ASINH, ATANH, COMBIN, COSH, EXP, FACT, LOG10, SIGN, SINH, TANH.
Mit Makros
Während eine Abkürzung einen Alias für den vollständigen Funktionspfad einer einzelnen Funktion bereitstellt, ist ein Makro ein Alias für ein Ausdrucksfragment. Dies ist hilfreich, wenn ein Ausdrucksfragment wiederholt in mehreren Ausdrücken verwendet wird. Deklarationen für Importe, statische Importe und Abkürzungen werden direkt während des Parsens eines Ausdrucks gelöst. Makrofragmente werden zunächst anstelle von Makros im Ausdruck eingesetzt, und anschließend wird der Ausdruck analysiert. Wie andere Parser-Eigenschaften werden Makro-Zuordnungen wie folgt in der Datei WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties definiert:
exparser.macro.1=AREA=SURFACE_AREA(D_2, D_3)
exparser.macro.2=SUM=java.lang.StrictMath.addExact(P_2, P_3)
Anschließend können Sie die Makros in den folgenden Ausdrücken verwenden:
D_1 == AREA + 10.2
P_1 == SUM + P_4
War dies hilfreich?