# Checklist criticità — Mitsubishi field test Punti deboli individuati **leggendo il codice** (non ancora verificati su HW reale). Sono le aree dove è più probabile trovare problemi sul controllo del cliente. Compila Esito/Note in campo. Data test: __________ Controllo (modello): __________ IP: __________ Legenda gravità: 🔴 bloccante · 🟠 funzionale · 🟡 robustezza · ⚪ sicurezza/info --- ## C1 🔴 — Download indirizzabile solo come `/PRG/` `Program.Scarica` chiama `ReadProgramAsync(pathCNC.ToString())`; `pathCNC` è `Int16` (`-path`). `ResolvePath` (nome=null) costruisce `/PRG/` + ``. **Conseguenza:** non puoi scaricare programmi con nome non numerico (`O1234`, lettere) né numeri > 32767. Se sul CNC i programmi si chiamano `O####`, **nessuno è scaricabile da CLI**. - File: `Program.cs:106`, `MitsubishiMachine.cs:203-206`, `ArgParser.cs:69-71` - **Verifica:** dalla ricognizione FTP (§4 README), com'è il nome reale? Prova `t02_scarica.bat` con `PROGNUM` = un numero esistente. - Esito: ☐ OK ☐ KO — Note: ____________________ --- ## C2 🔴 — Upload va in path **relativo** `/`, non `/PRG/` `Program.Invia` chiama `WriteProgramAsync(pathCNC.ToString(), prog)`. In `ResolvePath` con nome valorizzato, `folder` = `"1"` (default) diventa la directory → path FTP `1/O0001`, **relativo** alla home FTP, non `/PRG/O0001`. Il download (C1) invece legge da `/PRG/`. **Upload e download usano cartelle diverse** → il roundtrip da CLI non torna. - File: `Program.cs:206`, `MitsubishiMachine.cs:208-210` - **Verifica:** dopo `t01_invia_valido.bat`, controlla via FTP **dove** è finito il file (`dir /`, `dir /PRG/`, `dir /1/`). Esegui `t07_roundtrip.bat`. - Esito: ☐ va in /PRG/ ☐ va in `/` ☐ upload fallito — Dove: __________ --- ## C3 ⚪ — Nessun flag per la cartella programmi `-path` è un intero; non c'è modo di passare un path FTP completo per l'upload (ResolvePath usa `folder` come directory). La directory `/PRG/` è solo il default di config, **non** raggiungibile in upload via CLI. - **Verifica:** legata a C2/C6. Annota se serve patch per accettare path testuale. - Esito/Note: ____________________ --- ## C4 🟠 — `\n` iniziale inserito da Standardize → possibile blocco validatore `FanucProgram.Standardize` (`FanucProgram.cs:147-153`) inserisce un `\n` all'inizio del programma se non presente. Il validatore controlla che `lines[0]` (prima riga) sia `O####`: con il `\n` iniziale la prima riga diventa **vuota** → errore "First line must be O####" → upload bloccato **-204**. **Conseguenza:** anche un file NC corretto (`O0001_valid.nc`) potrebbe essere **rifiutato** dal validatore quando passa per il flusso CLI Invia. - File: `FanucProgram.cs:147-153`, `NcProgramValidator.cs:39-46` - **Verifica:** `t01_invia_valido.bat` → esce 0 o -204? Guarda nel log il messaggio del validatore. Questo è il test **più importante**. - Esito: ☐ upload OK ☐ -204 first line — Messaggio: ____________________ --- ## C5 🟠 — File scaricato in formato wrapper, non NC grezzo `Scarica` salva `programma.ToString()` → ``` program:{ } tooloffsetdata:{ } workzerooffset:{ } ``` Il file su disco **non** è NC puro: ha l'involucro `program:{...}` e blocchi offset vuoti. Va bene per re-import nello stesso tool, ma non è apribile direttamente come programma macchina. - File: `Program.cs:158`, `FanucProgram.cs:185-190` - **Verifica:** apri `results\downloaded.txt` dopo `t02`. Formato atteso wrapper. - Esito/Note: ____________________ --- ## C6 🔴 — `ProgramDirectory` hardcoded `/PRG/` `MitsubishiConnectionConfig.ProgramDirectory = "/PRG/"`, nessun override CLI. Il Connect fa `LIST /PRG/`: se il controllo del cliente usa una cartella diversa (o root diversa), **Connect fallisce -201** anche con IP/credenziali corretti, e comunque non si può leggere/scrivere altrove. - File: `MitsubishiConnectionConfig.cs:13`, `MitsubishiFtpClient.cs:23`, `MitsubishiMachine.cs:47` - **Verifica:** dalla ricognizione FTP, la cartella reale è `/PRG/`? Se no → bloccante, serve patch per rendere la dir configurabile. - Esito: ☐ /PRG/ esiste ☐ dir diversa: __________ --- ## C7 🟡 — `-azione` mancante → NullReferenceException `ArgParser.cs:22-23`: se `-azione=` assente, `Find` ritorna null e `.Substring(8)` solleva NRE. Gestita nel try di `Main` → esce **-101** (non -102). Comportamento accettabile ma il messaggio è generico. - File: `ArgParser.cs:22-23`, `Program.cs:18-29` - **Verifica:** `t06_parametri_mancanti.bat` caso (a) → -101. - Esito: ☐ -101 come atteso — Note: ____________________ --- ## C8 ⚪ — FTP in chiaro (credenziali sniffabili) `MitsubishiFtpClient.cs:58-68`: `ftp://` con `NetworkCredential`, nessun TLS. Trasferimento ASCII (`UseBinary=false`). Credenziali e programmi in chiaro sulla rete. Inoltre l'encoding ASCII corrompe caratteri non-ASCII (commenti accentati). - File: `MitsubishiFtpClient.cs:42-48, 58-68` - **Verifica:** confermare col cliente che la rete officina è isolata/affidabile. Provare un commento con carattere accentato (`-commento=PROVAÀ`) e vedere se arriva corrotto. - Esito/Note: ____________________ --- ## Riepilogo esiti | ID | Gravità | Tema | Esito | |----|---------|------|-------| | C1 | 🔴 | download solo `/PRG/` | | | C2 | 🔴 | upload path relativo | | | C3 | ⚪ | no flag cartella | | | C4 | 🟠 | `\n` → blocco validatore | | | C5 | 🟠 | file scaricato wrapper | | | C6 | 🔴 | `/PRG/` hardcoded | | | C7 | 🟡 | NRE su `-azione` | | | C8 | ⚪ | FTP chiaro / ASCII | | **Note generali / altri problemi riscontrati:** ____________________________________________________________ ____________________________________________________________