Nella lezione precedente, hai imparato come utilizzare i dati del sensore ottico in un progetto per ordinare un disco per colore. In questa lezione, ti baserai su ciò che hai imparato per esplorare le opzioni in VEXcode che consentono al progetto di prendere una decisione indipendentemente dal colore rilevato dal sensore ottico. Imparerai a conoscere:
- Perché ottimizzare il processo decisionale è importante in un contesto industriale.
- La differenza tra i blocchi If then , If then else e Else if.
Controllo di più condizioni
Nella lezione precedente hai creato un progetto che poteva ordinare un disco per colore su un pallet rosso o un pallet verde. Sebbene questo sia efficace, il progetto potrebbe ordinare solo un disco alla volta. In un ambiente di fabbrica, molti oggetti devono essere smistati e pallettizzati ripetutamente. Per fare ciò in modo efficace, il braccio a 6 assi deve essere in grado di prendere ripetutamente una decisione su come spostare gli oggetti o se è necessario l'intervento umano. Considera i cubi che hai spostato nel corso Introduzione al braccio a 6 assi.
E se un cubo blu fosse nella zona di carico? Cosa accadrebbe nel progetto della lezione precedente? In un ambiente industriale, è necessario considerare tutte le possibili condizioni. Se un oggetto errante viene mescolato agli oggetti da smistare, è probabile che sia necessario l'intervento umano per garantire che la cella di lavoro e i lavoratori che la circondano rimangano al sicuro e funzionino in modo efficace.
Sequenziale Se poi blocchi
Nella lezione precedente, hai usato due blocchi If then in sequenza per verificare due condizioni separate una dopo l'altra, essenzialmente ponendo due domande all'interno del progetto.

Innanzitutto, l'oggetto è rosso?, quindi, l'oggetto è verde?. Ogni condizione viene verificata ad ogni esecuzione del progetto, indipendentemente da quanto rilevato dal Sensore Ottico. Sebbene questa struttura ti abbia permesso di ordinare un disco alla volta in modo efficace, non è il modo più efficiente per farlo. Un disco rosso potrebbe essere ordinato, ma il sensore ottico potrebbe anche rilevare il verde da qualcos' altro nell'ambiente e viceversa. Inoltre, non viene preso in considerazione un oggetto che non è né rosso né verde, come un oggetto imprevisto che potrebbe causare un problema di sicurezza.
Immagini del flusso di progetto
Durante questa lezione, vengono condivise le immagini che spiegano il flusso dei progetti VEXcode. Puoi ricreare queste immagini nel tuo quaderno di ingegneria mentre ti muovi attraverso la lezione.
Utilizza strumenti in Google Slides o Microsoft PowerPoint come frecce, caselle o diagrammi di flusso per creare visualizzazioni che funzionano meglio per te nel tuo blocco appunti.

Sequenziale If then else blocca
C'è un blocco diverso che potrebbe essere utilizzato per consentirci sia di verificare le condizioni di rosso e verde che di tenere conto di un colore diverso. Il blocco If then else è un blocco C che esegue i blocchi all'interno del ramo if o else , in base al valore booleano riportato.

Dopo aver eseguito il ramo if o else, il progetto passerà al blocco successivo nello stack. Il flusso di progetto dei blocchi If then else può anche essere mostrato per rendere più visibili i rami.

Si noti che in questi esempi, il ramo else viene utilizzato per gestire la condizione di un oggetto che non è né rosso né verde. In tal caso, sarebbe necessario l'intervento umano. In precedenza hai appreso che la luce blu sulla Signal Tower viene utilizzata per indicare la necessità di un intervento umano. Inoltre, un arresto controllato interromperà il movimento del braccio a 6 assi al fine di mantenere le persone e i macchinari al sicuro. Un blocco a torre Set Signal e un blocco di arresto Set Control possono essere aggiunti al ramo else, in modo che un oggetto non rosso o non verde inneschi queste funzioni di sicurezza.

Le immagini finora hanno mostrato solo come gestire la condizione dell'oggetto rosso. Un altro If then else è necessario per verificare le condizioni dell'oggetto che è verde.

Pensiamo al flusso del progetto con questa struttura. Ogni volta che il progetto viene eseguito, verranno eseguite più diramazioni, indipendentemente dal colore rilevato dal sensore ottico.

