| # Editor dei vincoli Sintassi delle espressioni di vincolo La sintassi delle espressioni di vincolo è un sottoinsieme della sintassi degli strumenti di LN. È possibile creare espressioni di vincolo utilizzando le seguenti istruzioni di base. Operatori aritmetici: * (moltiplicazione) / (divisione) + (addizione) - (sottrazione) \ (resto della divisione) & (collegamento di matrici alfanumeriche) Operatori logici: or and not Operatori relazionali: = (uguale a) > (maggiore di) >= (maggiore o uguale a) <> (diverso da) < (minore di) <= (minore o uguale a) Espressioni di dominio A è {a1,a2,a3-a4,..} significa: (A=a1 o A=a2 o A >= a3 e A <= a4 e così via). La sintassi dell'espressione di dominio è una notazione abbreviata per espressioni logiche riguardanti il dominio di una variabile. Priorità all'interno delle espressioni Gli operatori aritmetici hanno una priorità più alta rispetto alle operazioni relazionali. Le operazioni relazionali hanno una priorità più alta rispetto agli operatori logici. La sequenza della priorità per gli operatori aritmetici è la seguente: * / \ + - La sequenza della priorità per gli operatori logici è la seguente: not, and, or È possibile utilizzare le parentesi tonde ('()') per modificare la sequenza della priorità per gli operatori aritmetici e logici. Esempio 3 + 4 * 5 = 23 (3 + 4) * 5 = 35 Espressioni booleane Le espressioni booleane possono restituire un valore true o false (1 o 0). Possono essere utilizzate nei vincoli e in particolare nelle espressioni condizionali. Esempio If not e then ' significa: If e = false then' oppure If e = 0 then' Costruzioni if-then-else Nei vincoli è possibile utilizzare costruzioni if-then-else complesse. È consentita la nidificazione di istruzioni. Esempio If espressione1 then espressione2 else espressione3 endif Una costruzione if-then-else è sempre chiusa da un'istruzione endif. L'istruzione else non è obbligatoria. Le istruzioni if, else ed endif iniziano sempre su una nuova riga. Le espressioni, anche di tipo condizionale, possono essere suddivise su più righe. È possibile definire un vincolo di convalida senza istruzioni if-then-else. In tal caso, il vincolo deve iniziare con c:. È possibile aggiungere commenti a un vincolo utilizzando il simbolo |. Durante il processo di configurazione, è possibile generare messaggi utilizzando la variabile "message", che può contenere fino a 80x25 righe di testo. Variabili di vincolo Nelle espressioni di vincolo è possibile utilizzare sia variabili globali che variabili locali. Le variabili globali sono variabili di vincolo definite dall'utente e caratteristiche di prodotto dichiarate come globali. Le variabili predefinite da Configurazione prodotti, ad esempio per quanto riguarda l'input, la visualizzazione, la lunghezza, la larghezza e così via, sono di tipo locale. Le variabili globali mantengono il valore assegnato durante tutto il processo di configurazione, a meno che il valore non venga modificato dall'utente. In una variabile di vincolo è possibile utilizzare le seguenti dichiarazioni del tipo: string (valore alfanumerico) (ad esempio: string macchina globale) long (numeri interi) (ad esempio: long i) double (frazioni) (ad esempio: double j) Le variabili di vincolo definite dall'utente devono essere sempre dichiarate al livello superiore del vincolo. Tutte le variabili locali vengono inizializzate prima dell'esecuzione del vincolo, il che significa che le variabili alfanumeriche vengono cancellate e alle variabili numeriche viene assegnato il valore zero. Le variabili globali relative all'input e alla convalida vengono inizializzate con il valore true. Utilizzo delle variabili di vincolo Nelle espressioni di vincolo le caratteristiche di prodotto devono essere racchiuse tra parentesi quadre di apertura e di chiusura ([......]). Le altre variabili possono essere utilizzate direttamente. Le variabili alfanumeriche (matrici di stringhe) possono essere indicizzate in base alla seguente notazione: (posizioneiniziale[;lunghezza]). Esempio [colore] = "rosso" validating = true I valori delle variabili possono essere alfanumerici o numerici. I valori alfanumerici devono essere racchiusi tra virgolette ("...."). I valori numerici possono essere immessi direttamente. Il separatore decimale è il punto ('.'). Esempio macchina(1;2) = "A5" volume = 28.673 Le costanti true/false possono essere utilizzate per espressioni booleane. Funzioni aritmetiche round(X,Y,Z): restituisce il valore arrotondato di X. Y rappresenta il numero di decimali e Z il metodo di arrotondamento (0 = per difetto, 1 = normale, 2 = per eccesso) val(A): restituisce il valore numerico della stringa A (val("8.7") = 8.7) abs(X): calcola il valore assoluto di X (abs(-10.3) = 10.3) int(X): restituisce il valore intero di X (int(11.6) = 11) pow(X,Y): eleva X alla potenza indicata da Y (pow(10,2) = 100) sqrt(X): restituisce la radice quadrata di X (sqrt(16) = 4) min(X,Y): restituisce il valore più piccolo tra X e Y (min(6,10) = 6) max(X,Y) : restituisce il valore più grande tra X e Y (max(6,10) = 10) pi: costante con valore PI (3,1415926...) Funzioni goniometriche sin(X), cos(X), tan(X): restituisce il seno, il coseno o la tangente di X (radiali) asin(X), acos(X), atan(X): restituisce l'arcoseno, l'arcocoseno o l'arcotangente di X hsin(X), hcos(X), htan(X): restituisce il seno iperbolico, il coseno iperbolico o la tangente iperbolica di X Funzioni logaritmiche exp(X): eleva e alla potenza indicata da X log(X): restituisce il logaritmo naturale di X in base a e log10(X): restituisce il valore del logaritmo di X in base alla potenza 10 Funzioni per valori stringa edit(X,Y): formatta il valore numerico X in base al formato Y (edit(10.3,"ZZZ9V.99") = " 10.30" str(X): inserisce il valore numerico nella stringa (str(10.3) = "10.3") len(X): restituisce la lunghezza della stringa X (len("abc") = 3) strip(X): elimina gli spazi dopo l'ultimo carattere (strip("A ") "A") pos(X,Y): restituisce la posizione della stringa Y all'interno della stringa X a partire da sinistra rpos(X,Y): restituisce la posizione della stringa Y all'interno della stringa X a partire da destra Funzioni di data date(): restituisce il numero di giorni tra il giorno 0 e la data corrente date(y,m,d): restituisce il numero di giorni tra il giorno 0 e la data immessa Esempio date(1995,06,01) = 728445 |