MIAplc

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

  1. Scegli la scheda. Per cominciare va bene una scheda di riferimento (vedi Schede).
  2. 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.
  3. Carica il firmware. Per la prima installazione usi il file <scheda>-completo.bin con gli strumenti Espressif (un solo file all'indirizzo 0x0). Gli aggiornamenti successivi si fanno dall'editor con il pacchetto .miaplc.
  4. Apri l'editor. Collega il PLC alla rete e apri nel browser il suo indirizzo IP.
  5. 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…I5 per accenderli e spegnerli; le uscite Q0…Q3 si 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:

  1. legge gli ingressi;
  2. esegue il programma dall'inizio alla fine (Main e le FC che chiama);
  3. 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

BloccoA cosa serve
MainIl programma principale, eseguito a ogni scansione.
StartUpEseguito 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 sistemaCreati 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

AreaIndirizziCosa contiene
II0 … I1023Ingressi digitali (sola lettura)
QQ0 … Q1023Uscite digitali
MM0 … M1023Merker: bit di memoria interni
TT0 … T255Timer: il contatto T5 è l'uscita del timer 5
SMSM0 … SM5Bit di sistema (sola lettura, vedi sotto)
MB / MW / MDes. MW3, MW3.5Byte, parole e doppie parole di memoria; MW3.5 è il bit 5 della parola 3
DBes. "Impianto".livelloVariabili dei blocchi dati, per nome

Bit di sistema

BitSignificato
SM01 solo al primo ciclo
SM1sempre 1
SM2sempre 0
SM3clock 10 Hz
SM4clock 2 Hz
SM5clock 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

TipoCampo
BOOL0 / 1
BYTE · USINT0 … 255
SINT−128 … 127
WORD · UINT0 … 65535
INT−32768 … 32767
DINT32 bit con segno
UDINT32 bit senza segno
REALvirgola mobile 32 bit
TIMEtempo in ms, si scrive T#5s, T#1m30s, T#250ms
TIMERun 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

GruppoIstruzioni
ContattiNO, NC, fronte P / N di un operando, fronte della corrente P_TRIG / N_TRIG, NOT, confronto (== <> < > <= >=)
Bobinebobina, bobina negata, SET, RESET, fine FC (RET)
TimerTON ritardo all'eccitazione, TOF ritardo alla diseccitazione, TP impulso
ContatoriCTU avanti, CTD indietro, CTUD avanti e indietro
NumeriMOVE, ADD, SUB, MUL, DIV, MOD, NEG, ABS, MIN, MAX, LIMIT, CONV, SQRT, SQR, SCALE (es. 0…27648 → 0…100 %)
ParoleAND, OR, XOR, INV, SHL, SHR, ROL, ROR, SWAP
Funzionichiamata 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.

ChipConfigurazioni di esempio
ESP32Olimex ESP32-EVB (con o senza orologio DS3231)
ESP32-C3con Ethernet W5100 o W5500, con o senza DS3231
ESP32-S3ESP32-S3-DevKitC-1
ESP32-P4PLC e pannello HMI

Chip Ethernet supportati dal firmware: W5100, W5500, LAN8720, IP101.

µ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.