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 #