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 di priorità per gli operatori aritmetici è: * / \ + -

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.

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.

Esempio

If espressione1

then espressione2

else espressione3

endif

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: (startposition[;length]).

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