New Cnc/Mazak/ machine integration mirroring the Fagor/Mitsubishi FTP pattern: MazakConnectionConfig, IMazakFtpClient, MazakFtpClient, MazakMachine (ICncMachine). Transfers EIA/ISO G-code text over FTP to Smooth-family controllers. Mazatrol CMT (proprietary binary) out of scope. Design (verified against Mazak Matrix EIA manual + field reports): - Filenames preserved verbatim; no O#### rename, no extension append. - Symmetric ResolvePath for Read/Write/Delete (avoids ISS-020 class; Delete resolved too, unlike copied Mitsubishi source). - Validator = full passthrough for Mazak (EIA permits ';' EOB, '[ ]', '#'; restrictive Fanuc checks would false-reject valid programs). - Port 21 default, -porta=23 for Smooth Ai IIS variant. - ProgramDirectory site-specific, no default. Wiring: CncManufacturer.Mazak, ArgParser 'mazak' token, CncMachineFactory. Tests: MazakMachineTests (unit), MazakMachineIntegrationTests (FTP-stub roundtrip + symmetry guard), Mazak cases in validator/factory tests. Docs: README Controller Mazak section + table row; ISS-021 (constraints, EIA-option requirement), ISS-022 (Mitsubishi delete asymmetry logged). NOT build-verified (no .NET toolchain in build env) — verify on Windows. Projects: NcProgramManager, NcProgramManager.Tests Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .paul | ||
| Cnc | ||
| field-test | ||
| Licensing | ||
| NcProgramManager.Tests | ||
| Properties | ||
| .gitignore | ||
| App.config | ||
| ArgParser.cs | ||
| BUG_ANALYSIS.md | ||
| Dockerfile.test | ||
| FanucProgram.cs | ||
| FanucProgramManager.csproj.user | ||
| fwlib32.cs | ||
| InputArgs.cs | ||
| NcProgramManager.crproj | ||
| NcProgramManager.csproj | ||
| NcProgramManager.sln | ||
| nlog.config | ||
| nunit.runsettings | ||
| packages.config | ||
| Program.cs | ||
| README.md | ||
NcProgramManager
Software per il trasferimento di programmi CNC da e verso controller di macchine utensili. Supporta Fanuc (FOCAS), Heidenhain (LSV2), Siemens Sinumerik (FTP), Mitsubishi (FTP), Fagor (FTP) e Mazak (FTP). Funziona completamente offline come applicazione console per Windows.
Requisiti
- Windows (qualsiasi versione compatibile con .NET Framework 4.7.2)
- .NET Framework 4.7.2 installato
- File
license.licvalido (rilasciato dal fornitore)
Licenza
Copiare il file license.lic nella stessa cartella dell'eseguibile NcProgramManager.exe. Senza licenza valida il programma si chiude all'avvio.
Per ottenere una licenza contattare il fornitore fornendo l'impronta hardware della macchina. L'impronta si ottiene eseguendo il comando fingerprint dello strumento LicenseGenerator.exe sulla macchina di destinazione.
Utilizzo
NcProgramManager.exe -manufacturer=<tipo> -azione=<azione> -ip=<ip> -porta=<porta> [opzioni]
Parametri
| Parametro | Valori | Descrizione |
|---|---|---|
-azione= |
Scarica / Invia |
Azione da eseguire |
-manufacturer= |
fanuc / heidenhain / siemens / mitsubishi / fagor / mazak |
Tipo di controller CNC (predefinito: fanuc) |
-ip= |
indirizzo IP | Indirizzo IP del controller — connessione Ethernet |
-porta= |
numero porta | Porta di connessione Ethernet |
-tipo= |
3 / 2 |
Tipo di connessione: 3 = Ethernet, 2 = HSSB (solo Fanuc, legacy) |
-nodo= |
numero nodo | Nodo HSSB (solo Fanuc, connessione HSSB) |
-username= |
nome utente | Credenziale per Heidenhain, Siemens, Mitsubishi, Fagor, Mazak |
-password= |
password | Credenziale per Heidenhain, Siemens, Mitsubishi, Fagor, Mazak |
-pathprogramma= |
percorso file | Percorso del file locale da caricare sul CNC (richiesto per Invia) |
-path= |
numero | Percorso programmi sul CNC; predefinito 1 = //CNC_MEM/USER/PATH1/ |
-workzero= |
qualsiasi valore | Se presente: include dati work zero offset nell'operazione |
-tooloffset= |
qualsiasi valore | Se presente: include dati tool offset nell'operazione |
-commento= |
testo | Commento da associare al programma |
-compatibility |
— | Attiva modalità compatibilità (flag senza valore) |
-debug= |
qualsiasi valore | Mantiene il terminale aperto al termine dell'operazione |
-help |
— | Mostra l'elenco dei parametri e termina (flag senza valore) |
La licenza viene letta automaticamente dal file license.lic nella cartella dell'eseguibile — nessun parametro aggiuntivo richiesto.
Esempi
Scarica programma da controller Fanuc:
NcProgramManager.exe -manufacturer=fanuc -azione=Scarica -ip=192.168.1.100 -porta=8193
Invia programma a controller Heidenhain:
NcProgramManager.exe -manufacturer=heidenhain -azione=Invia -ip=192.168.1.50 -porta=19000 -username=operator -password=secret
Scarica programma da Siemens Sinumerik:
NcProgramManager.exe -manufacturer=siemens -azione=Scarica -ip=192.168.1.200 -porta=21 -username=admin -password=secret
Invia programma a Fagor 8065:
NcProgramManager.exe -manufacturer=fagor -azione=Invia -ip=192.168.1.150 -porta=21 -username=user -password=pass -pathprogramma=C:\programmi\PROG1.nc
Controller supportati
| Produttore | Protocollo | Porta predefinita | Note |
|---|---|---|---|
| Fanuc | FOCAS (DLL 32-bit) | 8193 | Richiede fwlib32.dll nella stessa cartella |
| Heidenhain | LSV2 (TCP) | 19000 | Testato su TNC series |
| Siemens | FTP | 21 | Directory programmi: /_N_MPF_DIR/ — richiede opzione FTP abilitata sul Sinumerik |
| Mitsubishi | FTP | 21 | Directory programmi: /PRG/ |
| Fagor | FTP | 21 | Directory programmi: /Users/Prg/. Modelli supportati: 8060, 8065, 8070 (FTP nativo); 8055 (richiede opzione Ethernet) |
| Mazak | FTP | 21 | G-code EIA/ISO (testo). Famiglia Smooth (G/X/Ai/EZ). Porta 21 o 23 (alcune unità Ai usano IIS su 23). Directory programmi site-specific (da configurare). Richiede opzione EIA/ISO attiva sul controllo |
Controller Fagor
Modelli supportati
| Modello | Supporto | Note |
|---|---|---|
| 8055 | Solo con opzione Ethernet | Richiede attivazione esplicita del server FTP via parametri macchina |
| 8060 | Sì | FTP nativo (sistema Windows-based) |
| 8065 | Sì | FTP nativo (sistema Windows-based) |
| 8070 | Sì | FTP nativo (sistema Windows embedded) |
Modelli NON supportati
| Modello | Motivo |
|---|---|
| 8055 base (senza Ethernet) | Solo trasferimento RS232; il programma non implementa il protocollo seriale |
| 8025 / 8030 / 8040 / 8050 | Legacy, esclusivamente RS232 |
Regole nome programma
- Lunghezza massima 24 caratteri
- Caratteri ammessi: lettere (A-Z, a-z), cifre (0-9), spazi
- Carattere
ñNON ammesso - Estensione predefinita:
.nc(configurabile via codice)
Funzioni non supportate via FTP
ReadActiveProgramAsync— Fagor espone lo stato di esecuzione via DNC/OPC-UA, non via FTPSelectMainProgramAsync— selezione del programma principale richiede DNC, non disponibile via FTP- Lettura runtime stato macchina (
ReadAsyncritorna sempreUnknown)
Variabili d'ambiente per test integration con macchina reale
| Variabile | Valore | Default |
|---|---|---|
FAGOR_TEST_IP |
indirizzo IP macchina Fagor | (test skippato se assente) |
FAGOR_USER |
username FTP | user |
FAGOR_PASS |
password FTP | pass |
Controller Mazak
Formato supportato
- Solo EIA/ISO (G-code in formato testo). Famiglia Smooth.
- NON supportato: Mazatrol (formato binario proprietario CMT) — nessuna API pubblica lato PC. Escluso.
- Richiede opzione EIA/ISO attiva sul controllo (opzione a pagamento, non sempre presente). Se assente l'invio è impossibile.
- Nessun equivalente FOCAS/SDK: il trasferimento avviene solo tramite file via FTP. MTConnect serve solo per il monitoraggio, non per l'invio.
Porta FTP
- Porta 21 di default; alcune unità Smooth Ai richiedono la 23 (la porta 21 va in conflitto con il backup Mazatrol all'avvio e allo spegnimento). Override tramite
-porta.
Directory programmi e credenziali
- Directory programmi e credenziali sono site-specific, da configurare (nessun default sicuro).
Regole nome programma
- Nomi file preservati così come sono — nessun vincolo di rinomina
O####(vincolo presente solo su Fanuc, non su Mazak).
Programmi multi-file
- Per i programmi composti da più file (main + sottoprogrammi): inviare ogni file separatamente. Il main richiama i sottoprogrammi a runtime via
M98 P<numero>; il controllo li collega per nome/numero, quindi non vanno uniti in un unico file.
Funzioni non supportate via FTP
ReadActiveProgramAsync— stato runtime non disponibile via FTPSelectMainProgramAsync— selezione del programma principale non disponibile via FTPReadAsync— lettura runtime stato macchina non disponibile via FTP
Coerente con il comportamento di Fagor e Siemens.
Variabili d'ambiente per test integration con macchina reale
| Variabile | Valore | Default |
|---|---|---|
MAZAK_TEST_IP |
indirizzo IP macchina Mazak | (test skippato se assente) |
MAZAK_USER |
username FTP | user |
MAZAK_PASS |
password FTP | pass |
Validazione del programma NC
Prima di inviare un programma al controller, NcProgramManager esegue una validazione automatica del codice NC. Gli errori bloccano il trasferimento. Gli avvisi vengono registrati ma non interrompono l'operazione.
Codici di errore
| Codice | Descrizione | Causa probabile | Soluzione |
|---|---|---|---|
-100 |
Licenza errata o non valida | File license.lic assente, corrotto o generato per un'altra macchina |
Verificare che license.lic sia nella stessa cartella dell'eseguibile e generato per questa macchina |
-101 |
Impossibile parsare i parametri di input | Sintassi errata negli argomenti passati (spazi attorno a =, caratteri speciali) |
Controllare che ogni parametro sia nella forma -nome=valore senza spazi. Eseguire con -help per la sintassi corretta |
-102 |
Parametri obbligatori mancanti | Mancano -azione=, -ip= o -porta= |
Aggiungere i parametri mancanti alla riga di comando |
-103 |
Codice connessione non valido | Valore -tipo= non è 3 (Ethernet) né 2 (HSSB) |
Usare -tipo=3 per connessione Ethernet (più comune) o -tipo=2 per HSSB |
-201 |
Impossibile connettersi alla macchina | IP o porta errati, macchina spenta, firewall, protocollo non abilitato sul CNC | Verificare IP e porta, pingare la macchina, controllare che il protocollo (FOCAS/LSV2/FTP) sia abilitato sul controller |
-202 |
Eccezione durante l'esecuzione dell'azione | Errore di rete durante l'operazione, timeout, CNC in stato non valido | Controllare la connessione di rete; riprovare. Se persiste, verificare lo stato del CNC |
-203 |
L'azione richiesta è fallita | Il CNC ha rifiutato l'operazione (protezione scrittura, programma in esecuzione, permessi insufficienti) | Verificare che il CNC non stia eseguendo programmi e che non sia attiva la protezione scrittura |
-204 |
Errore durante invio o ricezione del programma CN | File locale non trovato (per Invia), memoria CNC piena, nome programma non valido |
Per Invia: verificare il percorso in -pathprogramma=. Per Scarica: verificare che il programma esista sul CNC |
-205 |
Errore durante invio o ricezione dei dati tool offset | Tool offset non supportato dal produttore selezionato, o errore di comunicazione | Verificare che il produttore supporti tool offset. Rimuovere -tooloffset= se non necessario |
-206 |
Errore durante invio o ricezione dei dati work zero offset | Work zero offset non supportato dal produttore selezionato, o errore di comunicazione | Verificare che il produttore supporti work zero offset. Rimuovere -workzero= se non necessario |
-207 |
Il CN deve essere in modalità MDI o EDIT | Il CNC è in modalità AUTO o MEM durante un tentativo di invio programma | Portare il CNC in modalità MDI o EDIT dal pannello operatore, poi ripetere l'operazione |
-208 |
Programma CN caricato ma non impostato come principale | Il programma è stato trasferito ma il CNC non lo ha selezionato come programma attivo | Selezionare manualmente il programma come programma principale dal pannello del CNC |