Windows batch harness + extensive IT README for on-site Mitsubishi CNC testing. Covers connect/invia/scarica/validator/offset/param scenarios. Documents C1-C8 criticità found in code review: - path mapping mismatch (download /PRG/<int> vs upload relative <path>/<name>) - Standardize leading \n may trip validator first-line gate - hardcoded /PRG/ ProgramDirectory, no CLI override - Int16 -path limit, ASCII-only FTP, plaintext credentials Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.7 KiB
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/<intero>
Program.Scarica chiama ReadProgramAsync(pathCNC.ToString()); pathCNC è
Int16 (-path). ResolvePath (nome=null) costruisce /PRG/ + <intero>.
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.batconPROGNUM= un numero esistente. - Esito: ☐ OK ☐ KO — Note: ____________________
C2 🔴 — Upload va in path relativo <path>/<nome>, 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/). Eseguit07_roundtrip.bat. - Esito: ☐ va in /PRG/ ☐ va in
<path>/☐ 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:{
<contenuto>
}
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.txtdopot02. 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.batcaso (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/<intero> |
|
| 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: