In questo articolo vediamo la realizzazione di un semplice semaforo con il pattern Macchina a Stati. Abbiamo quindi tre led Verde, Giallo e Rosso che si accenderanno con la sequenza: verde-->vede e Giallo--> Rosso con tempistiche diverse per ogni stato.
Il progetto è stato realizzato con LabVIEW 2013. Nella sezione download si può scaricare il progetto completo.
Fase 1: Creazione del progetto (ambiente windows 10)
- Creare sul desktop una cartella di nome "Semaforo_LV2013".
- Avviare LabVIEW
- Creare un Progetto vuoto (File/Create Project o click sul pulsante "Create Project"), quindi selezionare Blank Project e poi il pulsante Finish
- Salvare il nuovo progetto dentro la cartella del punto 1 dando al progetto lo stesso nome della cartella (Semaforo_LV2013)
- Click destro sulla voce "My Computer" e selezionare "New-->VI" (si apre un nuovo VI vuoto)
- Salvare il nuovo VI col nome "Semaforo con macchina a stati"
Fase 2: Creazione dell'interfaccia grafica o GUI (Pannello frontale. Vedi figura)
- Cercare su Google immagini il disegno di un semaforo (es: link ). Copia immagine e poi crtl+V sul Pannello frontale per incollare l'immagine in LabVIEW
- Cercare un LED dalla paletta. Click destro sul pannello frontale-->Boolean-->Round Led (chiamare il led "V" iniziale di Verde)
- Sovrapporre il Led "V" al Verde dell'immagine e ridimensionarlo fino a farlo diventare grande uguale. Modificare il colore di OFF (falso) in NERO (click desto sul Led e poi properties oppure usare la Tools Palette con i pennelli).
- Copiare il Led "V" (ctrl+click Dx su Led V) e mettere la copia dove c'è la luce gialla. Colorare lo stato ON del led col colore giallo e rinominare il led in "G"
- Ripetere la stessa operazione del punto precedente per creare il led "R"
- Nascondere tutti i nomi dei led. Click dx sul led poi "Visible Item-->Label" (togliere la spunta).
- Prelevare il pulsante STOP dalla Control Palette--> Boolean. Posizionare il pulsante sotto il semaforo e ridimensionarlo. Nascondere la Label
Fase 3: Creazione del codice (Diagramma a blocchi o Block Diagram. Vedi figura)
Se siete sufficientemente pratici di LabVIEW potete costruire il codice seguendo le figure, altrimenti ecco alcune indicazioni:
- Definizione degli stati. Sul Pannello Frontale inserire un oggetto Enum. (Control Palette-->modern->Ring&Enum-->Enum) poi click dx su Enum e quindi "Edit Items...". Inserire, nell'ordine, le voci "Verde", Verde-Giallo" e "Rosso" quindi salvare
- Creazione del Type Def. Click dx sul Enum e selezionare la voce "Make Type Def". Individuare Enum sul diagramma a blocchi e poi click dx quindi "Change to Constant" e successivamente "Open Type Def" . Dalla finestra che si apre fare File-->Salva. Salvare col nome "statiSemaforo"
- Inserire un cilco While-Loop e collegare il pulsante di STOP al Loop Condition del ciclo while.
- Click dx sulla cornice del ciclo while ed aggiunger uno Shift Register (Add Shift Register). Ripetere la stessa operazione per altri due shft register (click dx in punti diversi!)
- Collegare esternamente l'Enum ad uno degli shift register
- Costante Cluster. Inserire una costante cluster. Function Palette-->Programming-->Cluster-->Cluster Constant. Inserirci dentro una costante booleana settata a False (sub-palette Boolean di Programming) e chiamarla "V". Ripetere (o copiare) l'operazione con altre due costanti "G" e "R". In alterenativa potete creare il cluster sul pannello frontale inserendo al suo interno copia dei tre led creati prima e poi trasformarlo in costante.
- Collegare la costante cluster ad uno shift register (esternamente)
- Creare una costante numerica inizializzata a 3 e collegarla al terzo shift register (sempre esternamente)
- Stati: Aggiungere una struttura Case. Function Palette-->Programming-->Structures-->Case Structure
- Collegare l'uscita dello shift register a cui è collegato Enum al "?" (Case Selector) della struttura case. LV dovrebbe aggiungere automaticamente tutti i casi presenti nel Type Def Enum (Verde, Verde-Giallo e Rosso)
- Inserite un Express VI chiamato Elapsed Time (attivate View As Icon). Function Palette-->Programming-->Timing-->Elapsed Time. Collegate l'uscita dello shift registrer della costante "3" all'ingresso "Time Target(s)" del'Express VI e l'uscita "Time has Elapsed" al bordo della struttura Case.
- Nella Case (stato "Verde") inserire una Select (Function Palette-->Programming-->Comparison-->Select) e collegarla come in figura. Per le costanti Enum copiare quella esterna al ciclo o utlizzare il comando: Function Palette-->Select a VI... quindi selezionare il file "statiSemaforo.ctl"
- Sempre nella Case "Verde" Inserire un Bundle by Name (Function Palette-->Programming-->Cluster-->Bundle by Name) e collegarla come in figura.
- Copiare tutto il contenuto della Case "Verde"(selezionare e poi CTRL+C) . Posizionarsi nella Case "Verde-Giallo" fare incolla (CTRL+V) e fare le opportune modifiche (vedi figura).
- Fare le stesse operazioni del punto precedente per il Case "Rosso"
- Aggiungere fuori della struttura Case un Unbundle by Name e collegarlo come in figura
- Aggiuingete un Wait (Function Palette-->Programming-->Timing-->Wait) con una costante di 20 ms
Sotto il diagramma a blocchi con lo stato "Verde"
Sotto la case con lo stato "Verde-Giallo" e quella con lo stato "Rosso"
Il nostro codice è terminato. Salviamo. Ora possiamo collaudare il VI
Fase 4: Impostazioni di visualizzazione (opzionale)
Se volete mostrare il VI al centro dello schermo quando è in esecuzione e senza la varie barre dei menu e degli strumenti andate nelle proprietà del VI (File-->VI properties o CTRL+I). Selezionate dal menu a tendina le voci "Windows Apparence"ed impostate il "pallino" Dialog. Per ridimensionare la finestra con solo il semaforo utilizzare l'altra scheda mostrata in figura.