Elementi di codice TS

NOTA:

Usare l'Assistente di editazione per editare TS.

Il modo più conveniente per editare richiami di FU/BF in TS consiste nel trascinare i relativi oggetti di codice in forma di dima dall'Assistente di editazione nell'editore di codice. Si veda l'argomento "Sviluppo codice TS: funzioni / blocchi di funzione: inserire".

Questo argomento contiene informazioni sugli elementi di codice del linguaggio di programmazione di testo Testo Strutturato (TS) a norma CEI 61131.

NOTA:

Operatori e parole chiave TS (quali MUL, AND, FOR, RETURN ecc.) si devono immettere in maiuscole. Altrimenti vengono interpretati come variabili.

Espressioni

Le espressioni sono parte delle istruzioni. Un'espressione ritorna esattamente un valore che viene poi usato per l'esecuzione dell'istruzione nella quale è usata l'espressione.

Ogni espressione consiste di operandi e operatori o di richiami di funzione.

Operandi e operatori

Operandi e operatori sono ambedue parte di espressioni TS.

Gli operandi possono essere letterali, variabili o nomi di funzioni.

Gli operandi si combinano mediante operatori, ossia, gli operatori vengono applicati agli operandi.

In un'espressione, l'operatore con la priorità più alta viene elaborato per primo, seguito dagli operatori con la priorità via via più bassa.

NOTA:

Anche se il compilatore è in grado di risolvere la precedenza corretta di diversi operatori usati insieme nella stessa istruzione, conviene utilizzare parentesi per evidenziare la precedenza dell'operatore e migliorare la leggibilità del codice.

Sono definiti i seguenti operatori TS:

Operatore

Esempio

Valore esemplare

Descrizione

Priorità

( )

