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>
182 lines
10 KiB
Markdown
182 lines
10 KiB
Markdown
# 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.lic` valido (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 FTP
|
|
- `SelectMainProgramAsync` — selezione del programma principale richiede DNC, non disponibile via FTP
|
|
- Lettura runtime stato macchina (`ReadAsync` ritorna sempre `Unknown`)
|
|
|
|
#### 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 FTP
|
|
- `SelectMainProgramAsync` — selezione del programma principale non disponibile via FTP
|
|
- `ReadAsync` — 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 |
|