Sei sulla pagina 1di 38

Limiti della Programmazione

Tradizionale dei PLC


 Differenti linguaggi di programmazione
Stessi 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)
Soluzione ai limiti prima evidenziati:
Standard IEC 1131-3

 International Electro-technical Committee (IEC)


 Commissione Tecnica: TC65 "Industrial Process
Measurement and Control“
Sottocommissione: SC65B "Devices“
 Working Group: WG7 "Programmable Control Systems".
Caratteristiche principali
dello 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
Modello Software dello standard IEC 1131-3

Configuration
Resource Resource
Task Task Task Task

Program Program Program Program


FB F Var Globale FB

Access Path
Corrispondenza tra il Modello Software
e i Sistemi Reali

Configuration
Resource
PLC program 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
Processore program program
Multi-processor
PLC

Processore Resource
program program

Processore
Resource
program program
Corrispondenza tra il Modello Software
e i Sistemi Reali
FieldBus

PLC PLC PLC PLC

Configuration
Resource Resource Resource
program program program program program program
Riusabilità del software:
Program Organisation Units (POUs)
 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
Comunicazioni tra POUs

 Avviene tramite variabili globali definite a livello di:


Configuration, Resource o di Program
 E’ possibile l’uso dei parametri formali

Configuration
Program X Resource Program Y
VAR_EXTERNAL VAR_EXTERNAL
x:REAL x:REAL
VAR_GLOBAL
x:REAL
Elementi in Comune tra i 5 linguaggi IEC 1131-3
 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 numero
non ci siano più di due caratteri "_" consecutivi
non 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
Tipi Interi
 Variabili:
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:
12
2#11111111 o 2#1111_1111 (255)
8#377 (255)
16#FF (255)
Tipi Reali
 Variabili:
IEC data type description bits range

REAL real 32 1038

LREAL long real 64 10308

 Valori e/o Costanti:


 espresse dal numero reale
 espresse tramite notazione scientifica (E o e)
 Esempi:
10.123
10_234.54
-1.65E-10
0.237e+14
Tipo Duration (Time)
 Variabili:
IEC data type Description bits

TIME time duration implementation


dependent

 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
Tipi DATES and TIMES of DAY
 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

 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
Tipo String
 Variabili:
IEC data type Description Bits

STRING character string Implementation dependent

 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’
Tipi String of Bit
 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

Tipo Boolean
 Variabili:
IEC data type Description
BOOL Boolean

 Valori e/o Costanti:


 FALSE, TRUE
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
Tipi di dato generici
ANY
(Overloading)
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 derivato
 Record
TYPE
nome:
STRUCT
nome_campo_1: tipo;
nome_campo_2: tipo;
…………..
nome_campo_n: tipo;
END_STRUCT;
END_TYPE;
 Enumerativi
TYPE
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;

 Vettore
TYPE
nome: ARRAY[inf..sup, inf..sup] OF tipo;
END_TYPE;
Definizione di Variabili

 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 Locali
 Possono 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 globali
 Possono 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 esterne
 Possono essere definite solo nei POU
 Permettono 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 Input
 Permettono ad un POU (Program, Function block,
Function) di ricevere dati dall'esterno.

VAR_INPUT
nome: tipo;
nome:tipo;
END_VAR;
Definizione di Variabili
 Variabili Output
 Permettono ad un POU di fornire dati all'esterno.
VAR_OUTPUT
nome: tipo;
nome:tipo;
END_VAR;
 Variabili Input/Output
 Permettono 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 diretto
 E' 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 diretto


 Aree 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 diretto
 Sintassi 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 ingresso
Memoria interna: numero intero o numero intero.indice (ad
esempio byte.bit)
 Esempi:%IX0.0, %QX3.2, %IB0.0, %IB1, %QW0,
%MW132 %MB20.1
Attributi 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;
Partenze (Start) di un PLC
 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
Task
 Concetti fondamentali della schedulazione di processi:
 Un processo può trovarsi nello stato di pronto, di attesa o
di esecuzione
 Un 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 pronto
 Permette 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
A
C
B

100 200 300 400 500 600


 Preemptive schedule

100 200 300 400 500 600

Potrebbero piacerti anche