Lezione 8 (Incompleto)

Transcript

Lezione 8 (Incompleto)
Come programmare la funzione di memoria in Kop
Programmare OB1 in KOP
Inseriamo un nuovo segmento utilizzando il tasto destro
Programmare FB in KOP
Il blocco funzionale (FB) è subordinato al blocco organizzativo. Esso contiene una parte del
programma che può essere richiamata all’interno dell‘OB1 ogni volta che lo si desidera. Tutti i
parametri formali e i dati statici del blocco funzionale vengono memorizzati in un blocco dati DB
separato che è assegnato al blocco funzionale.
Il blocco funzionale (FB1) viene programmato nella già nota finestra del programma KOP/AWL/FUP.
Nella finestra di dialogo "Proprietà –
Blocco funzionale" selezionare il
linguaggio di programmazione, attivare
la Proprietà multiistanza e con OK
acquisire le altre preimpostazioni.
Facendo doppio clic sul FB1 si accede alla finestra del programma KOP/AWL/FUP.
Come dichiarare / definire le variabili
Programmare FB in KOP
Vediamo come programmare un blocco funzionale che per es. comanda e controlla un motore a
benzina e un motore diesel con un blocco dati ciascuno. Tutti i segnali specifici del motore vengono
trasferiti come parametri di blocco dal blocco organizzativo al blocco funzionale e devono perciò
essere riportati nella tabella di dichiarazione delle variabili come parametri di ingresso e di uscita
(dichiarazione "in" e "out").
Come programmare l‘inserzione e la disinserzione di un motore
Programmare FB in KOP
Vediamo come programmare un blocco funzionale che per esempio comanda e controlla un motore
a benzina e un motore diesel con un blocco dati ciascuno. Tutti i segnali specifici del motore vengono
trasferiti come parametri di blocco dal blocco organizzativo al blocco funzionale e devono perciò
essere riportati nella tabella di dichiarazione delle variabili come parametri di ingresso e di uscita
(dichiarazione "in" e "out").
Le variabili locali di blocco vengono
identificate con # e sono valide solo nel
blocco. Le variabili globali sono racchiuse
tra virgolette. Vengono definite nella tabella
dei simboli e sono valide nell’intero
programma.
Si noti il contatto (normalmente chiuso) - Parallelo al contatto
normalmente aperto.
Lo stato di segnale "Funzionamento
automatico" viene definito nell‘OB1 con
un
elemento SR ed interrogato ora
nell‘FB1.
Quando viene inserito e disinserito il motore ?
Se la variabile #Switch_on ha lo stato di segnale "1" e (AND) la variabile "Funzionamento automatico" ha lo stato di
segnale "0", il motore viene inserito. Solo la negazione (contatto normalmente chiuso) di "Funzionamento automatico"
permette questa funzionalità.
Se la variabile #Switch_on ha lo stato di segnale "1" o (OR) la variabile #Failure ha lo stato di segnale "0", il motore viene
disinserito. La funzionalita desiderata viene di nuovo conseguita con la negazione di #Failure (#Failure è un segnale
"zeroattivo" e in caso normale ha valore "1", in caso di guasto ha valore "0").
I nomi introdotti, relativi alle variabili di input definite per l’FB, vengono automaticamente evidenziate con uno #
all’inizio. Le variabili locali di blocco vengono identificate con # e sono valide solo nel blocco.
Come programmare il controllo del numero di giri
Programmare FB in KOP
Inseriamo un nuovo segmento e selezioniamo il montante. Nel
catalogo degli elementi del programma navigare a Op. di
confronto ed inserire un CMP>=I. Nel montante inserire inoltre
una bobina.
Come controlla l’operazione di confronto il numero di giri del motore?
Mediante l’operazione di confronto vengono confrontate le variabili #Actual_Speed e #Preset_Speed
e viene assegnato il risultato delle variabili #Preset_Speed_Reached (stato di segnale 1).
Programmare FB1 in AWL/FUP
Nel seguito mostriamo i prg equivalenti scritti in AWL/FUP
Tutti i segnali specifici del motore vengono trasferiti come parametri di blocco dal blocco
organizzativo al blocco funzionale e devono perciò essere riportati nella tabella di dichiarazione
delle variabili come parametri di ingresso e di uscita (dichiarazione "in" e "out").
Inserzione e disinserzione del motore
Controlla il numero di giri
Creare il blocco dati di istanza
Abbiamo appena programmato il blocco
funzionale FB1 ("Motore") e definito, tra le
altre cose, i parametri specifici del motore nella
tabella di dichiarazione delle variabili locali.
Per poter programmare successivamente il
richiamo (CALL) dell‘FB nell‘OB1, è
necessario creare il relativo blocco dati. Ad un
FB è sempre assegnato un blocco
dati di istanza (DB).
L‘FB deve comandare e controllare un motore a
benzina o un motore diesel. I diversi numeri di
giri prefissati dei motori vengono memorizzati in
due DB separati modificando il valore attuale
corrispondente (#Numero giri_prefissato).
Programmando solo una volta in modo centrale
il blocco funzionale, si riducono i tempi di
programmazione.
Creare il blocco dati di istanza
Nella finestra di dialogo "Proprietà – Blocco dati" acquisire il nome DB1, scegliere nella casella di
riepilogo la voce "DB di istanza" ed acquisire il nome del blocco funzionale "FB1" assegnato.
Confermare le preimpostazioni con OK. Il blocco dati DB1 viene aggiunto nel Progetto.
Creare il blocco dati di istanza
Aprire il DB1 con doppio clic. Confermare la finestra di dialogo visualizzata
con Sì per parametrizzare il blocco dati di istanza.
Introdurre ora per il motore a benzina nella
colonna Valore attuale il valore "1500” (nella
riga "Numero giri_prefissato”). In tal modo è
stato definito il numero di giri massimo per
questo motore. Salvare il DB1, e chiudere la
finestra del programma.
A questo punto creare analogamente al DB1
un altro blocco dati DB2 mediante il copia ed
incolla. Introdurre ora per il motore diesel il
valore attuale "1200”. Salvare il DB2, e
chiudere la finestra del programma.
Come programmare un richiamo di
blocco in KOP
Adesso è necessario richiamare dentro l’OB il programma inserito nell’FB. Per
ciascun richiamo dell‘FB viene utilizzato un blocco dati; vengono così comandati i
due motori.
Richiamare la cartella Blocchi,
ed aprire l’OB1. Nella finestra di
programmazione KOP/AWL/FUP
occorre selezionare l’ultimo
segmento e con il tasto destro
inserire in fondo un nuovo
segmento
Nel catalogo degli
elementi del
programma
navigare infine
all’FB1 ed inserirlo.
Come programmare un richiamo di
blocco in KOP
Programmare due segmenti per richiamare il blocco funzionale "Motore“ (FB1) con i blocchi dati
“Diesel" (DB2) e “Benzina” (DB1)
Nella tabella dei
simboli si possono
anche assegnare nomi
simbolici a diversi
blocchi (p.es.
FB1 ha il nome
"Motore" e DB1 il
nome "Benzina").
Come programmare un richiamo di
blocco in AWL/FUP
Configurare l’HW
L’hardware viene configurato con STEP 7. I dati di configurazione vengono trasferiti al sistema di
automazione successivamente durante il "Caricamento“
Aprire la cartella Stazione SIMATIC
300, e fare doppio clic sul simbolo
Hardware.
Si apre la finestra “Configurazione
HW" e viene visualizzata la CPU
scelta durante la creazione del
progetto (si tratta della CPU314).
Configurare l’HW
E‘ necessario inserire prima di tutto un
alimentatore. Navigando nel catalogo,
posizionarsi su PS307 2A ed inserire
l’alimentatore sul posto connettore 1
mediante Drag & Drop.
Per un‘unità di
ingresso (DI, Digital
Input) navigare a
SM321 DI32xDC24V
ed inserirla sul posto
connettore 4. Il posto
connettore 3 rimane
libero.
Con il comando di menu Stazione > Verifica coerenza
è inoltre possibile controllare se vi sono errori nella
configurazione. Mediante Salva e compila i dati
vengono preparati per il trasferimento nella CPU.
Una volta chiusa la "Configurazione HW”, nella
cartella Blocchi viene visualizzato il simbolo Dati di
sistema
Analogamente
inserire sul posto
connettore 5 l’unità
di uscita SM322
DO32xDC24V/0.5A.
PLC - Programmazione
Il programma può essere organizzato in due forme diverse: quella lineare e quella strutturata.
La programmazione lineare utilizza un solo blocco all'interno del quale è contenuto tutto il
programma. E’ comodo quando il programma è breve e semplice.
La programmazione strutturata suddivide il programma in più parti, con la possibilità di
saltare da una parte all'altra in diversi modi. Tale metodo di programmazione è il più utilizzato
in quanto permette una larga flessibilità, una facile rilettura e quindi immediata individuazione
dei guasti. Permette, inoltre, la separazione di varie funzioni all'interno del programma stesso
e, potendo decidere quando richiamare tali funzioni si riduce il tempo necessario per
l'esecuzione del programma. Il programma utente nell'OB1 è costruito in termini di chiamate a
blocchi (Programmazione Procedurale)
PLC - Programmazione
L'esecuzione ciclica può essere interrotta. Es. allarmi, errori o interrupt
I programmi di gestione degli errori possono rendere variabile la durata del ciclo di esecuzione.
PLC - Programmazione
Per risolvere compiti complessi si suddivide opportunamente il programma in varie parti
distinte (Blocchi). Nel linguaggio di programmazione step 7 esistono cinque tipi di blocchi a
loro volta suddivisibili in segmenti:
-
-
-
blocchi organizzativi (OB), che servono per gestire il programma applicativo;
blocchi di programma (PB) e blocchi di passo (SB), sono due tipi di blocchi
analoghi utili per strutturare il programma e per la programmazione di comandi
sequenziali
blocchi funzionali (FB), sono blocchi di programma speciali. Parti di
programma frequentemente ricorrenti o particolarmente complessi (p.es.
funzioni di segnalazione o di calcolo) vengono programmate entro blocchi
funzionali; essi sono parametrizzabili e possiedono un repertorio di istruzioni più
esteso (p.es. operazioni di salto all’interno dello stesso segmento);
blocchi dati (DB), dove l’utente memorizza i dati necessari per l’elaborazione
del programma applicativo; sono dati, per esempio, i valori reali, i valori limite
oppure i testi
PLC - Programmazione
I BLOCCHI ORGANIZZATIVI
Comandano l'esecuzione dei blocchi di programma utente. Sono contraddistinti da numeri
e priorità { OB da 1(Low) a 28 (High) }. Dentro ogni OB viene scritto un programma
(eventualmente con chiamate a SFB, SFC, FB, FC)
OB10 – ALLARME OROLOGIO
Questo blocco priorità 2 (invece OB1 ha priorità 1)
Viene Parametrizzato:
Esecuzione: una volta, ogni minuto, ogni giorno, ogni settimana, ogni mese, etc.
Data di Avvio
Ora di Avvio
OB20 – ALLARME DI RITARDO
Questo blocco ha priorità 3
Permette di eseguire con ritardo alcune parti del programma utente
Esiste una particolare funzione di sistema (SFC 32) attraverso cui è possibile settare il
tempo di ritardo di esecuzione dell'OB20 (che deve contenere il codice)
PLC - Programmazione
OB35 – SCHEDULAZIONE OROLOGIO
Questo blocco ha priorità 12
Permette l'esecuzione periodica di una porzione di codice
Viene Parametrizzato (per default 100 ms). Nel caso di più processi ciclici (non nella
CPU314C-2DP) è possibile impostare un offset (per evitare avviamento simultaneo).
OB40 – INTERRUPT DI PROCESSO
Questo blocco ha priorità 16
Il codice viene eseguito in reazione ad un segnale di Ingresso
E' necessario disporre di una unità di I/O che supporti l'interrupt di processo
Nell'unità di I/O vengono settati gli ingressi che determinano l'attivazione dell'OB40
Nella configurazione hardware degli ingressi DIGITALI, selezionare:
gli ingressi che determinano l'interrupt di processo { utilizzare le variabili locali L8.xx-L11.x
Ad esempio L11.x corrisponde a I124.x }
Il fronte di salita o di discesa (anche entrambi)
Il ritardo di ingresso (stabilizzazione del segnale)
PLC - Programmazione
OB VARIE TIPOLOGIE
Esistono degli OB che, se definiti, permettono di eseguire azioni in caso di eventi:
OB 82, Priorità 26: allarme diagnostica (es.cortocircuito unità di ingresso)
OB 85, Priorità 26: errore di esecuzione programma (es.OB non caricato)
OB 86, Priorità 26: guasto al telaio di montaggio
OB 87, Priorità 26: errore di comunicazione
OB 100, Warm Start
OB 100
Nella CPU 314C-2DP è consentito il solo Avviamento Warm (Nuovo Avviamento)
L'avviamento Warm diviene Cold, se non vi sono aree di memoria ritentive definite o utilizzate.
La CPU esegue un avviamento a caldo:
Dopo RETE ON
Da STOP a RUN
OB 100 viene eseguito all'avviamento Warm (nessun limite sulla durata). Può essere utilizzato
per l'inizializzazione di variabili. Per i Merker si utilizza il comando SET. La sintassi è SET =
variabile (nome o indirizzo). Ad esempio:
SET
= "home_robot"
= "home1"
= "home2"
PLC - Programmazione
I BLOCCHI FUNZIONALI
Sono importantissimi per semplificare il codice e per renderlo riutilizzabile. Essenzialmente
la creazione consiste nella definizione di un Blocco Funzionale e di un Blocco Dati per ogni
istanza. Per ciascun Blocco Funzionale si possono definire i parametri formali e le variabili:
IN, OUT, IN_OUT, STAT, TEMP
Vengono richiamati premettendo il simbolo #