From 3fd304758413a9ffb04282fd8b87ea0a3582ec52 Mon Sep 17 00:00:00 2001 From: Trentin Davide Date: Tue, 2 Jun 2026 09:03:10 +0200 Subject: [PATCH] =?UTF-8?q?docs(test):=20add=20Mitsubishi=20field-test=20k?= =?UTF-8?q?it=20(scripts=20+=20criticit=C3=A0=20checklist)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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/ vs upload relative /) - 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) --- field-test/CHECKLIST_CRITICITA.md | 152 +++++++++++++++ field-test/README_TESTING_MITSUBISHI.md | 234 +++++++++++++++++++++++ field-test/build.bat | 30 +++ field-test/config.bat | 29 +++ field-test/run_all.bat | 32 ++++ field-test/samples/O0001_valid.nc | 5 + field-test/samples/O0002_lowercase.nc | 3 + field-test/samples/O0003_brackets.nc | 3 + field-test/samples/O0004_longblock.nc | 3 + field-test/samples/no_header.nc | 3 + field-test/t01_invia_valido.bat | 23 +++ field-test/t02_scarica.bat | 30 +++ field-test/t03_validatore.bat | 27 +++ field-test/t04_errori_connessione.bat | 36 ++++ field-test/t05_offset_non_supportati.bat | 27 +++ field-test/t06_parametri_mancanti.bat | 39 ++++ field-test/t07_roundtrip.bat | 34 ++++ 17 files changed, 710 insertions(+) create mode 100644 field-test/CHECKLIST_CRITICITA.md create mode 100644 field-test/README_TESTING_MITSUBISHI.md create mode 100644 field-test/build.bat create mode 100644 field-test/config.bat create mode 100644 field-test/run_all.bat create mode 100644 field-test/samples/O0001_valid.nc create mode 100644 field-test/samples/O0002_lowercase.nc create mode 100644 field-test/samples/O0003_brackets.nc create mode 100644 field-test/samples/O0004_longblock.nc create mode 100644 field-test/samples/no_header.nc create mode 100644 field-test/t01_invia_valido.bat create mode 100644 field-test/t02_scarica.bat create mode 100644 field-test/t03_validatore.bat create mode 100644 field-test/t04_errori_connessione.bat create mode 100644 field-test/t05_offset_non_supportati.bat create mode 100644 field-test/t06_parametri_mancanti.bat create mode 100644 field-test/t07_roundtrip.bat diff --git a/field-test/CHECKLIST_CRITICITA.md b/field-test/CHECKLIST_CRITICITA.md new file mode 100644 index 0000000..a2211e5 --- /dev/null +++ b/field-test/CHECKLIST_CRITICITA.md @@ -0,0 +1,152 @@ +# 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:** + +____________________________________________________________ + +____________________________________________________________ diff --git a/field-test/README_TESTING_MITSUBISHI.md b/field-test/README_TESTING_MITSUBISHI.md new file mode 100644 index 0000000..ea2534d --- /dev/null +++ b/field-test/README_TESTING_MITSUBISHI.md @@ -0,0 +1,234 @@ +# Field Test — Mitsubishi CNC — nc_program_manager + +Guida operativa per il test in campo del trasferimento programmi NC verso/da +un controllo **Mitsubishi** (serie M, FTP). Pensata per essere eseguita sul +portatile in officina dal cliente. + +> Comunicazione Mitsubishi = **FTP in chiaro** (porta 21). Niente FOCAS, niente +> LSV2. Solo upload/download file. Stato macchina, allarmi, offset utensile e +> origini **non** sono supportati via FTP (vedi §7). + +--- + +## 0. Indice + +1. Cosa fa il software +2. Prerequisiti +3. Build dell'eseguibile +4. Ricognizione FTP **(da fare PRIMA dei test)** +5. Parametri CLI +6. Scenari di test (T01–T07) +7. Cosa Mitsubishi NON supporta +8. Codici di uscita +9. Log +10. Criticità note da verificare → vedi `CHECKLIST_CRITICITA.md` + +--- + +## 1. Cosa fa il software + +Console app .NET Framework 4.7.2 (Windows). Due azioni: + +- **Invia** — carica un file NC locale sul CNC. +- **Scarica** — scarica un programma dal CNC su file locale. + +Per Mitsubishi il transport è FTP: `ftp://:/PRG/`. +La cartella programmi è **fissa a `/PRG/`** (hardcoded, vedi criticità C6). + +--- + +## 2. Prerequisiti + +- Windows con .NET Framework 4.7.2. +- Rete: il portatile deve raggiungere l'IP del CNC sulla porta FTP (default 21). + - Verifica rapida: `ping ` e `ftp `. +- Server FTP **attivo sul controllo** Mitsubishi e cartella `/PRG/` presente. +- Credenziali FTP del controllo (o accesso anonimo). +- Un **numero programma di test concordato col cliente**, non in uso. +- Per la build: + - **Debug** (consigliata per i test): nessuna licenza richiesta. + - **Release**: richiede `license.lic` valido accanto all'exe (fingerprint macchina). + +--- + +## 3. Build dell'eseguibile + +Da *Developer Command Prompt for VS 2017+* (msbuild + nuget nel PATH): + +```bat +cd field-test +build.bat +``` + +Produce `bin\Debug\NcProgramManager.exe`. In Debug il check licenza è saltato +(`#if !DEBUG`) — comodo in campo. In alternativa apri la solution in Visual +Studio e compila in Debug. + +> Se devi testare anche il flusso licenza, compila in **Release** e copia un +> `license.lic` valido nella cartella `bin\Release`. + +--- + +## 4. Ricognizione FTP — DA FARE PRIMA + +**Passaggio critico.** Il CLI può indirizzare in download solo `/PRG/` +(vedi C1). Prima di tutto, connettiti manualmente e annota i nomi reali: + +```bat +ftp + user + pass + dir /PRG/ + quit +``` + +Annota: + +- La cartella programmi è davvero `/PRG/`? Se no → C6 bloccante. +- I programmi hanno nomi **numerici** (`1`, `100`, `1234`) o con prefisso + **`O`** / lettere (`O1234`, `PEZZO1`)? + - Solo numerici e ≤ 32767 sono scaricabili da CLI (C1). +- Permessi di scrittura per l'utente FTP usato (per i test di Invia). + +Riporta gli esiti in `CHECKLIST_CRITICITA.md`. + +--- + +## 5. Parametri CLI + +``` +NcProgramManager.exe -manufacturer=mitsubishi -azione= -ip= [opzioni] +``` + +| Parametro | Obblig. | Default | Note Mitsubishi | +|---|---|---|---| +| `-manufacturer=mitsubishi` | sì | `fanuc` | se omesso/errato → usa Fanuc! | +| `-azione=Invia` \| `-azione=Scarica` | sì | — | case-insensitive | +| `-ip=` | sì | — | richiesto per non-Fanuc | +| `-pathprogramma=` | sì | — | **richiesto anche per Scarica** (file destinazione) | +| `-porta=` | no | `21` | porta FTP | +| `-username=` | no | vuoto | utente FTP | +| `-password=

