Skip to content

PLC programmato tramite CODESYS e l'utilizzo di una Raspberry Pi per la gestione degli I/O

Notifications You must be signed in to change notification settings

albeerto-dev/Fellow-Brewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fellow Brewer - PLC

Un sistema automatico per la produzione del mosto di birra: PLC programmato tramite piattaforma CODESYS in IEC61131 e l'utilizzo di una Raspberry Pi per la gestione di I/O con l'utilizzo di una HMI accessibile tramite WebServer. Sviluppato da Alberto M. Ramagini

Obiettivi di sviluppo

Codice

  • Struttura generale delle varibili globali e SFC / LD / ST
  • Implementazione modalità manuale
  • Implementazione modalità automatica
  • Implementazione allarmi
  • Implementazione I/O
  • Implementzaione timer
  • Implementazione PID
  • Implementazione ON/OFF
  • Implementazione voce MAIN
  • Implementazione voce BREW
  • Implementazione voce RECIPE

Wiring

  • Bozza su breadboard
  • Disegno PCB
  • Realizzazione PCB
  • Assemblaggio PCB
  • Cablaggio bassa tensione
  • Disegno schema circuito bassa tensione
  • Cablaggio alta tensione
  • Disegno schema circuito alta tensione

Test di funzionamento

  • Input e output basilare
  • Batch con sola acqua
  • Batch di produzione mosto di birra

Aggiornamenti di sviluppo

  • Resoconto 19.06.2020 // Dall'imagine 1 si denota la prima struttura dell'interfaccia HMI che consentirà di gestire la varia attrezzera tramite pannello "Settings..." di visualizare "DATA" di poter usare il controllore in modlaità manule "MAIN" e di poter procedere con una completa cotta con la modalità "START A BREW" che consete di insererire una ricetta tramite file .xml o crearla sul momento.
  • Resoconto 22.06.2020 // Prime prove di struttura codice PID. Procede con complicazioni la gestione dell'impulso basato sui calcoli dell'algoritmo PID. Questa prima versione è basata sul codice in C++ di un precedente progetto personale. La difficolta sta nel tramutare il valore di errore di tipo REAL in un impulso dell'attuatore di una durata consona ed efficace da applicare secondo una finestra temporale di azione da parte dell'SSR.
  • Resoconto 25.06.2020 // Immagine 03 Codice PID ultimato. Tramite prove di simulazione sono riuscito a gestire il valore di output PID.Y in maniera tale da produrre un impulso di una certa lunghezza temporale per l'attivazione dell'SSR. Manca il tuning dei parametri.
  • Resoconto 28.06.2020 //
    Immagine MAIN
    Interfaccia MAIN ultimata. Tutti i pulsanti sono stati introdotti. Gli SSR di HLT e BOIL seguono un algoritmo di tipo ON/OFF per il riscaldamento e la tenuta a SET POINT. L'SSR del MASH TUN invece ha la doppia possibilità di eseguire il controllo tramite algoritmo ON/OFF oppure di tipo PID (oppurtunamente tarato) semplicemente premendo il pulsante apposito. I due algoritmi di controllo temperatura sono stati introdotti nel programma tramite FUNCTION BLOCK per avere una maggiore versatilità nel codice. La funzionalità del timer ha come unico scopo la funzione di disattivare l'SSR a fine countdown. Ho implementato un pulsante di EMERGENZA per disattivare tutti gli attuatori contemporaneamente. La struttura del codice è per ora interamente in TESTO STRUTTURATO (ST).
  • Resoconto 05.08.2020 // Ripreso lo sviluppo del codice da circa una settimana dopo la puasa esami e estiva. Dopo svariati tentativi di utilizzo della libreria RecipeMangaer per la gestione delle ricette avevo inizialmente deciso di abbandonarne l'utilizzo. La pessima documentazione la rendeva inutilizzabile, ma da pochissimi giorni CODESYS Italia ha pubblicato su Youtube un video esplicativo dell'utilizzo della libreria. Al momento sembra essere il tutorial più completo ed efficace dato che le uniche risorse online sono un paio di domande sui forum dedicati e altri due video su Youtube, di cui uno in russo (incomprensibile) e uno in inglese totalmente inutile e inefficace all'apprendimento. Ripongo estrema fiducia nel risucire ad implementare la gestione delle ricette (salvataggio/caricamento/scrittura/utilizzo) in un arco di tempo relativamente breve. Ad oggi la parte complessa di implementazione risulta essere lo storage, il caricamento e la lettura dei file in .txtrecipe .
  • Resoconto 15.10.2020 // Immagione ricette implementate Finalmente sono arrivato ad un punto di svolta. Da come si vede nell'immagine, sono riuscito a implementare la scrittura e lo storage delle ricette. La lista di sinistra indica i nomi delle ricette create e disponibili, il riquadro centrale fa visualizzare i file interni alla cartella dove vengono salvate le ricette con i relativi nomi. Sotto alla finestra di navigazione è presente l'interfaccia di scrittura delle varibaili da registrare nella ricetta/file da salvare o creare. Sulla destra si trovano una moltitudine di funzionalità a pulsante che corrispondono ad alcuni dei metodi che vengono forniti dalla libreria RecipeManager che ho deciso di implementare. Probabilmente alcune di queste funzionalità non sono strettamente utili e in futuro qualcuna sarà probabilmente eliminata. Il prossimo passo consiste nell'implementare la modalità automatica che funziona se e solo se si seleziona un file RICETTA precedentemento creato; dopo aver selezionato il file, il programma salva le varibili in una struct temporanea in cui si trovano i parametri che seguirà il processo durante la birrificazione
  • Resoconto 16.10.2020 // Immagine inizio sviluppo modalità automatica Risolto il problema di lettura al momento della selezione della ricetta. Ho appena iniziato lo sviluppo della modalità automatica e si possono già ben vedere tutti i pre-requisiti da soddisfare prima di comiciare la cotta : caricamento dell'acqua e selezione della ricetta (che se mal selezionata genera errore; la selezione avviene tramite scrittura del nome della ricetta nell'apposito riquadro). Ho pensato anche di inserire una progressbar per indicare lo status temporale della cotta e ho avuto l'idea di implementare una modalità semi-automatica che può essere attivata e disattivata a piacimento durante la cotta.
  • Resoconto 19.10.2020 // Oggi è una buona giornata di commit. Sono stati raggiunti ottimi risultati. Dopo aver recentemente introdotto la lettura delle ricette, ho ora completato l'implementazione della parte interamente automatica. Il meccanismo di utilizzo è come segue: come prima cosa si spuntano le checkbox di verifica di inserimento acqua nelle pentole di impianto. Dopo ciò è possibile selezionare la ricetta, precedentemente creata tramite l'apposito menu "RECIPE". Avvenuto il salvataggio nelle variabili globali, comincia il riscaldamento dell'acqua in entrambe le pentole (se si fa sparge, altrimenti viene riscaldata solo quella di mash). Un avviso indicherà l'inserimento dei grani per iniziare l'ammostamento e dopo averli inseriti si confermerà tramite slider che darà il via a tutti gli step del mash con relativo tempo e temperatura. Terminato il mash si può procedere con lo sparge a corretta temperatura grazie all'azione paralella durante l'azione di ammostamento. Una volta confermato l'inizio di sparge tramite slider, il timer parte. Terminato il timer si richiede all'operatore di confemrare il trasferimento del mosto nel tino di bollitura tramite slider. Una volta confermato si attiva l'SSR del tino di bollitura per portare il mosto ad ebollizione. Raggiunti circa i 96°C si chiede conferma all'operatore per l'inizio della bollitura tramite slider. Una volta confermato, si attiva il timer di controllo durata della bollitura e in contemporanea una spia luminosa (e sonora in futuro) che avvisa l'operatore di confermare la gettata di luppolo. Terminata la bollitura si disattiva l'SSR della termoresistenza riscaldante e si attiva il relay dell'elettovalvola di raffreddamento o per arrivare a temperatura di hopstand (se richiesto da ricetta) oppure per raffredare il mosto a temperatura di inoculo del lievito. La giornata di cotta è terminata. Nell'immagine di destra si possono osservare tutte le POU e le FB del codice, alcune sono ridondanti, altre no, altre saranno eliminate pechè non utili, ma in linea di massima dovrebbero essere quelle definitive. Inserisco anche un'immagine della HMI dedicata alla modalità automatica abbastanza semplice ed essenziale e che non crei confusione all'operatore. All'interno della cartella images ho allegato anche il DEBUG visivo di una simulazione di cotta tramite valori forzatamente scritti all'interno del PLC per verificare il corretto funzionamento.
  • Resoconto 24.10.2020 // Il progetto cambia ufficialmente nome e diventa "FELLOW BREWER" che dall'inglese può essere tradotto con "collega birraio". Ho scelto questo nome perchè risalta l'importanza di un "collega" durante un faticoso e complesso processo produttivo come quello della produzione del mosto di birra. Collega perchè aiuta a portare a termine i compiti di produzione nel modo più efficiente possibile, riducendo i rischi e aumentado la replicabilità del processo. FELLOW BREWER è un collega/assistente a tutti gli effetti. Questo resoconto è l'ultimo riguardante lo sviluppo del codice: lo sviluppo software è terminato (salvo eventi eccezionali per aggiungere funzionalità non ancora pensate). Tutti i bug sono stati risolti e tutti tutte le funzionalità sono state implementate correttamente. Il cuore del sistema è chiaramente la funzionalità BREW che consente di produrre un batch in modalità automatica con qualche accortezza da parte dell'operatore. Quest'ultimo dovrà rispondere al PLC durante la cotta così da verificare se alcuni passaggi siano stati effettuati e se si possa procedere allo step successivo. Seguiranno poi spiegazioni più dettagliate alla stesura della tesi o anche in un video spiegazione del codice scritto (ampiamente commentato). Questa è l'HMI:
  • Resonto 27.10.2020 // Gli schemi elettrici sono stati disegnati tramite KiCAD e completati al meglio. Potrebbero esserci delle modifiche in futuro ma comunque il grosso è stato realizzato. Ho disegnato 2 schemi elttrici: uno approfondisce i collegamenti 5VDC dei PIN della Raspberry Pi con qualche aggiunta di componenti in 220VAC e 12VDC per chiarezza e completezza di progetto; l'altro invece approfondisce il circuito in 220VAC e a 12VDC sfruttati dai segnali della Rappberry Pi. Manca un terzo circuito dove i collegamenti agli attuatori e sensori sono "eliminati" per fare posto alle morsettiere di collegamento che saranno utili sia nella progettazzione della "HAT" (il PCB) sia nel cablaggio del protipo finale.
  • Resoconto 02.11.2020 // Tutti i circuti sono stati disegnati. Ho mandato in stampa il PCB tramite il portale pcbway.com e tra qualche giorno dovrebbe essere consegnato. Ho avuto la necessità di realizzare: il disegno circuito in 220VAC con l'aggiunta del convertitore 12VDC, il disegno del circuito degli I/O della Raspberry Pi con gli elementi controllati, il disegno del circuito degli I/O della Raspberry Pi con la morsettiere dei vari componenti di progetto (utili alla realizzazione del PCB).All'interno della cartella di reposistory "Schemi e PCB" si possono trovare i file PDF di cui ho scritto. Qui sotto i disegni realizzati:
  • Resoconto 09.11.2020 // Il pacco da pcbway.com contente il PCB è stato consegnato. Potrò procedere con l'assemblaggio e la saldatura dei componenti soltanto intorno alla terza o quarta settimana di dicembre dopo aver terminato il corso di formazione in "Tecnologie Birrarie" presso il CERB dell' Università degli Studi di Perugia.
  • Resoconto 22.12.2020 // Ho saldato e testato tutti i componenti saldati sulla scheda sia tramite test pilotati dal PLC sia tramite tester per verificare il corretto voltaggio degli output. Tutti i led e tutti gli attuatori funzionanano regolarmente. Il funzionamento delle sonde di temperatura DS18B20D è stato verificato tramite l'interfaccia grafica che ha correttamente segnalato la temperatura rilevata.

  • Resoconto 15.01.2021 // Il progetto è completato.
  • Resoconto 26.01.2021// Video dimostrativo del funzionamento del PLC, di tutti i suoi input e output e comprensivo anche di una spiegazione di massima di alcune scelte progettuali sia software che hardaware.
    youtube_video

About

PLC programmato tramite CODESYS e l'utilizzo di una Raspberry Pi per la gestione degli I/O

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages