Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Gianmaria De Tommasi » 16.Programmazione di PLC - Lo standard IEC 61131-3


Indice della lezione

Lo standard IEC 61131-3

  • variabili e tipi di variabili
  • linguaggi di programmazione
  • linguaggio ladder (LD)
  • diagramma a blocchi funzionali (FBD)
  • lista di istruzioni (IL)
  • testo strutturato (ST)
  • diagramma sequenziale funzionale (SFC)

unità di organizzazione della programmazione (POU)

Lo standard IEC 61131-3

Lo standard del comitato elettrotecnico internazionale IEC 61131-3 definisce:

  • i linguaggi di programmazione per PLC
  • come struttura un progetto di automazione per PLC (insieme del codice, dei dati e dei parametri di configurazione di un architettura di controllo basata su PLC)

Uno degli obiettivi dello standard è quello di aumentare la portabilità di progetti di automazione tra piattaforme di diverse case produttrici.

Ad oggi tutti i grandi produttori (Rockwell, Siemens, ecc.) aderiscono solo parzialmente allo standard.

Da diversi anni, però, esistono in commercio dispositivi fully-compliant con lo standard, un esempio è rappresentato dai prodotti Beckhoff

Variabili e tipi di variabili

Lo standard definisce i tipi di variabili che è possibile utilizzare nel codice andando a definire:

  • le parole chiave che identificano i vari tipi
  • l’intervallo di valori rappresentabile
  • il valore di inizializzazione per ogni tipo di variabile
  • le regole per creare tipi derivati definiti dall’utente

Esempio

Il tipo intero è identificato dalla parola chiave INT ed i valori ammissibili sono quelli compresi nell’intervallo [-32768,32767], il che implica una implementazione su 16 bit. Il valore iniziale per questo tipo è 0.

 

Esempi di tipi di variabili definiti dallo standard

Per rappresentare valori numerici esistono i seguenti tipi:

  • intero -> INT
  • intero senza segno -> UINT
  • reali -> REAL

Sono inoltre definiti il tipo booleano (BOOL), stringa (STRING), BYTE, WORD (parola a 16 bit), DWORD (parola a 32 bit), LWORD (parola a 64 bit)

Inoltre esistono tipi speciali per gestire il tempo, come

  • TIME, che consente di definire intervalli di tempo
  • DATE, che cosente di definite date
  • TIME_OF_DAY, che consente di definire un determinato orario in un giorno
  • DATE_AND_TIME, che consente di definire un giorno ed un orario

 

 

Tipi derviati

Lo standard mette a disposizione diversi modi per derivare nuovi tipi di variabili a partire dai tipi base.

In particolare un nuovo tipo può essere derivato mediante:

  • equivalenza (consente di rinominare un tipo e può essere utile per migliorare la capacità autodocumentante del codice)
  • enumerazione
  • restrizione (consente di ridefinire l’intervallo di valori consentiti di un tipo già esistente)
  • creazione di vettori (array)
  • creazione di strutture (structure)

 

Dichiarazione delle variabili

Tutte le variabili vanno dichiarate tra le parole chiave VAR ed END_VAR

Esempio

VAR

pippo : BOOL;

numero : INT := 3; (* è possibile inizializzare una variabile all’atto della dichiarazione *)

numero2 : INT; (* se non inizializzata una variabile assume il valore iniziale standard *)

END_VAR


Dichiarazione delle variabili

Esistono parole chiave diverse per poter definire

  • variabili d’ingresso (VAR_INPUT END_VAR)
  • variabili d’uscita (VAR_OUTPUT END_VAR)
  • variabili di ingresso/uscita (VAR_IN_OUT END_VAR)

E’ possibile definire variabili la cui visibilità è globale attaverso VAR_GLOBAL, oppure variabili che sono memorizzate su un dispositivo collegato via rete a quello che si sta programmando utilizzando VAR_ACCESS

