Differenti linguaggi di programmazioneStessi linguaggi ma differenti implementazioni
Difficoltà nell'utilizzo di sub-routine Difficoltà nel produrre software riutilizzabile Limiti nella definizione di strutture dati più
complesse Difficoltà nel differenziare l'esecuzione di pezzi di
uno stesso programma o di più programmi in base alle esigenze temporali
Limiti della Programmazione
Tradizionale dei PLC
Limiti dei linguaggi di programmazione tipo Ladder: per applicazioni di sequencing per eseguire funzioni più o meno complesse
(anche le semplici operazioni matematiche)
Limiti della Programmazione
Tradizionale dei PLC
International Electro-technical Committee (IEC) Commissione Tecnica: TC65 "Industrial Process
Measurement and Control“Sottocommissione: SC65B "Devices“
Working Group: WG7 "Programmable Control Systems".
Soluzione ai limiti prima evidenziati:
Standard IEC 1131-3
lo standard definisce 5 linguaggi: Ladder, Sequential Function Chart (SFC), Instruction List,
Function Block Diagram, Structured Text
lo standard permette approcci: top-down e bottom-up.
un programma può essere decomposto in Program Organisation Unit (POU)
lo standard permette il pieno controllo dell'esecuzione di ciascun "sotto-programma" tramite l'assegnazione a task
Caratteristiche principali
dello standard IEC 1131-3
lo standard permette la definizione di strutture dati: record, vettori.
lo standard garantisce in teoria la portabilità del software.
lo standard permette lo sviluppo di programmi orientati al sequencing (ad esempio tramite il Sequential Function Chart - SFC)
lo standard è basato sulla programmazione grafica
Caratteristiche principali
dello standard IEC 1131-3
Modello Software dello standard IEC 1131-3
Access Path
ConfigurationResource Resource
Task Task Task Task
Program Program Program
FB FB
Program
Var GlobaleF
Corrispondenza tra il Modello Software
e i Sistemi Reali
Configuration
Resource
programPLC program
Se il processore non supporta il multi-tasking, il numero di programmi è unitario
Corrispondenza tra il Modello Software
e i Sistemi Reali
Configuration
Resource
programProcessore
Mu
lti-
pro
cess
or
PL
C
Processore
Processore
program
Resource
program program
Resource
program program
Corrispondenza tra il Modello Software
e i Sistemi Reali
PLC PLC PLC PLC
FieldBus
Configuration
Resource
programprogram
Resource
programprogram
Resource
programprogram
POUs: program, function blocks, function La definizione di un POU permette il suo utilizzo un numero
di volte illimitato: chiamate di funzioni e istanze di Programma e Function Block
Ciascuna istanza di un Programma o di un Function Block condivide lo stesso codice, ma ha la sua area privata di memoria
Nell'ambito della stessa Configurazione è possibile utilizzare più istanze dello stesso programma in differenti Risorse
Nell'ambito dello stesso Programma è possibile utilizzare più istanze dello stesso Function Block
Non è ammessa alcuna ricorsione nelle POUs
Riusabilità del software:
Program Organisation Units (POUs)
Avviene tramite variabili globali definite a livello di: Configuration, Resource o di Program
E’ possibile l’uso dei parametri formali
Comunicazioni tra POUs
VAR_GLOBALx:REAL
VAR_EXTERNALx:REAL
Configuration
ResourceProgram X Program Y
VAR_EXTERNALx:REAL
Identificatori Un identificatore può essere costituito da una sequenza di lettere e numeri
purché siano soddisfatte le seguenti condizioni:il primo carattere non sia un numeronon ci siano più di due caratteri "_" consecutivinon vi siano spazi
Lo standard impone che almeno i primi 6 caratteri debbano differenziare due identificatori
Keywords Lo standard definisce un set di keywords (ad esempio VAR,
VAR_EXTERNAL, VAR_ACCESS). Si deve evitare l'uso di identificatori uguali alle keywords.
Commenti Vengono messi tra (* *)
Tipi di dati predefiniti: Interi, Reali, Time, Date, String, Boolean
Elementi in Comune tra i 5 linguaggi IEC 1131-3
Tipi Interi
IEC Data Type Description Bits Range
SINT short integer 8 -128,+127
INT integer 16 -32768, 32767
DINT double integer 32 -231, +231-1
LINT long integer 64 -263, 263-1
USINT unsigned short int 8 0, 255
UINT unsigned int 16 0, 216-1
UDINT unsigned double int 32 0, 232-1
ULINT unsigned long int 64 0, 264-1
Valori e/o Costanti: espresse dal numero decimale in base differente da quella decimale, preceduta dal prefisso
base# Esempi:
122#11111111 o 2#1111_1111 (255)8#377 (255)16#FF (255)
Variabili:
Tipi Reali
Valori e/o Costanti: espresse dal numero reale espresse tramite notazione scientifica (E o e) Esempi:
10.12310_234.54-1.65E-100.237e+14
Variabili:IEC data type description bits range
REAL real 32 1038
LREAL long real 64 10308
Tipo Duration (Time)
Valori e/o Costanti:
tramite gli operatori d, h, m, s, ms preceduti dall'operatore T# o TIME#
Esempi:
T#12d3h2s
T#3s56ms
TIME#6d_10m
TIME#16d5h3m4s
Variabili:
IEC data type Description bits
TIME time duration implementation dependent
Tipi DATES and TIMES of DAY
Valori e/o Costanti: DATE: formato anno-mese-giorno preceduti dall'operatore D# o DATE#
TOD:formato ora:minuti:secondi.decimi preceduti dall'operatore TOD# o TIME_OF_DAY#
DT: formato anno-mese-giorno-ora:minuti:secondi.decimi preceduti dall' operatore DT# o DATE_AND_TIME#
Esempi: D#1994-06-10 o DATE#1994-06-10
TOD#23:59:34.56 o TIME_OF_DAY#23:59:34.56
DT#1993-04-12-15:36:55.40 o DATE_AND_TIME#1993-04-12-15:36:55.40
Variabili:IEC data type description bits
DATE calendar date implementation dependent
TIME_OF_DAY o TOD time of day implementation dependent
DATE_AND_TIME o DT date and time of day implementation dependent
Tipo String
Valori e/o Costanti:
i caratteri vengono inseriti tra ‘ ‘
è possibile inserire caratteri di controllo: $N (new line), $P (new page), $R (carriage return), $T (tabulation), $’ (carattere ‘), $$ (carattere $)
Esempi:
‘questa e$’ una prova $N’
Variabili:IEC data type Description Bits
STRING character string Implementation dependent
Tipi String of Bit
Valori e/o Costanti:
FALSE, TRUE
Variabili:IEC data type description bits
BYTE bit string 8 bits 8
WORD bit string 16 bits 16
DWORD bit string 32 bits 32
LWORD bit string 64 bits 64
IEC data type Description
BOOL Boolean
Tipo Boolean Variabili:
Valori Iniziali di Default per ciascun tipo di dato
Interi: 0
Reali: 0.0
Time:0d0h0m0s
Date:0001-01-01
Stringhe: ‘’
Boolean: FALSE
Nota Bene: quando viene definita una variabile di un certo tipo, il suo valore iniziale può essere ridefinito
ANY
ANY_NUM
ANY_REAL
LREAL, REAL
ANY_INT
SINT, INT, DINT, LINT, USINT, UINT, ULINT, UDINT
ANY_BIT
BOOL, BYTE, WORD, DWORD, LWORD
STRING
ANY_DATE
DATE_AND_TIME, DATE, TIME_OF_DAY
TIME
Tipi di dato generici
(Overloading)
Record TYPE
nome:
STRUCT
nome_campo_1: tipo;
nome_campo_2: tipo;
…………..
nome_campo_n: tipo;
END_STRUCT;
END_TYPE;
EnumerativiTYPE
nome:(VALORE_1, VALORE_2, ..., VALORE_n);
END_TYPE;
Tipi di dato derivato
Range TYPE TYPE
nome: tipo(range); volts:int(-6..+12)
END_TYPE; END_TYPE;
VettoreTYPE
nome: ARRAY[inf..sup, inf..sup] OF tipo;
END_TYPE;
Tipi di dato derivato
Variabili Locali: dichiarate in un POU (programma, function block, funzione)
Variabili Globali : dichiarate in un Program, Resource e in una Configuration
Variabili Esterne: devono corrispondere a variabili globali
Variabili di Ingresso, Uscita, Ingresso/Uscita di un POU: programma, function block, funzione
Variabili con Riferimento Diretto
Definizione di Variabili
Variabili LocaliPossono essere definite solo in POU (program, function
block e funzioni) e hanno validità solo all'interno di tali POU
VAR
nome: tipo;
nome:tipo;
END_VAR;
Definizione di Variabili
Variabili globaliPossono essere definite solo nei Program, Resource e
Configuration. Esse hanno validità (dunque possono essere lette e scritte)
all'interno di tutti i POU esistenti dentro il Programma, Resource e Configuration, in cui la variabile globale è dichiarata come esterna (VAR_EXTERNAL).
VAR_GLOBAL
nome: tipo;
nome:tipo;
END_VAR;
Definizione di Variabili
Variabili esternePossono essere definite solo nei POUPermettono l'accesso a variabili globali definite nel
Program, Resource e Configuration, contenente il POU.
VAR_EXTERNAL
nome: tipo;
nome:tipo;
END_VAR;
Definizione di Variabili
Variabili InputPermettono ad un POU (Program, Function block,
Function) di ricevere dati dall'esterno.
VAR_INPUT
nome: tipo;
nome:tipo;
END_VAR;
Definizione di Variabili
Variabili OutputPermettono ad un POU di fornire dati all'esterno.
VAR_OUTPUT
nome: tipo;
nome:tipo;
END_VAR;
Variabili Input/OutputPermettono ad un POU di ricevere dati dall'esterno, e
consentono al POU di modificare tali dati.VAR_IN_OUT
nome: tipo;
nome: tipo;
END_VAR;
Definizione di Variabili
Variabili con riferimento direttoE' possibile non utilizzare simboli di variabile, ma fare
riferimento diretto a locazioni di memoria, ingressi e uscite.
Nota: Possono essere definite solo in un Program e NON in Function Blocks e Function (per la riusabilità del software)
Definizione di Variabili
Variabili con riferimento direttoAree in cui è divisa la memoria:
Input memory location. E' relativa alla memoria in cui vengono copiati gli ingressi relativi a ciascun canale di ingresso. Ogni indirizzo della memoria corrisponde ad un particolare canale di ingresso.
Output memory location. E' relativa alla memoria in cui vengono copiate le uscite relative a ciascun canale di uscita. Ogni indirizzo della memoria corrisponde ad un particolare canale di uscita.
Internal memory location. E' relativa alla memoria in cui vengono memorizzati i risultati intermedi della computazione (Registri, Flags).
Definizione di Variabili
Variabili con riferimento direttoSintassi per la definizione di variabili con riferimento
diretto:simbolo %uno tra i simboli: I (Input memory location), Q (Output memory
location), M (Internal memory location)uno tra i simboli: X (bit), B (byte), W (word 16 bit), D (Double
Word 32 bit), L (Long word 64 bit)indirizzo di memoria:
Ingressi/Uscite: numero rack oppure numero rack.numero ingressoMemoria interna: numero intero o numero intero.indice (ad esempio byte.bit)
Esempi:%IX0.0, %QX3.2, %IB0.0, %IB1, %QW0, %MW132 %MB20.1
Definizione di Variabili
RETAIN. Tale attributo permette alla variabile di riassumere il valore precedente ad una interruzione, quando il PLC viene nuovamente fatto ripartire (WARM Start-Partenza a Caldo)
VAR RETAIN
Speed: REAL;
END_VAR;
Attributi di Variabili
CONSTANT. L'attributo specifica che il valore attribuito alla variabile non può essere modificato. Questo attributo non può essere usato per variabili esterne.
VAR CONSTANT
Speed: REAL:=12.3;
END_VAR;
AT. Permette di attribuire ad una variabile simbolica, un indirizzo di memoria (I,Q,M) determinato.
VAR
Status AT %IX0.0: BOOL;
END_VAR;
Attributi di Variabili
COLD (Freddo) Durante una partenza COLD tutte le variabili sono
inizializzate a valori di default o a quelli ridefiniti dall’utente
WARM (Caldo) Durante una partenza WARM solo le variabili (compresi
timers e contatori) NON-RETENTIVE (attributo RETAIN non presente) sono inizializzate ai valori di default o a quelli ridefiniti dall’utente.
Le variabili (compresi timers e contatori) con attributo RETAIN non vengono inizializzate ma continuano ad assumere l’ultimo valore precedente alla WARM start
HOT Durante una partenza HOT nessuna variabile viene
inizializzata
Partenze (Start) di un PLC
Concetti fondamentali della schedulazione di processi:Un processo può trovarsi nello stato di pronto, di attesa o
di esecuzioneUn processo nello stato di pronto viene posto in
esecuzione in base alla politica di scheduling del S.O.E’ possibile assegnare una priorità ai processi in modo da
aiutare il S.O. nella scelta del processo da porre in esecuzione tra i processi pronti
Task nello standard IEC 1131-3: Ha il compito di “risvegliare un processo” ponendolo
nello stato di prontoPermette di assegnare differenti controlli sulla esecuzione
di Programmi o di Function Blocks appartenenti alla stessa Resource
Task
Ad ogni Program e Function Block viene associato un task.
Esistono tre tipi di tasks: Cyclic tasks: sono attivati ad intervalli temporali e il
programma è eseguito periodicamente (o ciclicamente) System (or Error) tasks: sono attivati se un evento di
sistema (errore di sistema) avviene durante l’esecuzione di un programma, ad esempio stack overflow
Event (or Interrupt) tasks: sono attivati all’occorrenza di certi eventi, ad esempio se una variabile ha raggiunto un certo valore o al sopraggiungere di un interrupt
Un programma senza task associato ha la più bassa priorità e viene posto in stato di pronto appena termina.
Task
La dichiarazione dei task è caratterizzata dai seguenti parametri: Task Sistema/Interrupt
Definizione dell'evento (strettamente legato al PLC)
Task Cyclic Definizione dell'intervallo. Si noti che il task può essere eseguito
anche dopo intervalli superiori all'intervallo specificato, in dipendenza del S.O.
WatchDog Time. Specifica l’intervallo temporale dopo il quale viene controllato se l’intervallo Periodico è stato superato o no. Si sceglie generalmente inferiore o uguale alla durata dell'intervallo.
Priorità. Viene assegnata una priorità al task, generalmente in ordine
decrescente (0 la più alta). Si usa nella scelta tra processi pronti.
Task
I Task sono degli strumenti per controllare l'esecuzione dei processi, ma l'esecuzione dipende dal Sistema Operativo (preemptive, non-preemptive)
Esempio: tre tasks: Task A, Cyclic, Interval 100ms, priorità 0, durata 10 Task B, Cyclic, Interval 200ms, priorità 1, durata 90 Task C, Cyclic, Interval 300ms, priorità 2, durata 120
Non-preemptive schedule
Preemptive schedule
Task
100 200 300 400 500 600
100 200 300 400 500 600
A
BC