NOTA: per mantenere dei riferimenti comuni nello svolgimento degli esercizi che seguono, è consigliato copiare la cartella crio HO 2013 sul desktop. Page 1 of 34
Esercizio: Configurare il CompactRIO Prima di iniziare a progettare un applicazione pensata per il controllo di velocità di una turbina (simulata da una ventolina installata all interno del simulatore Sound & Vibration Signal) partiremo a connettere il CompactRIO appropriatamente al nostro PC per lo sviluppo. 1. Doppio click sull icona Measurement and Automation Explorer (MAX) presente sul Desktop 2. In Measurement and Automation Explorer (MAX), evidenziare ed espandere la voce Remote Systems nel pannello a sinistra per cercare i sistemi remoti Compact RIO connessi al tuo PC. 3. Clicca sull icona criohandson per vedere le configuarazioni software del tuo CompactRIO. Se non vedi questa voce premere F5 per il refresh. 4. Nella pannello central del MAX, dovresti vedere un piccolo riquadro di nome General Settings (all interno del tab System Settings), con configurazione simile a quella riportata nell immagine sottostante. Page 2 of 34
5. Assicurarsi che il sistema si trovi nello stato Connected Running e sia registrato un indirizzo IP (ad asempio 169.254.125.17). Usereme questo indirizzo IP unicamente per identificare il CompactRIO nella rete punto-punto creata tra PC e CompactRIO stesso. Indirizzo IP : 10.0.0.3 Nota: Sia PC che CompactRIO presentano un indirizzo IP nello stesso intervallo (Vedi maschera di sottorete) 6. Chiudere MAX. Page 3 of 34
Esercizio 1: Fondamenti di CompactRIO Scan Mode Descrizione dell esercizio Configurazione hardware In quest esercizio useremo il crio-9024 con i seguenti moduli: NI 9211: input analogico per termocoppie - primo slot [Scan Interface] Obiettivo Introduzione alla configurazione e all utilizzo del crio. Attraverso l uso del progetto, configureremo un target crio e completeremo un VI che permette di leggere e visualizzare una lettura di temperatura tramite termocoppie, effettuata in modalità Scan interface. Risultati Al termine dell esercizio saremo in grado di: identificare e configurare un sistema PAC di tipo crio usare le variabili di I/O in NI LabVIEW Real-Time monitorare da remoto le variabili di I/O attraverso il Distributed System Manager Istruzioni 1. Apriamo LabVIEW 2013 e selezioniamo la voce Create Project 2. Selezioniamo Blank Project dalla finestra di LabVIEW Getting Started Page 4 of 34
3. Salviamo il progetto come CompactRIO Scan Mode.lvproj dentro la cartella /Esercizi. 4. Nella finestra del Project Explorer clicchiamo col pulsante destro l elemento Project appena rinominato e selezioniamo New»Targets and Devices 5. Espandiamo dal menu ad albero la voce Real-Time CompactRIO, selezioniamo criohandson (o il dispositivo che appare elencato) e clicchiamo su OK NOTA:Tutti i demo box CompactRIO dovrebbero utilizzare l IP 10.0.0.3 Page 5 of 34
6. Apparirà la finestra di dialogo qui sotto. Tramite questa finestra è possibile selezionare la modalità di progammazione desiderata; opzione che è comunque possibile modificarla successivamente. Scan Interface è il nuovo modello di programmazione introdotto con LabVIEW Real-Time 8.6 che consente l accesso agli I/O direttamente da LabVIEW Real- Time senza programmare il chip FPGA. La LabVIEW FPGA Interface rappresenta l approccio tradizionale alla programmazione di CompactRIO. Questa finestra di dialogo appare solo se il modulo LabVIEW FPGA Module è stato installato, diversamente LabVIEW seleziona come opzione predefinita la Scan Interface. 7. Selezioniamo Scan Interface e quindi Continue. LabVIEW rileverà ora i moduli di I/O installati sul crio e li aggiungerà al progetto. 8. Espandiamo cliccando sul segno + il controller CompactRIO nel Project Explorer per mostrare lo Chassis assieme ai moduli della Serie C al di sotto di questo. Per chi ha familiarità con la programmazione di CompactRIO, noterà l'assenza del target FPGA sotto il controller. In cambio compare un nuovo elemento chiamato Chassis. Tutti i moduli sotto lo Chassis utilizzano la nuova funzionalità scan interface per accedere agli I/O direttamente in LabVIEW Real-Time senza programmare il chip FPGA. 9. Espandendo Mod1 (Slot 1, NI 9211) compaiono le I/O Variables, da AI0 fino a AI3, che consentono l accesso ai valori di I/O, scalati e calibrati, del modulo specifico 10. Tasto destro su Mod1 (Slot 1, NI 9211) e selezioniamo Proprietà... Osserviamo come dalla pagina di proprietà dei moduli sia possibile configurare diverse impostazioni, quali il tipo di termocoppie e le unità ingegneristiche di ciascun canale. Page 6 of 34
11. Chiudiamo la pagina di proprietà dei moduli 12. Configuriamo ora l NI Scan Engine dalla pagina delle proprietà del target crio a progetto (criohandson). Tasto destro su criohandson e selezioniamo Properties Page 7 of 34
13. Selezioniamo Scan Engine dal campo delle categorie. Configuriamo lo Scan Period per 1ms e clicchiamo OK per confermare. Questa impostazione ordina allo Scan Engine di aggiornare i valori letti dagli I/O ogni 1 millisecondo. 14. Tasto destro su CompactRIOHandsOn e selezioniamo Add»File 15. Aggiungiamo il file Temperature and Treshold.vi dalla cartella /Esercizi/Esercizio1. Adesso creeremo un semplice VI per mostrare come accedere agli I/O direttamente da LabVIEW Real-Time. Quest'applicazione mostrerà la temperatura letta dalle termocoppie e la confronterà con una soglia. Se la temperature è sotto la soglia si accenderà una luce sull indicatore del front Page 8 of 34
panel. Il VI aperto presenta un'interfaccia utente già preparata e noi completeremo il diagramma a blocchi con gli I/O dai dati disponibili 16. Apriamo il VI e premiamo <Ctrl+E> per passare al diagramma a blocchi. 17. Espandiamo Mod1 (Slot 1, NI 9211) nel Project Explorer. NOTA: per praticità, teniamo aperte e affiancate sul desktop le finestre del Project Explorer e del VI su cui stiamo lavorando. 18. Renomina AI0 in Temp e lo trasciniamo nel diagramma a blocchi. Colleghiamo la variabile di I/O Temp come indicato in figura. Questo codice monitora e mostra la temperatura letta e nello stesso tempo determina se ha superato il livello di soglia. Page 9 of 34
19. Per sincronizzare il codice nello NI Scan Engine, utilizziamo un While Loop temporizzato. Impostiamo il codice in un Timed Loop e colleghiamo il controllo stop allo stop terminal. Troviamo il Timed Loop nella paletta delle funzioni al percorso Programming»Structures»Timed Structures. 20. Doppio click sulla cornice di sinistra del Timed Loop per aprire la finestra di dialogo Configure Timed Loop. 21. Selezioniamo Synchronize to Scan Engine nel campo Loop Timing Source e clicchiamo OK. Questa opzione sincronizza il codice con lo NI Scan Engine, facendolo eseguire solo ogni volta che i valori delle variabili di I/O sono aggiornati. Page 10 of 34
22. Salviamo ed eseguiamo il codice. Clicchiamo su OK e Apply a qualsiasi finestra di dialogo di replica. NI Distributed System Manager parte 1 NI Distributed System Manager consente di monitorare da remoto i valori delle variabili di I/O del CompactRIO, di forzarli e di monitorare le prestazioni del sistema. 1. Apriamo NI Distributed System Manager. Dal LabVIEW Project Explorer, tasto destro su CRIOHandsOn e selezioniamo Utilities»View in System Manager. 2. Espandiamo il controller identificato dal suo indirizzo IP e quindi il modulo NI 9211 identificato dalla voce Mod1 per monitorarne i valori di I/O. Selezioniamo il controller CompactRIO nella finestra a sinistra e selezioniamo il tab CPU/Memory per monitorare il carico di lavoro della CPU e l'utilizzo di memoria. Page 11 of 34
CompactRIO Scan Mode aggiunge la funzionalità di forzatura degli I/O e consente di annullare i valori fisici letti dagli input e di modificare i valori generati dagli I/O di output. 3. Sul VI Temperatura e soglia.vi impostiamo il controllo Temp Threshold a 99 gradi. 4. Nel system manager, selezioniamo la scheda Scan Engine e clicchiamo su Enable Forcing per abilitarlo. 5. Selezioniamo Temp sotto Mod1. Inseriamo 100 nel campo New Value e clicchiamo Force. Il system manager adesso mostra un valore di 100 per Temp. Tutte le applicazioni che utilizzinano la variabile di I/O Temp leggeranno un valore di 100. Nel nostro VI Temperatura e soglia.vi l indicatore Over threshold? adesso mostra che la temperatura supera i 99 gradi. La forzatura degli I/O è una funzionalità che potrebbe essere usata per il debug e la riparazione degli errori. Proviamo a forzare gli altri valori nella nostra applicazione. Fine dell Esercizio 1 Page 12 of 34
Esercizio 2: Gestione I/O sistema Open-Loop Descrizione dell esercizio Configurazione hardware In quest esercizio useremo il crio-9024 con i seguenti moduli: NI 9411: input digitale a 500ns - terzo slot [Scan Interface] NI 9472: output digitale sourcing a 100µs - quarto slot [Scan Interface] Obiettivo Questo esercizio mostra la nuova funzionalità digitale che può essere aggiunta a qualsiasi modulo digitale di I/O a otto canali, senza bisogno di compilare o di programmare il Chip FPGA. Il servo motore sarà controllato con un segnale PWM da 24V proveniente dal modulo di output digitale NI 9472. La posizione e la velocità del motore verranno lette con un encoder in quadratura configurato sul modulo di input digitale NI 9411. Risultati Al termine dell esercizio saremo in grado di: Impostare le proprietà digitali speciali offerte dallo Scan Engine per i moduli digitali usare le variabili di I/O in NI LabVIEW Real-Time Istruzioni 1. Nella finestra del Project Explorer clicchiamo col pulsante destro l elemento Project e selezioniamo Add»File... 2. Aggiungiamo il file RT Open Loop.vi dalla cartella /Esercizi/Esercizio2 e salviamo il progetto. 3. Nel Project Explorer espandiamo Mod4 (Slot 4, NI 9472). Come è possibile osservare il modulo presenta delle variabili di I/O di tipo digitale, tuttavia LabVIEW Real-Time permette di aggiungere un contatore ad alta velocità, PWM, o un input di funzionalità encoder in quadratura a qualsiasi modulo di output digitale a otto canali della Serie C, senza bisogno di programmazione il Chip FPGA. Useremo un segnale PWM per controllare la velocità del nostro servo motore. Page 13 of 34
4. Tasto destro su Mod4 e selezioniamo Properties 5. Nella finestra delle proprietà selezioniamo Specialty Digital Configuration. Impostiamo Pulse-Width Modulation come Specialty Mode e, per PWM0, selezioniamo 1kHz come Frequency (Period). Confermiamo con OK. Page 14 of 34
6. Le variabili di I/O si ripopolano come canali di tipo PWM. 7. Trasciniamo PWM0 nel diagramma a blocchi e la colleghiamo a Motor Power come mostrato in figura. Page 15 of 34
8. Dal Project Explorer, tasto destro su Mod3 e selezioniamo Properties 9. Nella finestra delle proprietà selezioniamo Specialty Digital Configuration. Impostiamo Quadrature come Specialty Mode e selezioniamo 8192µs come Velocity Timebase. Questo fa sì che la velocità del motore venga calcolata ogni 8192µs. Confermiamo con OK. 10. Le variabili di I/O si ripopolano con la Posizione e Velocità. Page 16 of 34
11. Trasciniamo la variabile di I/O Velocity0 nel diagramma a blocchi e la colleghiamo alla funzione di moltiplicazione. 12. Per impedire che, arrestata l applicazione, il modulo PWM continui a generare il suo segnale di controllo, copiamo al di fuori del Timed Loop la variabile di I/O PWM0 e le colleghiamo una costante 0. Il diagrama a blocchi dovrà rassomigliare a quanto rappresentato qui sotto. Page 17 of 34
13. L applicazione è ora completa. Salviamo il progetto e mandiamo in esecuzione il VI. 14. Impostiamo Motor Power a 0 e arrestiamo l applicazione. Senza alcuna programmazione del Chip FPGA siamo stati in grado di inviare un segnale PWM e decodificare un input in quadratura attraverso dei moduli digitali standard a otto canali. Fine dell Esercizio 2 Page 18 of 34
Esercizio 3: Gestione I/O sistema Closed-Loop Descrizione dell esercizio In quest esercizio useremo il crio-9024 con i seguenti moduli: NI 9411: input digitale a 500ns - terzo slot [Scan Interface] NI 9472: output digitale sourcing a 100µs - quarto slot [Scan Interface] Obiettivo In questo esercizio progetteremo un sistema ad anello chiuso per il controllo della velocità della ventolina. Le grandezze in gioco per il nostro sistema saranno: - Setpoint: Valore numerico in RPM selezionabile dall utente attraverso il pannello frontale - Output Variable: Segnale 0-100% generato come segnale PWM da NI 9471 per comandare in velocità la ventolina - Process Variable: Segnale di velocità della ventolina 0-6000 RPM misurato tramite NI 9411 (Velocity0) attravero la configurazione Digital Specialty Page 19 of 34
Risultati: Al termine dell esercizio saremo in grado di: Creare delle variabili Scan Engine da progetto per leggere e scrivere segnali Configurare un blocco funzionale PID Chiudere un anello di reazione grazie alle caratteristiche di un sistema operativo Real-Time Istruzioni 1. Nella finestra del Project Explorer clicchiamo col pulsante destro l elemento criohandson (10.0.0.3) e selezioniamo Add»File... 2. Aggiungiamo il file RT Closed Loop.vi dalla cartella /Esercizi/Esercizio3. Il file carica un VI realizzato parzialmente che utilizzeremo per acquisire e generare dai moduli della serie C. Il Timed Loop è già stato sviluppato nell esercizio precedente per acquisire velocità e accelerazione della ventolina. Page 20 of 34
3. Apriamo la finestra di dialogo del second Timed Loop in basso per verificare che la sorgente di temporizzazione Synchronize to Scan Engine sia correttamente selezionata e che il periodo di Scan sia impostato su 1. Quindi clicchiamo su OK per confermare. Page 21 of 34
4. Dalla function palette del diagramma a blocchi richiamare il blocco funzionale PID, subvi che consentirà di chiudere l anello sul sistema servo motore. Per richiamare la Function Palette, cliccare con il tasto destro in un punto qualsiasi del Diagramma a Blocchi e attraverso il percorso: Programming RealTime - Function Blocks Control richiamare il blocco funzionale PID e posizionarlo all interno del Timed Loop in basso. 5. Doppio click sul blocco funzionale PID per aprire il Menù di Configurazione. Configurare la le proprietà Output High e Output Low del blocco funzionale PID rispettivamente a 100 e 0. In questo modo il regolatore PID piloterà il canale PWM0 con un range di duty cicle 0-100 compatibile con il range di funzionamento del servo motore. Inoltre modificate il valore di SetPoint High inserendo un valore pari a 6000 Page 22 of 34
6. Connettete ora rispettivamente il controllo Setpoint Velocity [RPM], la variabile Velocity0 e i controlli Proportional gain (Kc) e Integral Time (Ti) ai terminali d ingresso setpoint, process variable, proprtional gain e Integral Time del blocco PID. 7. Connettere il terminale di uscita del blocco PID output alla variabile Scan Engine del modulo NI9263 PWM0 Page 23 of 34
8. Eseguiamo il VI. Cambiamo sul pannello frontale il valore del controllo Setpoint Velocity [RPM] agendo sulla lancetta rossa. Dovreste osservare l effetto del controllo prestando attenzione all andamento dell indicatore Motor Velocity [RPM]. Variare il valore del guadagno proporzionale e integrativo del blocco PID per osservare differenti risposte del sistema. 9. Riportate a 0 il valore del controllo Setpoint Velocity [RPM] e premete il tasto STOP su pannello frontale. 10. Chiudete e salvate il VI. Fine dell Esercizio 3 Page 24 of 34
Esercizio 4: Programmazione FPGA- Generazione di Onda Quadra (PWG) Descrizione dell esercizio In quest esercizio useremo il crio-9024 con i seguenti moduli: NI 9411: input digitale a 500ns - terzo slot [Scan Interface] NI 9472: output digitale per generazione Onda Quadra - quarto slot [FPGA Programming Mode] Obiettivo La programmazione del crio in modalità Scan Engine è semplice, intuitiva ma presenta delle limitazioni in termini di massime frequenze di acquisizione e generazione utilizzabili. Introduciamo quindi con questo esercizio la possibilità di scrivere del codice LabVIEW FPGA per poter raggiungere prestazioni più elevate andando a personalizzare il chip FPGA presente sullo chassis del crio. Realizzeremo un applicazione suddivisa in due parti: un VI LabVIEW FPGA che genera un segnale digitale ad onda quadra (Segnale PWM per il servo motore) tramite il modulo NI9411. Programmando il VI LabVIEW FPGA non è possibile utilizzare la configurazione Digital Specialty ad alto livello, tuttavia utilizzeremo un IP di LabVIEW FPGA (a tutti gli effetti un SubVI) per generare un onda quadra modulabile in frequenza e duty cicle. I parametri di configurazione frequency e duty cycle saranno passati tramite dei registri (controlli di LabVIEW) ad un VI LabVIEW Real-Time, il quale agisce da Host e fornisce i dati trasferiti al target FPGA. Saremo quindi in grado di personalizzare in maniera pienamente flessibile il segnale PWM che pilota il servo motore Risultati Al termine dell esercizio saremo in grado di: utilizzare le IP di LabVIEW FPGA Module compilare del codice FPGA per generare il bitfile comunicare dati tra il target FPGA e l host Real-Time crio Istruzioni 1. Apriamo CompactRIO Scan Mode.lvproj Page 25 of 34
2. Tasto destro del mouse su Chassis»Properties e selezioniamo la configurazione LabVIEW FPGA Interface 3. Aggiungiamo il Target FPGA al nostro Project Explorer selezionando Chassis (crio-9103), tasto destro e New»FPGA Target. 4. Nella finestra del Project Explorer clicchiamo col pulsante destro l elemento FPGA Target (RIO0, crio9103) selezioniamo Add»File... Aggiungiamo il file FPGA SquareWave Generation.vi dalla cartella /Esercizi/Esercizio4. Il file carica un VI realizzato parzialmente che utilizzeremo per svilluppare il codice LabVIEW FPGA. 5. Dal Project Explorer trasciniamo il modulo Mod4 (Slot4, NI9472 all interno dell elemento FPGA Target (RIO0, crio9103). In questo modo sarà possibile richiamare i canali di acquisizione del modulo all interno del VI LabVIEW FPGA aggiunto al passo precedente. Page 26 of 34
6. Salviamo il progetto Qui di seguito il diagramma a blocchi di FPGA SquareWave Generation.vi Page 27 of 34
7. Nel Project Explorer all interno dell elemento FPGA Target (RIO0, crio9103), espandere la cartella Mod3 e rinominare canale DO0 in PWMOut 8. Sempre dal Project Explorer, trasciniamo il nodo FPGA I/O PWMOut all interno del ciclo while. 9. Aggiungiamo sempre all interno del ciclo la IP Sqaure Wave Generator dalla paletta delle funzioni al percorso Programming»FPGA Math & Analysis» Generation. Filtreremo l accelerazione per ottenere un valore RMS. 10. Una volta inserita nel codice si apre la finestra di configurazione. Configuriamo e completiamo il codice come da figura: Page 28 of 34
11. Connettiamo ora: - Il controllo Frequency (periods/tick) al terminale d ingresso dell IP frequency (periods/tick) - Il controllo duty cycle (periods) al terminale d ingresso dell IP duty cycle (periods) - Il terminale d uscita dell IP Square Wave Out all indicatore Square Wave Out e al nodo di uscita PWMOut In figura il codice appena realizzato che consentirà di verificare la presenza di picchi di accelerazione. 12. Salviamo e manda in esecuzione il VI per incominciare il processo di compilazione. 13. Premiamo OK nel primo dialogo per confermare che vogliamo incominciare il processo di compilazione utilizzando il nostro pc di sviluppo. Page 29 of 34
14. Il dialogo successivo indica che LabVIEW sta generando i file intermedi. Questo è il passaggio in cui il codice LabVIEW è convertito in codice VHDL (Hardware Descriptive Language) per chip FPGA. 15. Il sucessivo messaggio che appare è il Compilation Status. Il server di compilazione è basato su strumentazione Xilinx per compilare il codice VHDL ottenuto al passaggio precedente. Questo processo può impiegare del tempo prima di concludersi, in funzione della logica presente nel proprio codice LabVIEW FPGA. E un periodo di attesa normale che ci si aspetta quando si programma in LabVIEW FPGA o in un qualunque altro linguaggio di rappresentazione hardware per target FPGA. Page 30 of 34
16. In attesa che il processo di compilazione finisca, ci possiamo disconnettere dalla compilazione per incominciare a programmare il VI Host. Procediamo come mostrato da figura. Una volta che ci siamo disconnesso, è imporatante non apportare cambiamenti al VI FPGA. Se qualunque cosa nel VI venisse cambiata è necessario ricompilarlo per poterlo mandare in esecuzione. E sempre possibile riconnettersi alla compilazione cliccando la freccia di Run del VI FPGA o selezionando col tasto destro build specification e scegliendo Reconnect to Compilation. Adesso realizziamo il VI LabVIEW Real-Time che comunica con il VI FPGA. In questo modo possiamo trasferire i dati prodotti dal target FPGA al Host Real-Time. 17. Nella finestra del Project Explorer clicchiamo col pulsante destro l elemento criohandson (10.0.0.3) selezioniamo Add»File... Aggiungiamo il file RT-FPGA Closed Loop.vi dalla cartella /Esercizi/Esercizio4. Il file carica un VI RealTime realizzato parzialmente che attuerà il controllo sul servomotore come nell esercizio 3. Andremo ad aggiungere il codice che implementerà l ulteriore controllo di freqeunza e duty cicle da comunicare al target FPGA Page 31 of 34
18. Selezioniamo la sottopaletta FPGA Interface dalla paletta delle funzioni e inseriamo nel diagramma a blocchi i quattro elementi raffigurati nella figura qui sopra. Creeremo un collegamento col codice FPGA attraverso Open FPGA VI Reference. Useremo il Read/Write Control per leggere i campioni dal VI FPGA e per inviare i segnali di Duty Cicle e frequenza al VI FPGA Square Generation.vi e, infine, il Close FPGA VI Reference per chiudere il collegamento con il codice FPGA. Completa il VI come in figura sotto: Page 32 of 34
19. Cliccando col tasto destro del mouse Open FPGA VI Reference, selezioniamo dal menu a tendina Configure Open FPGA VI Reference.. e completiamo come mostrato qui di seguito. 20. Completa il codice come nella figura seguente con i collegamenti rimanenti. Espandere il nodo Read\Write Control FPGA verso il basso in modo da poter scrivere verso il VI FPGA le due grandezze Duty Cicle e frequenza e poter leggere il valore digitale Square Wave Out generato dal VI FPGA. Page 33 of 34
21. Salviamo il codice. NOTA: perché l'applicazione sia eseguibile bisogna attendere che Generation.vi abbia terminato la compilazione. FPGA SquareWave Il VI LabVIEW Real-Time così completato può essere mandato in esecuzione. Al termine del deploy sul Target Real-Time, il codice manderà in esecuzione il VI FPGA compilato. 22. Lanciamo il VI, il funzionamento è analogo a quello osservato al termine dell esercizio 3. È possibile provare ad aumentare da pannello frontale la frequenza dell onda quadra attraverso il controllo slider Square Wave Out Frequency e osservare l effetto di risonanza che si ha sul servo motore. 23. Interrompiamo l applicazione. 24. Chiudiamo i VI aperti e il progetto. Fine dell Esercizio 4 Page 34 of 34