在進階邏輯中使用數值運算子與函數
可以為多種不同類型定義參數。此部份內容提供於進階邏輯中在數值參數上使用運算子與函數的範例。
數值參數的運算子
您可為整數或實數類型定義參數。雖然這些類型對應於可對應參數的 Windchill 類型定義,但這些類型分別從內部對應至長整數與雙精度浮點數的 Java 原始類型,以使其在任何有效的 Java 運算式中作為長整數與雙精度浮點數變數使用。
您可從下列位置定義運算式:
• 定義參數實際值或預設值之參數的
「運算式」欄位。如需有關在參數中使用運算式的其他資訊,請參閱
編輯參數視窗的資訊標籤。
• 「運算式」類型的條件約束的運算式計算結果必須為布林值。如需有關運算式條件約束類型的其他資訊,請參閱
運算式編輯器。
• 運算式也可以在進階案例表中使用。如需有關進階案例表的其他資訊,請參閱
案例表編輯器。
算術運算子
算術運算子可在運算式中與數值參數搭配使用。算術運算子包括二進位加法 (+)、減法 (-)、乘法 (*)、除法 (/) 運算子。例如,以下是運算式條件約束的範例:
• 2 * a – 3 * b == c / d + e / 3
• A == 2.5 * B / C – D / 7.5
也可使用單一入口或一元運算子 - 與 + (+A 等同於 A)。
• A == -B + 2 * C
• D = +A – (-C)
模數 (%) 運算子可用來計算第一個引數除以第二個引數的餘數:
A == B % 7
關係運算子
關係運算子可用來比較運算式條件約束中必須計算為布林值的數值子運算式。這些運算子包括:
• 等於 (==)
• 大於 (>)
• 小於 (<)
• 大於或等於 (>=)
• 小於或等於 (<=)
• 不等於 (!=)
|
「等於」運算子必須寫為 "==",而不是 "="。
|
當具有 "==" 運算子的運算式左側或右側包含單一運算式時,會將運算式視為指派 (=)。例如,在下列運算式條件約束中:
• A == 2 * B + 3 * C
• B / 4 - C / 3 == A
如果參數 B 與 C 的值已知,則會根據公式計算參數 A 的值。在上面的範例中,應將參數 A 定義為非輸入參數,使其值是由方程式計算,而不是由使用者輸入,然後再由方程式計算。這也表示輸入順序很重要,其中 B 和 C 是在 A 出現之前定義的。如果以其他任何順序 (例如在參數 B 和 C 之前指派參數 A) 定義,則會將運算式視為布林運算式,這時候會將參數 A 的值與根據 B 與 C 的值計算的方程式值進行比較。
|
當兩側都包含一個以上的參數時,必須先知道所有參數,才能計算運算式條件約束。
|
參考函數中數值參數的方法或運算式片段
在 OOTB 情況下、標準 Java 與使用者定義函數中,數值參數也可作為引數使用。接下來幾部份內容提供參考方法或運算式片段的替代方法。
在以下範例中,請將 D_1、D_2、D_3、D_4、D_5 與 D_6 視為實數 (Java 雙精度浮點數) 參數,而將 P_1、P_2、P_3 與 P_4 視為整數 (Java 長整數) 參數。此外,GeomFunctions 也是封裝 ext.geom 中包含幾何函數的使用者定義類別的名稱。
使用該方法的完全類別路徑
您可使用完全合格的名稱 (<package path>.<class name>.<method name>) 來指定將參數作為引數傳遞的函數。下列範例說明了此方法:
• 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)
使用匯入宣告
可在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 檔案中指定要匯入的類別,方式如下:
exparser.import.1=java.lang.Math
exparser.import.2=java.lang.StrictMath
exparser.import.3=ext.geom.GeomFunctions
如果使用上述匯入宣告,當在運算式中指定函數時,可以省略封裝路徑:
• D_1 == Math.exp(D_2)
• P_1 == StrictMath.round(D_3)
• D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
使用靜態匯入宣告
靜態匯入宣告可先在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 檔案中指定,方式如下:
exparser.static.import.1=java.lang.Math
exparser.static.import.2=ext.geom.GeomFunctions
當使用靜態匯入宣告而在運算式中指定函數時,可以省略封裝路徑與類別名稱:
• D_1 == exp(D_2)
• P_1 == round(D_3)
• D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
如果在靜態匯入中註冊的多個類別中存在名稱相同的方法,會顯示例外錯誤。例如,java.lang.Math 與 java.lang.StrictMath 有許多通用方法名稱。在公式中使用此類通用方法時,將這兩個類別註冊為靜態匯入會導致發生錯誤狀況。
使用方法縮寫 (別名)
方法的縮寫與方法的完整路徑之間的對應可在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 檔案中定義,方法如下:
exparser.abbreviation.1=SURFACE_AREA=ext.geom.GeomFunctions.area
exparser.abbreviation.2=ARC_TAN=java.lang.StrictMath.atan
當已定義方法的縮寫及其完整路徑之間的對應時,可使用這些別名來存取運算式中的函數:
• D_1 == ARC_TAN(D_2)
• D_3 == SURFACE_AREA(D_4, D_5)
如果您要將來自 Java 類別的方法重新定義為與其他應用程式 (例如 Microsoft Excel) 中的函數名稱相同,此技巧很有用。當設定 WT_HOME/wt.properties 檔案中的 ato.expression.rendering.context=com.ptc.wpcfg.logic.XLSExpressionRenderingContext 內容時,系統會新增適當的別名,來按在 Microsoft Excel 應用程式中使用的名稱提供對大多數數值、文字與邏輯函數的存取權。數值函數包括 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。
使用巨集
儘管縮寫為單一函數的完整函數路徑提供了別名,巨集仍是運算式片段的別名。當在多個運算式中重複使用運算式片段時,此方法很有用。剖析運算式時,會即時解決匯入、靜態匯入與縮寫宣告。巨集片段會先替代運算式中的巨集,然後運算式才會被剖析。與其他剖析器內容一樣,可在 WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties 檔案中定義巨集對應,方式如下:
exparser.macro.1=AREA=SURFACE_AREA(D_2, D_3)
exparser.macro.2=SUM=java.lang.StrictMath.addExact(P_2, P_3)
之後,您便可在下列運算式中使用巨集:
• D_1 == AREA + 10.2
• P_1 == SUM + P_4