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.
Espressioni
Operatori e parole chiave TS (quali MUL, AND, FOR, RETURN ecc.) si devono immettere in maiuscole. Altrimenti vengono interpretati come variabili.
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 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.
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 |
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".
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:
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.
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
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
Nell'esempio, l'istruzione di assegnazione Le seguenti verifiche vengono eseguite dal compilatore. Se una verifica fallisce, nella finestra dei messaggi viene segnalato un corrispondente errore.
Per uscire dall'anello, usare un'istruzione di selezione combinata con l'istruzione EXIT (vedere sotto). |
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.
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).
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 ( |
CASE |
CASE f OF
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 |
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. |
Informazioni dettagliate sulla sintassi dei richiami di funzioni / blocchi di funzione si trovano nell'argomento "Funzioni / blocchi di funzione: inserire".
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.
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.