From 7391a6d29bf577d43df369f2e770f152445f4a9f Mon Sep 17 00:00:00 2001 From: ST-TEN-11 Date: Tue, 24 Feb 2026 15:18:11 +0100 Subject: [PATCH 1/2] dev --- .../backup_csv/ST-TEN-11_AUTOMATICO.csv | 397 +++++++++--------- src/lib/helpers/recipe_manager.py | 39 +- src/ui/print_step_editor/print_step_editor.py | 38 +- src/ui/recipe_selection/recipe_selection.py | 47 +-- src/ui/test/test.py | 280 ++++++------ 5 files changed, 372 insertions(+), 429 deletions(-) diff --git a/config/csv_import/backup_csv/ST-TEN-11_AUTOMATICO.csv b/config/csv_import/backup_csv/ST-TEN-11_AUTOMATICO.csv index 14758ce..45858fe 100644 --- a/config/csv_import/backup_csv/ST-TEN-11_AUTOMATICO.csv +++ b/config/csv_import/backup_csv/ST-TEN-11_AUTOMATICO.csv @@ -1,198 +1,199 @@ -pressione_pre_riempimento,pressione_di_test,stampa_etichetta_abilitata,codice_ricetta,prova_tenuta_abilitata_2,printer_selection,tempo_riempimento_free_fall,pressione_min_free_fall,prova_tenuta_abilitata,pressione_riempimento_free_fall,codice_a_barre,pressione_max_free_fall,riempimento_continuo_free_fall,tempo_pre_riempimento_2,part_number,tempo_pre_riempimento,pid_pressure_correction,modello_etichetta,prova_pervieta_abilitata,tempo_di_test_2,tempo_di_test,cliente,verifica_codice_a_barre_abilitata,pressione_pre_riempimento_2,pressione_di_test_2 -0,0,x,PY83-6B747-BA,x,203,,,x,,,,,0,PY83-6B747-BA,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -0,0,x,PY83-6B748-BA,x,203,,,x,,,,,0,PY83-6B748-BA,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -0,0,x,MY83-6L694-AB,x,203,,,x,,,,,0,MY83-6L694-AB,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -0,8000,x,5801970064 REV2,x,203,,,x,,,,,0,5801970064 REV2,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5801970067 REV1,x,203,,,x,,,,,0,5801970067 REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801384839 REV1,x,203,,,x,,,,,0,5801384839 REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801384838 REV1,x,203,,,x,,,,,0,5801384838 REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801384842 REV01,x,203,,,x,,,,,0,5801384842 REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801970063 REV2,x,203,,,x,,,,,0,5801970063 REV2,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,3500,x,16LA259CP REV03,x,203,,,x,,,,,0,16LA259CP REV03,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16LA336CP REV02,x,203,,,x,,,,,0,16LA336CP REV02,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA490CP REV02,x,203,,,x,,,,,0,16LA490CP REV02,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA579CP REV01,x,203,,,x,,,,,0,16LA579CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA615CP REV01,x,203,,,x,,,,,0,16LA615CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA642CP REV01,x,203,,,x,,,,,0,16LA642CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,3500,x,16LA643CP REV01,x,203,,,x,,,,,0,16LA643CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,8000,x,5801970066 REV01,x,203,,,x,,,,,0,5801970066 REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801970021 REV01,x,203,,,x,,,,,0,5801970021 REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801970065 REV01,x,203,,,x,,,,,0,5801970065 REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,MY83-6B748-BA,x,203,,,x,,,,,0,MY83-6B748-BA,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -0,3500,x,16LA459CP REV02,x,203,,,x,,,,,0,16LA459CP REV02,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,0,x,MY83-6B747-BA,x,203,,,x,,,,,0,MY83-6B747-BA,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -0,3500,x,16LA459CP REV1,x,203,,,x,,,,,0,16LA459CP REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA735CP REV01,x,203,,,x,,,,,0,16LA735CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,0,x,5802915822,x,203,,,x,,,,,0,5802915822,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,5802889710 REV3,x,203,,,x,,,,,0,5802889710 REV3,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5801384838,x,203,,,x,,,,,0,5801384838,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5803103147 REV0,x,203,,,x,,,,,0,5803103147 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5803103150 REV0,x,203,,,x,,,,,0,5803103150 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5801970063 REV0,x,203,,,x,,,,,0,5801970063 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,IVECO,x,1000,15000 -0,0,x,5801384842 REV0,x,203,,,x,,,,,0,5801384842 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5801970066 REV0,x,203,,,x,,,,,0,5801970066 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5801970064 REV0,x,203,,,x,,,,,0,5801970064 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,IVECO,x,1000,15000 -0,0,x,60192056 REV1,x,203,,,x,,,,,0,60192056 REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,specificare cliente,x,1000,15000 -0,0,x,5801970065 REV0,x,203,,,x,,,,,0,5801970065 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,IVECO,x,1000,15000 -0,0,x,5801384839 REV0,x,203,,,x,,,,,0,5801384839 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5803018239,x,203,,,x,,,,,0,5803018239,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,5803018238,x,203,,,x,,,,,0,5803018238,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,5803018244,x,203,,,x,,,,,0,5803018244,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,5803018243,x,203,,,x,,,,,0,5803018243,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,NESSUN NOME,x,203,,,x,,,,,0,NESSUN NOME,0,100,EtichettaR5_Montaggio_1prova.prn,,10,1,specificare cliente,x,1000,15000 -0,0,x,5802991065,x,203,,,x,,,,,0,5802991065,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,TENUTA 20 bar,x,203,,,x,,,,,0,TENUTA 20 bar,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,specificare cliente,x,1000,15000 -0,3500,x,16LA353CP REV02,x,203,,,x,,,,,0,16LA353CP REV02,0,100,MCLAREN_353.prn,,10,10,MCLAREN,x,1000,15000 -0,0,x,504321531,x,203,,,x,,,,,0,504321531,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -0,3500,x,16LA397CP REV02,x,203,,,x,,,,,0,16LA397CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16LA573CP REV01,x,203,,,x,,,,,0,16LA573CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,0,x,5801616061,x,203,,,x,,,,,0,5801616061,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,IVECO,x,1000,15000 -0,3500,x,16LA449CP REV02,x,203,,,x,,,,,0,16LA449CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA773CP REV01,x,203,,,x,,,,,0,16LA773CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16LA461CP REV02,x,203,,,x,,,,,0,16LA461CP REV02,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -1000,3000,x,200116-09-1320,x,203,,,x,,,,,0,200116-09-1320,0,100,ETA30x16_203dpi.prn,,10,10,MULTIMATIC,x,1000,15000 -0,0,x,5803112815,x,203,,,x,,,,,0,5803112815,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,5000,x,5803112815 REV01,x,203,,,x,,,,,0,5803112815 REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,5000,x,5803112816,x,203,,,x,,,,,0,5803112816,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,5000,x,5803112816 REV01,x,203,,,x,,,,,0,5803112816 REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,3500,x,16LA584CP REV01,x,203,,,x,,,,,0,16LA584CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA027SP REV02,x,203,,,x,,,,,0,16LA027SP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,8000,x,5802729983 REV0,x,203,,,x,,,,,0,5802729983 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,7000,x,5802980014 REV0,x,203,,,x,,,,,0,5802980014 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,25,IVECO,x,1000,15000 -0,3000,x,16LA586CP REV01,x,203,,,x,,,,,0,16LA586CP REV01,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,3000,x,16LA695CP REV02,x,203,,,x,,,,,0,16LA695CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA765CP REV01,x,203,,,x,,,,,0,16LA765CP REV01,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,0,x,5801862227 REV0,x,203,,,x,,,,,0,5801862227 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801862227 REV00,x,203,,,x,,,,,0,5801862227 REV00,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,200,x,16FA026SP REV1,x,203,,,x,,,,,0,16FA026SP REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,3000,x,16FA026SP,x,203,,,x,,,,,0,16FA026SP,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,0,x,5801384841 REV0,x,203,,,x,,,,,0,5801384841 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801384841 REV01,x,203,,,x,,,,,0,5801384841 REV01,0,100,ETA30x16.prn,,10,20,IVECO,x,1000,15000 -0,8000,x,5801384840 REV01,x,203,,,x,,,,,0,5801384840 REV01,0,100,MCLAREN_353.prn,,10,20,IVECO,x,1000,15000 -0,7000,x,12970-13-2388,x,203,,,x,,,,,0,12970-13-2388,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,specificare cliente,x,1000,15000 -0,0,x,12970-13-2386,x,203,,,x,,,,,0,12970-13-2386,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,specificare cliente,x,1000,15000 -0,0,x,12970-13-2384,x,203,,,x,,,,,0,12970-13-2384,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,specificare cliente,x,1000,15000 -0,0,x,12970-13-2382,x,203,,,x,,,,,0,12970-13-2382,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,specificare cliente,x,1000,15000 -1000,7000,x,112247,x,203,,,x,,,,,0,112247,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,specificare cliente,x,1000,15000 -1000,2100,x,055045415,x,203,,,x,,,,,0,055045415,0,100,ferrari_flag_qr_only.prn,,10,30,Ferrari,x,1000,15000 -0,200,x,98FB342CP,x,203,,,x,,,,,0,98FB342CP,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -1000,2000,x,000991211,x,203,,,x,,,,,0,000991211,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -0,8000,x,5802170779 REV0,x,203,,,x,,,,,0,5802170779 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,MY83-6L701-AB,x,203,,,x,,,,,0,MY83-6L701-AB,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,specificare cliente,x,1000,15000 -1000,2000,x,000990701,x,203,,,x,,,,,0,000990701,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -0,200,x,16FA026SP REV01,x,203,,,x,,,,,0,16FA026SP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,1000,x,16FC056CX REV01,x,203,,,x,,,,,0,16FC056CX REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,300,x,16FC201CX REV01,x,203,,,x,,,,,0,16FC201CX REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,200,x,16FC541CT REV01,x,203,,,x,,,,,0,16FC541CT REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,3000,x,16LA372CP REV01,x,203,,,x,,,,,0,16LA372CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA452CP REV01,x,203,,,x,,,,,0,16LA452CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA515CP REV01,x,203,,,x,,,,,0,16LA515CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -3500,2000,x,98FA644CP,x,203,,,x,,,,,0,98FA644CP,5,100,MCLAREN_353.prn,,10,20,RICARDO,x,1000,15000 -1000,5000,x,000990708,x,203,,,x,,,,,0,000990708,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -0,0,x,5802889709 REV3,x,203,,,x,,,,,0,5802889709 REV3,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,3500,x,16LA648CP REV01,x,203,,,x,,,,,0,16LA648CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,7000,x,TEST FUGA 7 BAR,x,203,,,x,,,,,0,TEST FUGA 7 BAR,0,100,ETA30x16.prn,,10,5,specificare cliente,x,1000,15000 -1000,7000,x,dev test,x,203,,,x,,,,,0,dev test,0,100,MCLAREN_353.prn,,10,10,specificare cliente,x,1000,15000 -0,3000,x,16FB394CP REV04,x,203,,,x,,,,,0,16FB394CP REV04,0,100,MCLAREN_353.prn,,10,20,RICARDO,x,1000,15000 -0,1000,x,16FC069CP REV01,x,203,,,x,,,,,0,16FC069CP REV01,0,100,MCLAREN_353.prn,,10,20,RICARDO,x,1000,15000 -0,3000,x,16FC084CP REV02,x,203,,,x,,,,,0,16FC084CP REV02,0,100,MCLAREN_353.prn,,10,20,RICARDO,x,1000,15000 -0,3500,x,16LA661CP REV01,x,203,,,x,,,,,0,16LA661CP REV01,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,0,x,5802953113 REV.,x,203,,,x,,,,,0,5802953113 REV.,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5802980014 REV.,x,203,,,x,,,,,0,5802980014 REV.,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,0,x,5802981174 REV.,x,203,,,x,,,,,0,5802981174 REV.,0,100,EtichettaR5_Montaggio_1prova.prn,,10,60,IVECO,x,1000,15000 -0,0,x,5803112815 R.1,x,203,,,x,,,,,0,5803112815 R.1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -0,0,x,5803112816 R.1,x,203,,,x,,,,,0,5803112816 R.1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,10,IVECO,x,1000,15000 -1000,1000,x,590.2.418.1A,x,203,,,x,,,,,0,590.2.418.1A,0,100,ETA30x16_203dpi.prn,,10,5,DUCATI,x,1000,15000 -1000,3000,x,98FA186CP,x,203,,,x,,,,,0,98FA186CP,0,100,MCLAREN_353.prn,,10,20,RICARDO,x,1000,15000 -0,8000,x,5802170804 REV0,x,203,,,x,,,,,0,5802170804 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -1000,6800,x,055055934,x,203,,,x,,,,,0,055055934,0,100,ETA30x16_203dpi.prn,,10,20,FERRARI,x,1000,15000 -1000,2000,x,055038417,x,203,,,x,,,,,0,055038417,0,100,ETA30x16_203dpi.prn,,10,20,FERRARI,x,1000,15000 -1000,2000,x,055038405,x,203,,,x,,,,,0,055038405,0,100,ETA30x16_203dpi.prn,,10,20,FERRARI,x,1000,15000 -0,3500,x,16LA668CP REV01,x,203,,,x,,,,,0,16LA668CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16LA617CP REV01,x,203,,,x,,,,,0,16LA617CP REV01,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,0,x,60175799 REV0,x,203,,,x,,,,,0,60175799 REV0,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,specificare cliente,x,1000,15000 -0,0,x,000746453,x,zd421c,,,x,,,,,0,000746453,0,100,ERRECINQUE_flag_qr_only.prn,,10,30,MCLAREN,x,1000,15000 -1000,4100,x,000904357,x,203,,,x,,,,,0,000904357,0,100,ETA30x16_203dpi.prn,,10,20,FERRARI,x,1000,15000 -1000,2000,x,000952005,x,203,,,x,,,,,0,000952005,0,100,ferrari_30x16_203.prn,,10,20,FERRARI F250,x,1000,15000 -1000,2000,x,000952022,x,203,,,x,,,,,0,000952022,0,100,ferrari_30x16_203.prn,,10,20,FERRARI F250,x,1000,15000 -0,2500,x,000960275,x,203,,,x,,,,,0,000960275,0,100,ERRECINQUE_flag_qr_only.prn,,10,30,Ferrari,x,1000,15000 -0,2500,x,000960281,x,203,,,x,,,,,0,000960281,0,100,ERRECINQUE_flag_qr_only.prn,,10,30,Ferrari,x,1000,15000 -0,2500,x,000960322,x,203,,,x,,,,,0,000960322,0,100,ERRECINQUE_flag_qr_only.prn,,10,30,Ferrari,x,1000,15000 -0,0,x,000987571,x,203,,,x,,,,,0,000987571,0,100,ferrari_30x16_203.prn,,10,0,ferrari,x,1000,15000 -0,0,x,000987572,x,203,,,x,,,,,0,000987572,0,100,ferrari_30x16_203.prn,,10,0,ferrari,x,1000,15000 -0,2100,x,000987923,x,203,,,x,,,,,0,000987923,0,100,ferrari_30x16_203.prn,,10,10,FERRARI,x,0,0 -0,2100,x,000987924,x,203,,,x,,,,,0,000987924,0,100,ferrari_30x16_203.prn,,10,10,FERRARI,x,0,0 -1000,2000,x,000990679,x,203,,,x,,,,,0,000990679,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990681,x,203,,,x,,,,,0,000990681,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990684,x,203,,,x,,,,,0,000990684,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990685,x,203,,,x,,,,,0,000990685,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990686,x,203,,,x,,,,,0,000990686,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,5000,x,000990687,x,203,,,x,,,,,0,000990687,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990688,x,203,,,x,,,,,0,000990688,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990690,x,203,,,x,,,,,0,000990690,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990691,x,203,,,x,,,,,0,000990691,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990692,x,203,,,x,,,,,0,000990692,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990696,x,203,,,x,,,,,0,000990696,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,2000,x,000990700,x,203,,,x,,,,,0,000990700,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -1000,500,x,18FA535CP,x,zd421c,,,x,,,,,0,18FA535CP,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -1000,3000,x,SY9Y-2976-AB,x,zd421c,,,x,,,,,0,SY9Y-2976-AB,0,100,MCLAREN_353.prn,,10,10,ASTON MARTIN,x,1000,15000 -1000,3000,x,SY9Y-2976-AC,x,zd421c,,,x,,,,,0,SY9Y-2976-AC,0,100,MCLAREN_353.prn,,10,30,ASTON MARTIN,x,1000,15000 -1000,3000,x,SY9Y-2976-BB,x,zd421c,,,x,,,,,0,SY9Y-2976-BB,0,100,MCLAREN_353.prn,,10,30,ASTON MARTIN,x,1000,15000 -1000,3000,x,SY9Y-2976-BC,x,zd421c,,,x,,,,,0,SY9Y-2976-BC,0,100,MCLAREN_353.prn,,10,30,ASTON MARTIN,x,1000,15000 -1000,3000,x,SY9Y-9S331-AB,x,203,,,x,,,,,0,SY9Y-9S331-AB,0,100,MCLAREN_353.prn,,10,30,ASTON MARTIN,x,1000,15000 -1000,3000,x,SY9Y-9S331-BB,x,203,,,x,,,,,0,SY9Y-9S331-BB,0,100,MCLAREN_353.prn,,10,30,ASTON MARTIN,x,1000,15000 -3000,2500,x,000960324,x,zd421c,,,x,,,,,0,000960324,10,100,ERRECINQUE_flag_qr_only.prn,,10,30,Ferrari,x,1000,15000 -1000,3000,x,18JA708CP,x,zd421c,10,5,x,1000,,35,x,0,18JA708CP,0,100,ERRECINQUE_flag_qr_only.prn,,10,30,AVL,x,1000,15000 -1000,3000,x,18JA709CP,x,203,,,x,,,,,0,18JA709CP,0,100,ETA30x16_203dpi.prn,,10,30,AVL,x,1000,15000 -1000,3000,x,18JA710CP,x,203,,,x,,,,,0,18JA710CP,0,100,ETA30x16_203dpi.prn,,10,30,AVL,x,1000,15000 -1000,3000,x,18JA712CP,x,203,,,x,,,,,0,18JA712CP,0,100,ETA30x16_203dpi.prn,,10,30,AVL,x,1000,15000 -1000,3000,x,18JA713CP,x,203,,,x,,,,,0,18JA713CP,0,100,ETA30x16_203dpi.prn,,10,30,AVL,x,1000,15000 -1000,3000,x,18JA750CP,x,203,,,x,,,,,0,18JA750CP,0,100,ETA30x16_203dpi.prn,,10,30,AVL,x,1000,15000 -1000,3000,x,18JA757CP,x,203,,,x,,,,,0,18JA757CP,0,100,ETA30x16_203dpi.prn,,10,30,AVL,x,1000,15000 -1000,1500,x,055019161,x,203,,,x,,,,,0,055019161,0,100,ferrari_30x16_203.prn,,10,20,FERRARI F250,x,1000,15000 -0,3500,x,16LA451CP REV01,x,203,,,x,,,,,0,16LA451CP REV01,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,1000,x,16FA849CP REV05,x,203,,,x,,,,,0,16FA849CP REV05,0,100,Mclaren_barcode.prn,,10,20,MCLAREN,x,1000,15000 -0,1000,x,16FB157CP REV03,x,203,,,x,,,,,0,16FB157CP REV03,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,1000,x,16FC246CP REV1,x,203,,,x,,,,,0,16FC246CP REV1,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,200,x,16FC250CP REV02,x,203,,,x,,,,,0,16FC250CP REV02,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,MCLAREN,x,1000,15000 -0,1000,x,16FC256CP REV01,x,203,,,x,,,,,0,16FC256CP REV01,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,200,x,16FC446CP REV01,x,203,,,x,,,,,0,16FC446CP REV01,0,100,Mclaren_barcode.prn,,10,20,MCLAREN ,x,1000,1000 -0,200,x,16FC469CP REV01,x,203,,,x,,,,,0,16FC469CP REV01,0,100,Mclaren_barcode.prn,,10,20,MCLAREN,x,1000,15000 -500,0,x,16JA605CP,x,203,,,x,,,,,0,16JA605CP,10,100,ETA30x16_203dpi.prn,,10,10,MCLAREN,x,1000,15000 -0,3500,x,16L0002CP REV03,x,203,,,x,,,,,0,16L0002CP REV03,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0007CP REV03,x,203,,,x,,,,,0,16L0007CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16L0043CP REV02,x,203,,,x,,,,,0,16L0043CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0045CP REV02,x,203,,,x,,,,,0,16L0045CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16L0046CP REV03,x,203,,,x,,,,,0,16L0046CP REV03,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,3500,x,16L0058CP REV02,x,203,,,x,,,,,0,16L0058CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16L0059CP REV03,x,203,,,x,,,,,0,16L0059CP REV03,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16L0075CP REV03,x,203,,,x,,,,,0,16L0075CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0145CP REV03,x,203,,,x,,,,,0,16L0145CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0151CP REV03,x,203,,,x,,,,,0,16L0151CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0154CP REV03,x,203,,,x,,,,,0,16L0154CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0161CP REV04,x,203,,,x,,,,,0,16L0161CP REV04,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0164CP REV02,x,203,,,x,,,,,0,16L0164CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0167CP REV02,x,203,,,x,,,,,0,16L0167CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0170CP REV03,x,203,,,x,,,,,0,16L0170CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16L0174CP REV02,x,203,,,x,,,,,0,16L0174CP REV02,0,100,EtichettaR5_Montaggio_1prova.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16L0177CP REV03,x,203,,,x,,,,,0,16L0177CP REV03,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,3000,x,16LA518CP REV02,x,203,,,x,,,,,0,16LA518CP REV02,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,3000,x,16LA718CP REV02,x,203,,,x,,,,,0,16LA718CP REV02,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -1000,3000,x,18JB918CP,x,zd420,15,5,x,0,,155,,0,18JB918CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -1000,3000,x,18JB923CP,x,zd420,15,5,x,0,,150,,0,18JB923CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -1000,3000,x,18JB921CP,x,zd420,15,5,x,0,,155,,0,18JB921CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -1000,3000,x,18JB916CP,x,zd420,15,5,x,0,,145,,0,18JB916CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -1000,3000,x,18JB927CP,x,zd420,15,5,x,0,,145,,0,18JB927CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -1000,3000,x,18JB925CP,x,zd420,15,5,x,0,,185,,0,18JB925CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -0,500,x,18FA126CP,x,203,,,x,,,,,0,18FA126CP,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -1000,3000,x,18JB926CP,x,zd420,15,5,x,0,,145,,0,18JB926CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -0,200,x,07N131628A,x,zd420,0,0,x,0,,0,,0,07N131628A,0,100,Lamborghini_30x16.prn,,10,10,LAMBORGHINI,x,1000,15000 -0,0,x,5803217628 REV.,x,203,,,x,,,,,0,5803217628 REV.,0,100,EtichettaR5_Montaggio_1prova.prn,,10,20,IVECO,x,1000,15000 -0,1000,x,07N131597A,x,zd420,0,0,x,0,,0,,0,07N131597A,0,100,Lamborghini_30x16.prn,,10,30,LAMBORGHINI,x,1000,15000 -1000,3000,x,18JB951CP,x,zd420,15,5,x,0,,155,,0,18JB951CP,0,100,ferrari_30x16_203.prn,,10,30,MCLAREN,x,1000,15000 -0,3500,x,16L0180CP REV04,x,203,,,x,,,,,0,16L0180CP REV04,0,100,MCLAREN_353.prn,,10,30,MCLAREN,x,1000,15000 -0,200,x,98FB080CP,x,300,0,0,x,0,98FB080CP-20B{N11},0,,0,98FB080CP,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 -0,3000,x,98FB080CP-20B,x,203,,,x,,,,,0,98FB080CP-20B,0,100,label_interoperazione.prn,,10,10,MCLAREN,x,1000,15000 -1000,2000,x,000990680,x,203,,,x,,,,,0,000990680,0,100,ferrari_30x16_203.prn,,10,30,FERRARI,x,1000,15000 -0,3500,x,16LA680CP REV01,x,203,0,0,x,0,,0,,0,16LA680CP REV01,0,100,MCLAREN_353.prn,,10,10,MCLAREN,x,1000,15000 -0,200,x,98FB081CP,x,203,0,0,x,0,,0,,0,98FB081CP,0,100,MCLAREN_353.prn,,10,20,MCLAREN,x,1000,15000 +stampa_etichetta_abilitata,tempo_pre_riempimento,codice_ricetta,verifica_codice_a_barre_abilitata,pressione_max_free_fall,pressione_pre_riempimento,modello_etichetta,tempo_di_test,pid_pressure_correction,prova_tenuta_abilitata,pressione_di_test_2,cliente,prova_pervieta_abilitata,tempo_riempimento_free_fall,pressione_pre_riempimento_2,prova_tenuta_abilitata_2,part_number,riempimento_continuo_free_fall,pressione_riempimento_free_fall,printer_selection,pressione_di_test,codice_a_barre,tempo_di_test_2,pressione_min_free_fall,tempo_pre_riempimento_2 +x,0,PY83-6B747-BA,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,PY83-6B747-BA,,,zd421c,0,,10,,0 +x,0,PY83-6B748-BA,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,PY83-6B748-BA,,,zd421c,0,,10,,0 +x,0,MY83-6L694-AB,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,MY83-6L694-AB,,,zd421c,0,,10,,0 +x,0,5801970064 REV2,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970064 REV2,,,zd421c,8000,,10,,0 +x,0,5801970067 REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970067 REV1,,,zd421c,0,,10,,0 +x,0,5801384839 REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384839 REV1,,,zd421c,8000,,10,,0 +x,0,5801384838 REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384838 REV1,,,zd421c,8000,,10,,0 +x,0,5801384842 REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384842 REV01,,,zd421c,8000,,10,,0 +x,0,5801970063 REV2,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970063 REV2,,,zd421c,8000,,10,,0 +x,0,16LA259CP REV03,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA259CP REV03,,,zd421c,3500,,10,,0 +x,0,16LA336CP REV02,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA336CP REV02,,,zd421c,3000,,10,,0 +x,0,16LA490CP REV02,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA490CP REV02,,,zd421c,3500,,10,,0 +x,0,16LA579CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA579CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA615CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA615CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA642CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA642CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA643CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA643CP REV01,,,zd421c,3500,,10,,0 +x,0,5801970066 REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970066 REV01,,,zd421c,8000,,10,,0 +x,0,5801970021 REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970021 REV01,,,zd421c,8000,,10,,0 +x,0,5801970065 REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970065 REV01,,,zd421c,8000,,10,,0 +x,0,MY83-6B748-BA,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,MY83-6B748-BA,,,zd421c,0,,10,,0 +x,0,16LA459CP REV02,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA459CP REV02,,,zd421c,3500,,10,,0 +x,0,MY83-6B747-BA,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,MY83-6B747-BA,,,zd421c,0,,10,,0 +x,0,16LA459CP REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA459CP REV1,,,zd421c,3500,,10,,0 +x,0,16LA735CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA735CP REV01,,,zd421c,3500,,10,,0 +x,0,5802915822,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5802915822,,,zd421c,0,,10,,0 +x,0,5802889710 REV3,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5802889710 REV3,,,zd421c,0,,10,,0 +x,0,5801384838,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384838,,,zd421c,0,,10,,0 +x,0,5803103147 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5803103147 REV0,,,zd421c,0,,10,,0 +x,0,5803103150 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5803103150 REV0,,,zd421c,0,,10,,0 +x,0,5801970063 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,IVECO,,,1000,x,5801970063 REV0,,,zd421c,0,,10,,0 +x,0,5801384842 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384842 REV0,,,zd421c,0,,10,,0 +x,0,5801970066 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801970066 REV0,,,zd421c,0,,10,,0 +x,0,5801970064 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,IVECO,,,1000,x,5801970064 REV0,,,zd421c,0,,10,,0 +x,0,60192056 REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,specificare cliente,,,1000,x,60192056 REV1,,,zd421c,0,,10,,0 +x,0,5801970065 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,IVECO,,,1000,x,5801970065 REV0,,,zd421c,0,,10,,0 +x,0,5801384839 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384839 REV0,,,zd421c,0,,10,,0 +x,0,5803018239,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803018239,,,zd421c,0,,10,,0 +x,0,5803018238,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803018238,,,zd421c,0,,10,,0 +x,0,5803018244,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803018244,,,zd421c,0,,10,,0 +x,0,5803018243,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803018243,,,zd421c,0,,10,,0 +x,0,NESSUN NOME,x,,0,EtichettaR5_Montaggio_1prova.prn,1,100,x,15000,specificare cliente,,,1000,x,NESSUN NOME,,,zd421c,0,,10,,0 +x,0,5802991065,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5802991065,,,zd421c,0,,10,,0 +x,0,TENUTA 20 bar,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,specificare cliente,,,1000,x,TENUTA 20 bar,,,zd421c,0,,10,,0 +x,0,16LA353CP REV02,x,,0,MCLAREN_353.prn,10,100,x,15000,MCLAREN,,,1000,x,16LA353CP REV02,,,zd421c,3500,,10,,0 +x,0,504321531,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,504321531,,,zd421c,0,,10,,0 +x,0,16LA397CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA397CP REV02,,,zd421c,3500,,10,,0 +x,0,16LA573CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA573CP REV01,,,zd421c,3000,,10,,0 +x,0,5801616061,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,IVECO,,,1000,x,5801616061,,,zd421c,0,,10,,0 +x,0,16LA449CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA449CP REV02,,,zd421c,3500,,10,,0 +x,0,16LA773CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA773CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA461CP REV02,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA461CP REV02,,,zd421c,3000,,10,,0 +x,0,200116-09-1320,x,,1000,ETA30x16_203dpi.prn,10,100,x,15000,MULTIMATIC,,,1000,x,200116-09-1320,,,zd421c,3000,,10,,0 +x,0,5803112815,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803112815,,,zd421c,0,,10,,0 +x,0,5803112815 REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803112815 REV01,,,zd421c,5000,,10,,0 +x,0,5803112816,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803112816,,,zd421c,5000,,10,,0 +x,0,5803112816 REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803112816 REV01,,,zd421c,5000,,10,,0 +x,0,16LA584CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA584CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA027SP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA027SP REV02,,,zd421c,3500,,10,,0 +x,0,5802729983 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5802729983 REV0,,,zd421c,8000,,10,,0 +x,0,5802980014 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,25,100,x,15000,IVECO,,,1000,x,5802980014 REV0,,,zd421c,7000,,10,,0 +x,0,16LA586CP REV01,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA586CP REV01,,,zd421c,3000,,10,,0 +x,0,16LA695CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA695CP REV02,,,zd421c,3000,,10,,0 +x,0,16LA765CP REV01,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA765CP REV01,,,zd421c,3500,,10,,0 +x,0,5801862227 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801862227 REV0,,,zd421c,0,,10,,0 +x,0,5801862227 REV00,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801862227 REV00,,,zd421c,8000,,10,,0 +x,0,16FA026SP REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FA026SP REV1,,,zd421c,200,,10,,0 +x,0,16FA026SP,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16FA026SP,,,zd421c,3000,,10,,0 +x,0,5801384841 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5801384841 REV0,,,zd421c,0,,10,,0 +x,0,5801384841 REV01,x,,0,ETA30x16.prn,20,100,x,15000,IVECO,,,1000,x,5801384841 REV01,,,zd421c,8000,,10,,0 +x,0,5801384840 REV01,x,,0,MCLAREN_353.prn,20,100,x,15000,IVECO,,,1000,x,5801384840 REV01,,,zd421c,8000,,10,,0 +x,0,12970-13-2388,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,specificare cliente,,,1000,x,12970-13-2388,,,zd421c,7000,,10,,0 +x,0,12970-13-2386,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,specificare cliente,,,1000,x,12970-13-2386,,,zd421c,0,,10,,0 +x,0,12970-13-2384,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,specificare cliente,,,1000,x,12970-13-2384,,,zd421c,0,,10,,0 +x,0,12970-13-2382,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,specificare cliente,,,1000,x,12970-13-2382,,,zd421c,0,,10,,0 +x,0,112247,x,,1000,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,specificare cliente,,,1000,x,112247,,,zd421c,7000,,10,,0 +x,0,055045415,x,,1000,ferrari_flag_qr_only.prn,30,100,x,15000,Ferrari,,,1000,x,055045415,,,zd421c,2100,,10,,0 +x,0,98FB342CP,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,98FB342CP,,,zd421c,200,,10,,0 +x,0,000991211,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000991211,,,zd421c,2000,,10,,0 +x,0,MY83-6L701-AB,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,specificare cliente,,,1000,x,MY83-6L701-AB,,,zd421c,0,,10,,0 +x,0,16FA026SP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FA026SP REV01,,,zd421c,200,,10,,0 +x,0,16FC056CX REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC056CX REV01,,,zd421c,1000,,10,,0 +x,0,16FC201CX REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC201CX REV01,,,zd421c,300,,10,,0 +x,0,16FC541CT REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC541CT REV01,,,zd421c,200,,10,,0 +x,0,16LA372CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA372CP REV01,,,zd421c,3000,,10,,0 +x,0,16LA452CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA452CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA515CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA515CP REV01,,,zd421c,3500,,10,,0 +x,5,98FA644CP,x,,3500,MCLAREN_353.prn,20,100,x,15000,RICARDO,,,1000,x,98FA644CP,,,zd421c,2000,,10,,0 +x,0,5802889709 REV3,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5802889709 REV3,,,zd421c,0,,10,,0 +x,0,16LA648CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA648CP REV01,,,zd421c,3500,,10,,0 +x,0,TEST FUGA 7 BAR,x,,0,ETA30x16.prn,5,100,x,15000,specificare cliente,,,1000,x,TEST FUGA 7 BAR,,,zd421c,7000,,10,,0 +x,0,dev test,x,,1000,MCLAREN_353.prn,10,100,x,15000,specificare cliente,,,1000,x,dev test,,,zd421c,7000,,10,,0 +x,0,16FB394CP REV04,x,,0,MCLAREN_353.prn,20,100,x,15000,RICARDO,,,1000,x,16FB394CP REV04,,,zd421c,3000,,10,,0 +x,0,16FC069CP REV01,x,,0,MCLAREN_353.prn,20,100,x,15000,RICARDO,,,1000,x,16FC069CP REV01,,,zd421c,1000,,10,,0 +x,0,16FC084CP REV02,x,,0,MCLAREN_353.prn,20,100,x,15000,RICARDO,,,1000,x,16FC084CP REV02,,,zd421c,3000,,10,,0 +x,0,16LA661CP REV01,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA661CP REV01,,,zd421c,3500,,10,,0 +x,0,5802953113 REV.,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5802953113 REV.,,,zd421c,0,,10,,0 +x,0,5802980014 REV.,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5802980014 REV.,,,zd421c,0,,10,,0 +x,0,5802981174 REV.,x,,0,EtichettaR5_Montaggio_1prova.prn,60,100,x,15000,IVECO,,,1000,x,5802981174 REV.,,,zd421c,0,,10,,0 +x,0,5803112815 R.1,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803112815 R.1,,,zd421c,0,,10,,0 +x,0,5803112816 R.1,x,,0,EtichettaR5_Montaggio_1prova.prn,10,100,x,15000,IVECO,,,1000,x,5803112816 R.1,,,zd421c,0,,10,,0 +x,0,590.2.418.1A,x,,1000,ETA30x16_203dpi.prn,5,100,x,15000,DUCATI,,,1000,x,590.2.418.1A,,,zd421c,1000,,10,,0 +x,0,98FA186CP,x,,1000,MCLAREN_353.prn,20,100,x,15000,RICARDO,,,1000,x,98FA186CP,,,zd421c,3000,,10,,0 +x,0,5802170804 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5802170804 REV0,,,zd421c,8000,,10,,0 +x,0,055055934,x,,1000,ETA30x16_203dpi.prn,20,100,x,15000,FERRARI,,,1000,x,055055934,,,zd421c,6800,,10,,0 +x,0,055038417,x,,1000,ETA30x16_203dpi.prn,20,100,x,15000,FERRARI,,,1000,x,055038417,,,zd421c,2000,,10,,0 +x,0,055038405,x,,1000,ETA30x16_203dpi.prn,20,100,x,15000,FERRARI,,,1000,x,055038405,,,zd421c,2000,,10,,0 +x,0,16LA668CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA668CP REV01,,,zd421c,3500,,10,,0 +x,0,16LA617CP REV01,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA617CP REV01,,,zd421c,3500,,10,,0 +x,0,60175799 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,specificare cliente,,,1000,x,60175799 REV0,,,zd421c,0,,10,,0 +x,0,000904357,x,,1000,ETA30x16_203dpi.prn,20,100,x,15000,FERRARI,,,1000,x,000904357,,,zd421c,4100,,10,,0 +x,0,000952005,x,,1000,ferrari_30x16_203.prn,20,100,x,15000,FERRARI F250,,,1000,x,000952005,,,zd421c,2000,,10,,0 +x,0,000952022,x,,1000,ferrari_30x16_203.prn,20,100,x,15000,FERRARI F250,,,1000,x,000952022,,,zd421c,2000,,10,,0 +x,0,000960275,x,,0,ERRECINQUE_flag_qr_only.prn,30,100,x,15000,Ferrari,,,1000,x,000960275,,,zd421c,2500,,10,,0 +x,0,000960281,x,,0,ERRECINQUE_flag_qr_only.prn,30,100,x,15000,Ferrari,,,1000,x,000960281,,,zd421c,2500,,10,,0 +x,0,000960322,x,,0,ERRECINQUE_flag_qr_only.prn,30,100,x,15000,Ferrari,,,1000,x,000960322,,,zd421c,2500,,10,,0 +x,0,000987571,x,,0,ferrari_30x16_203.prn,0,100,x,15000,ferrari,,,1000,x,000987571,,,zd421c,0,,10,,0 +x,0,000987572,x,,0,ferrari_30x16_203.prn,0,100,x,15000,ferrari,,,1000,x,000987572,,,zd421c,0,,10,,0 +x,0,000987924,x,,0,ferrari_30x16_203.prn,10,100,x,0,FERRARI,,,0,x,000987924,,,zd421c,2100,,10,,0 +x,0,000990679,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990679,,,zd421c,2000,,10,,0 +x,0,000990681,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990681,,,zd421c,2000,,10,,0 +x,0,000990684,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990684,,,zd421c,2000,,10,,0 +x,0,000990685,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990685,,,zd421c,2000,,10,,0 +x,0,000990686,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990686,,,zd421c,2000,,10,,0 +x,0,000990687,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990687,,,zd421c,5000,,10,,0 +x,0,000990688,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990688,,,zd421c,2000,,10,,0 +x,0,000990690,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990690,,,zd421c,2000,,10,,0 +x,0,000990691,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990691,,,zd421c,2000,,10,,0 +x,0,000990692,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990692,,,zd421c,2000,,10,,0 +x,0,000990696,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990696,,,zd421c,2000,,10,,0 +x,0,18FA535CP,x,,1000,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,18FA535CP,,,zd421c,500,,10,,0 +x,0,SY9Y-2976-AB,x,,1000,MCLAREN_353.prn,10,100,x,15000,ASTON MARTIN,,,1000,x,SY9Y-2976-AB,,,zd421c,3000,,10,,0 +x,0,SY9Y-2976-AC,x,,1000,MCLAREN_353.prn,30,100,x,15000,ASTON MARTIN,,,1000,x,SY9Y-2976-AC,,,zd421c,3000,,10,,0 +x,0,SY9Y-2976-BB,x,,1000,MCLAREN_353.prn,30,100,x,15000,ASTON MARTIN,,,1000,x,SY9Y-2976-BB,,,zd421c,3000,,10,,0 +x,0,SY9Y-2976-BC,x,,1000,MCLAREN_353.prn,30,100,x,15000,ASTON MARTIN,,,1000,x,SY9Y-2976-BC,,,zd421c,3000,,10,,0 +x,0,SY9Y-9S331-AB,x,,1000,MCLAREN_353.prn,30,100,x,15000,ASTON MARTIN,,,1000,x,SY9Y-9S331-AB,,,zd421c,3000,,10,,0 +x,0,SY9Y-9S331-BB,x,,1000,MCLAREN_353.prn,30,100,x,15000,ASTON MARTIN,,,1000,x,SY9Y-9S331-BB,,,zd421c,3000,,10,,0 +x,10,000960324,x,,3000,ERRECINQUE_flag_qr_only.prn,30,100,x,15000,Ferrari,,,1000,x,000960324,,,zd421c,2500,,10,,0 +x,0,16LA451CP REV01,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA451CP REV01,,,zd421c,3500,,10,,0 +x,0,16FA849CP REV05,x,,0,Mclaren_barcode.prn,20,100,x,15000,MCLAREN,,,1000,x,16FA849CP REV05,,,zd421c,1000,,10,,0 +x,0,16FB157CP REV03,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16FB157CP REV03,,,zd421c,1000,,10,,0 +x,0,16FC246CP REV1,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC246CP REV1,,,zd421c,1000,,10,,0 +x,0,16FC250CP REV02,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC250CP REV02,,,zd421c,200,,10,,0 +x,0,16FC256CP REV01,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC256CP REV01,,,zd421c,1000,,10,,0 +x,0,16FC446CP REV01,x,,0,Mclaren_barcode.prn,20,100,x,1000,MCLAREN ,,,1000,x,16FC446CP REV01,,,zd421c,200,,10,,0 +x,0,16FC469CP REV01,x,,0,Mclaren_barcode.prn,20,100,x,15000,MCLAREN,,,1000,x,16FC469CP REV01,,,zd421c,200,,10,,0 +x,10,16JA605CP,x,,500,ETA30x16_203dpi.prn,10,100,x,15000,MCLAREN,,,1000,x,16JA605CP,,,zd421c,0,,10,,0 +x,0,16L0002CP REV03,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0002CP REV03,,,zd421c,3500,,10,,0 +x,0,16L0043CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0043CP REV02,,,zd421c,3500,,10,,0 +x,0,16L0045CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0045CP REV02,,,zd421c,3000,,10,,0 +x,0,16L0046CP REV03,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16L0046CP REV03,,,zd421c,3500,,10,,0 +x,0,16L0058CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0058CP REV02,,,zd421c,3500,,10,,0 +x,0,16L0059CP REV03,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0059CP REV03,,,zd421c,3500,,10,,0 +x,0,16L0145CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0145CP REV03,,,zd421c,3000,,10,,0 +x,0,16L0151CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0151CP REV03,,,zd421c,3000,,10,,0 +x,0,16L0154CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0154CP REV03,,,zd421c,3000,,10,,0 +x,0,16L0161CP REV04,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0161CP REV04,,,zd421c,3000,,10,,0 +x,0,16L0164CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0164CP REV02,,,zd421c,3000,,10,,0 +x,0,16L0167CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0167CP REV02,,,zd421c,3000,,10,,0 +x,0,16L0170CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0170CP REV03,,,zd421c,3000,,10,,0 +x,0,16L0174CP REV02,x,,0,EtichettaR5_Montaggio_1prova.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0174CP REV02,,,zd421c,3500,,10,,0 +x,0,16L0177CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0177CP REV03,,,zd421c,3000,,10,,0 +x,0,16LA518CP REV02,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,16LA518CP REV02,,,zd421c,3000,,10,,0 +x,0,16LA718CP REV02,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16LA718CP REV02,,,zd421c,3000,,10,,0 +x,0,18FA126CP,x,,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,,1000,x,18FA126CP,,,zd421c,500,,10,,0 +x,0,000990680,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990680,,,zd421c,2000,,10,,0 +x,0,16L0180CP REV04,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0180CP REV04,,,zd421c,3500,,10,,0 +x,0,16LA680CP REV01,x,0,0,MCLAREN_353.prn,10,100,x,15000,MCLAREN,,0,1000,x,16LA680CP REV01,,0,203,3500,,10,0,0 +x,0,98FB080CP,x,0,0,MCLAREN 98FB80CP.prn,20,100,x,15000,MCLAREN,,0,1000,x,98FB080CP,,0,zd420,200,98FB080CP-20B{N11},10,0,0 +x,0,98FB080CP-20B,x,,0,label_interoperazione.prn,10,100,x,15000,MCLAREN,,,1000,x,98FB080CP-20B,,,zd421c,3000,,10,,0 +x,0,98FB081CP,x,0,0,MCLAREN_353.prn,20,100,x,15000,MCLAREN,,0,1000,x,98FB081CP,,0,zd421c,200,,10,0,0 +x,0,000746453,x,,0,ERRECINQUE_flag_qr_only.prn,30,100,x,15000,MCLAREN,,,1000,x,000746453,,,zd421c,0,,10,,0 +x,0,000990700,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990700,,,zd421c,2000,,10,,0 +x,0,000990701,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990701,,,zd421c,2000,,10,,0 +x,0,000990708,x,,1000,ferrari_30x16_203.prn,30,100,x,15000,FERRARI,,,1000,x,000990708,,,zd421c,5000,,10,,0 +x,0,16L0007CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0007CP REV03,,,zd421c,3000,,10,,0 +x,0,16L0075CP REV03,x,,0,MCLAREN_353.prn,30,100,x,15000,MCLAREN,,,1000,x,16L0075CP REV03,,,zd421c,3500,,10,,0 +x,0,5802170779 REV0,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5802170779 REV0,,,zd421c,8000,,10,,0 +x,0,18JB926CP,x,145,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB926CP,,0,zd420,3000,,10,5,0 +x,0,055019161,x,,1000,ferrari_30x16_203.prn,20,100,x,15000,FERRARI F250,,,1000,x,055019161,,,zd421c,1500,,10,,0 +x,0,18JB916CP,x,150,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB916CP,,0,zd420,3000,,10,5,0 +x,0,18JA708CP,x,35,1000,ERRECINQUE_flag_qr_only.prn,30,100,x,15000,AVL,,10,1000,x,18JA708CP,x,1000,zd421c,3000,,10,5,0 +x,0,18JA709CP,x,,1000,ETA30x16_203dpi.prn,30,100,x,15000,AVL,,,1000,x,18JA709CP,,,zd421c,3000,,10,,0 +x,0,18JA710CP,x,,1000,ETA30x16_203dpi.prn,30,100,x,15000,AVL,,,1000,x,18JA710CP,,,zd421c,3000,,10,,0 +x,0,18JA712CP,x,,1000,ETA30x16_203dpi.prn,30,100,x,15000,AVL,,,1000,x,18JA712CP,,,zd421c,3000,,10,,0 +x,0,18JA713CP,x,,1000,ETA30x16_203dpi.prn,30,100,x,15000,AVL,,,1000,x,18JA713CP,,,zd421c,3000,,10,,0 +x,0,18JA750CP,x,,1000,ETA30x16_203dpi.prn,30,100,x,15000,AVL,,,1000,x,18JA750CP,,,zd421c,3000,,10,,0 +x,0,18JA757CP,x,,1000,ETA30x16_203dpi.prn,30,100,x,15000,AVL,,,1000,x,18JA757CP,,,zd421c,3000,,10,,0 +x,0,18JB951CP,x,155,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB951CP,,0,zd420,3000,,10,5,0 +x,0,18JB918CP,x,155,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB918CP,,0,zd420,3000,,10,5,0 +x,0,18JB921CP,x,155,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB921CP,,0,zd420,3000,,10,5,0 +x,0,18JB925CP,x,185,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB925CP,,0,zd420,3000,,10,5,0 +x,0,000987923,x,,0,ferrari_30x16_203.prn,10,100,x,0,FERRARI,,,0,x,000987923,,,zd421c,2100,,10,,0 +x,0,18JB923CP,x,155,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB923CP,,0,zd420,3000,,10,5,0 +x,0,18JB927CP,x,155,1000,ferrari_30x16_203.prn,30,100,x,15000,MCLAREN,,45,1000,x,18JB927CP,,0,zd420,3000,,10,5,0 +x,0,5803217628 REV.,x,,0,EtichettaR5_Montaggio_1prova.prn,20,100,x,15000,IVECO,,,1000,x,5803217628 REV.,,,zd421c,0,,10,,0 +x,0,07N131597A,x,0,0,Lamborghini_30x16.prn,30,100,x,15000,LAMBORGHINI,,0,1000,x,07N131597A,,0,zd420,1000,,10,0,0 +x,0,07N131628A,x,0,0,Lamborghini_30x16.prn,10,100,x,15000,LAMBORGHINI,,0,1000,x,07N131628A,,0,zd420,200,,10,0,0 +x,0,07N131628B,x,0,0,Lamborghini_30x16.prn,10,100,x,15000,LAMBORGHINI,,0,1000,x,07N131628B,,0,zd420,200,,10,0,0 diff --git a/src/lib/helpers/recipe_manager.py b/src/lib/helpers/recipe_manager.py index 37f7c47..7828bce 100644 --- a/src/lib/helpers/recipe_manager.py +++ b/src/lib/helpers/recipe_manager.py @@ -44,36 +44,6 @@ def read_steps(row, config, defaults=None, unsupported_steps=None): except ValueError: return 0 # Default to 0 if parsing fails - # Normalize printer_selection to resolution string ("203"/"300") - lp1 = (config.get("label_printer", {}) or {}) - lp2 = (config.get("label_printer_2", {}) or {}) - def normalize_printer_sel(val): - try: - s = str(val).strip() - except Exception: - s = "" - if s == "": - # default to primary printer resolution - try: - return str(int(lp1.get("risoluzione", 300))) - except Exception: - return "300" - if s.isdigit(): - return s - # legacy OS printer name: match lp1 or lp2 names - if s == str(lp1.get("printer", "")): - try: - return str(int(lp1.get("risoluzione", 300))) - except Exception: - return "300" - if s == str(lp2.get("printer", "")): - try: - return str(int(lp2.get("risoluzione", 300))) - except Exception: - return "300" - # unknown string; keep as-is - return s - # Define the steps dictionary steps = { "count": { @@ -188,8 +158,7 @@ def read_steps(row, config, defaults=None, unsupported_steps=None): "labeltxt_5": row.get("barcode_input_finelinea", ""), "extra_label": row.get("etichette_supplementari", ""), "barcode": row.get("barcode_stampato",defaults["barcode_format"]), - # Store resolution instead of printer name; map legacy names to their resolution - "printer_selection": normalize_printer_sel(row.get("printer_selection", lp1.get("risoluzione", 300))), + "printer_selection": row.get("printer_selection", (config.get("label_printer", {}) or {}).get("printer", "")), }, } @@ -467,11 +436,7 @@ def export_recipes(config, csv_path=None, logger=None): exportable.update({ "stampa_etichetta_abilitata": "x", print_template_field: steps["print"].spec["template"], - # Export resolution string; fallback to primary printer resolution from config - "printer_selection": steps["print"].spec.get( - "printer_selection", - str((config.get("label_printer", {}) or {}).get("risoluzione", 300)), - ), + "printer_selection": steps["print"].spec.get("printer_selection", (config.get("label_printer", {}) or {}).get("printer", "")), }) fieldnames.update(["stampa_etichetta_abilitata", print_template_field, "printer_selection"]) diff --git a/src/ui/print_step_editor/print_step_editor.py b/src/ui/print_step_editor/print_step_editor.py index c29968c..6aade30 100644 --- a/src/ui/print_step_editor/print_step_editor.py +++ b/src/ui/print_step_editor/print_step_editor.py @@ -36,40 +36,20 @@ class Print_Step_Editor(Editor): self._on_printer_changed(self.printer_selection.currentText()) def render(self, data, field_name=None, row_number=None, crud=None): - # Preserve current template choice from data then adjust list for selected printer/resolution + # Preserve current template choice from data then adjust list for selected printer current_template = data.get("template", None) super().render(data, field_name=field_name, row_number=row_number, crud=crud) - # If stored value is a legacy printer name, convert to its resolution for the combo - try: - stored = str(data.get("printer_selection", "")).strip() - except Exception: - stored = "" - if stored and not stored.isdigit() and stored in self._printers_resolution: - try: - self.printer_selection.setCurrentText(str(int(self._printers_resolution.get(stored, 300)))) - except Exception: - pass - # Re-apply templates list based on current selection and restore previous template if possible + # Re-apply templates list based on printer and restore selection self._on_printer_changed(self.printer_selection.currentText(), initial_template=current_template) - def _on_printer_changed(self, value, initial_template=None): - # Determine resolution from current selection: it can be a resolution string ("203"/"300") or a legacy printer name - if not value: + def _on_printer_changed(self, printer_name, initial_template=None): + # If no mapping for this printer, keep current list (use machine's default) + if not printer_name or printer_name not in self._printers_resolution: return - res = None - v = str(value).strip() - if v.isdigit(): - try: - res = int(v) - except Exception: - res = None - if res is None: - # Try legacy printer name mapping - try: - res = int(self._printers_resolution.get(v, 300)) if v in self._printers_resolution else None - except Exception: - res = None - if res is None: + # Decide resolution from mapping provided by recipe_selection + try: + res = int(self._printers_resolution.get(printer_name, 300)) + except Exception: res = 300 # Build the list accordingly new_items = self._templates_300 if res == 300 else self._templates_203 diff --git a/src/ui/recipe_selection/recipe_selection.py b/src/ui/recipe_selection/recipe_selection.py index b74b423..0498525 100755 --- a/src/ui/recipe_selection/recipe_selection.py +++ b/src/ui/recipe_selection/recipe_selection.py @@ -100,11 +100,17 @@ class Recipe_Selection(Widget): templates_203 = sorted(map(os.path.basename, glob(f"{label_folder_203}*.prn"))) templates_300 = sorted(map(os.path.basename, glob(f"{label_folder_300}*.prn"))) - # Available printers from both sections: build mapping name->resolution and a list of unique resolution strings + # Available printers from both sections (only 'printer' key) and mapping to resolution lp1 = self.config.get("label_printer", {}) or {} lp2 = self.config.get("label_printer_2", {}) or {} lp1_p = lp1.get("printer", "") lp2_p = lp2.get("printer", "") + printers_list = [] + seen = set() + for p in [lp1_p, lp2_p]: + if p and p not in seen: + seen.add(p) + printers_list.append(p) printers_resolution = {} if lp1_p: try: @@ -116,14 +122,6 @@ class Recipe_Selection(Widget): printers_resolution[lp2_p] = int(str(lp2.get("risoluzione", "300")).strip()) except Exception: printers_resolution[lp2_p] = 300 - # Build unique list of resolutions (as strings) to use in editor selector - res_set = [] - for r in [printers_resolution.get(lp1_p), printers_resolution.get(lp2_p)]: - if r is None: - continue - s = str(int(r)) - if s not in res_set: - res_set.append(s) step_defaults.update({ "vision": { @@ -135,7 +133,7 @@ class Recipe_Selection(Widget): "template": sorted(map(os.path.basename, glob(f"{label_folder}*.prn"))), "templates_203": templates_203, "templates_300": templates_300, - "printer_selection": res_set, + "printer_selection": printers_list, "printers_resolution": printers_resolution, }, }), @@ -329,32 +327,6 @@ class Recipe_Selection(Widget): if rcsv == "": rcsv = "999" print_template_field = self.config.get("recipe", {}).get("label_template_field", "modello_etichetta").strip() - # Normalize printer_selection to resolution string ("203"/"300") - lp1 = (self.config.get("label_printer", {}) or {}) - lp2 = (self.config.get("label_printer_2", {}) or {}) - def normalize_printer_sel(val): - try: - s = str(val).strip() - except Exception: - s = "" - if s == "": - try: - return str(int(lp1.get("risoluzione", 300))) - except Exception: - return "300" - if s.isdigit(): - return s - if s == str(lp1.get("printer", "")): - try: - return str(int(lp1.get("risoluzione", 300))) - except Exception: - return "300" - if s == str(lp2.get("printer", "")): - try: - return str(int(lp2.get("risoluzione", 300))) - except Exception: - return "300" - return s return { "count": { "amount": row.get("dimensione_lotto", defaults["dimensione_lotto"]), @@ -438,8 +410,7 @@ class Recipe_Selection(Widget): "labeltxt_4": row.get("testo_etich_4", ""), "labeltxt_5": row.get("barcode_input_finelinea", ""), "extra_label": row.get("etichette_supplementari", ""), - # Store resolution instead of printer name; map legacy names to their resolution - "printer_selection": normalize_printer_sel(row.get("printer_selection", (self.config.get("label_printer", {}) or {}).get("risoluzione", 300))), + "printer_selection": row.get("printer_selection", self.config.get("label_printer", {}).get("printer", "")), }, } diff --git a/src/ui/test/test.py b/src/ui/test/test.py index 540a08e..a83f95c 100755 --- a/src/ui/test/test.py +++ b/src/ui/test/test.py @@ -4,7 +4,7 @@ import os import sys import weakref from datetime import datetime, timedelta -#from distutils.util import change_root +# from distutils.util import change_root from PyQt5.QtCore import QTimer, pyqtSlot, pyqtSignal from PyQt5.QtWidgets import QMessageBox @@ -99,12 +99,10 @@ class Test(Widget): self.rfid.rfid_error_signal.connect(self.handle_rfid_error) if "tecna_t3" in self.components: self.tecna = self.components["tecna_t3"] - #self.tecna.tecna_error_signal.connect(self.handle_modbus_error) + # self.tecna.tecna_error_signal.connect(self.handle_modbus_error) self.error_label.setText("") self.error_label.setStyleSheet("QLabel { color: red; }") - - if self.config["hardware_config"]["barcode_recipe_selection"] == "present": self.recipe_selection_mode = "barcode" else: @@ -113,12 +111,10 @@ class Test(Widget): self.tester_component = None if self.config["hardware_config"]["tecna_t3"] == "present": self.tester_component = "tecna_t3" - #self.components["tecna_t3"].tecna_error_signal.connect(self.handle_modbus_error) + # self.components["tecna_t3"].tecna_error_signal.connect(self.handle_modbus_error) elif self.config["hardware_config"]["furness_controls"] == "present": self.tester_component = "furness_control" - - self.unsupported_steps = set() self.steps_dependencies = { "count": set(), @@ -130,8 +126,9 @@ class Test(Widget): "test_freefall_leak": {self.tester_component, }, "leak_2": {self.tester_component, }, "pipe_cutter": {"pipe_cutter"}, - "vision": {("uvc_camera", "galaxy_camera","hikrobot_sc"), "vision", "vision_saver", }, # "neo_pixels", }, - "print": {"label_printer_2"} if self.config["hardware_config"]["label_printer"] != "present" else {"label_printer"}, + "vision": {("uvc_camera", "galaxy_camera", "hikrobot_sc"), "vision", "vision_saver", }, # "neo_pixels", }, + "print": {"label_printer_2"} if self.config["hardware_config"]["label_printer"] != "present" else { + "label_printer"}, } self.unsupported_steps = set() for step_name, dependencies in self.steps_dependencies.items(): @@ -152,44 +149,93 @@ class Test(Widget): # INIT CYCLE STATES self.cycle_available_steps = { # "assembly_1": Test_Assembly(img_path=self.select_step_img("assembly_1"), text=u"INSERIRE SENSORE", widget=None), - "barcodes": Test_Assembly(img_path=self.select_step_img("scan"), text=u"LEGGERE IL BARCODE DEL PEZZO DA COLLAUDARE", widget=Test_Barcodes()), - "connector": Test_Assembly(img_path=self.select_step_img("scan"), text=u"COLLEGARE IL CONNETTORE INDICATO AL PEZZO E LEGGERE IL SUO BARCODE", widget=Test_Connector(run_once=True)), + "barcodes": Test_Assembly(img_path=self.select_step_img("scan"), + text=u"LEGGERE IL BARCODE DEL PEZZO DA COLLAUDARE", widget=Test_Barcodes()), + "connector": Test_Assembly(img_path=self.select_step_img("scan"), + text=u"COLLEGARE IL CONNETTORE INDICATO AL PEZZO E LEGGERE IL SUO BARCODE", + widget=Test_Connector(run_once=True)), "count": Test_Assembly(img_path=None, text=u"INSERIRE IL NUMERO DI PEZZI ATTESI PER IL LOTTO", - widget=Test_Count(components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces, run_once=True)), - "warning_img": Test_Assembly(img_path=None, text=u"ATTENZIONE - PER QUESTO CODICE ESEGUIRE LE OPERAZIONI INDICATE IN FIGURA", - widget=Test_Warning_Img(components=self.components, recipe=self.recipe,bench_name=self.config["machine"]["image_for_warning"], step=self.step, run_once=True)), - "count_end": Test_Assembly(img_path=None, text=u"LOTTO TERMINATO, PREMERE CONTINUA PERCOMINCIARNE UNO NUOVO", - widget=Test_Count_End(components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces)), + widget=Test_Count(components=self.components, recipe=self.recipe, step=self.step, + pieces=self.pieces, run_once=True)), + "warning_img": Test_Assembly(img_path=None, + text=u"ATTENZIONE - PER QUESTO CODICE ESEGUIRE LE OPERAZIONI INDICATE IN FIGURA", + widget=Test_Warning_Img(components=self.components, recipe=self.recipe, + bench_name=self.config["machine"]["image_for_warning"], + step=self.step, run_once=True)), + "count_end": Test_Assembly(img_path=None, + text=u"LOTTO TERMINATO, PREMERE CONTINUA PERCOMINCIARNE UNO NUOVO", + widget=Test_Count_End(components=self.components, recipe=self.recipe, + step=self.step, pieces=self.pieces)), "done": Test_Assembly(img_path=self.select_step_img("success"), text=u"COLLAUDO COMPLETATO", widget=None), "emergency": Test_Assembly(img_path=self.select_step_img("reset_emergency"), - text=u"EMERGENZA INTERVENUTA - RIPRISTINARE PULSANTE E SELEZIONARE \"RESET EMERGENZA\" DAL MEN\u00d9 \"STRUMENTI\"", widget=None), - "fail": Test_Assembly(img_path=self.select_step_img("fail"), text=u"CICLO INTERROTTO, PREMERE CONTINUA PER COMINCIARE UN NUOVO CICLO", widget=Test_Fail(parent=self)), - "blow": Test_Assembly(img_path=None, text=u"SOFFIAGGIO TUBO IN CORSO - ATTENDERE...", widget=Test_Warning_Img(components=self.components, recipe=self.recipe, step=self.step)), - "test_freefall_leak": Test_Assembly(img_path=None, text=None, widget=Test_Leak(config=self.config,components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces, parent=self)) - if self.config["hardware_config"]["tecna_t3"] != "absent" or self.config["hardware_config"]["furness_controls"] !="absent" else None, - "leak_1": Test_Assembly(img_path=None, text=None, widget=Test_Leak(config=self.config,components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces, parent=self)) - if self.config["hardware_config"]["tecna_t3"] != "absent" or self.config["hardware_config"]["furness_controls"] !="absent" else None, - "leak_2": Test_Assembly(img_path=None, text=None, widget=Test_Leak(config=self.config,components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces, parent=self)) - if ((self.config["hardware_config"]["tecna_t3"] != "absent" or self.config["hardware_config"]["furness_controls"] != "absent") + text=u"EMERGENZA INTERVENUTA - RIPRISTINARE PULSANTE E SELEZIONARE \"RESET EMERGENZA\" DAL MEN\u00d9 \"STRUMENTI\"", + widget=None), + "fail": Test_Assembly(img_path=self.select_step_img("fail"), + text=u"CICLO INTERROTTO, PREMERE CONTINUA PER COMINCIARE UN NUOVO CICLO", + widget=Test_Fail(parent=self)), + "blow": Test_Assembly(img_path=None, text=u"SOFFIAGGIO TUBO IN CORSO - ATTENDERE...", + widget=Test_Warning_Img(components=self.components, recipe=self.recipe, + step=self.step)), + "test_freefall_leak": Test_Assembly(img_path=None, text=None, + widget=Test_Leak(config=self.config, components=self.components, + recipe=self.recipe, step=self.step, pieces=self.pieces, + parent=self)) + if self.config["hardware_config"]["tecna_t3"] != "absent" or self.config["hardware_config"][ + "furness_controls"] != "absent" else None, + "leak_1": Test_Assembly(img_path=None, text=None, + widget=Test_Leak(config=self.config, components=self.components, recipe=self.recipe, + step=self.step, pieces=self.pieces, parent=self)) + if self.config["hardware_config"]["tecna_t3"] != "absent" or self.config["hardware_config"][ + "furness_controls"] != "absent" else None, + "leak_2": Test_Assembly(img_path=None, text=None, + widget=Test_Leak(config=self.config, components=self.components, recipe=self.recipe, + step=self.step, pieces=self.pieces, parent=self)) + if ((self.config["hardware_config"]["tecna_t3"] != "absent" or self.config["hardware_config"][ + "furness_controls"] != "absent") and self.config["hardware_config"].get("second_leak_test", "absent") == "present") else None, - "flush": Test_Assembly(img_path=None, text=u"SCARICO ARIA IN CORSO - ATTENDERE...", widget=Test_Warning_Img(components=self.components, recipe=self.recipe, step=self.step)), + "flush": Test_Assembly(img_path=None, text=u"SCARICO ARIA IN CORSO - ATTENDERE...", + widget=Test_Warning_Img(components=self.components, recipe=self.recipe, + step=self.step)), "instruction": Test_Assembly(img_path=None, text=u"ESEGUIRE LE OPERAZIONI DI MONTAGGIO INDICATE IN FIGURA", - widget=Test_Instructions(config=self.config,components=self.components, recipe=self.recipe, bench_name=self.config.machine_id, step=self.step)), - "pipe_cutter": Test_Assembly(img_path=None, text=u"ATTENZIONE TAGLIO CORRUGATO IN CORSO",widget=Test_Pipe_Cutter(config=self.config, components=self.components,recipe=self.recipe, bench_name=self.config.machine_id,step=self.step)), - "instruction_extra": Test_Assembly(img_path=None, text=u"ESEGUIRE LE OPERAZIONI DI MONTAGGIO EXTRA INDICATE IN FIGURA", - widget=Test_Instructions(config=self.config, components=self.components,recipe=self.recipe, bench_name=self.config.machine_id,step=self.step)), + widget=Test_Instructions(config=self.config, components=self.components, + recipe=self.recipe, bench_name=self.config.machine_id, + step=self.step)), + "pipe_cutter": Test_Assembly(img_path=None, text=u"ATTENZIONE TAGLIO CORRUGATO IN CORSO", + widget=Test_Pipe_Cutter(config=self.config, components=self.components, + recipe=self.recipe, bench_name=self.config.machine_id, + step=self.step)), + "instruction_extra": Test_Assembly(img_path=None, + text=u"ESEGUIRE LE OPERAZIONI DI MONTAGGIO EXTRA INDICATE IN FIGURA", + widget=Test_Instructions(config=self.config, components=self.components, + recipe=self.recipe, + bench_name=self.config.machine_id, + step=self.step)), "piece_removal": Test_Assembly(img_path=None, text=u"RIMUOVERE IL PEZZO APRENDO TUTTE LE CHIUSURE", - widget=Test_Instructions(config=self.config,components=self.components, recipe=self.recipe, bench_name=self.config.machine_id, step=self.step)), - "print": Test_Assembly(img_path=self.select_step_img("print"), text=u"STAMPA ETICHETTA IN CORSO", widget=None), - "resistance": Test_Assembly(img_path=None, text=u"COLLEGARE CONNETTORE ELETTRICO PER EFFETTUARE PROVA RESISTENZA", - widget=Test_Resistance(components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces)), - "screws": Test_Assembly(img_path=None, text=u"AVVITARE TUTE LE VITI COME INDICATO", widget=Test_Screws(components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces)), - "select_recipe": Test_Assembly(img_path=None, text=u"SELEZIONARE IL CODICE DA COLLAUDARE", widget=Recipe_Selection(config=self.config, unsupported_steps=self.unsupported_steps)), - "barcode_recipe_selection": Test_Assembly(img_path=self.select_step_img("scan"), text=u"LEGGERE IL BARCODE SULLA DIMA DEL COMPONENTE DA COLLAUDARE", + widget=Test_Instructions(config=self.config, components=self.components, + recipe=self.recipe, + bench_name=self.config.machine_id, step=self.step)), + "print": Test_Assembly(img_path=self.select_step_img("print"), text=u"STAMPA ETICHETTA IN CORSO", + widget=None), + "resistance": Test_Assembly(img_path=None, + text=u"COLLEGARE CONNETTORE ELETTRICO PER EFFETTUARE PROVA RESISTENZA", + widget=Test_Resistance(components=self.components, recipe=self.recipe, + step=self.step, pieces=self.pieces)), + "screws": Test_Assembly(img_path=None, text=u"AVVITARE TUTE LE VITI COME INDICATO", + widget=Test_Screws(components=self.components, recipe=self.recipe, step=self.step, + pieces=self.pieces)), + "select_recipe": Test_Assembly(img_path=None, text=u"SELEZIONARE IL CODICE DA COLLAUDARE", + widget=Recipe_Selection(config=self.config, + unsupported_steps=self.unsupported_steps)), + "barcode_recipe_selection": Test_Assembly(img_path=self.select_step_img("scan"), + text=u"LEGGERE IL BARCODE SULLA DIMA DEL COMPONENTE DA COLLAUDARE", widget=Barcode_Recipe_Selection(parent=self)), - "vision": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO CON TELECAMERA", widget=Test_Vision(components=self.components, recipe=self.recipe, step=self.step, pieces=self.pieces)), - "wait": Test_Assembly(img_path=self.select_step_img("wait"), text=u"ATTENDERE - PAUSA INTER CICLO", widget=None), - None: Test_Assembly(img_path=self.select_step_img("warning"), text=u"ATTENZIONE - LA RICETTA SELEZIONATA NON CONTIENE FASI DI TEST", widget=None), + "vision": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO CON TELECAMERA", + widget=Test_Vision(components=self.components, recipe=self.recipe, step=self.step, + pieces=self.pieces)), + "wait": Test_Assembly(img_path=self.select_step_img("wait"), text=u"ATTENDERE - PAUSA INTER CICLO", + widget=None), + None: Test_Assembly(img_path=self.select_step_img("warning"), + text=u"ATTENZIONE - LA RICETTA SELEZIONATA NON CONTIENE FASI DI TEST", widget=None), } self.cycle_steps = None self.cycle_index = -1 @@ -209,8 +255,8 @@ class Test(Widget): if "--test-autotest" in sys.argv: self.autotest_period = int(60 * 1000) # 1 min else: - #self.autotest_period = int(8.5 * 60 * 60 * 1000)# 8.5 HOURS - self.autotest_period = int(4 * 60 * 60 * 1000)# 4 HOURS + # self.autotest_period = int(8.5 * 60 * 60 * 1000)# 8.5 HOURS + self.autotest_period = int(4 * 60 * 60 * 1000) # 4 HOURS # self.autotest_period = 12 * 60 * 60 * 1000 # 12 HOURS # if not self.config["autotest_done"]: # self.request_autotest("init") @@ -229,7 +275,9 @@ class Test(Widget): if isinstance(w.widget, Recipe_Selection): w.ok.connect(self.set_recipe) else: - w.ok.connect(lambda data=None, step_namel=step_name, selfie=weakref.ref(self): selfie().set_step(step_namel, data)) + w.ok.connect( + lambda data=None, step_namel=step_name, selfie=weakref.ref(self): selfie().set_step(step_namel, + data)) if hasattr(w, "ko"): w.ko.connect(self.fail_cycle) # CUSTOM STEP CONNECTIONS @@ -324,7 +372,7 @@ class Test(Widget): self.user_l.setText("ADMIN") self.user_l.setStyleSheet("QLabel { color: red; }") - #Refresh Recipe_Selection UI to show admin buttons + # Refresh Recipe_Selection UI to show admin buttons if "select_recipe" in self.cycle_available_steps and self.cycle_available_steps["select_recipe"].widget: recipe_selection = self.cycle_available_steps["select_recipe"].widget if hasattr(recipe_selection, "refresh"): @@ -529,11 +577,11 @@ class Test(Widget): # If transitioning from Free Fall to Leak 1, preload Leak 1 parameters onto the tester try: if ( - prev_step_type == "test_freefall_leak" - and self.step is not None - and self.step.step_type == "leak_1" - and hasattr(self, "tester_component") - and self.tester_component in (self.components or {}) + prev_step_type == "test_freefall_leak" + and self.step is not None + and self.step.step_type == "leak_1" + and hasattr(self, "tester_component") + and self.tester_component in (self.components or {}) ): self.log.info("Transition detected: Free Fall -> Leak_1. Pre-writing Leak_1 recipe to tester.") self.components[self.tester_component].write_recipe(self.recipe, self.step) @@ -585,7 +633,8 @@ class Test(Widget): self.update_count_display() def update_count_display(self): - self.pieces_count_l.setText(f"{self.pieces['ok']} OK / {self.pieces['ko']} NOK / {sum(self.pieces.values())} TOT") + self.pieces_count_l.setText( + f"{self.pieces['ok']} OK / {self.pieces['ko']} NOK / {sum(self.pieces.values())} TOT") def set_recipe(self, recipe=None): self.recipe = recipe @@ -629,7 +678,8 @@ class Test(Widget): count_found = True if "warning_img" in step.spec: if step.spec["warning_img"]: - steps.insert(i, Step(step_type="warning_img", spec={"warning_img": step.spec["warning_img"]})) + steps.insert(i, + Step(step_type="warning_img", spec={"warning_img": step.spec["warning_img"]})) skip.add(i + 1) if "assembly" in step.spec: if step.spec["assembly"]: @@ -654,7 +704,7 @@ class Test(Widget): print_found = True self.print_step = step if self.config["hardware_config"].get("enforce_piece_removal", "no") == "yes": - if recipe.spec.get("instruction",False) is not False: + if recipe.spec.get("instruction", False) is not False: steps.append(Step(step_type="piece_removal", spec={})) skip.add(i + 1) if count_found: @@ -678,12 +728,14 @@ class Test(Widget): leak1_index = step_types.index("leak_1") leak2_index = step_types.index("leak_2") if leak1_index + 1 == leak2_index: # Ensure 'leak_1' is immediately followed by 'leak_2' - if recipe and getattr(recipe, 'spec', None) and recipe.spec.get("instruction_extra") and "instruction_extra" not in self.unsupported_steps: + if recipe and getattr(recipe, 'spec', None) and recipe.spec.get( + "instruction_extra") and "instruction_extra" not in self.unsupported_steps: steps.insert(leak2_index, Step(step_type="instruction_extra", spec={})) inserted_instruction = True # Insert 'instruction_extra' after the first 'instructions' if not inserted between leaks - if not inserted_instruction and recipe and getattr(recipe, 'spec', None) and recipe.spec.get("instruction_extra") and "instruction_extra" not in self.unsupported_steps: + if not inserted_instruction and recipe and getattr(recipe, 'spec', None) and recipe.spec.get( + "instruction_extra") and "instruction_extra" not in self.unsupported_steps: for i, step in enumerate(steps): if step.step_type == "instructions": steps.insert(i + 1, Step(step_type="instruction_extra", spec={})) @@ -752,7 +804,8 @@ class Test(Widget): w.reset() # UPDATE RECIPE DISPLAY if self.recipe is not None: - self.log.info(f"set recipe: {model_to_dict(self.recipe)!r} cycle steps: {[s.step_type for s in self.cycle_steps]}") + self.log.info( + f"set recipe: {model_to_dict(self.recipe)!r} cycle steps: {[s.step_type for s in self.cycle_steps]}") self.recipe_l.setText(self.recipe.name) self.recipe_l.setStyleSheet("") self.cycle_index = -1 @@ -956,19 +1009,23 @@ class Test(Widget): leak_test_2_step_spec = leak_test_2_step.get("spec", {}) leak_test_2_results = leak_test_2.get("results", {}) - psetminp_a = leak_test_1_step_spec.get("test_pressure", 0) * (100 + leak_test_1_step_spec.get("test_pressure_qneg", 0) / 100) - psetmaxp_a = leak_test_1_step_spec.get("settling_pressure_max_percent", 0) * (100 + leak_test_1_step_spec.get("test_pressure_qpos", 0) / 100) - psetminp2_a = leak_test_2_step_spec.get("settling_pressure_min_percent", 0) * (100 + leak_test_2_step_spec.get("test_pressure_qneg", 0) / 100) - psetmaxp2_a = leak_test_2_step_spec.get("settling_pressure_max_percent", 0) * (100 + leak_test_2_step_spec.get("test_pressure_qpos", 0) / 100) + psetminp_a = leak_test_1_step_spec.get("test_pressure", 0) * ( + 100 + leak_test_1_step_spec.get("test_pressure_qneg", 0) / 100) + psetmaxp_a = leak_test_1_step_spec.get("settling_pressure_max_percent", 0) * ( + 100 + leak_test_1_step_spec.get("test_pressure_qpos", 0) / 100) + psetminp2_a = leak_test_2_step_spec.get("settling_pressure_min_percent", 0) * ( + 100 + leak_test_2_step_spec.get("test_pressure_qneg", 0) / 100) + psetmaxp2_a = leak_test_2_step_spec.get("settling_pressure_max_percent", 0) * ( + 100 + leak_test_2_step_spec.get("test_pressure_qpos", 0) / 100) if self.tester_component is not None: if self.recipe.spec["leak_1"]: leak_test_1_results["Running test: pressure at the end of measure"] = ( - leak_test_1_results["Running test: pressure at the end of settling"] - + leak_test_1_results["Running test: measured leak"]) + leak_test_1_results["Running test: pressure at the end of settling"] + + leak_test_1_results["Running test: measured leak"]) if self.recipe.spec["leak_2"]: leak_test_2_results["Running test: pressure at the end of measure"] = ( - leak_test_2_results["Running test: pressure at the end of settling"] - + leak_test_2_results["Running test: measured leak"]) + leak_test_2_results["Running test: pressure at the end of settling"] + + leak_test_2_results["Running test: measured leak"]) printer_fields = self.print_step.spec context = { @@ -1040,15 +1097,18 @@ class Test(Widget): "OPERATOR": str(archived.user.username), "BADGE_NUM": str(archived.user.badge_number), # BARCODE - "BCODE": str(self.step.spec.get("barcode","")), + "BCODE": str(self.step.spec.get("barcode", "")), # RESULT - "RESULT": str("CONFORME" if leak_test_1.get("ok", False) else "SCARTO") + str(" FORZATO" if self.data.get("overridden", False) else ""), + "RESULT": str("CONFORME" if leak_test_1.get("ok", False) else "SCARTO") + str( + " FORZATO" if self.data.get("overridden", False) else ""), "RESULT_L1": "ESITO" + str(" FORZATO" if self.data.get("overridden", False) else ""), "RESULT_L2": str("CONFORME" if leak_test_1.get("ok", False) else "SCARTO"), } - #TESTING BROTHER - label_brother = context.get("RECIPE_TO_PRINT", "-") + context.get("DD","-") + context.get("MO","-") + context.get("YY","-") + context.get("SN5","-") + # TESTING BROTHER + label_brother = context.get("RECIPE_TO_PRINT", "-") + context.get("DD", "-") + context.get("MO", + "-") + context.get( + "YY", "-") + context.get("SN5", "-") barcode = str(label_brother) # Ensure any labeltxt_N fields from the recipe are available in context (both lower and upper case) @@ -1056,9 +1116,9 @@ class Test(Widget): field = f"labeltxt_{n + 1}" if field in printer_fields.keys() and printer_fields[field] != "": value = printer_fields[field] - context[field] = value # e.g., 'labeltxt_1' + context[field] = value # e.g., 'labeltxt_1' context[field.upper()] = value # e.g., 'LABELTXT_1' - + # Process any {M43:X:Y} patterns in the barcode format processed_barcode_format = self.process_m43_patterns(self.barcode_format, context) formatted_barcode = processed_barcode_format.format(**context) @@ -1068,61 +1128,25 @@ class Test(Widget): self.archived.barcode = self.printed_barcode # PRINT MAIN PRODUCT LABEL - # Determine which label printer component to use based on per-recipe selection. - # The recipe now stores the printer by resolution string ("203"/"300"). - sel_val = str(printer_fields.get("printer_selection", "")).strip() - lp1_cfg = self.config.get("label_printer", {}) or {} - lp2_cfg = self.config.get("label_printer_2", {}) or {} - # Parse selected resolution; also support legacy OS printer names for backward compatibility - def parse_resolution(val: str): - if not val: - return None - if val.isdigit(): - try: - return int(val) - except Exception: - return None - # Legacy: match configured printer names - if val == str(lp1_cfg.get("printer", "")): - try: - return int(lp1_cfg.get("risoluzione", 300)) - except Exception: - return 300 - if val == str(lp2_cfg.get("printer", "")): - try: - return int(lp2_cfg.get("risoluzione", 300)) - except Exception: - return 300 - return None - sel_res = parse_resolution(sel_val) - # Read configured resolutions - try: - lp1_res = int(str(lp1_cfg.get("risoluzione", 300)).strip()) - except Exception: - lp1_res = 300 - try: - lp2_res = int(str(lp2_cfg.get("risoluzione", 0)).strip()) if lp2_cfg else 0 - except Exception: - lp2_res = 0 - # Choose component by resolution match; default to primary - use_comp_name = "label_printer" - if sel_res is not None: - if lp2_cfg and lp2_res and sel_res == lp2_res: - use_comp_name = "label_printer_2" - elif sel_res == lp1_res: - use_comp_name = "label_printer" - comp = self.components.get(use_comp_name) or self.components.get("label_printer") or self.components.get("label_printer_2") + # Determine which OS label printer to use based on per-recipe selection + selected_printer = printer_fields.get("printer_selection", "") + lp2_cfg = self.config.get("label_printer_2", {}) + lp2_printer = lp2_cfg.get("printer", "") + use_comp_name = "label_printer_2" if selected_printer and lp2_printer and selected_printer == lp2_printer else "label_printer" + comp = self.components.get(use_comp_name) or self.components.get("label_printer") or self.components.get( + "label_printer_2") if comp is None: # No printer component available; log and skip printing safely self.log.warning("No label printer component available; skipping label print.") return context - # Set the target device name to the configured OS printer for the chosen component - try: - comp.printer = (lp2_cfg.get("printer") if use_comp_name == "label_printer_2" else lp1_cfg.get("printer")) or comp.printer - except Exception: - pass + # Set the target device name to selected printer if provided + if selected_printer: + try: + comp.printer = selected_printer + except Exception: + pass compiled_label = comp.print_label(label, context=context) - self.log.info(f"Main label printed via {use_comp_name}: {context!r}") + self.log.info(f"Main label printed: {context!r}") # return fields used to print label for saving into test archive return context @@ -1137,7 +1161,7 @@ class Test(Widget): @pyqtSlot(str) def load_recipe_from_rfid(self, data): - if data not in(None,''): + if data not in (None, ''): self.tag_loaded_recipe = data if self.step.step_type == "barcode_recipe_selection": if data is not None: @@ -1229,7 +1253,7 @@ class Test(Widget): has_error (bool): True if there is an error, False otherwise. error_message (str): The error message to add. """ - #print(f"DEBUG: Modbus error handler called - has_error={has_error}, error_message={error_message}") # Debugging + # print(f"DEBUG: Modbus error handler called - has_error={has_error}, error_message={error_message}") # Debugging if has_error: self.add_error(f"Errore Tecna", True) # Add the Modbus error else: @@ -1304,7 +1328,7 @@ class Test(Widget): # Extract X and Y values x = int(match.group(1)) y = int(match.group(2)) - self.log.info(f"Processing M43 pattern {i+1}: X={x}, Y={y}") + self.log.info(f"Processing M43 pattern {i + 1}: X={x}, Y={y}") # Create a placeholder for this check digit placeholder = f"{{m43_check_{i}}}" @@ -1329,7 +1353,7 @@ class Test(Widget): # Extract the substring for checksum calculation if x < len(base_string) and x + y <= len(base_string): - substring = base_string[x:x+y] + substring = base_string[x:x + y] # Log the substring and its length for debugging self.log.info(f"M43 substring for checksum calculation: '{substring}', length: {len(substring)}") @@ -1340,11 +1364,12 @@ class Test(Widget): if invalid_chars: original_substring = substring substring = ''.join(c for c in substring if c in self.MODULO43_ASSIGNMENT_TABLE) - self.log.info(f"Removed invalid characters {invalid_chars} from substring: '{original_substring}' -> '{substring}'") + self.log.info( + f"Removed invalid characters {invalid_chars} from substring: '{original_substring}' -> '{substring}'") # Check if the substring is empty or contains only whitespace if not substring or substring.isspace(): - self.log.warning(f"Empty or whitespace-only substring for M43 pattern {i+1}") + self.log.warning(f"Empty or whitespace-only substring for M43 pattern {i + 1}") context[f"m43_check_{i}"] = "?" continue @@ -1361,13 +1386,14 @@ class Test(Widget): context[f"m43_check_{i}"] = "?" else: # Handle out-of-range indices - self.log.warning(f"M43 pattern with X={x}, Y={y} is out of range for string of length {len(base_string)}") + self.log.warning( + f"M43 pattern with X={x}, Y={y} is out of range for string of length {len(base_string)}") context[f"m43_check_{i}"] = "?" self.log.info(f"Processed barcode format: '{processed_format}'") return processed_format - def calculate_modulo43_checksum(self,data_sequence: str) -> str: + def calculate_modulo43_checksum(self, data_sequence: str) -> str: """ Calculates the Modulo 43 checksum for a given data sequence. From a82174ef8dfc6ba18b8de38ed20d510cf3a9f0fb Mon Sep 17 00:00:00 2001 From: ST-TEN-11 Date: Wed, 4 Mar 2026 16:32:48 +0100 Subject: [PATCH 2/2] dev --- config/machine_settings/st-ten-11.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/machine_settings/st-ten-11.ini b/config/machine_settings/st-ten-11.ini index 50efb51..58b2434 100644 --- a/config/machine_settings/st-ten-11.ini +++ b/config/machine_settings/st-ten-11.ini @@ -46,7 +46,7 @@ risoluzione:300 [digital_io] # OUTPUT MAP FOR FIXTURE CONNECTOR -id: USB-5860,BID#0 +id: USB-5862,BID#0 first_output: 0