Cos'è MiaPLC
MiaPLC (Micro Integrated Automation Programmable Logic Controller) è un PLC costruito su microcontrollori ESP32. Tre pezzi lavorano insieme:
- la scheda: un ESP32 con ingressi, uscite e di solito Ethernet;
- il firmware: esegue il programma in una macchina virtuale a bytecode, ciclo dopo ciclo, e gestisce rete, I/O, orologio e diagnostica;
- l'editor web: sta dentro il PLC. Lo apri dal browser con l'indirizzo IP della scheda e programmi in ladder.
Il modo di lavorare è quello dei PLC industriali: scrivi il programma, Compile, Download to cpu, Run, poi Online per vederlo lavorare.
Primi passi
- Scegli la scheda. Per cominciare va bene una scheda di riferimento (vedi Schede).
- Prepara il firmware con MiaConfig. Disegni la scheda (ingressi, uscite, Ethernet, orologio), poi Genera → Compila firmware. La prima volta scarica gli strumenti di compilazione (serve internet e circa 1 GB di disco), poi compila e basta.
- Carica il firmware. Per la prima installazione usi il file
<scheda>-completo.bincon gli strumenti Espressif (un solo file all'indirizzo 0x0). Gli aggiornamenti successivi si fanno dall'editor con il pacchetto.miaplc. - Apri l'editor. Collega il PLC alla rete e apri nel browser il suo indirizzo IP.
- Scrivi il primo network, poi Compile → Download to cpu → Run → Online.
Non hai ancora una scheda? Parti dal simulatore: è lo stesso editor, con un PLC simulato nel browser.
Il simulatore
Il simulatore è l'editor vero con un PLC simulato al posto della scheda. La macchina virtuale è la stessa logica del firmware, riscritta in JavaScript con gli stessi limiti, quindi un programma che funziona nel simulatore funziona anche sulla scheda.
- Nel riquadro MOCK PLC fai clic sugli ingressi
I0…I5per accenderli e spegnerli; le usciteQ0…Q3si colorano quando sono attive. - RUN / STOP / Reboot fanno come il selettore e il riavvio della scheda; Errore e Offline simulano un guasto e la perdita di collegamento.
- Il tempo di esecuzione mostrato è una stima: quello vero si misura sul PLC.
- Programma e stato restano salvati nel browser; Reset mock cancella tutto.
Il ciclo di scansione
Come ogni PLC, MiaPLC ripete sempre lo stesso giro:
- legge gli ingressi;
- esegue il programma dall'inizio alla fine (Main e le FC che chiama);
- scrive le uscite.
Il programma quindi non “aspetta”: ogni network viene rivalutato a ogni giro. I timer contano il tempo tra un giro e l'altro, i fronti ricordano lo stato del giro prima. Il tempo di scansione e il carico della CPU si leggono nella Diagnostica e nel DB di sistema.
Blocchi: Main, StartUp, FC, DB
| Blocco | A cosa serve |
|---|---|
| Main | Il programma principale, eseguito a ogni scansione. |
| StartUp | Eseguito una volta all'avvio o dopo un Download: valori iniziali, azzeramenti. |
| FC (funzione) | Un pezzo di programma riutilizzabile con la sua interfaccia (ingressi, uscite, variabili locali). Si chiama dal Main o da altre FC. |
| DB (blocco dati) | Variabili con nome e tipo, anche strutture e array. Un DB può essere ritentivo: mantiene i valori allo spegnimento. |
| DB di sistema | Creati dal PLC: dati della scheda e valori di sistema (tempo di scansione, RAM libera, stato di rete, primo giro…), in sola lettura. |
Ogni blocco è diviso in network, ognuno con titolo e commento. I blocchi si possono raccogliere in cartelle.
Aree e indirizzi
| Area | Indirizzi | Cosa contiene |
|---|---|---|
I | I0 … I1023 | Ingressi digitali (sola lettura) |
Q | Q0 … Q1023 | Uscite digitali |
M | M0 … M1023 | Merker: bit di memoria interni |
T | T0 … T255 | Timer: il contatto T5 è l'uscita del timer 5 |
SM | SM0 … SM5 | Bit di sistema (sola lettura, vedi sotto) |
MB / MW / MD | es. MW3, MW3.5 | Byte, parole e doppie parole di memoria; MW3.5 è il bit 5 della parola 3 |
DB | es. "Impianto".livello | Variabili dei blocchi dati, per nome |
Bit di sistema
| Bit | Significato |
|---|---|
| SM0 | 1 solo al primo ciclo |
| SM1 | sempre 1 |
| SM2 | sempre 0 |
| SM3 | clock 10 Hz |
| SM4 | clock 2 Hz |
| SM5 | clock 1 Hz |
A ogni indirizzo puoi dare un simbolo (nome e commento) nella tabella dei simboli: nel ladder vedrai "Start" sopra I0.
Tipi di dato
| Tipo | Campo |
|---|---|
| BOOL | 0 / 1 |
| BYTE · USINT | 0 … 255 |
| SINT | −128 … 127 |
| WORD · UINT | 0 … 65535 |
| INT | −32768 … 32767 |
| DINT | 32 bit con segno |
| UDINT | 32 bit senza segno |
| REAL | virgola mobile 32 bit |
| TIME | tempo in ms, si scrive T#5s, T#1m30s, T#250ms |
| TIMER | un timer con lo stato in una variabile di un DB (non usa i T0…T255) |
Nei DB e nelle interfacce delle FC puoi usare anche array e strutture (es. "Dati".motore.velocita).
Istruzioni ladder
| Gruppo | Istruzioni |
|---|---|
| Contatti | NO, NC, fronte P / N di un operando, fronte della corrente P_TRIG / N_TRIG, NOT, confronto (== <> < > <= >=) |
| Bobine | bobina, bobina negata, SET, RESET, fine FC (RET) |
| Timer | TON ritardo all'eccitazione, TOF ritardo alla diseccitazione, TP impulso |
| Contatori | CTU avanti, CTD indietro, CTUD avanti e indietro |
| Numeri | MOVE, ADD, SUB, MUL, DIV, MOD, NEG, ABS, MIN, MAX, LIMIT, CONV, SQRT, SQR, SCALE (es. 0…27648 → 0…100 %) |
| Parole | AND, OR, XOR, INV, SHL, SHR, ROL, ROR, SWAP |
| Funzioni | chiamata di una FC, con i suoi parametri |
I box numerici hanno EN / ENO: un overflow o una divisione per zero non fermano il PLC, ma mettono ENO a 0.
FC in ST e in C
Una funzione si può scrivere anche in testo: ST (Structured Text) o C. Ci sono IF, CASE / switch, FOR, WHILE, REPEAT / do-while, EXIT / break, CONTINUE, RETURN, con il completamento automatico dei nomi delle variabili, dei campi dei DB e dei simboli. Utile per calcoli e ricette, mentre la logica a contatti resta in ladder.
IF #avvio AND NOT #stop THEN
#output := TRUE;
ELSIF #stop THEN
#output := FALSE;
END_IF;
Online e diagnostica
- Online: i contatti chiusi e le bobine eccitate diventano verdi, i timer mostrano tempo trascorso / preimpostato, i box mostrano i valori.
- Diagnostica: stato del PLC, versioni, log degli eventi, tempi di scansione, carico della CPU, analisi della RAM, controlli all'avvio.
- Un errore di un modulo non blocca la scheda: diventa un avviso nella diagnostica e il PLC continua.
Schede e MiaConfig
MiaConfig è il configuratore: descrivi la scheda (ingressi, uscite, Ethernet, WiFi, orologio, dispositivi I2C/SPI) e lui sceglie i moduli del firmware e lo compila. Funziona su Windows, Linux e macOS e non installa nulla nel sistema: tutto resta nella sua cartella.
| Chip | Configurazioni di esempio |
|---|---|
| ESP32 | Olimex ESP32-EVB (con o senza orologio DS3231) |
| ESP32-C3 | con Ethernet W5100 o W5500, con o senza DS3231 |
| ESP32-S3 | ESP32-S3-DevKitC-1 |
| ESP32-P4 | PLC e pannello HMI |
Chip Ethernet supportati dal firmware: W5100, W5500, LAN8720, IP101.
µLink: I/O remoti
µLink collega al PLC dei moduli di ingressi e uscite su Ethernet cablata. Lavora direttamente sui frame Ethernet, senza indirizzi IP: il PLC cerca i moduli («Cerca dispositivi»), li associa e li comanda come se fossero I/O suoi.
- Un modulo può essere un altro ESP32 con il firmware MiaPLC in ruolo di modulo I/O.
- Oppure un Arduino Uno con shield Ethernet W5100 o W5500, con la libreria MiauLink.
- I moduli possono avere anche ingressi e uscite analogici.
Pannello HMI
MiaHmi è il firmware per un pannello touch da 10,1" su ESP32-P4: legge e scrive i dati del PLC e mostra grafici veloci. Si prepara con MiaConfig (progetto HMI) come il PLC.
Domande frequenti
È un PLC certificato?
No. MiaPLC è pensato per didattica, prototipi e progetti hobbistici. Non usarlo per funzioni di sicurezza (arresti di emergenza, ripari, protezione delle persone): lì servono componenti di sicurezza certificati.
Serve internet?
No. Il PLC e il suo editor funzionano nella rete locale. Internet serve solo a MiaConfig la prima volta, per scaricare gli strumenti di compilazione.
Quanto costa?
Il software è libero. L'hardware è quello di una scheda ESP32: si parte da pochi euro per un modulo C3 fino alle schede con Ethernet e relè già montati.
Che licenza ha?
Firmware, editor e strumenti sono software libero con licenza GPL-3.0.
Quello che imparo qui vale anche per i PLC industriali?
Sì, nei concetti: scansione, ladder, network, funzioni con interfaccia, blocchi dati, tipi IEC, Online. Ogni marca ha poi il suo ambiente e i suoi dettagli, ma chi ha capito queste basi ci si orienta in fretta.
