Phase 16 (v0.6 milestone) — supporto Fagor CNC via FTP, riuso pattern Siemens/Mitsubishi (FtpWebRequest + ASCII). Modelli supportati: 8060/8065/8070 (FTP nativo), 8055 (con opzione Ethernet). Modelli 8025-8050 esclusi (solo RS232). Code: - Cnc/Fagor/* — FagorConnectionConfig, IFagorFtpClient, FagorFtpClient, FagorMachine. ProgramExtension configurabile (default .nc), ProgramDirectory /Users/Prg/. - Cnc/Models/CncManufacturer.cs — enum + Fagor. - Cnc/CncMachineFactory.cs — case Fagor, porta default 21. - Cnc/NcProgramValidator.cs — refactor IsRestrictiveDialect(): block-80/no-tab/no-lowercase/nested-parens/comment-32 ora applicati solo a Fanuc+Mitsubishi (Heidenhain/Siemens/Fagor esenti). Fagor name rules: max 24 char, no ñ (escape ñ per safety codepage), stem alphanumerico + spazi (estensione separata). - ArgParser.cs — case "fagor". - Program.cs — help text manufacturer/username/password. Tests: - FagorMachineTests — 12 unit (10 mock + 2 validator reale). - FagorMachineIntegrationTests — 5 stub-based (riusa FtpServerStub) + 1 hardware skip via FAGOR_TEST_IP env var. - NcProgramValidatorTests — 12 nuovi Fagor (8 + 4 extension coverage), 6 lock Siemens/Heidenhain exemption, 3 esistenti Siemens→Fanuc. - CncMachineFactoryTests — Create_Fagor_ReturnsFagorMachine. Docs: - README.md — sezione "Controller Fagor" italiano: modelli supportati/ non supportati, regole nome, env var test. Build: - *.csproj — 4 Compile Include main + 2 test. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
140 lines
8.2 KiB
Markdown
140 lines
8.2 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) e Fagor (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` | 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 |
|
|
| `-password=` | password | Credenziale per Heidenhain, Siemens, Mitsubishi, Fagor |
|
|
| `-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) |
|
|
|
|
### 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` |
|
|
|
|
## 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 |
|