` | no | vuoto | password FTP | +| `-path=` | no | `1` | identifica il programma su CNC. **Solo interi (Int16, max 32767)** | +| `-commento=` | no | — | solo Invia; sostituisce/aggiunge commento `(...)` | +| `-debug` | no | off | tiene aperto il terminale a fine esecuzione (**NON usare negli script**, blocca su ReadLine) | +| `-help` | no | — | stampa la guida ed esce | +| `-compatibility` | no | off | **nessun effetto su Mitsubishi** (parsato ma ignorato dal factory) | +| `-tooloffset` / `-workzero` | no | off | **non supportati** → errore (§7) | + +Esempio invio: + +```bat +NcProgramManager.exe -manufacturer=mitsubishi -azione=Invia -ip=192.168.1.3 -porta=21 -username=user -password=pass -path=1 -pathprogramma=C:\test\O0001_valid.nc +``` + +Esempio scarico: + +```bat +NcProgramManager.exe -manufacturer=mitsubishi -azione=Scarica -ip=192.168.1.3 -porta=21 -username=user -password=pass -path=1 -pathprogramma=C:\test\out.txt +``` + +--- + +## 6. Scenari di test + +Modifica **`config.bat`** (IP, porta, credenziali, `PROGNUM`) una volta sola, +poi lancia gli script. Output in `field-test\results\`. + +Sequenza completa: + +```bat +cd field-test +run_all.bat +``` + +oppure singoli: + +| Script | Scopo | Esito atteso | +|---|---|---| +| `t06_parametri_mancanti.bat` | parsing args (offline) | -101 / -102 / help=0 | +| `t04_errori_connessione.bat` | IP/porta/cred errati | -201 | +| `t02_scarica.bat` | download `/PRG/` | 0 se il file esiste | +| `t01_invia_valido.bat` | upload programma valido | 0 (osserva dove finisce, C2/C4) | +| `t03_validatore.bat` | gating pre-invio | 4 blocchi, 1 ok | +| `t05_offset_non_supportati.bat` | tool/workzero | -205 / -206 | +| `t07_roundtrip.bat` | invia + riscarica | osserva mismatch path C1/C2 | + +> **Attenzione:** `t01`/`t07` **scrivono** sul CNC. Usa un `PROGNUM` di test +> concordato. Tieni un backup dei programmi del cliente prima di scrivere. + +### Dettaglio T03 — validatore (regole Fanuc/Mitsubishi) + +Il validatore blocca l'upload (severità Error) se: + +- nome programma ≠ `O####` (esatti 4 cifre); +- prima riga ≠ `O####`; +- presenza di lettere **minuscole**; +- blocco > **80 caratteri**; +- caratteri vietati `;` `[` `]`; +- parentesi annidate; commento `(...)` > 32 caratteri. + +`#` genera solo **Warning** (macro), upload prosegue. + +File di prova in `samples\`: + +| File | Atteso | +|---|---| +| `O0001_valid.nc` | 0 — ma verifica C4 (vedi sotto) | +| `O0002_lowercase.nc` | -204, "Lowercase letters not allowed" | +| `O0003_brackets.nc` | -204, "Forbidden char '['" | +| `O0004_longblock.nc` | -204, "Block length 82 exceeds 80" | +| `no_header.nc` | -202 (eccezione: nessun `O####` per GetProgramTitle) | + +--- + +## 7. Cosa Mitsubishi NON supporta (via FTP) + +| Funzione | Comportamento | +|---|---| +| Stato macchina / allarmi (`ReadAsync`) | ritorna tutto `Unknown` | +| Programma attivo (`ReadActiveProgram`) | "Not supported via FTP" | +| Selezione programma main (`SelectMainProgram`) | "Not supported via FTP" | +| Tool offset (`-tooloffset`) | exit **-205** | +| Work zero offset (`-workzero`) | exit **-206** | + +Solo **Fanuc** (FOCAS) espone offset/stato. Mitsubishi = solo file transfer. + +--- + +## 8. Codici di uscita + +| Codice | Significato | +|---|---| +| `0` | OK | +| `-100` | licenza errata/assente (solo build Release) | +| `-101` | parsing parametri fallito (es. manca `-azione`) | +| `-102` | parametri obbligatori mancanti (`-ip`, `-pathprogramma`) | +| `-103` | azione sconosciuta (≠ Invia/Scarica) | +| `-201` | macchina non connessa (FTP irraggiungibile / `/PRG/` assente / cred errate) | +| `-202` | eccezione durante l'azione | +| `-204` | errore invio/ricezione programma (incl. **blocco validatore**) | +| `-205` | tool offset non supportato | +| `-206` | work zero offset non supportato | +| `-207` / `-208` | documentati ma non applicati per Mitsubishi | + +> In cmd, `%ERRORLEVEL%` mostra il valore negativo. Gli script lo registrano. + +--- + +## 9. Log + +- **Console**: livello Info (ciò che vedi a schermo). Gli script lo redirigono + nei file `results\tNN_*.log`. +- **File**: `bin\Debug\logs\nc_program_manager.log` — livello **Debug** + (più dettagliato, con stack trace eccezioni). Rotazione giornaliera, 7 giorni. + +Per l'analisi post-test allega entrambi. + +--- + +## 10. Criticità da verificare + +Vedi **`CHECKLIST_CRITICITA.md`**: elenco puntuale (C1–C8) dei punti deboli noti +individuati nel codice, con cosa osservare in campo e come compilarne l'esito. +Sono i punti dove è più probabile trovare problemi reali sul controllo del cliente. diff --git a/field-test/build.bat b/field-test/build.bat new file mode 100644 index 0000000..de43ba6 --- /dev/null +++ b/field-test/build.bat @@ -0,0 +1,30 @@ +@echo off +REM ============================================================ +REM BUILD - compila in Debug (licenza NON richiesta). +REM Richiede: nuget.exe e MSBuild nel PATH (Developer Command +REM Prompt for VS 2017+). In alternativa apri la solution in VS. +REM ============================================================ +setlocal +cd /d "%~dp0.." + +echo [build] restore pacchetti NuGet... +nuget restore NcProgramManager.csproj -PackagesDirectory packages +if errorlevel 1 ( + echo [build] nuget restore FALLITO. Apri la solution in Visual Studio e compila. + goto :end +) + +echo [build] compilazione Debug ^| AnyCPU... +msbuild NcProgramManager.csproj /p:Configuration=Debug /p:Platform=AnyCPU /v:minimal +if errorlevel 1 ( + echo [build] MSBuild FALLITO. + goto :end +) + +echo. +echo [build] OK -> bin\Debug\NcProgramManager.exe +echo [build] NOTA: build Debug salta il check licenza (#if !DEBUG). +echo [build] Per testare con licenza usa Configuration=Release + license.lic. + +:end +endlocal diff --git a/field-test/config.bat b/field-test/config.bat new file mode 100644 index 0000000..4ea153a --- /dev/null +++ b/field-test/config.bat @@ -0,0 +1,29 @@ +@echo off +REM ============================================================ +REM CONFIG FIELD TEST MITSUBISHI - modifica questi valori +REM Compila una sola volta prima di lanciare gli altri script. +REM ============================================================ + +REM IP del CNC Mitsubishi (server FTP del controllo) +set IP=192.168.1.3 + +REM Porta FTP (default Mitsubishi = 21) +set PORT=21 + +REM Credenziali FTP del controllo (vuote se anonimo) +set USER=user +set PASS=pass + +REM Numero programma usato nei test di Scarica/Invia. +REM ATTENZIONE: -path accetta solo INTERI (Int16, max 32767). +REM Vedi criticita C1/C2 nel README. +set PROGNUM=1 + +REM Percorso eseguibile (Debug = nessuna licenza richiesta) +set EXE=%~dp0..\bin\Debug\NcProgramManager.exe + +REM Cartella risultati log +set RESULTS=%~dp0results + +echo [config] IP=%IP% PORT=%PORT% USER=%USER% PROGNUM=%PROGNUM% +echo [config] EXE=%EXE% diff --git a/field-test/run_all.bat b/field-test/run_all.bat new file mode 100644 index 0000000..20738e1 --- /dev/null +++ b/field-test/run_all.bat @@ -0,0 +1,32 @@ +@echo off +REM ============================================================ +REM RUN ALL - esegue T01..T07 in sequenza. +REM Prima: compila (build.bat) e modifica config.bat con IP/cred. +REM ATTENZIONE: T01/T07 SCRIVONO sul CNC. Concordare col cliente +REM un numero programma di test non in uso (config.bat PROGNUM). +REM NON usare -debug negli script (bloccherebbe su ReadLine). +REM ============================================================ +setlocal +pushd "%~dp0" + +call config.bat +echo. +echo ############ RICOGNIZIONE: verifica /PRG/ via FTP PRIMA dei test ############ +echo Esempio: ftp %IP% (poi: dir /PRG/ ) +echo Annotare i nomi reali dei programmi (numerici? con O? lettere?). +echo. +pause + +call t06_parametri_mancanti.bat +call t04_errori_connessione.bat +call t02_scarica.bat +call t01_invia_valido.bat +call t03_validatore.bat +call t05_offset_non_supportati.bat +call t07_roundtrip.bat + +echo. +echo ############ FINE. Log in: %RESULTS% ############ +echo Compilare CHECKLIST_CRITICITA.md con gli esiti. +popd +endlocal diff --git a/field-test/samples/O0001_valid.nc b/field-test/samples/O0001_valid.nc new file mode 100644 index 0000000..2816d03 --- /dev/null +++ b/field-test/samples/O0001_valid.nc @@ -0,0 +1,5 @@ +O0001(TEST HENESIS) +G0 G90 X0 Y0 +G1 Z-5. F100 +G0 Z50. +M30 diff --git a/field-test/samples/O0002_lowercase.nc b/field-test/samples/O0002_lowercase.nc new file mode 100644 index 0000000..7949328 --- /dev/null +++ b/field-test/samples/O0002_lowercase.nc @@ -0,0 +1,3 @@ +O0002(MINUSCOLE) +G0 x0 y0 +M30 diff --git a/field-test/samples/O0003_brackets.nc b/field-test/samples/O0003_brackets.nc new file mode 100644 index 0000000..839466a --- /dev/null +++ b/field-test/samples/O0003_brackets.nc @@ -0,0 +1,3 @@ +O0003(PARENTESI QUADRE) +G65 P1 A[1] +M30 diff --git a/field-test/samples/O0004_longblock.nc b/field-test/samples/O0004_longblock.nc new file mode 100644 index 0000000..7263dff --- /dev/null +++ b/field-test/samples/O0004_longblock.nc @@ -0,0 +1,3 @@ +O0004(BLOCCO LUNGO) +G1 X1.0 Y1.0 Z1.0 A1.0 B1.0 C1.0 X2.0 Y2.0 Z2.0 A2.0 B2.0 C2.0 X3.0 Y3.0 Z3.0 F100 +M30 diff --git a/field-test/samples/no_header.nc b/field-test/samples/no_header.nc new file mode 100644 index 0000000..89ec5aa --- /dev/null +++ b/field-test/samples/no_header.nc @@ -0,0 +1,3 @@ +(NESSUN NUMERO PROGRAMMA) +G0 X0 Y0 +M30 diff --git a/field-test/t01_invia_valido.bat b/field-test/t01_invia_valido.bat new file mode 100644 index 0000000..931b853 --- /dev/null +++ b/field-test/t01_invia_valido.bat @@ -0,0 +1,23 @@ +@echo off +REM ============================================================ +REM T01 - INVIO programma valido (happy path) +REM Carica samples\O0001_valid.nc sul CNC. +REM Atteso: Errore:0. Verificare che il file compaia su CNC. +REM OSSERVARE (criticita C2/C3): in quale cartella FTP finisce +REM il file (-path=%PROGNUM% -> path relativo "%PROGNUM%/O0001" +REM invece di "/PRG/O0001"?). Verificare anche se la validazione +REM blocca per "First line must be O####" a causa del \n iniziale +REM inserito da FanucProgram.Standardize (criticita C4). +REM ============================================================ +setlocal +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t01_invia_valido.log + +echo === T01 INVIO VALIDO === > "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Invia -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%~dp0samples\O0001_valid.nc >> "%LOG%" 2>&1 +echo EXITCODE=%ERRORLEVEL% >> "%LOG%" +echo EXITCODE=%ERRORLEVEL% +echo Log: %LOG% +type "%LOG%" +endlocal diff --git a/field-test/t02_scarica.bat b/field-test/t02_scarica.bat new file mode 100644 index 0000000..d7b3151 --- /dev/null +++ b/field-test/t02_scarica.bat @@ -0,0 +1,30 @@ +@echo off +REM ============================================================ +REM T02 - SCARICO programma dal CNC +REM Legge /PRG/%PROGNUM% e salva in results\downloaded.txt. +REM Atteso: Errore:0 se il file /PRG/%PROGNUM% esiste sul CNC. +REM CRITICITA C1: -path accetta solo interi -> legge SEMPRE +REM /PRG/. Se i programmi sul CNC hanno nomi tipo "O1234" +REM o lettere, NON sono indirizzabili da CLI. Fare prima la +REM ricognizione FTP manuale (vedi README sezione 4). +REM CRITICITA C5: il file salvato NON e' NC grezzo ma formato +REM wrapper "program:{...} tooloffsetdata:{} workzerooffset:{}". +REM ============================================================ +setlocal +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t02_scarica.log +set OUT=%RESULTS%\downloaded.txt + +echo === T02 SCARICO === > "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%OUT% >> "%LOG%" 2>&1 +echo EXITCODE=%ERRORLEVEL% >> "%LOG%" +echo EXITCODE=%ERRORLEVEL% +echo File scaricato: %OUT% +echo Log: %LOG% +type "%LOG%" +if exist "%OUT%" ( + echo --- CONTENUTO SCARICATO --- + type "%OUT%" +) +endlocal diff --git a/field-test/t03_validatore.bat b/field-test/t03_validatore.bat new file mode 100644 index 0000000..3a47543 --- /dev/null +++ b/field-test/t03_validatore.bat @@ -0,0 +1,27 @@ +@echo off +REM ============================================================ +REM T03 - VALIDATORE pre-invio (gating) +REM Tenta l'invio di 4 programmi non conformi + 1 valido. +REM Attesi (regole Fanuc/Mitsubishi in NcProgramValidator): +REM O0001_valid -> Errore:0 (ma vedi criticita C4) +REM O0002_lowercase -> -204 "Lowercase letters not allowed" +REM O0003_brackets -> -204 "Forbidden char '['/']'" +REM O0004_longblock -> -204 "Block length > 80 chars" +REM no_header -> -202 (GetProgramTitle eccezione: nessun O####) +REM Verificare che il validatore BLOCCHI prima di scrivere su CNC. +REM ============================================================ +setlocal enabledelayedexpansion +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t03_validatore.log +echo === T03 VALIDATORE === > "%LOG%" + +for %%F in (O0001_valid O0002_lowercase O0003_brackets O0004_longblock no_header) do ( + echo. >> "%LOG%" + echo ----- INVIO %%F ----- >> "%LOG%" + "%EXE%" -manufacturer=mitsubishi -azione=Invia -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%~dp0samples\%%F.nc >> "%LOG%" 2>&1 + echo EXITCODE %%F = !ERRORLEVEL! >> "%LOG%" +) +echo Log: %LOG% +type "%LOG%" +endlocal diff --git a/field-test/t04_errori_connessione.bat b/field-test/t04_errori_connessione.bat new file mode 100644 index 0000000..e1b9fb5 --- /dev/null +++ b/field-test/t04_errori_connessione.bat @@ -0,0 +1,36 @@ +@echo off +REM ============================================================ +REM T04 - ERRORI di connessione +REM Tre casi, tutti attesi -201 "Macchina non connessa": +REM a) IP inesistente +REM b) porta errata +REM c) credenziali errate +REM NOTA: il Connect fa una LIST su /PRG/. Se il controllo usa +REM una cartella programmi DIVERSA da /PRG/, anche con IP/cred +REM corretti la connessione FALLISCE (criticita C6: ProgramDirectory +REM e' hardcoded "/PRG/", nessun flag CLI per cambiarla). +REM ============================================================ +setlocal +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t04_errori_connessione.log +echo === T04 ERRORI CONNESSIONE === > "%LOG%" + +echo. >> "%LOG%" +echo ----- a) IP inesistente 10.255.255.1 ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=10.255.255.1 -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%RESULTS%\dl_a.txt >> "%LOG%" 2>&1 +echo EXITCODE_a=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- b) porta errata 9999 ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=9999 -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%RESULTS%\dl_b.txt >> "%LOG%" 2>&1 +echo EXITCODE_b=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- c) credenziali errate ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=%PORT% -username=NOUSER -password=NOPASS -path=%PROGNUM% -pathprogramma=%RESULTS%\dl_c.txt >> "%LOG%" 2>&1 +echo EXITCODE_c=%ERRORLEVEL% >> "%LOG%" + +echo Log: %LOG% +type "%LOG%" +endlocal diff --git a/field-test/t05_offset_non_supportati.bat b/field-test/t05_offset_non_supportati.bat new file mode 100644 index 0000000..aea6bc3 --- /dev/null +++ b/field-test/t05_offset_non_supportati.bat @@ -0,0 +1,27 @@ +@echo off +REM ============================================================ +REM T05 - Tool offset / Work zero NON supportati su Mitsubishi +REM Attesi: +REM -tooloffset -> -205 "ToolOffset non supportato per questo produttore" +REM -workzero -> -206 "WorkZeroOffset non supportato per questo produttore" +REM (supportati solo da Fanuc via FOCAS). Conferma gating corretto. +REM ============================================================ +setlocal +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t05_offset.log +echo === T05 OFFSET NON SUPPORTATI === > "%LOG%" + +echo. >> "%LOG%" +echo ----- Scarica con -tooloffset ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%RESULTS%\dl_tool.txt -tooloffset >> "%LOG%" 2>&1 +echo EXITCODE_tool=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- Scarica con -workzero ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%RESULTS%\dl_wz.txt -workzero >> "%LOG%" 2>&1 +echo EXITCODE_wz=%ERRORLEVEL% >> "%LOG%" + +echo Log: %LOG% +type "%LOG%" +endlocal diff --git a/field-test/t06_parametri_mancanti.bat b/field-test/t06_parametri_mancanti.bat new file mode 100644 index 0000000..a0e33b7 --- /dev/null +++ b/field-test/t06_parametri_mancanti.bat @@ -0,0 +1,39 @@ +@echo off +REM ============================================================ +REM T06 - Parametri mancanti / parsing +REM Attesi: +REM a) manca -azione -> -101 (NRE in ArgParser, vedi criticita C7) +REM b) manca -ip -> -102 parametri mancanti +REM c) manca -pathprogramma -> -102 (richiesto ANCHE per Scarica) +REM d) -help -> 0, stampa guida +REM NON usa rete: testabili anche offline. +REM ============================================================ +setlocal +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t06_parametri.log +echo === T06 PARAMETRI MANCANTI === > "%LOG%" + +echo. >> "%LOG%" +echo ----- a) manca -azione ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -ip=%IP% -porta=%PORT% -pathprogramma=%RESULTS%\x.txt >> "%LOG%" 2>&1 +echo EXITCODE_a=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- b) manca -ip ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -porta=%PORT% -pathprogramma=%RESULTS%\x.txt >> "%LOG%" 2>&1 +echo EXITCODE_b=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- c) manca -pathprogramma ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=%PORT% >> "%LOG%" 2>&1 +echo EXITCODE_c=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- d) -help ----- >> "%LOG%" +"%EXE%" -help >> "%LOG%" 2>&1 +echo EXITCODE_d=%ERRORLEVEL% >> "%LOG%" + +echo Log: %LOG% +type "%LOG%" +endlocal diff --git a/field-test/t07_roundtrip.bat b/field-test/t07_roundtrip.bat new file mode 100644 index 0000000..9d3fcd7 --- /dev/null +++ b/field-test/t07_roundtrip.bat @@ -0,0 +1,34 @@ +@echo off +REM ============================================================ +REM T07 - ROUND TRIP (Invia poi Scarica) +REM Carica O0001_valid.nc, poi prova a riscaricarlo. +REM ATTESO TEORICO: roundtrip OK. +REM ATTESO REALE (criticita C2 vs C1): l'INVIO scrive in path +REM relativo "%PROGNUM%/O0001" mentre lo SCARICO legge "/PRG/%PROGNUM%". +REM I due path NON coincidono -> il roundtrip via CLI probabilmente +REM FALLISCE o legge un file diverso. Documentare il comportamento +REM reale (dove finisce davvero il file, con ricognizione FTP). +REM ============================================================ +setlocal +call "%~dp0config.bat" +if not exist "%RESULTS%" mkdir "%RESULTS%" +set LOG=%RESULTS%\t07_roundtrip.log +echo === T07 ROUNDTRIP === > "%LOG%" + +echo. >> "%LOG%" +echo ----- 1) INVIO O0001_valid ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Invia -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%~dp0samples\O0001_valid.nc >> "%LOG%" 2>&1 +echo EXITCODE_invio=%ERRORLEVEL% >> "%LOG%" + +echo. >> "%LOG%" +echo ----- 2) SCARICO %PROGNUM% ----- >> "%LOG%" +"%EXE%" -manufacturer=mitsubishi -azione=Scarica -ip=%IP% -porta=%PORT% -username=%USER% -password=%PASS% -path=%PROGNUM% -pathprogramma=%RESULTS%\roundtrip_out.txt >> "%LOG%" 2>&1 +echo EXITCODE_scarico=%ERRORLEVEL% >> "%LOG%" + +echo Log: %LOG% +type "%LOG%" +if exist "%RESULTS%\roundtrip_out.txt" ( + echo --- CONTENUTO RISCARICATO --- + type "%RESULTS%\roundtrip_out.txt" +) +endlocal