CORSO di AUTOMAZIONE INDUSTRIALE (cod. 8469-21029) APPELLO del 22 Giugno 2011 Prof. Andrea Cataldo Soluzioni
Esercizio 1 (Domande generali) 1.a) Controllo Logico Dire se il seguente programma SFC è sintatticamente corretto oppure no. Commentare. 1 T1 [C1] T2 [C2] 2 Azione 2 Azione 3 3 T3 [C3] 4 Azione 4 T4 [C4] Soluzione: Errato in quanto tra le fasi 3 e 4, collegate da un arco orientato, non esiste la transizione (la 1 regola di costruzione dell SFC non è rispettata). 1.b) Controllo Modulante Dato un sistema fisico costituito da un serbatoio contenente acqua, si vuole controllare il livello mantenendolo il più possibile costante ad un valore predefinito. Dire perché il tipo di controllo modulante é quello idoneo per tale funzione. MISURATORE SERBATOIO CONTROLLORE LI LIC ACQUA VALVOLA Soluzione: Il controllo idoneo è quello modulante perché il processo fisico è caratterizzato da variabili continue nel tempo. In particolare il livello potrà assumere valori tra un massimo ed un minimo ed il sistema di controllo dovrà essere in grado di mantenerlo il più possibile costante.
1.c) Controllo Numerico Dire come si chiamano le funzioni caratterizzate dalla lettera M. Dire a che cosa servono in genere? Le funzioni (M) sono le Funzioni Ausiliarie. Esse impartiscono comandi alla Macchina in genere per i sistemi ausiliari. Possono essere sia Modali che Non Modali. 1.d) Controllo Microprocessore Data la seguente porzione di programma per microprocessore PIC 16F876, dire se il codice è formalmente corretto o se vi è qualche errore. In ogni caso commentare la scelta. ; Definizione delle variabili interne ALFA equ 0x20 ;ALFA BETA equ 0x21 ;BETA GAMMA equ 0xA0 ;GAMMA Digital_Input equ 0XA3 ;Variabile per identificare il valore degli Input Digitali acquisiti ;Digital_Input (0) = acquisizione valore di P1 ;Digital_Input (1) = acquisizione valore di P2 org 0x00 ;Indirizzo del Vettore di Reset goto Inizio ;Salta a inizio del programma org 0x04 ;Indirizzo del Vettore degli interrupt nop ;In questo programma non viene utilizzato alcun Interrupt org 0x05 ;... call Acquisisci_DI ;Acquisisce lo stato dei pulsanti ; Test sul pulsante P1 movf Digital_Input,0 ;Carica Digital_Input in W andlw b'00000001' ;Filtro sul bit 0 e ripone il risultato in W per vedere se P1 è stato premuto sublw b'00000001' ;Sottrae la maschera a W btfsc STATUS,Z ;Se la differenza è = 0 goto Test_P2 ;Il bit è a valore 0 quindi P1 non è stato premuto; Si testa quindi P2 btfss STATUS,Z ;Se la differenza è <> 0 ;Viene eseguita l'operazione Logica OR movf ALFA,0 ;Carica il valore di ALFA in W iorwf BETA,0 ;Esegue l'operazione OR tra ALFA e W e ripone il risultato in W movwf GAMMA ;Memorizza il risultato dell'operazione in GAMMA ;...
Essendo la variabili GAMMA memorizzata nell'indirizzo 0xA0 e quindi nel secondo banco di memoria dati (Bank1), è necessario esplicitare il cambiamento di banco di memoria prima di memorizzarne il contenuto bsf STATUS,RP0 ;Seleziona banco 1 bcf STATUS,RP1 ;Seleziona banco 1 movwf GAMMA ;Memorizza il risultato dell'operazione in GAMMA bcf STATUS,RP0 ;Seleziona banco 0 bcf STATUS,RP1 ;Seleziona banco 0
ESERCIZIO 2 (Controllo Logico) Premendo un pulsante (START) si accende una luce verde (VERDE) per 100s, poi si spegne e si accende una luce gialla (GIALLO) per 50s. Per entrambe le luci, se il sensore esterno per la luminosità rileva una quantità di luce naturale sufficiente (SENSORE = 0), le luci si spengono, indipendentemente dalla temporizzazione sopra citata. Se per esempio durante la temporizzazione il sensore disabilità le luci (SENSORE = 0) esse si spengono. Se durante lo stesso periodo di accensione luci il sensore torna ad abilitare le luci (SENSORE = 1), esse si devono riaccendere. Implementare il programma che realizza le suddette funzionalità in Ladder e SFC. Ingressi per il PLC: START, SENSORE Uscite per il PLC: VERDE, GIALLO Soluzione:
Esercizio 3 (Modellistica e FdT) Dato lo schema a blocchi sottostante, U(s) G1 + - G2 G3 + + Y(s) 3.a) dire se le seguenti implicazioni sono in generale (cioè per qualsiasi valore di G 1, G 2, e G 3 ) vere o false: 2.b.1) G tot stabile G 2 stabile F 2.b.2) G 3 stabile G tot instabile F 2.b.3) G 1 instabile G tot instabile V 3.b) calcolare la FdT complessiva G(s) = Y ( s) U( s) Soluzione G2 e G3 sono in retroazione negativa per cui G 23 G2 1 G G 2 3 Inoltre vi è un parallelo tra G23 ed il ramo inferiore che di fatto è una FdT con guadagno pari a 1, quindi G PT G 23 1 Il tutto in serie con G1 G TOT G 1 G PT
Esercizio 4 (Controllo modulante) Un sistema fisico è modellabile secondo la seguente equazione differenziale lineare: 5y ( t) y( t) u( t) 0 4.a) Ricavare la relativa equazione algebrica nel dominio di Laplace. 5SY(s) + Y(s)-U(s)=0 4.b) Ricavare la funzione di trasferimento F(s) tra le variabili U e Y associata al sistema modellato e dire di che ordine è. 1 F(s)= (1 5 s) La FdT è del I ordine 4.c) Ricavare eventuali zeri e poli della Funzione di Trasferimento e dire se è stabile. P = -1/5 = -0.2, stabile in quanto reale negativo 4.d) Determinare le costanti di tempo e ricavare il tempo di assestamento della funzione di trasferimento. T = 5s, Tass = 25s 4.e) Determinare il controllore, in retroazione negativa, più semplice appartenente alla famiglia dei PID che consente di ridurre il tempo di assestamento a 5s e che non richiede di annullare l errore a transitorio esaurito. (Dire di quale controllore si tratta e calcolarne i parametri). Non essendo richiesto un errore a transitorio esaurito nullo, il controllore é un Proporzionale. La FdT in anello chiuso é K 1 K 5 G(s)= dove è il nuovo guadagno statico e la nuova costante di 1 K 5 (1 s) 1 K 1 K 1 K tempo. Essendo richiesto un nuovo Tempo di assestamento pari a 5s, significa che la nuova costante di tempo deve essere pari a 1s. Da cui Kp = 4 4.f) Definito il controllore, determinare la nuova costante di tempo ed il nuovo polo del sistema retroazionato negativamente, calcolare il nuovo guadagno statico. T = 1s p = -1 µ = 4/5 = 0.8 4.g) Tracciare la risposta al gradino di ampiezza unitaria, indicando chiaramente sul grafico il valore della funzione a regime nonché il tempo di assestamento.
0.8 T=1s Tass=5s
ESERCIZIO 5 (Controllo Numerico) Date le seguenti istruzioni di un PART Program, avvalendosi del significato delle istruzioni definite nello standard ISO, determinare la traiettoria percorsa dall utensile (disegnarla solo nel piano XY) e commentare le varie istruzioni dicendo a cosa servono N10 G90 G17 F300 S1000 T01 M06 M03 N20 G00 X0 Y0 Z0 N30 G01 Y20 N40 G03 Y30 I0 J5 N50 G01 Y50 N60 G01 X30 N70 G01 Y40 N80 G03 Y20 I0 J-10 N90 G01 X20 Y10 G00 Posizionamento rapido dell utensile: massima velocità programmata G01 Interpolazione lineare: l utensile percorre una retta G02 Interpolazione circolare dell utensile in senso orario (I e J rispettivamente posizione X e Y del centro rispetto al punto di partenza della traiettoria circolare) G03 Interpolazione circolare dell utensile in senso antiorario (I e J rispettivamente posizione X e Y del centro rispetto al punto di partenza della traiettoria circolare) G17 X-Y Piano principale G18 Z-X Piano principale G19 Y-Z Piano principale G90 Sistema di riferimento assoluto G91 Sistema di Riferimento Incrementale M02 Programma finito M03 Mandrino acceso senso orario M04 Mandrino acceso senso antiorario M05 Mandrino spento M06 Fermata per cambio utensile M08 Valvola liquido aperta M09 Valvola liquido chiusa M30 Programma fermo, avanzamento /rotazione off
Soluzione 0,50 30 30,50 30,40 50 R5 0,30 R10 40 0,20 30,20 Y 0,0 20,10 X
ESERCIZIO 6 (Controllo Microprocessore) Dato il microprocessore PIC 16F876, scrivere un programma, utilizzando il set base delle relative istruzioni, che implementa le seguenti funzioni: Il programma è di fatto un ciclo infinito; Premendo un pulsante START, cablato sul pin RB0 della Porta B, viene accesa una Lampadina cablata sul pin RB1 della Porta B; Tale Lampadina rimane accesa per 100ms, dopo di ché si spegne; Essa rimane spenta per altri 100ms e solo dopo tale intervallo di tempo, premendo nuovamente START, può ricominciare un nuovo ciclo di accensione e spegnimento.
Soluzione ; ; ; ; Autore: Prof. Andrea Cataldo ; ; TE 22/06/2011 ; ;Configurazione delle porte di I/O ; ;***PORTB ;RB0 --- Pulsante START (Digital Input) ;RB1 --- Lampadina (Digital Output) ;RB2 --- ;RB3 --- ;RB4 --- ;RB5 --- ;RB6 --- ;RB7 --- ; List p=16f876 ;Tipo di processore #include "P16F876.INC" ;Definizioni di registri interni nel file incluso ; Word Configuration Bits CONFIG b'11111101111010' ;Config word usata nel debug in quanto mette in chiaro il codice ; CP1=0; CP0=0; DEBUG=1; 1; WRT=1; CPD=1; LVP=0; BOEDEN=1; CP1=0; CP0=0; PWRTE=1; WDTE=0; FOSC1=1; FOSC0=0; ; Definizione delle variabili interne (nel Bank 0 di memoria) NConteggi1 equ 0x20 ;Variabile usata nella routine di delay NConteggi2 equ 0X21 ;Variabile usata nella routine di delay Digital_Input equ 0X22 ;Variabile per identificare il valore degli Input Digitali acquisiti
;Digital_Input (0) = acquisizione valore di START org 0x00 ;Indirizzo del Vettore di Reset goto Inizio ;Salta a inizio del programma org 0x04 ;Indirizzo del Vettore degli interrupt nop ;In questo programma non viene utilizzato alcun Interrupt ;altrimenti verrebbe chiamata l'opportuna routine di interrupt org 0x05 ; *********************************************************** ; Main programma -------------------------------------------- ; *********************************************************** Inizio ; Inizializzazione dei registri e delle variabili di sistema call Config_Register ;Vengono configurate le Porte I/O call Reset_Var_Output ;Vengono resettate le variabili di uscita call Reset_Var ;Vengono resettate le variabili interne ; *************************************** ; CICLO PRINCIPALE DEL PROGRAMMA - INIZIO ; *************************************** ; In tale ciclo vengono considerati i seguenti punti principali: ; - Ciclo di acquisizione dello stato del Pulsante START ; - Accensione della lampadina e calcolo del tempo di accensione ; - Spegnimento della lampadina e calcolo del tempo di spegnimento Ciclo_principale call Acquisisci_DI ;Acquisisce lo stato del pulsante START ; Test sul pulsante START movf Digital_Input,0 ;Carica Digital_Input in W andlw b'00000001' ;Filtro sul bit 0 e ripone il risultato in W per vedere se START è stato premuto sublw b'00000001' ;Sottrae la maschera a W btfsc STATUS,Z ;Se la differenza è = 0 goto Ciclo_principale ;Il bit è a valore 0 quindi START non è stato premuto; Si torna al ciclo principale
btfss STATUS,Z ;Se la differenza è <> 0 call AccendiLampadina ;Viene accesa la lampadina call Delay_100ms ;Si attende un intervallo di tempo di 100ms call SpegniLampadina ; Si spegne la lampadina call Delay_100ms ;Si attende un intervallo di tempo di 100ms goto Ciclo_principale ; ************************************** ; CICLO PRINCIPALE DEL PROGRAMMA - FINE ; ************************************** ; *********************** ; ROUNTINES DEL PROGRAMMA ; *********************** ; Funzione Config_Register per la configurazione dei registri di sistema ; ********************************************************************** Config_Register bsf STATUS,RP0 ;Seleziona banco 1 bcf STATUS,RP1 ;Seleziona banco 1 movlw b'00000001' movwf TRISB ;RB0 DI, RB1-RB7 DO bcf STATUS,RP0 ;Seleziona banco 0 bcf STATUS,RP1 ;Seleziona banco 0 ; NON NECESSARIO ;*************** ; Configurazione registro OPTION_REG (Banco 1) ; -------------------------------------------- bsf OPTION_REG,7 ;Pull-ups PORTB disabilitati bsf OPTION_REG,6 ;Interrupt RBO su Fronte Salita bcf OPTION_REG,5 ;T0CS Internal Instruction bcf OPTION_REG,4 ;T0SE low-to-high transistion T0CK bcf OPTION_REG,3 ;Prescaler assegnato a Timer0 bsf OPTION_REG,2 ;Prescaler = 128 bsf
bsf OPTION_REG,1 ; " bsf bcf OPTION_REG,0 ; " bcf ;*************** bcf STATUS,RP0 ;Seleziona banco 0 bcf STATUS,RP1 ;Seleziona banco 0 return ;Fine routine Config_Register ; Funzione Reset_Var per il reset delle variabili interne ; ******************************************************* Reset_Var clrf NConteggi1 ;NConteggi1 = 0h clrf NConteggi2 ;NConteggi2 = 0h return ;Fine della funzione Reset_Var ; Funzione Reset_Var_Output - reset delle variabili di uscita ; *********************************************************** Reset_Var_Output return ;Fine della funzione Reset_Var_Output ; Funzione Acquisisci_DI ; ********************** ;*** PORTB ;RB0 --- Pulsante START ;RB1 --- ;RB2 --- ;RB3 --- ;RB4 --- ;RB5 ---
;RB6 --- ;RB7 --- Acquisisci_DI ; Lettura dei Digital Input dalla Porta B ; --------------------------------------- ; Lettura del Pulsante START (RB0) movf PORTB,0 ;Carica il latch della porta B in W andlw b'00000001' ;Filtro sul bit 0 e ripone il risultato in W sublw b'00000001' ;Sottrae la maschera a W btfsc STATUS,Z ;Se la differenza è = 0 bcf Digital_Input,0 ;Il bit è a valore 0 btfss STATUS,Z ;Se la differenza è <> 0 bsf Digital_Input,0 ;Il bit è a valore 1 return ;Fine della funzione Acquisisci_DI ; Funzione Delay_100ms - genera un ritardo di n*0,1s ; ************************************************** ; Funzione Delay_100ms è una procedura che realizza un ritardo pari a n cicli ; di 0,1s ciascuno. ; Se il PIC lavora a una frequenza di 20MHz, il TMR0 cambia ogni 0,4uS. Se si vuole tempo- ; rizzare 100.000 us (0,1S) con un prescaler di 128, il TMR0 dovrà contare 195 eventi (195 * ; 128 = 24960 eventi * 0,4uS = 9984uS), il tutto moltiplicato 10 volte (99.840uS). ; Il valore 195 equivale a C3h e, poiché il TMR0 è ascendente, bisognerà ; caricare il suo complemento 3Ch (C3h+3Ch=FFh cioè 195+60=255)per giungere in overflow ; e quindi per poter fare il controllo sul termine dell'intervallo di tempo misurato ; Il valore di n cicli deve essere caricato in W immediatamente prima della chiamata allu funzione Delay_100ms movwf NConteggi2 ;Carica il valore di n cicli nella variabile NConteggi2 Loop_DA_0 ;Ciclo di durata 0,1s movlw 0x0A movwf NConteggi1 ;Carica il numero di conteggi = 10 (0x0A) Loop_DA_1 bcf INTCON,T0IF ;Resetta il flag di overflow del TMR0
movlw 0x3C movwf TMR0 Loop_DA_2 ;carica il TMR0 con il valore esadecimale complementato btfss INTCON,T0IF ;Overflow del TMR0? Cioè il TMR0 ha contato 49920 eventi? goto Loop_DA_2 ;Ancora non sono passati i 1 ms decfsz NConteggi1,1 ;Diminuisci numero di conteggi. Si è ripetuto 10 volte? goto Loop_DA_1 ;Se no, ripeti ancora un ciclo di 9984 eventi decfsz NConteggi2,1 ;Diminuisci numero degli intervalli da 0,1s. Si è ripetuto NConteggi2 volte? goto Loop_DA_0 ;No, quindi temporizza un altro intervallo di 0,1s return ;Fine della funzione Delay_100ms ; Funzione AccendiLampadina - comanda l'accensione della Lampadina ; **************************************************************** AccendiLampadina bsf PORTB,1 ;Accensione Lampadina return ;Fine della funzione AccendiLampadina ; Funzione SpegniLampadina - comanda lo spegnimento della Lampadina ; ***************************************************************** SpegniLampadina bcf PORTB,1 ;Spegnimento Lampadina return ;Fine della funzione SpegniLampadina end ;Fine del programma principale