IL PROGETTO
Far parlare software e CNC
Software per trasferire programmi alle macchine tramite seriale, nato dall’esperienza in officina.
Collegare due mondi
Ho sviluppato software per il trasferimento dei programmi alle macchine CNC tramite comunicazione seriale. È uno dei progetti in cui la programmazione incontra un’esigenza concreta dell’officina.
Il mio percorso comprende controlli Fanuc 21, Fanuc 0-M e Selca 1200. Il progetto di comunicazione nasce dentro questa esperienza, senza dare per scontato che ogni macchina abbia le stesse impostazioni.
Il rapporto con il lavoro
Sviluppo software nel tempo libero, utilizzando le mie attrezzature. Mi interessa conoscere sia il lato del programma sia quello della macchina, per capire come gli strumenti digitali possano affiancare la lavorazione.
Seriale v1.3
Oggi il progetto si chiama Seriale: preset per Fanuc 21, Selca e GV400, ricerca dei programmi con un indice aggiornato dal server, anteprima STL, foto del pezzo e tabella utensili modificabile. I dettagli sono nell’articolo dedicato.
Il percorso di un programma
In officina Il CAM produce il file .cnc, che poi deve arrivare al controllo. Su queste macchine la strada è ancora la porta seriale.
Tra il CAM e la macchina c’è un passaggio che sembra banale, ma che occupa tempo ogni giorno: trovare il file giusto tra migliaia, controllare gli utensili, inviarlo e verificare che sia arrivato intero.
Prima di Seriale, in officina si usava un vecchio programma. Aveva tre finestre, una per macchina: si apriva il file da Esplora file, poi si trasmetteva o si riceveva. Funzionava, ma il file giusto andava cercato a mano, senza anteprima del pezzo e senza controllo degli utensili.
Seriale v1.3
Ho scritto Seriale, un’applicazione Windows Forms in C#, per gestire tutto il passaggio da una sola finestra:
- Preset per macchina: ogni controllo ha i suoi parametri, salvati insieme alla porta COM e all’ultima cartella usata.
- Ricerca dei file nella cartella della macchina selezionata, con i dieci risultati migliori: vengono prima le corrispondenze nel nome del file, quelle più vicine all’inizio e quelle più compatte.
- Anteprima 3D del modello STL associato al programma, quando c’è.
- Foto del pezzo: selezionando un programma compare la foto del pezzo, con zoom e trascinamento. È la funzione a cui tengo di più, perché riduce il rischio di mandare in macchina il file sbagliato.
- Tabella utensili letta dal file: numero, nome e lunghezza. La colonna del numero utensile è modificabile, e la modifica viene scritta direttamente nel file.
- Invio e ricezione con due pulsanti circolari che mostrano l’avanzamento, e invio con il trascinamento di un file sulla finestra.
L’indice sul server
Cercare ogni volta tra le cartelle di rete era lento. Per questo c’è una seconda applicazione, indice.exe, che gira sul server e ogni 30 minuti crea un file .INDICE.json per ogni cartella macchina: percorso, nome, data di modifica, dimensione, eventuale STL ed eventuale foto di ogni programma.
L’indice viene scritto prima in un file temporaneo e poi sostituito, così Seriale non legge mai un file a metà. Se l’indice non c’è, o non trova nulla, Seriale torna alla scansione delle cartelle.
L’indicizzatore abbina anche gli STL e le foto, cercandoli nella cartella dei disegni con lo stesso nome del programma. Se uno STL manca accanto al programma, lo copia, verifica dimensione e hash SHA-256 e solo allora lo rinomina; se trova più candidati con lo stesso nome non copia nulla, e non sovrascrive mai un file esistente. Per le foto accetta JPG e HEIC, preferendo il JPG.
Le impostazioni della comunicazione
Ogni controllo ha le sue impostazioni, e un parametro sbagliato basta per avere un trasferimento che si interrompe o un programma troncato. Questi sono i preset che uso:
| Macchina | Baud | Parità | Bit di dati | Bit di stop | Controllo di flusso |
|---|---|---|---|---|---|
| Fanuc 21 | 9600 | pari | 7 | 2 | XON/XOFF |
| Selca | 9600 | pari | 8 | 2 | XON/XOFF |
| GV400 Fanuc | 4800 | pari | 7 | 2 | XON/XOFF |
L’invio è byte per byte. La preparazione del programma dipende dal controllo: più avanti descrivo l’aggiunta del fine nastro sulla GV400 e la riscrittura per Selca. I parametri del Fanuc 21 sono gli stessi della configurazione di comunicazione di PACW.

Un Fanuc 0-M con un programma in esecuzione.
Le porte COM vengono rilevate in automatico, con i dettagli degli adattatori USB-seriale letti da Windows. Il programma prevede anche le macchine collegate tramite un ponte Wi-Fi: la porta resta una COM, e un indicatore diventa verde solo se il ponte risponde al comando di prova. Per ora però il ponte è solo un progetto, non ancora provato in officina.
Gli adattatori USB-seriale sono basati su chip FTDI.
Le particolarità di ogni controllo
Fine nastro sulla GV400. La macchina riceveva il programma correttamente ma restava in ascolto, perché mancava il carattere di fine nastro. Ora l’invio aggiunge un % finale su una riga propria, in stile Fanuc, senza modificare il file salvato.
Preparazione per Selca. Prima dell’invio il file viene riscritto: tiene il % iniziale e finale, inserisce un marcatore con il numero di byte del programma e i codici M di servizio all’inizio e alla fine, e rinumera tutte le righe nel formato N1 contenuto. Il marcatore serve anche in ricezione: leggendolo nelle prime righe, Seriale sa quanti byte aspettarsi e mostra la percentuale.
Numeri utensile sul Selca. Il Selca scrive gli utensili in un formato particolare: il numero dell’utensile seguito dallo stesso numero più dieci. T212 è l’utensile 2, T1626 il 16. Seriale mostra il numero semplice e, quando lo cambio, riscrive il codice nel formato giusto. Gli utensili dal 25 in su vengono evidenziati in rosso.
Lunghezza utensile. Viene letta dalle righe di riepilogo che il CAM scrive nel programma, non dai valori Z dei cicli fissi, che darebbero un risultato sbagliato.
Distribuzione
Seriale e indice.exe hanno due installer separati. Ogni installer rimuove la versione precedente prima di installare la nuova, e l’indicizzatore può partire da solo all’accensione del PC.
Prossimi passi
Per ora Seriale fa tutto quello che mi serve in officina: non ci sono funzioni in programma.