Utilizzo di funzioni e operatori numerici nella logica avanzata
È possibile definire parametri per vari tipi. Questa sezione illustra alcuni esempi per l'utilizzo di operatori e funzioni su parametri numerici nella logica avanzata.
Operatori per i parametri numerici
È possibile definire parametri per tipi Numero intero o Numero reale. Sebbene questi tipi corrispondano alle definizioni dei tipi di Windchill a cui è possibile mappare il parametro, tali tipi vengono mappati internamente ai tipi primitivi Java, rispettivamente lungo e doppio, consentendone l'utilizzo in qualsiasi espressione Java valida come variabili lunghe e doppie.
Le espressioni possono essere definite dagli elementi riportati di seguito.
• Un vincolo di tipo
Espressione richiede che l'espressione restituisca un valore booleano. Per ulteriori informazioni sui tipi di vincolo delle espressioni, vedere
Editor espressioni.
• Le espressioni possono essere utilizzate anche in una tabella casi avanzata. Per ulteriori informazioni sulle tabelle casi avanzate, vedere
Editor tabella casi.
Operatori aritmetici
Gli operatori aritmetici possono essere utilizzati con parametri numerici nelle espressioni. Includono gli operatori binari di addizione (+), sottrazione (-), moltiplicazione (*) e divisione (/). Di seguito sono riportati gli esempi dei vincoli di espressione.
• 2 * a – 3 * b == c / d + e / 3
• A == 2.5 * B / C – D / 7.5
È inoltre possibile utilizzare operatori unari o a voce singola - e + (+A equivale ad A).
• A == -B + 2 * C
• D = +A – (-C)
L'operatore modulo (%) può essere utilizzato per calcolare il resto dalla divisione tra il primo argomento e il secondo argomento:
A == B % 7
Operatori relazionali
Gli operatori relazionali vengono utilizzati per confrontare le sottoespressioni numeriche nei vincoli di espressione che devono restituire un valore booleano. Includono gli operatori di seguito elencati.
• uguale a (==)
• maggiore di (>)
• minore di (<)
• maggiore di o uguale a (>=)
• minore di o uguale a (<=)
• diverso da (!=)
|
L'operatore "uguale a" deve essere scritto come "==" e non come "=".
|
Se il lato sinistro o destro dell'espressione con l'operatore "==" contiene una singola espressione, l'espressione viene considerata come un'assegnazione (=). Si vedano, ad esempio, i vincoli di espressione di seguito riportati.
• A == 2 * B + 3 * C
• B / 4 - C / 3 == A
Quando i valori dei parametri B e C sono noti, il valore del parametro A viene calcolato in base alle formule. Negli esempi precedenti è opportuno definire il parametro A come parametro non di input, in modo che il relativo valore venga calcolato dalla formula anziché immesso dall'utente e poi calcolato dalla formula. Questo significa anche che è importante l'ordine di input, in base al quale B e C vengono definiti prima dell'aspetto di A. Se i parametri vengono definiti in un altro ordine, e al parametro A viene assegnato il relativo valore prima dei parametri B e C, l'espressione viene considerata come un'espressione booleana in cui il valore del parametro A viene confrontato con il valore della formula valutato in base ai valori di B e C.
|
Se entrambi i lati contengono più di un singolo parametro, tutti i parametri devono essere noti prima che i vincoli di espressione possano essere valutati.
|
Riferimenti a metodi o frammenti di espressione per parametri numerici nelle funzioni
I parametri numerici possono essere utilizzati anche come argomenti nelle funzioni predefinite, Java standard e definite dall'utente. Le sezioni riportate di seguito forniscono alternative per referenziare un metodo o un frammento di espressione.
Negli esempi riportati di seguito considerare i parametri D_1, D_2, D_3, D_4, D_5 e D_6 come reali (Java doppi), mentre P_1, P_2, P_3 e P_4 come parametri interi (Java lunghi). GeomFunctions è inoltre il nome della classe definita dall'utente, dal package ext.geom, contenente funzioni geometriche.
Utilizzo del percorso completo di classe del metodo
Il nome completo (<package path>.<class name>.<method name>) può essere utilizzato per specificare la funzione che passa i parametri come argomenti. Questo approccio viene illustrato negli esempi riportati di seguito.
• 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)
Utilizzo delle dichiarazioni di importazione
Le classi da importare possono essere specificate nel file WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties come segue:
exparser.import.1=java.lang.Math
exparser.import.2=java.lang.StrictMath
exparser.import.3=ext.geom.GeomFunctions
Se vengono utilizzate le dichiarazioni di importazione precedenti, il percorso del package può essere omesso quando si specifica la funzione nelle espressioni:
• D_1 == Math.exp(D_2)
• P_1 == StrictMath.round(D_3)
• D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
Utilizzo di dichiarazioni di importazioni statiche
Le dichiarazioni di importazione statiche possono essere prima specificate nel file WT_HOME/codebase/com/ptc/wpcfg/exparser/lookUpService.properties come segue:
exparser.static.import.1=java.lang.Math
exparser.static.import.2=ext.geom.GeomFunctions
È possibile omettere sia il percorso del package che il nome della classe, lasciando solo il nome del metodo, quando si specifica la funzione nell'espressione in caso di utilizzo di dichiarazioni di importazioni statiche:
• D_1 == exp(D_2)
• P_1 == round(D_3)
• D_3 == ext.geom.GeomFunctions.volume(D_4, D_5, D_6)
Se un metodo con lo stesso nome esiste in più classi registrate nelle importazioni statiche, viene visualizzato un errore di eccezione. Ad esempio, java.lang.Math e java.lang.StrictMath hanno molti nomi di metodo in comune. La registrazione di entrambe le classi come importazioni statiche causerà condizioni di errore durante l'utilizzo di tali metodi comuni nelle formule.
Utilizzo delle abbreviazioni (alias) per i metodi
La mappatura tra un'abbreviazione di un metodo e il relativo percorso completo può essere definita nel file WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties come segue:
exparser.abbreviation.1=SURFACE_AREA=ext.geom.GeomFunctions.area
exparser.abbreviation.2=ARC_TAN=java.lang.StrictMath.atan
Una volta definita la mappatura tra un'abbreviazione di un metodo e il relativo percorso completo, è possibile utilizzare questi alias per accedere alla funzione nell'espressione:
• D_1 == ARC_TAN(D_2)
• D_3 == SURFACE_AREA(D_4, D_5)
Questa tecnica è utile se si desidera ridefinire un metodo da una classe Java in modo che sia uguale al nome di una funzione in un'altra applicazione, ad esempio Microsoft Excel. Impostando la proprietà ato.expression.rendering.context=com.ptc.wpcfg.logic.XLSExpressionRenderingContext nel file WT_HOME/wt.properties, il sistema aggiunge gli alias appropriati per consentire l'accesso alla maggior parte delle funzioni numeriche, di testo e logiche in base ai nomi utilizzati nell'applicazione Microsoft Excel. Le funzioni numeriche sono 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.
Utilizzo delle macro
Mentre un'abbreviazione fornisce un alias per il percorso completo di una singola funzione, una macro è un alias per un frammento di espressione. È utile quando un frammento di espressione viene utilizzato ripetutamente in più espressioni. Le dichiarazioni di importazione, importazione statica e abbreviazione vengono risolte rapidamente quando un'espressione viene analizzata. I frammenti di macro vengono prima sostituiti alle macro nell'espressione, quindi l'espressione viene analizzata. Come altre proprietà del parser, le mappature di macro sono definite nel file WT_HOME/codebase/com/ptc/wpcfg/exparser/LookUpService.properties come indicato di seguito.
exparser.macro.1=AREA=SURFACE_AREA(D_2, D_3)
exparser.macro.2=SUM=java.lang.StrictMath.addExact(P_2, P_3)
È quindi possibile utilizzare le macro nelle espressioni seguenti:
• D_1 == AREA + 10.2
• P_1 == SUM + P_4