(INT#2 + INT#3) * (INT#4 + INT#5)

INT#45

Parentesi

Massima

-

-INT#10

INT#-10

Negazione

NOT

NOT TRUE

FALSE

Complemento

*, MUL

INT#10 * INT#3

INT#30

Moltiplicazione

/, DIV

INT#6 / INT#2

INT#3

Divisione

+, ADD

INT#2 + INT#3

INT#5

Addizione

-, SUB

INT#4 - INT#2

INT#2

Sottrazione

<, LT

>, GT

<=, LE

>=, GE

INT#4 > INT#12

FALSE

Confronto

=, EQ

T#26h = T#1d2h

TRUE

Uguale

<>, NE

INT#8 <> INT#16

TRUE

Disuguale

&, AND

TRUE & FALSE

FALSE

AND booleano

OR

TRUE OR FALSE

TRUE

OR booleano

XOR

TRUE XOR FALSE

TRUE

OR esclusivo booleano

Più basso

Istruzione di assegnazione

L'istruzione di assegnazione copia il valore dell'espressione a destra dell'operatore := alla variabile a sinistra:

variableName := expression;

Ambedue, la variabile e il valore dell'espressione, devono avere lo stesso tipo di dati. Altrimenti è necessario eseguire prima una conversione del tipo.

La conversione implicita del tipo da tipo di dati di sicurezza a tipo di dati standard è possibile utilizzando l'operatore di assegnazione. La conversione implicita del tipo da tipo di dati standard a tipo di dati di sicurezza non è permessa. Si veda l'argomento "Combinare variabili di sicurezza e standard in TS".

Istruzione di iterazione (anello)

Evitare anelli (loop) senza fine. Un anello senza fine può risultare in un Safety Logic Controller che non risponde. Tenere in conto i seguenti aspetti:

NOTA:
  • Assicurare che da ogni anello si possa uscire – o mediante una semplice condizione di anello programmata o mediante un'istruzione EXIT nell'anello.

  • Evitare complesse condizioni ad anello, utilizzare invece semplici espressioni booleane, quali a < 10.

  • Condurre verifiche approfondite della condizione da utilizzare per l'anello per escludere che l'anello sia senza fine.

  • Se si programma un'istruzione EXIT (disponibile solo a livello di 'Sistema') per terminare l'esecuzione dell'anello, l'istruzione EXIT deve essere raggiungibile nel codice.

    A tal fine controllare attentamente l'istruzione di selezione (costrutto IF o CASE) che costituisce la condizione per eseguire l'istruzione EXIT.

NOTA:

Evitare errori di watchdog.

L'esecuzione di anelli può risultare in un errore di watchdog del Safety Logic Controller causato dal superamento del tempo di ciclo massimo.

Ciò può verificarsi, ad esempio, quando un anello (loop) viene ripetuto molto spesso o un numero molto grande di istruzioni deve essere eseguito nel contesto dell'anello, ambedue le condizioni aumentano il carico del Safety Logic Controller.

Parola chiave

Esempio

Descrizione

FOR

FOR a:=1 TO 10 BY 3 DO

  incr:= start + a;

END_FOR;

Anello FOR: Istruzione di iterazione

Un gruppo di istruzioni viene eseguito ripetutamente incrementando la variabile di anello del valore incrementale specificato, partendo dal valore iniziale fino a raggiungere il valore finale. Il valore iniziale è specificato dal valore di costante assegnato alla variabile di anello. Il valore finale è specificato come seguente a TO e l'incremento (ampiezza di passo) è specificato come seguente a BY.

Nell'esempio, l'istruzione di assegnazione incr:= start + a viene eseguita ripetutamente incrementando la variabile di anello a di 3, partendo da 1 fino a 10.

Le seguenti verifiche vengono eseguite dal compilatore. Se una verifica fallisce, nella finestra dei messaggi viene segnalato un corrispondente errore.

  • Tutti i valori devono essere dello stesso tipo di dati (ANY_INT).

  • Sia il valore iniziale sia il valore finale della condizione per l'anello devono essere costanti (positive o negative).

  • È obbligatorio specificare se il valore di incremento BY (ampiezza di passo) è una costante positiva o negativa.

  • Sono permessi anelli in avanti (con l'istruzione di incremento che conta in su) e anelli indietro (istruzione di incremento conta in giù).

    Negli anelli in avanti, il valore finale della condizione per l'anello deve essere maggiore del valore iniziale e il valore di incremento BY (ampiezza passo) deve essere una costante positiva.

    Negli anelli indietro, il valore finale della condizione per l'anello deve essere minore del valore iniziale e il valore di incremento BY (ampiezza passo) deve essere una costante negativa.

  • La variabile di anello (a nell'esempio a sinistra) è a sola lettura e non deve essere scritta.

  • L'annidamento di anelli non è permesso.

Per uscire dall'anello, usare un'istruzione di selezione combinata con l'istruzione EXIT (vedere sotto).

Istruzioni di selezione, RETURN e EXIT

Le istruzioni di selezione come anche le istruzioni RETURN e EXIT abilitano la programmazione di codice condizionale che risulta in un flusso di controllo non lineare.

NOTA:

La norma IEC 61508-3 obbliga l'utente ad eseguire prove comprensive di queste parti di programma applicativo in base al criterio di copertura condizione/decisione modificata (Modified Condition/Decision Coverage – MC/DC).

NOTA:

In un'istruzione di selezione TS (IF o CASE) non è permesso l'accesso a parametri formali BF e non sono permessi richiami BF.

Parola chiave

Esempio

Descrizione

RETURN

RETURN;

Istruzione di return

L'istruzione di return esce dal blocco di funzione richiamato e ritorna alla UOP chiamante.

IF

IF a < b THEN c:=1;

ELSIF a=b THEN c:=2;

ELSE c:=3;

END_IF;

Istruzione di selezione

Un gruppo di istruzioni viene eseguito solo se l'espressione booleana associata (a< b nell'esempio a sinistra) è TRUE. Se la condizione è FALSE, o non viene eseguita alcuna istruzione o viene eseguito il gruppo di istruzioni che fa seguito a ELSE.

CASE

CASE f OF

  1: a:=3;

  2..5: a:=4;

  6: a:=2;

    b:=1;

ELSE a:=0;

END_CASE;

Istruzione di selezione

Un gruppo di istruzioni viene eseguito in base al valore dell'espressione che segue alla parola chiave CASE. La variabile o espressione f essere del tipo di dati ANY_INT.

EXIT

FOR a:=1 TO 3  BY 1 DO

  IF flag THEN EXIT;

  END_IF;

  SUM:= b + a;

END_FOR;

Istruzione di uscita

L'istruzione di uscita EXIT è permessa solo in istruzioni di iterazione (anelli) e si può usare per interrompere l'esecuzione di un anello.

Richiami di funzioni e blocchi di funzione

Informazioni dettagliate sulla sintassi dei richiami di funzioni / blocchi di funzione si trovano nell'argomento "Funzioni / blocchi di funzione: inserire".

Combinare variabili di sicurezza e standard in TS

NOTA:

Definizione dei termini: Standard = non relativo alla sicurezza.

Il termine "standard" si riferisce sempre a elementi/oggetti non relativi alla sicurezza. Esempi: un elemento di dati di un processo standard può venire letto/scritto solo da un dispositivo I/O non relativo alla sicurezza, ossia da un dispositivo standard. Sono dati non relativi alla sicurezza tutte le variabili / le funzioni / i blocchi di funzione standard. Il termine "controllore standard" designa un PLC non relativo alla sicurezza.

Variabili di sicurezza e standard si possono combinare in una istruzione TS a condizione di rispettare determinate regole. In genere, è possibile assegnare variabili di sicurezza a variabili standard, ma non viceversa.

Altre informazioni:

Per informazioni dettagliate si veda l'argomento "Combinare variabili di sicurezza e standard in TS".

Per facilitare la distinzione tra variabili standard e variabili di sicurezza, l'editore di codice TS le visualizza diversamente. Le variabili di sicurezza sono sottolineate in rosso, mentre le variabili standard non sono sottolineate.

Commenti

Si possono usare commenti racchiudendone il testo tra parentesi con asterischi:

(* questo è un commento *)