Merge branch 'refs/heads/free_fall'
This commit is contained in:
commit
b766e2d5f0
198
config/csv_import/backup_csv/ST-TEN-11_AUTOMATICO.csv
Normal file
198
config/csv_import/backup_csv/ST-TEN-11_AUTOMATICO.csv
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
prova_pervieta_abilitata,pressione_pre_riempimento_2,stampa_etichetta_abilitata,pressione_max_free_fall,pressione_pre_riempimento,prova_tenuta_abilitata_2,codice_ricetta,verifica_codice_a_barre_abilitata,tempo_di_test,part_number,cliente,pressione_di_test,pressione_min_free_fall,pid_pressure_correction,pressione_riempimento_free_fall,tempo_pre_riempimento,tempo_riempimento_free_fall,tempo_pre_riempimento_2,tempo_di_test_2,riempimento_continuo_free_fall,codice_a_barre,pressione_di_test_2,prova_tenuta_abilitata,modello_etichetta
|
||||
,1000,x,,0,x,PY83-6B747-BA,x,30,PY83-6B747-BA,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,PY83-6B748-BA,x,30,PY83-6B748-BA,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FC246CP REV1,x,20,16FC246CP REV1,MCLAREN,1000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,MY83-6L694-AB,x,30,MY83-6L694-AB,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FC250CP REV02,x,20,16FC250CP REV02,MCLAREN,200,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970064 REV2,x,20,5801970064 REV2,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970067 REV1,x,20,5801970067 REV1,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384839 REV1,x,20,5801384839 REV1,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384838 REV1,x,20,5801384838 REV1,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384842 REV01,x,20,5801384842 REV01,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970063 REV2,x,20,5801970063 REV2,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16L0059CP REV03,x,30,16L0059CP REV03,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA259CP REV03,x,30,16LA259CP REV03,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA336CP REV02,x,30,16LA336CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA490CP REV02,x,30,16LA490CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA579CP REV01,x,30,16LA579CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA615CP REV01,x,30,16LA615CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA642CP REV01,x,20,16LA642CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA643CP REV01,x,30,16LA643CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970066 REV01,x,20,5801970066 REV01,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970021 REV01,x,20,5801970021 REV01,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970065 REV01,x,20,5801970065 REV01,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,MY83-6B748-BA,x,30,MY83-6B748-BA,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA459CP REV02,x,30,16LA459CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,MY83-6B747-BA,x,30,MY83-6B747-BA,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA459CP REV1,x,30,16LA459CP REV1,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA735CP REV01,x,20,16LA735CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5802915822,x,10,5802915822,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5802889710 REV3,x,20,5802889710 REV3,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384838,x,20,5801384838,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803103147 REV0,x,20,5803103147 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803103150 REV0,x,20,5803103150 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970063 REV0,x,30,5801970063 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384842 REV0,x,20,5801384842 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970066 REV0,x,20,5801970066 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970064 REV0,x,30,5801970064 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,60192056 REV1,x,20,60192056 REV1,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801970065 REV0,x,30,5801970065 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384839 REV0,x,20,5801384839 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803018239,x,10,5803018239,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803018238,x,10,5803018238,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803018244,x,10,5803018244,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803018243,x,10,5803018243,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,NESSUN NOME,x,1,NESSUN NOME,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5802991065,x,10,5802991065,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,TENUTA 20 bar,x,10,TENUTA 20 bar,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA353CP REV02,x,10,16LA353CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,504321531,x,30,504321531,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16L0046CP REV03,x,20,16L0046CP REV03,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA397CP REV02,x,30,16LA397CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA573CP REV01,x,30,16LA573CP REV01,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,5801616061,x,30,5801616061,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA449CP REV02,x,30,16LA449CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA773CP REV01,x,30,16LA773CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA461CP REV02,x,20,16LA461CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,200116-09-1320,x,10,200116-09-1320,MULTIMATIC,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,0,x,5803112815,x,10,5803112815,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803112815 REV01,x,10,5803112815 REV01,IVECO,5000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803112816,x,10,5803112816,IVECO,5000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803112816 REV01,x,10,5803112816 REV01,IVECO,5000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA584CP REV01,x,30,16LA584CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0058CP REV02,x,30,16L0058CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA027SP REV02,x,30,16LA027SP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0043CP REV02,x,30,16L0043CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,5802729983 REV0,x,10,5802729983 REV0,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5802980014 REV0,x,25,5802980014 REV0,IVECO,7000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA586CP REV01,x,20,16LA586CP REV01,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA695CP REV02,x,30,16LA695CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA765CP REV01,x,20,16LA765CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0045CP REV02,x,30,16L0045CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,5801862227 REV0,x,20,5801862227 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801862227 REV00,x,20,5801862227 REV00,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FA026SP REV1,x,20,16FA026SP REV1,MCLAREN,200,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FA026SP,x,30,16FA026SP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384841 REV0,x,20,5801384841 REV0,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5801384841 REV01,x,20,5801384841 REV01,IVECO,8000,,100,,0,,0,10,,,15000,x,ETA30x16.prn
|
||||
,1000,x,,0,x,5801384840 REV01,x,20,5801384840 REV01,IVECO,8000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,12970-13-2388,x,20,12970-13-2388,specificare cliente,7000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,12970-13-2386,x,20,12970-13-2386,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,12970-13-2384,x,20,12970-13-2384,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,12970-13-2382,x,20,12970-13-2382,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,1000,x,112247,x,10,112247,specificare cliente,7000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,1000,x,055045415,x,30,055045415,Ferrari,2100,,100,,0,,0,10,,,15000,x,ferrari_flag_qr_only.prn
|
||||
,1000,x,,0,x,98FB342CP,x,20,98FB342CP,MCLAREN,200,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA680CP REV01,x,30,16LA680CP REV01,MCLAREN,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,1000,x,000991211,x,30,000991211,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,5802170779 REV0,x,20,5802170779 REV0,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,MY83-6L701-AB,x,30,MY83-6L701-AB,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,1000,x,000990701,x,30,000990701,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,055019161,x,20,055019161,FERRARI F250,1500,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,16FA026SP REV01,x,20,16FA026SP REV01,MCLAREN,200,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FC056CX REV01,x,20,16FC056CX REV01,MCLAREN,1000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FC201CX REV01,x,20,16FC201CX REV01,MCLAREN,300,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16FC446CP REV01,x,20,16FC446CP REV01,MCLAREN ,200,,100,,0,,0,10,,,1000,x,Mclaren_barcode.prn
|
||||
,1000,x,,0,x,16FC541CT REV01,x,20,16FC541CT REV01,MCLAREN,200,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16L0145CP REV03,x,30,16L0145CP REV03,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0154CP REV03,x,30,16L0154CP REV03,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0161CP REV04,x,30,16L0161CP REV04,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0164CP REV02,x,30,16L0164CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0167CP REV02,x,30,16L0167CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0170CP REV03,x,30,16L0170CP REV03,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0174CP REV02,x,30,16L0174CP REV02,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16L0177CP REV03,x,30,16L0177CP REV03,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0180CP REV04,x,30,16L0180CP REV04,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA372CP REV01,x,30,16LA372CP REV01,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA452CP REV01,x,30,16LA452CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA515CP REV01,x,30,16LA515CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,3500,x,98FA644CP,x,20,98FA644CP,RICARDO,2000,,100,,5,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,000990708,x,30,000990708,FERRARI,5000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,5802889709 REV3,x,20,5802889709 REV3,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16LA648CP REV01,x,30,16LA648CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,TEST FUGA 7 BAR,x,5,TEST FUGA 7 BAR,specificare cliente,7000,,100,,0,,0,10,,,15000,x,ETA30x16.prn
|
||||
,1000,x,,1000,x,dev test,x,10,dev test,specificare cliente,7000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16FB157CP REV03,x,20,16FB157CP REV03,MCLAREN,1000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16FB394CP REV04,x,20,16FB394CP REV04,RICARDO,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16FC069CP REV01,x,20,16FC069CP REV01,RICARDO,1000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16FC084CP REV02,x,20,16FC084CP REV02,RICARDO,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0002CP REV03,x,30,16L0002CP REV03,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,16L0007CP REV03,x,30,16L0007CP REV03,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA661CP REV01,x,20,16LA661CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16FA849CP REV05,x,20,16FA849CP REV05,MCLAREN,1000,,100,,0,,0,10,,,15000,x,Mclaren_barcode.prn
|
||||
,1000,x,,0,x,5802953113 REV.,x,20,5802953113 REV.,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5802980014 REV.,x,20,5802980014 REV.,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5802981174 REV.,x,60,5802981174 REV.,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803112815 R.1,x,10,5803112815 R.1,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,5803112816 R.1,x,10,5803112816 R.1,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,1000,x,590.2.418.1A,x,5,590.2.418.1A,DUCATI,1000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,0,x,16FC469CP REV01,x,20,16FC469CP REV01,MCLAREN,200,,100,,0,,0,10,,,15000,x,Mclaren_barcode.prn
|
||||
,1000,x,,1000,x,98FA186CP,x,20,98FA186CP,RICARDO,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,5802170804 REV0,x,20,5802170804 REV0,IVECO,8000,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,98FB080CP,x,20,98FB080CP,MCLAREN,200,,100,,0,,0,10,,98FB080CP-20B{N11},15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,98FB080CP-20B,x,10,98FB080CP-20B,MCLAREN,3000,,100,,0,,0,10,,,15000,x,label_interoperazione.prn
|
||||
,1000,x,,0,x,98FB081CP,x,20,98FB081CP,MCLAREN,200,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,500,x,16JA605CP,x,10,16JA605CP,MCLAREN,0,,100,,10,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,0,x,16FC256CP REV01,x,20,16FC256CP REV01,MCLAREN,1000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,055055934,x,20,055055934,FERRARI,6800,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,055038417,x,20,055038417,FERRARI,2000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,055038405,x,20,055038405,FERRARI,2000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,0,x,16LA668CP REV01,x,30,16LA668CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA617CP REV01,x,30,16LA617CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16L0075CP REV03,x,30,16L0075CP REV03,MCLAREN,3500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,60175799 REV0,x,20,60175799 REV0,specificare cliente,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,000746453,x,30,000746453,MCLAREN,0,,100,,0,,0,10,,,15000,x,ERRECINQUE_flag_qr_only.prn
|
||||
,1000,x,,1000,x,000904357,x,20,000904357,FERRARI,4100,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,000952005,x,20,000952005,FERRARI F250,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000952022,x,20,000952022,FERRARI F250,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,000960275,x,30,000960275,Ferrari,2500,,100,,0,,0,10,,,15000,x,ERRECINQUE_flag_qr_only.prn
|
||||
,1000,x,,0,x,000960281,x,30,000960281,Ferrari,2500,,100,,0,,0,10,,,15000,x,ERRECINQUE_flag_qr_only.prn
|
||||
,1000,x,,0,x,000960322,x,30,000960322,Ferrari,2500,,100,,0,,0,10,,,15000,x,ERRECINQUE_flag_qr_only.prn
|
||||
,1000,x,,0,x,000987571,x,0,000987571,ferrari,0,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,000987572,x,0,000987572,ferrari,0,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,0,x,,0,x,000987923,x,10,000987923,FERRARI,2100,,100,,0,,0,10,,,0,x,ferrari_30x16_203.prn
|
||||
,0,x,,0,x,000987924,x,10,000987924,FERRARI,2100,,100,,0,,0,10,,,0,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990679,x,30,000990679,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990680,x,30,000990680,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990681,x,30,000990681,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990684,x,30,000990684,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990685,x,30,000990685,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990686,x,30,000990686,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990687,x,30,000990687,FERRARI,5000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990688,x,30,000990688,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990690,x,30,000990690,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990691,x,30,000990691,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990692,x,30,000990692,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990696,x,30,000990696,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,000990700,x,30,000990700,FERRARI,2000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,18FA535CP,x,20,18FA535CP,MCLAREN,500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,SY9Y-2976-AB,x,10,SY9Y-2976-AB,ASTON MARTIN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,SY9Y-2976-AC,x,30,SY9Y-2976-AC,ASTON MARTIN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,SY9Y-2976-BB,x,30,SY9Y-2976-BB,ASTON MARTIN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,SY9Y-2976-BC,x,30,SY9Y-2976-BC,ASTON MARTIN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,SY9Y-9S331-AB,x,30,SY9Y-9S331-AB,ASTON MARTIN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,SY9Y-9S331-BB,x,30,SY9Y-9S331-BB,ASTON MARTIN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA518CP REV02,x,20,16LA518CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA718CP REV02,x,30,16LA718CP REV02,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,18JB918CP,x,30,18JB918CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,18JB923CP,x,30,18JB923CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,18JB921CP,x,30,18JB921CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,18JB916CP,x,30,18JB916CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,18JB927CP,x,30,18JB927CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,16L0151CP REV03,x,30,16L0151CP REV03,MCLAREN,3000,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,0,x,16LA451CP REV01,x,30,16LA451CP REV01,MCLAREN,3500,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,1000,x,18JB951CP,x,30,18JB951CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,1000,x,18JB925CP,x,30,18JB925CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,0,x,18FA126CP,x,20,18FA126CP,MCLAREN,500,,100,,0,,0,10,,,15000,x,MCLAREN_353.prn
|
||||
,1000,x,,1000,x,18JB926CP,x,30,18JB926CP,MCLAREN,3000,,100,,0,,0,10,,,15000,x,ferrari_30x16_203.prn
|
||||
,1000,x,,3000,x,000960324,x,30,000960324,Ferrari,2500,,100,,10,,0,10,,,15000,x,ERRECINQUE_flag_qr_only.prn
|
||||
,1000,x,,0,x,5803217628 REV.,x,20,5803217628 REV.,IVECO,0,,100,,0,,0,10,,,15000,x,EtichettaR5_Montaggio_1prova.prn
|
||||
,1000,x,,0,x,07N131597A,x,30,07N131597A,LAMBORGHINI,1000,,100,,0,,0,10,,,15000,x,Lamborghini_30x16.prn
|
||||
,1000,x,,0,x,07N131628A,x,10,07N131628A,LAMBORGHINI,200,,100,,0,,0,10,,,15000,x,Lamborghini_30x16.prn
|
||||
,1000,x,35,1000,x,18JA708CP,x,30,18JA708CP,AVL,3000,5,100,1000,0,10,0,10,x,,15000,x,Bugatti_proto_template.prn
|
||||
,1000,x,,1000,x,18JA709CP,x,30,18JA709CP,AVL,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,18JA710CP,x,30,18JA710CP,AVL,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,18JA712CP,x,30,18JA712CP,AVL,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,18JA713CP,x,30,18JA713CP,AVL,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,18JA750CP,x,30,18JA750CP,AVL,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
,1000,x,,1000,x,18JA757CP,x,30,18JA757CP,AVL,3000,,100,,0,,0,10,,,15000,x,ETA30x16_203dpi.prn
|
||||
|
|
|
@ -5,6 +5,7 @@ image_for_warning= st-ten-11
|
|||
|
||||
[hardware_config]
|
||||
archive_synchronizer: present
|
||||
free_fall: present
|
||||
archive_synchronizer_extra: present
|
||||
uvc_camera: absent
|
||||
label_printer: present
|
||||
|
|
@ -58,6 +59,7 @@ label_template_field: modello_etichetta
|
|||
description_field: descrizione
|
||||
|
||||
[recipes_defaults]
|
||||
prova_pervieta_abilitata:
|
||||
tester_discharge_enable: yes
|
||||
dimensione_lotto_abilitata: x
|
||||
tempo_pre_riempimento: 0
|
||||
|
|
|
|||
BIN
config/warning_images/generic/PERVIETÀ.png
Normal file
BIN
config/warning_images/generic/PERVIETÀ.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 652 KiB |
|
|
@ -359,18 +359,63 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
recipe_name += b"\x00" * (16 - len(recipe_name))
|
||||
recipe_barcode = f"j{recipe.part_number}"[:16].encode("ascii")
|
||||
recipe_barcode += b"\x00" * (24 - len(recipe_barcode))
|
||||
# Base flags and PID mode
|
||||
test_flags = 0b0110100001010000 if (step.spec.get("autotest", False) in ["ko_check"]) else 0b0110000001010000
|
||||
pid_mode_text = step.spec.get("pid_mod_config","AUTO") # Get the selected text from the combobox
|
||||
pid_mode_text = step.spec.get("pid_mod_config", "AUTO") # Get the selected text from the combobox
|
||||
pid_mode_value = { # Mapping of text to numeric values
|
||||
"AUTO": 5,
|
||||
"FAST": 0,
|
||||
"MEDIUM": 1,
|
||||
"SLOW": 2,
|
||||
}.get(pid_mode_text, 5)
|
||||
|
||||
# Inject PID mode bits (bits 4..6)
|
||||
test_flags = (test_flags & ~(7 << 4)) | (pid_mode_value << 4)
|
||||
|
||||
pid_ramps=0b0000000000000000 | int(self.config["recipes_defaults"]["pid_level"])<<8 | int(self.config["recipes_defaults"]["pid_speed"])<<12
|
||||
pid_ramps = 0b0000000000000000 | int(self.config["recipes_defaults"]["pid_level"]) << 8 | int(self.config["recipes_defaults"]["pid_speed"]) << 12
|
||||
# Build a robust map of parameters with safe defaults, so Free Fall (minimal spec) won't crash
|
||||
_defs = self.config.get("recipes_defaults", {}) or {}
|
||||
_s = step.spec or {}
|
||||
|
||||
def _gv(key, def_key=None, fallback_key=None):
|
||||
if key in _s:
|
||||
return _s.get(key)
|
||||
if fallback_key and fallback_key in _s:
|
||||
return _s.get(fallback_key)
|
||||
if def_key is not None:
|
||||
return int(_defs.get(def_key, 0)) if isinstance(_defs.get(def_key, 0), (int, float, str)) else 0
|
||||
return 0
|
||||
|
||||
# Determine nominal pressure; for Free Fall we allow "filling_pressure" to be the nominal
|
||||
test_pressure_val = _gv("test_pressure", "pressione_di_test", fallback_key="filling_pressure")
|
||||
|
||||
# Free Fall specific behavior
|
||||
is_free_fall = (step.step_type == "test_freefall_leak")
|
||||
test_type_value = "Leak Test"
|
||||
if is_free_fall:
|
||||
# Use Blockage test type for Free Fall as requested (code 2 in registers map)
|
||||
test_type_value = "Blockage"
|
||||
# Set/clear T1/Pr (bit 1) based on continuous_filling: True => pressure mode
|
||||
if bool(_s.get("continuous_filling", False)):
|
||||
test_flags |= (1 << 1)
|
||||
else:
|
||||
test_flags &= ~(1 << 1)
|
||||
|
||||
# Compute pressure tolerances in % from absolute min/max if provided (for Free Fall)
|
||||
pr_minus_percent = None
|
||||
pr_plus_percent = None
|
||||
try:
|
||||
nominal = float(test_pressure_val) if test_pressure_val is not None else 0.0
|
||||
if is_free_fall and nominal > 0:
|
||||
if _s.get("pressure_min") is not None:
|
||||
pmin = max(0.0, float(_s.get("pressure_min")))
|
||||
pr_minus_percent = max(0.0, min(999.9, ((nominal - pmin) * 100.0) / nominal))
|
||||
if _s.get("pressure_max") is not None:
|
||||
pmax = max(0.0, float(_s.get("pressure_max")))
|
||||
pr_plus_percent = max(0.0, min(999.9, ((pmax - nominal) * 100.0) / nominal))
|
||||
except Exception:
|
||||
pr_minus_percent = pr_minus_percent if pr_minus_percent is not None else None
|
||||
pr_plus_percent = pr_plus_percent if pr_plus_percent is not None else None
|
||||
|
||||
spec = {
|
||||
"Flag: Instrument settings": 0b0000000000000000,
|
||||
"Test program for read/write operation": table,
|
||||
|
|
@ -379,23 +424,23 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
**{761 - 1 + i: (recipe_name[i * 2 + 1] << 8) + recipe_name[i * 2] for i in range(8)}, # print field 1
|
||||
# **{769 - 1 + i: (recipe_name[i * 2 + 1] << 8) + recipe_name[i * 2] for i in range(8)}, # print field 2
|
||||
"Print options": 0b0000000000000000 | self.saver_label_count << 12 | self.saver_print_on_fail << 8 | self.saver_label_template,
|
||||
"Test type": "Leak Test",
|
||||
"Test type": test_type_value,
|
||||
"Test flags": test_flags,
|
||||
"T0 - Pre-filling time": step.spec["pre_filling_time"],
|
||||
"P0 - Pre-filling pressure": step.spec["pre_filling_pressure"],
|
||||
"T1 - Filling time": step.spec["filling_time"],
|
||||
"T2 - Settling time": step.spec["settling_time"],
|
||||
"PR- - Min pressure tolerance %": step.spec["settling_pressure_min_percent"],
|
||||
"PR+ - Max pressure tolerance % (P+)": step.spec["settling_pressure_max_percent"],
|
||||
"T3 - Measure time": step.spec["test_time"],
|
||||
"Q- Lower test leak limit": step.spec["test_pressure_qneg"],
|
||||
"PREL - Nominal test pressure": step.spec["test_pressure"],
|
||||
"Q+ Upper test leak limit": step.spec["test_pressure_qpos"],
|
||||
"FST - Discharge time": step.spec["flush_time"],
|
||||
"FSL - Discharge limit": step.spec["flush_pressure"],
|
||||
"T0 - Pre-filling time": _gv("pre_filling_time", "tempo_pre_riempimento"),
|
||||
"P0 - Pre-filling pressure": _gv("pre_filling_pressure", "pressione_pre_riempimento"),
|
||||
"T1 - Filling time": _gv("filling_time", "tempo_riempimento"),
|
||||
"T2 - Settling time": _gv("settling_time", "tempo_assestamento"),
|
||||
"PR- - Min pressure tolerance %": (pr_minus_percent if pr_minus_percent is not None else _gv("settling_pressure_min_percent", "percentuale_minima_pressione_assestamento")),
|
||||
"PR+ - Max pressure tolerance % (P+)": (pr_plus_percent if pr_plus_percent is not None else _gv("settling_pressure_max_percent", "percentuale_massima_pressione_assestamento")),
|
||||
"T3 - Measure time": _gv("test_time", "tempo_di_test"),
|
||||
"Q- Lower test leak limit": _gv("test_pressure_qneg", "pressione_di_test_delta_minimo"),
|
||||
"PREL - Nominal test pressure": test_pressure_val,
|
||||
"Q+ Upper test leak limit": _gv("test_pressure_qpos", "pressione_di_test_delta_massimo"),
|
||||
"FST - Discharge time": _gv("flush_time", "tempo_svuotamento"),
|
||||
"FSL - Discharge limit": _gv("flush_pressure", "pressione_svuotamento"),
|
||||
"PSQ - Next sequence program PSOUT mode": 0,
|
||||
"RAMPS: T1 configuration": pid_ramps,
|
||||
"PID: pressure correction": step.spec.get("pid_pressure_correction",0),
|
||||
"PID: pressure correction": _gv("pid_pressure_correction", "pid_pressure_correction"),
|
||||
"Various flags": 0b0000000000010000 if self.config["recipes_defaults"]["tester_discharge_enable"] in ("yes", "x") else 0b0000000000000000
|
||||
|
||||
}
|
||||
|
|
@ -404,14 +449,42 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
elif self.model == "t3l":
|
||||
spec.update({
|
||||
"Use programs or use products": 0,
|
||||
"Nominal peak pressure": step.spec["test_pressure"],
|
||||
"Pn - Nominal test pressure": step.spec["test_pressure"],
|
||||
"Nominal peak pressure": test_pressure_val,
|
||||
"Pn - Nominal test pressure": test_pressure_val,
|
||||
})
|
||||
else:
|
||||
raise NotImplementedError(f"tecna t3 model {self.model!r} not implemented.")
|
||||
self.log.debug(str(spec))
|
||||
for register, value in spec.items():
|
||||
self.write(register, value)
|
||||
# Override PR-/PR+ handling for Free Fall (Blockage) to write ABSOLUTE pressures
|
||||
if is_free_fall:
|
||||
try:
|
||||
pmin = _s.get("pressure_min", None)
|
||||
pmax = _s.get("pressure_max", None)
|
||||
# Sanity checks and auto-correct
|
||||
if pmin is not None and pmax is not None:
|
||||
try:
|
||||
pmin_v = float(pmin)
|
||||
pmax_v = float(pmax)
|
||||
if pmin_v > pmax_v:
|
||||
self.log.warning(f"Free Fall: pressure_min ({pmin_v}) > pressure_max ({pmax_v}); swapping values to maintain consistency")
|
||||
pmin_v, pmax_v = pmax_v, pmin_v
|
||||
pmin, pmax = pmin_v, pmax_v
|
||||
except Exception:
|
||||
pass
|
||||
# Write absolute values using relative pressure low-res format (23) and no gain
|
||||
if pmin is not None:
|
||||
self.write("PR- - Min pressure tolerance %", pmin)
|
||||
self.log.info(f"Free Fall: wrote PR- (min final pressure) = {pmin} mbar (format 23)")
|
||||
if pmax is not None:
|
||||
self.write("PR+ - Max pressure tolerance % (P+)", pmax)
|
||||
self.log.info(f"Free Fall: wrote PR+ (max final pressure) = {pmax} mbar (format 23)")
|
||||
except Exception as e:
|
||||
try:
|
||||
self.log.exception(f"Free Fall: failed to write absolute PR-/PR+ values: {e}")
|
||||
except Exception:
|
||||
pass
|
||||
pass
|
||||
|
||||
@db.connection_context()
|
||||
|
|
|
|||
|
|
@ -106,6 +106,18 @@ def read_steps(row, config, defaults=None, unsupported_steps=None):
|
|||
row.get("pid_pressure_correction", defaults["pid_pressure_correction"])),
|
||||
"pid_mod_config": safe_parse(row.get("pid_mod_config", defaults["pid_mod_config"])),
|
||||
},
|
||||
"test_freefall_leak": {
|
||||
# Dedicated Free Fall parameters
|
||||
# Tempo riempimento (seconds)
|
||||
"filling_time": safe_parse(row.get("tempo_riempimento_free_fall", row.get("tempo_riempimento", defaults.get("tempo_riempimento", 0)))),
|
||||
# Pressione riempimento (mbar)
|
||||
"filling_pressure": safe_parse(row.get("pressione_riempimento_free_fall", row.get("pressione_pre_riempimento", defaults.get("pressione_pre_riempimento", 0)))),
|
||||
# Pressione minima/massima (mbar)
|
||||
"pressure_min": safe_parse(row.get("pressione_min_free_fall", defaults.get("pressione_min_free_fall", 0))),
|
||||
"pressure_max": safe_parse(row.get("pressione_max_free_fall", defaults.get("pressione_max_free_fall", 0))),
|
||||
# Riempimento continuo (si/no)
|
||||
"continuous_filling": str(row.get("riempimento_continuo_free_fall", "")).strip().lower() in {"si","s","x","yes","y","true","1"},
|
||||
},
|
||||
"leak_2": {
|
||||
"pre_filling_time": safe_parse(row.get("tempo_pre_riempimento_2", defaults["tempo_pre_riempimento_2"])),
|
||||
"pre_filling_pressure": safe_parse(
|
||||
|
|
@ -254,6 +266,9 @@ def import_recipes(config, csv_path=None, defaults=None, unsupported_steps=None,
|
|||
"vision": len(
|
||||
row.get("test_visione_abilitato", defaults["test_visione_abilitato"])) and "vision" not in (
|
||||
unsupported_steps or []),
|
||||
"test_freefall_leak": len(
|
||||
row.get("prova_tenuta_abilitata", defaults["prova_tenuta_abilitata"])) and "test_freefall_leak" not in (
|
||||
unsupported_steps or []),
|
||||
"leak_1": len(
|
||||
row.get("prova_tenuta_abilitata", defaults["prova_tenuta_abilitata"])) and "leak_1" not in (
|
||||
unsupported_steps or []),
|
||||
|
|
@ -378,6 +393,26 @@ def export_recipes(config, csv_path=None, logger=None):
|
|||
fieldnames.update(["prova_tenuta_abilitata", "tempo_pre_riempimento", "pressione_pre_riempimento",
|
||||
"tempo_di_test", "pressione_di_test", "pid_pressure_correction"])
|
||||
|
||||
# Export Free Fall leak test parameters
|
||||
if "test_freefall_leak" in steps:
|
||||
# Ensure enable flag present even if leak_1 absent
|
||||
exportable.update({
|
||||
"prova_pervieta_abilitata": exportable.get("prova_pervieta_abilitata", ""),
|
||||
"tempo_riempimento_free_fall": steps["test_freefall_leak"].spec.get("filling_time", 0),
|
||||
"pressione_riempimento_free_fall": steps["test_freefall_leak"].spec.get("filling_pressure", 0),
|
||||
"pressione_min_free_fall": steps["test_freefall_leak"].spec.get("pressure_min", 0),
|
||||
"pressione_max_free_fall": steps["test_freefall_leak"].spec.get("pressure_max", 0),
|
||||
"riempimento_continuo_free_fall": "x" if steps["test_freefall_leak"].spec.get("continuous_filling") else "",
|
||||
})
|
||||
fieldnames.update([
|
||||
"prova_pervieta_abilitata",
|
||||
"tempo_riempimento_free_fall",
|
||||
"pressione_riempimento_free_fall",
|
||||
"pressione_min_free_fall",
|
||||
"pressione_max_free_fall",
|
||||
"riempimento_continuo_free_fall",
|
||||
])
|
||||
|
||||
if "leak_2" in steps:
|
||||
exportable.update({
|
||||
"prova_tenuta_abilitata_2": "x",
|
||||
|
|
|
|||
1
src/ui/freefall_step_editor/__init__.py
Normal file
1
src/ui/freefall_step_editor/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
|||
from .freefall_step_editor import FreeFall_Step_Editor
|
||||
15
src/ui/freefall_step_editor/freefall_step_editor.py
Normal file
15
src/ui/freefall_step_editor/freefall_step_editor.py
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
from ui.editor import Editor
|
||||
|
||||
|
||||
class FreeFall_Step_Editor(Editor):
|
||||
def __init__(self, action=None, cell_widget=None):
|
||||
super().__init__(action=action, cell_widget=cell_widget)
|
||||
# Map only the Free Fall specific parameters
|
||||
self.spec.update({
|
||||
"filling_time": self.filling_time_sb,
|
||||
"filling_pressure": self.filling_pressure_sb,
|
||||
# Correct mapping: spec keys map to corresponding widgets
|
||||
"pressure_min": self.pressure_min_sb,
|
||||
"pressure_max": self.pressure_max_sb,
|
||||
"continuous_filling": self.continuous_filling_cb,
|
||||
})
|
||||
84
src/ui/freefall_step_editor/freefall_step_editor.ui
Normal file
84
src/ui/freefall_step_editor/freefall_step_editor.ui
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>FreeFall_Step_Editor</class>
|
||||
<widget class="QWidget" name="FreeFall_Step_Editor">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>160</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Free Fall Step Editor</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_fill_time">
|
||||
<property name="text">
|
||||
<string>T1: Tempo riempimento (s)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="filling_time_sb">
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="label_fill_pressure">
|
||||
<property name="text">
|
||||
<string>P1: Pressione riempimento (mbar)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QSpinBox" name="filling_pressure_sb">
|
||||
<property name="maximum">
|
||||
<number>99999</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_pmin">
|
||||
<property name="text">
|
||||
<string>Pmin: Pressione minima (mbar)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="pressure_min_sb">
|
||||
<property name="maximum">
|
||||
<number>99999</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="label_pmax">
|
||||
<property name="text">
|
||||
<string>Pmax: Pressione massima (mbar)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QSpinBox" name="pressure_max_sb">
|
||||
<property name="maximum">
|
||||
<number>99999</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="4">
|
||||
<widget class="QCheckBox" name="continuous_filling_cb">
|
||||
<property name="text">
|
||||
<string>Riempimento continuo (sì/no)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
@ -40,6 +40,9 @@ class Recipe_Selection(Widget):
|
|||
self.second_leak_test_enabled = self.config["hardware_config"].get("second_leak_test", "absent") == "present"
|
||||
self.defaults = self.config.get("recipes_defaults", noner)
|
||||
self.unsupported_steps = set(unsupported_steps or set())
|
||||
# Gate Free Fall feature by hardware_config flag
|
||||
if self.config.get("hardware_config", {}).get("free_fall", "absent") != "present":
|
||||
self.unsupported_steps.add("test_freefall_leak")
|
||||
# Hide instruction_extra entirely unless explicitly enabled in recipes_defaults (istruzione_abilitata_extra: x)
|
||||
try:
|
||||
instr_extra_enabled = str(self.config.get("recipes_defaults", noner)["istruzione_abilitata_extra"]).strip().lower() == "x"
|
||||
|
|
@ -158,6 +161,7 @@ class Recipe_Selection(Widget):
|
|||
"pipe_cutter": len(self.config.get("recipes_defaults", noner)["tagliatubi_abilitata"]) and "pipe_cutter" not in self.unsupported_steps,
|
||||
"vision": len(self.config.get("recipes_defaults", noner)["test_visione_abilitato"]) and "vision" not in self.unsupported_steps,
|
||||
"leak_1": len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata"]) and "leak_1" not in self.unsupported_steps,
|
||||
"test_freefall_leak": len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata"]) and "test_freefall_leak" not in self.unsupported_steps,
|
||||
"leak_2": (self.second_leak_test_enabled and len(self.config.get("recipes_defaults", noner)["prova_tenuta_abilitata_2"]) and "leak_2" not in self.unsupported_steps),
|
||||
"print": len(self.config.get("recipes_defaults", noner)["stampa_etichetta_abilitata"]) and "print" not in self.unsupported_steps,
|
||||
"step_editors": step_defaults,
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ from ui.count_step_editor import Count_Step_Editor
|
|||
from ui.editor import Editor
|
||||
from ui.helpers import replace_widget
|
||||
from ui.leak_step_editor import Leak_Step_Editor
|
||||
from ui.freefall_step_editor import FreeFall_Step_Editor
|
||||
from ui.pipe_cutter_step_editor import Pipe_Cutter_Step_Editor
|
||||
from ui.print_step_editor import Print_Step_Editor
|
||||
from ui.resistance_step_editor import Resistance_Step_Editor
|
||||
|
|
@ -81,6 +82,13 @@ class Recipe_Spec_And_Step_Editor(Editor):
|
|||
"editor": Leak_Step_Editor(),
|
||||
"tab": self.leak_1_t,
|
||||
},
|
||||
"test_freefall_leak": {
|
||||
"type": "test_freefall_leak",
|
||||
"enable": self.free_fall_enabled_cb,
|
||||
"widget": "free_fall_editor_w",
|
||||
"editor": FreeFall_Step_Editor(),
|
||||
"tab": self.free_fall_t,
|
||||
},
|
||||
"leak_2": {
|
||||
"type": "leak_2",
|
||||
"enable": self.leak_enabled_2_cb,
|
||||
|
|
|
|||
|
|
@ -434,6 +434,49 @@ Fasi di Test</string>
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="free_fall_t">
|
||||
<attribute name="title">
|
||||
<string>Test Pervietà</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_free_fall">
|
||||
<item row="0" column="0">
|
||||
<spacer name="horizontalSpacer_ff_left">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="free_fall_enabled_cb">
|
||||
<property name="text">
|
||||
<string>Fase Abilitata</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<spacer name="horizontalSpacer_ff_right">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QWidget" name="free_fall_editor_w" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="leak_2_t">
|
||||
<attribute name="title">
|
||||
<string>Test caduta pressione 2</string>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ from PyQt5.QtWidgets import QPushButton
|
|||
from ui.crud import Cell, Combo_Box_Cell_Widget, Crud
|
||||
from ui.dialog import Dialog
|
||||
from ui.leak_step_editor import Leak_Step_Editor
|
||||
from ui.freefall_step_editor import FreeFall_Step_Editor
|
||||
from ui.vision_step_editor import Vision_Step_Editor
|
||||
from ui.widget import Widget
|
||||
|
||||
|
|
@ -14,6 +15,7 @@ class Step_Spec_JEDECW(QPushButton, Cell):
|
|||
self.editors = {
|
||||
"vision": Vision_Step_Editor(cell_widget=self),
|
||||
"leak_1": Leak_Step_Editor(cell_widget=self),
|
||||
"test_freefall_leak": FreeFall_Step_Editor(cell_widget=self),
|
||||
"leak_2": Leak_Step_Editor(cell_widget=self),
|
||||
}
|
||||
self.editor = None
|
||||
|
|
@ -77,6 +79,7 @@ class Steps_Management(Widget):
|
|||
autocomplete={
|
||||
"type": [
|
||||
"leak_1",
|
||||
"test_freefall_leak",
|
||||
"leak_2",
|
||||
"vision",
|
||||
],
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ class Test(Widget):
|
|||
"screws": {"screwdriver", "tecna_t3", },
|
||||
"resistance": {"multicomp", },
|
||||
"leak_1": {self.tester_component, },
|
||||
"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", },
|
||||
|
|
@ -164,6 +165,8 @@ class Test(Widget):
|
|||
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))
|
||||
|
|
@ -400,6 +403,9 @@ class Test(Widget):
|
|||
else:
|
||||
self.log.info(f"cycle step: {self.step!r} action: {action!r} current index:{self.cycle_index}")
|
||||
|
||||
# Track the previous step type to enable transition hooks (e.g., Free Fall -> Leak_1)
|
||||
prev_step_type = self.step.step_type if self.step is not None else None
|
||||
|
||||
current_w = self.centralWidget
|
||||
|
||||
if hasattr(current_w, "stop"):
|
||||
|
|
@ -520,6 +526,26 @@ class Test(Widget):
|
|||
if self.recipe is not None and "recipe" not in self.data:
|
||||
self.data["recipe"] = model_to_dict(self.recipe)
|
||||
|
||||
# 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 {})
|
||||
):
|
||||
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)
|
||||
leak1 = self.cycle_available_steps.get("leak_1")
|
||||
if leak1 is not None and getattr(leak1, "widget", None) is not None:
|
||||
leak1.widget.recipe_written = True
|
||||
except Exception as e:
|
||||
try:
|
||||
self.log.exception(f"Failed to pre-write Leak_1 recipe after Free Fall: {e}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Remaining logic for updating widgets, starting timers, etc.
|
||||
w = self.cycle_available_steps[self.step.step_type]
|
||||
show = None
|
||||
|
|
@ -637,7 +663,17 @@ class Test(Widget):
|
|||
if step.step_type in ("leak_1", "leak_2"):
|
||||
self.leak_step = step
|
||||
|
||||
# Ensure Free Fall leak test appears before leak_1 when both are enabled
|
||||
step_types = [step.step_type for step in steps]
|
||||
if "test_freefall_leak" in step_types and "leak_1" in step_types:
|
||||
ff_index = step_types.index("test_freefall_leak")
|
||||
l1_index = step_types.index("leak_1")
|
||||
if ff_index > l1_index:
|
||||
# Move Free Fall step to be immediately before leak_1
|
||||
steps.insert(l1_index, steps.pop(ff_index))
|
||||
# Recompute step_types after reordering
|
||||
step_types = [step.step_type for step in steps]
|
||||
|
||||
if "leak_1" in step_types and "leak_2" in step_types:
|
||||
leak1_index = step_types.index("leak_1")
|
||||
leak2_index = step_types.index("leak_2")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import sys
|
||||
import time
|
||||
import weakref
|
||||
import os
|
||||
|
||||
from PyQt5.QtGui import QPixmap
|
||||
from PyQt5.QtWidgets import QMessageBox, QDialog, QApplication
|
||||
|
|
@ -112,13 +113,17 @@ class Test_Leak(Test_Test):
|
|||
self.template_print_l.setText(f"AUTOTEST")
|
||||
else:
|
||||
self.template_print_l.setText(f"{self.parent.print_template}")
|
||||
self.recipe_pressure_l.setText(f"{self.step.spec['test_pressure']}")
|
||||
self.leak_min_l.setText(f"{self.step.spec['test_pressure_qneg']}")
|
||||
self.leak_max_l.setText(f"{self.step.spec['test_pressure_qpos']}")
|
||||
self.fill_time_l.setText(f"{self.step.spec['filling_time']}")
|
||||
self.settle_time_l.setText(f"{self.step.spec['settling_time']}")
|
||||
self.meas_time_l.setText(f"{self.step.spec['test_time']}")
|
||||
self.valore_PID_l.setText(f"{self.step.spec.get('pid_pressure_correction')}")
|
||||
# Populate labels defensively to support both Leak and Free Fall specs
|
||||
pressure_val = self.step.spec.get('test_pressure', self.step.spec.get('filling_pressure', ""))
|
||||
leak_min_val = self.step.spec.get('test_pressure_qneg', self.step.spec.get('pressure_min', ""))
|
||||
leak_max_val = self.step.spec.get('test_pressure_qpos', self.step.spec.get('pressure_max', ""))
|
||||
self.recipe_pressure_l.setText(f"{pressure_val}")
|
||||
self.leak_min_l.setText(f"{leak_min_val}")
|
||||
self.leak_max_l.setText(f"{leak_max_val}")
|
||||
self.fill_time_l.setText(f"{self.step.spec.get('filling_time', '')}")
|
||||
self.settle_time_l.setText(f"{self.step.spec.get('settling_time', '')}")
|
||||
self.meas_time_l.setText(f"{self.step.spec.get('test_time', '')}")
|
||||
self.valore_PID_l.setText(f"{self.step.spec.get('pid_pressure_correction', '')}")
|
||||
|
||||
# SETUP TEST LOOP
|
||||
if self.step.spec.get("autotest", False): # IF AUTOTESTING UPLOAD RECIPE EVERY TIME
|
||||
|
|
@ -152,9 +157,66 @@ class Test_Leak(Test_Test):
|
|||
bg_color="blue", text_color="white")
|
||||
super().visualize(None, img=self.status_imgs_full["calibrated-leak"])
|
||||
else:
|
||||
self.display_text(text="COLLEGARE GLI ATTACCHI PNEUMATICI E PREMERE START PER INIZIARE LA PROVA TENUTA")
|
||||
self.template_print_l.setVisible(True)
|
||||
self.template_label.setVisible(True)
|
||||
if step.step_type == "test_freefall_leak":
|
||||
# Flag Free Fall mode for special UI handling
|
||||
self._free_fall_mode = True
|
||||
self._free_fall_img_scale = 1.75 # scale image to almost full available space
|
||||
|
||||
# Hide parameters not relevant during free-fall
|
||||
for name in [
|
||||
"label_18", # Tempo di riempimento
|
||||
"fill_time_l",
|
||||
"label_19", # Tempo di assestamento
|
||||
"settle_time_l",
|
||||
"label_22", # Tempo di prova
|
||||
"meas_time_l",
|
||||
"template_label", # Etichetta selezionata (caption)
|
||||
"template_print_l", # Etichetta selezionata (value)
|
||||
"valore_PID", # Valore PID (caption)
|
||||
"valore_PID_l", # Valore PID (value)
|
||||
"label_17", # unit 's' for fill time
|
||||
"label_20", # unit 's' for settling/measuring time
|
||||
"label_21", # possibly another unit/aux label to hide in free fall
|
||||
]:
|
||||
if hasattr(self, name):
|
||||
getattr(self, name).setVisible(False)
|
||||
|
||||
self.display_text(text="USARE IL SISTEMA DI FLUSSAGGIO. AL TERMINE POSIZIONARE IL PEZZO PER LA PROVA TENUTA")
|
||||
|
||||
# Show placeholder image for free-fall: PERVIETÀ.png
|
||||
pervieta_path_candidates = [
|
||||
"config/warning_images/generic/PERVIETÀ.png",
|
||||
"config/warning_images/generic/PERVIETA.png",
|
||||
"config/warning_images/generic/pervieta.png",
|
||||
]
|
||||
img_path = next((p for p in pervieta_path_candidates if os.path.exists(p)), None)
|
||||
if img_path is not None:
|
||||
super().visualize(None, img=QPixmap(img_path))
|
||||
else:
|
||||
# Fallbacks: try the older instruction image or default
|
||||
try:
|
||||
instr_folder = (self.config.get("machine", {}) or {}).get("instruction_folder", getattr(self.config, "machine_id", "")).strip() or getattr(self.config, "machine_id", "")
|
||||
except Exception:
|
||||
instr_folder = getattr(self.config, "machine_id", "")
|
||||
ff_img = None
|
||||
for ext in ("png", "jpg", "jpeg"):
|
||||
candidate = f"config/instruction_images/{instr_folder}/free_fall.{ext}"
|
||||
if os.path.exists(candidate):
|
||||
ff_img = candidate
|
||||
break
|
||||
if ff_img is not None:
|
||||
super().visualize(None, img=QPixmap(ff_img))
|
||||
else:
|
||||
super().visualize(None, img=self.status_imgs_full[None])
|
||||
else:
|
||||
# Ensure Free Fall mode is disabled for other steps
|
||||
self._free_fall_mode = False
|
||||
self._free_fall_img_scale = None
|
||||
self.display_text(text="COLLEGARE GLI ATTACCHI PNEUMATICI E PREMERE START PER INIZIARE LA PROVA TENUTA")
|
||||
super().visualize(None, img=self.status_imgs_full[None])
|
||||
if step.step_type != "test_freefall_leak":
|
||||
self.template_print_l.setVisible(True)
|
||||
self.template_label.setVisible(True)
|
||||
if self.simulate:
|
||||
QApplication.processEvents()
|
||||
time.sleep(2)
|
||||
|
|
@ -420,3 +482,26 @@ class Test_Leak(Test_Test):
|
|||
# Always disable start button and enable stop button during connection issues
|
||||
self.start_b.setEnabled(False)
|
||||
self.stop_b.setEnabled(True)
|
||||
|
||||
|
||||
def resizeEvent(self, event=None):
|
||||
# First, let the base class handle default behavior
|
||||
try:
|
||||
super().resizeEvent(event)
|
||||
except Exception:
|
||||
# Fallback: ignore if base cannot handle the event
|
||||
pass
|
||||
# Apply Free Fall specific image scaling (half space)
|
||||
if getattr(self, "_free_fall_mode", False):
|
||||
if hasattr(self, "img_l") and hasattr(self, "img") and self.img_l is not None and self.img is not None:
|
||||
try:
|
||||
scale = float(getattr(self, "_free_fall_img_scale", 0.5) or 0.5)
|
||||
except Exception:
|
||||
scale = 0.5
|
||||
w = max(1, int(self.img_l.width() * scale))
|
||||
h = max(1, int(self.img_l.height() * scale))
|
||||
try:
|
||||
self.img_l.setPixmap(self.img.scaled(w, h, Qt.KeepAspectRatio, Qt.SmoothTransformation))
|
||||
except Exception:
|
||||
# If scaling fails, leave as base-class result
|
||||
pass
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user