Pensiamo a questo con un Disco rosso come esempio. Se il sensore ottico rileva rosso, la condizione del primo blocco If then else verrebbe segnalata come vera. Il blocco all'interno del ramo if funzionerebbe, spostando il braccio a 6 assi sul pallet rosso. Tuttavia, la condizione all'interno del secondo blocco If then else verrebbe segnalata come falsa. Ciò significa che il blocco all'interno del suo ramo else funzionerebbe, mettendo il braccio a 6 assi in arresto controllato e lampeggiando in blu sulla torre di segnalazione. Poiché il braccio a 6 assi si troverebbe in uno stato di arresto controllato, nessun altro blocco nel progetto potrebbe essere eseguito e ciò cesserebbe tutte le operazioni fino a quando non fosse risolto.

Mentre ora possiamo spiegare un oggetto inaspettato (come un cubo blu), ma il braccio a 6 assi non raggiungerà mai il punto nel progetto di rilasciare il disco sul pallet. Invece di controllare le condizioni di rosso e verde una dopo l'altra, c'è un modo per verificare se un oggetto è verde solo se l'oggetto non è rosso.
Blocchi else nidificati If then
Ciascuno dei rami del blocco If then else può accettare altri blocchi C al suo interno. Questo si chiama "nidificazione". Ciò significa che il secondo blocco If then else può essere annidato all'interno del ramo else del primo, in questo modo.
Ora la condizione del sensore ottico che rileva il verde verrà controllata solo quando la condizione precedente (il sensore ottico rileva il rosso) viene segnalata come falsa. Quindi, quando il sensore ottico rileva il rosso, solo il primo se il ramo viene eseguito, spostando il disco sopra il pallet rosso.

Se il sensore ottico rileva il verde, la condizione del primo ramo if (ottico rileva il rosso) riporterebbe false, e quindi il ramo else verrebbe eseguito. La condizione del blocco If then else annidato verrebbe controllata per vedere se il sensore ottico rileva il verde. Tale condizione si riferirebbe come vera, quindi il blocco all'interno del secondo se il ramo dovesse funzionare, spostando il disco sul pallet verde.
Se né il rosso né il verde fossero rilevati dal sensore ottico (come nel caso di un cubo blu che viene prelevato), entrambe le condizioni sarebbero segnalate come false, e quindi il ramo else del blocco If then else annidato funzionerebbe, innescando una fermata controllata e avvisando i lavoratori della necessità di un intervento umano. Questi flussi di progetto possono anche essere visualizzati come un diagramma di flusso, come quello visto qui.

I blocchi nidificati If then elsepossono essere visualizzati come un elenco a cascata di domande. Qui le domande sono le seguenti:
- L'oggetto è rosso?
- Sì? Spostati sul pallet rosso e smetti di fare domande.
- No? Fai un'altra domanda.
- L'oggetto è verde?
- Sì? Spostati sul pallet verde e smetti di fare domande.
- No? Quindi l'oggetto non è rosso o verde. Modificare i colori della Signal Tower e attivare un arresto controllato.
- L'oggetto è verde?
Si noti che le domande vengono poste solo se alla domanda precedente viene data una risposta negativa.
Mentre questo gestisce tutte le condizioni che vogliamo controllare, c'è un altro blocco che controllerà le condizioni allo stesso modo, ma è più facile da costruire rispetto ai blocchi di nidificazione.
Else if Block
Il blocco Else if consente di controllare più condizioni all'interno dello stesso blocco. Ciascuna delle condizioni in questo blocco verrà controllata in sequenza, solo se la condizione precedente viene segnalata come falsa. Se tutte le condizioni booleane per else se rami sono false, verranno eseguiti i blocchi all'interno della sezione else.

Questo blocco ha lo stesso flusso di progetto dei blocchi If then else nidificati, ma è più facile da costruire perché non è necessario nidificare i blocchi. Imparerai di più sulla codifica con il blocco Else if nella lezione seguente.
Verifica la tua comprensione
Prima di passare alla lezione successiva, assicurati di comprendere i concetti di questa lezione rispondendo alle seguenti domande nel tuo quaderno di ingegneria.
Domande sulla comprensione > (Google Doc / .docx / .pdf )
Selezionare Avanti > per applicare il blocco Else if in un progetto.