Lo standard prevede anche i seguenti attributi che posson essere specificati all’atto della dichiarazione di una variabile

  • RETAIN, indica che il valore deve essere mantenuto anche in caso di mancanza di alimentazione (nota: lo standard non specifica come implementare questa funzionalità)
  • CONSTANT, per definire una costante
  • AT, per specificare la locazione di memoria nella quale la variabile deve essere memorizzata

Indirizzamento diretto della memoria

Lo standard prevede anche una sintassi per accedere direttamente alla memoria del PLC.

Il formato da seguire per specificare un indirizzo di memoria deve essere

%ABxxxxxx

dove:

  • A indica l’area di memoria alla quale si vuole accedere (I=ingressi, Q=uscite, M=memoria interna)
  • B indica la taglia (X=bit, B=byte, W=word,…)

Linguaggi di programmazione

Lo standard prevede 5 linguaggi di programmazione, 3 grafici e 2 testuali:

  • Linguaggio a contatti (Ladder Diagram, LD) – linguaggio grafico
  • Diagramma a blocchi funzionali (Functional Block Diagram, FBD) - linguaggio grafico
  • Lista d’istruzioni (Instruction List, IL) – linguaggio testuale
  • Testo strutturato (Structured Text, ST) - linguaggio testuale
  • Diagramma funzionale sequenziale (Sequential Functional Chart, SFC) - linguaggio grafico

I primi tre linguaggio sono linguaggi di basso livello, consentendo il controllo del flusso di programma solo con salti, mentre gli ultimi due consentono di implementare direttamente scelte e cicli (pertanto sono considerati linguaggi di alto livello).

 

 

 

Linguaggio a contatti (Ladder Diagram)

E’ il linguaggio di programmazione per PLC più diffuso (forse perchè uno dei primi)

Un programma Ladder è scritto all’interno di due linee che indicano l’alimentazione. Ogni istruzione (rung) è rappresentata attraverso una riga orizzontale che congiunge le linee di alimentazione.

La tipica istruzione è divisa in due parti. La parte di sinistra è detta zona di test e sono presenti le variabili di ingresso o variabili interne. La zona di destra detta zona di azione comprende le uscite esterne o interne nonché i blocchi di funzione avanzata. L’energia può fluire solo da sinistra verso destra.

Qualche esempio si trova qui e qui

Diagramma a blocchi funzionali (Functional Block Diagram)

Il Functional Block Diagram è un linguaggio grafico in cui il programma si ottiene collegando tra loro blocchi funzionali elementari, come:

  • funzioni logiche (AND, OR, XOR,…)
  • operazioni aritmetiche (ADD, SUB,…)
  • contatori (CTU, CTD,…)
  • temporizzatori (TP, TON,…)

E’ possibile utilizzare la “retroazione” di un segnale d’uscita per utilizzarne il valore al passo di campionamento precedente come ingresso di un blocco utilizzato per determinare l’uscita stessa.

Lista di istruzioni (Instruction List)

L’Instruction List è un linguaggio di programmazione testuale simile all’assembler.

L’architettura di rifeirmento è basata su accumulatore, pertanto ogni operazione viene effettuata tra l’operando e il contenuto dell’accumulatore ed il risultato viene memorizzato nell’accumulatore.

La sintassi delle istruzioni è

OPERANDO[MODIFICATORE] OPERANDO

 

Testo strutturato (Structured Text)

E’ un linguaggio testuale di alto livello molto simile al Pascal

Diagramma funzionale sequenziale (SFC)

L’SFC è un linguaggio grafico di alto livello derivato dalle reti di Petri, pertanto è uno strumento per modellare sistemi dinamici (in particolare sistemi ad eventi discreti)

Un programma SFC è costituito da più grafi bipartiti orientati i cui elementi base sono

  • le FASI (STEP)
  • le TRANSIZIONI (TRANSITION)
  • gli ARCHI ORIENTATI (ORIENTED ARC)
  • le AZIONI (ACTION)

dove FASI e TRANSIZIONI rappresentano le due tipologie di nodi del grafo; in particolare:

  • la FASE è una condizione invariante del sistema modificabile solo dall’occorrenza di un determinato evento
  • l’EVENTO attiva una transizione che porta il sistema in una nuova fase
  • quando una FASE è attiva, vengono eseguite tutte le AZIONI associate a quella FASE

Condizione di un SFC

  • Una fase, quindi, può essere ATTIVA oppure INATTIVA.
  • La CONDIZIONE di un grado SFC è l’insieme delle fasi attive
  • E’ possibile definire delle FASI INIZIALI.

Regola di evoluzione di un SFC

Una transizione si dice abilitata se tutte le fasi a monte sono attive

Una transizione si dice superabile se è abilitata e la condizione logica associata risulta vera

La REGOLA DI EVOLUZIONE di un SFC stabilisce come evolve dinamicamente la condizione dell’SFC (vale a dire come cambia l’insieme delle fasi attive)

La regola di evoluzione stabilisce che se una transizione è superabile essa viene superata, cioé tutte le fasi a monte vengono disattivate (spente) e quelle a valle attivate (accese)

SFC – Strutture di programmazione

Le uniche due regole sintattiche da rispettare nel costruire un grafo SFC sono:

  • tra due transizioni ci sia sempre una fase
  • tra due fasi ci sia sempre una transizione

Le strutture tipiche di programmazione sono:

  • la sequenza – sequenza di fasi e transizioni
  • la scelta (divergenza) – più transizioni a valle di una fase
  • la convergenza - più transizioni a monte di una fase
  • il parallelismo (concorrenza) – più fasi a valle di una transizione
  • la sincronizzazione - più fasi a monte di una transizione

Unità di organizzazione della programmazione (POU)

Secondo lo standard, un progetto di automazione è l’insieme di unità di organizzazione della programmazione (POU), le quali consentono di organizzare (strutturare) il codice e di definire la configurazione del dispositivo di controllo.

 

 

POU per la strutturazione del codice

Lo standard prevede le seguenti POU per poter strutturare il codice di automazione

  • funzioni (parola chiave FUNCTION)
  • blocchi funzionali (parola chiave FUNCTION_BLOCK)
  • programmi (parola chiave PROGRAM)

Ognuna di queste tre POU è composta da 3 sezioni:

  • sezione di definizione del tipo di POU (funzione, blocco funzionale, programma)
  • sezione di dichiarazione delle variabili
  • corpo (codice)

 

 

Funzioni

Le FUNZIONI

  • sono POU riutilizzabili
  • hanno un’unica uscita (che può essere anche una struttura)
  • l’uscita dipende solo dagli ingressi
  • possono essere scritte in tutti i linguaggi di programmazione tranne che in SFC

Lo standard prevede un certo numero di funzioni predefinite (funzioni di conversione di formato, funzioni per operazioni aritmetiche, funzioni di manipolazione di stringhe, ecc.)

Blocchi funzionali

I BLOCCHI FUNZIONALI

sono POU riutilizzabili e possono essere assimilati a classi con un solo metodo di un linguaggio di programmazione ad oggetti

il valore dell’uscita dipende sia dagli ingressi che dallo stato interno del blocco

possono essere scritti un tutti i linguaggi previsti dallo standard (incluso l’SFC)

Anche in questo caso lo standard mette a disposizione una serie di blocchi funzionali predefiniti (contatori, temporizzatori, ecc.)

Programmi

I PROGRAMMI sono contenitori di funzioni e blocchi funzionali che posso essere direttamente eseguiti da una risorsa di un dispositivo di controllo.

All’interno di un programma è possibile indirizzare variabili direttamente in memoria, dichiarare variabile globali oppure definite in dispositivi collegati via rete.

POU per la configurazione del dispositivo di controllo

Lo standard definisce i seguenti POU per la configurazione del dispositivo di controllo

COMPITI (TASK) – consente di definite una modalità di esecuzione (ciclica, periodica oppure ad eventi) ed associarvi dei programmi

RISORSE (RESOURCE) – consente di definire risorse capaci di eseguire programmi ed associarvi dei programmi

CONFIGURAZIONE (CONFIGURATION) – è il contenitore di tutto il software di un progetto di automazione (compiti, risorse, funzioni, blocchi funzionali, programmi, variabili globali, …)

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion