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>
152 lines
5.7 KiB
Markdown
152 lines
5.7 KiB
Markdown
# 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.bat` con `PROGNUM` = 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/`). Esegui `t07_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.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/<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:**
|
|
|
|
____________________________________________________________
|
|
|
|
____________________________________________________________
|