Merge remote-tracking branch 'origin/master'
1
.gitignore
vendored
|
|
@ -17,3 +17,4 @@ __pycache__/
|
|||
/venv*/
|
||||
runme_custom.sh
|
||||
runme_custom.bat
|
||||
runme_custom_noautotest.bat
|
||||
238
config/csv_import/Tabella_e_daily.csv
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
codice_ricetta,Priorita,Descrizione,etichette_supplementari,pressione_di_test_delta_massimo,pressione_di_test_delta_minimo
|
||||
5803034806,1,,,30,30
|
||||
5803037204,1,,,30,30
|
||||
5803037206,1,,,30,30
|
||||
5803037207,1,,,30,30
|
||||
5803048121,1,,,30,30
|
||||
5803048122,1,,,30,30
|
||||
5803048123,1,,,30,30
|
||||
5803048125,1,,RM2,30,30
|
||||
5803048126,1,,MI2,30,30
|
||||
5803048127,1,,"MI1,MI2",30,30
|
||||
5803048128,1,,"RM1,RM2",30,30
|
||||
5803048131,1,,"MI1,MI2",30,30
|
||||
5803048132,1,,"RM1,RM2",30,30
|
||||
5803098374,1,,,30,30
|
||||
5803098375,1,,,30,30
|
||||
5803119920,1,,,30,30
|
||||
5803119921,1,,,30,30
|
||||
5803119922,1,,,30,30
|
||||
5803119923,1,,,30,30
|
||||
5803119924,1,,,30,30
|
||||
5803119925,1,,,30,30
|
||||
5803119926,1,,,30,30
|
||||
5803119927,1,,,30,30
|
||||
5802850925,1,,"RM1,MI1",30,30
|
||||
5802850926,1,,,20,20
|
||||
5802850929,1,,,30,30
|
||||
5802850932,1,,,30,30
|
||||
5802850933,1,,,30,30
|
||||
5802850941,1,,,30,30
|
||||
5802963590,1,,,30,30
|
||||
5802963591,1,,RB1,30,30
|
||||
5802963593,1,,,30,30
|
||||
5802963597,1,,,30,30
|
||||
5802963598,1,,MB1,20,20
|
||||
5802963599,1,,,30,30
|
||||
5802963600,1,,,30,30
|
||||
5802963679,1,,,30,30
|
||||
5802963681,1,,,20,20
|
||||
5802963683,1,,,30,30
|
||||
5802963684,1,,,30,30
|
||||
5802963685,1,,,30,30
|
||||
5803025107,1,,"MI1,MI2",30,30
|
||||
5803025111,1,,"MB1,MB2",30,30
|
||||
5803025112,1,,"RB1,RB2",30,30
|
||||
5803025113,1,,"MI1,MI2",30,30
|
||||
5803025114,1,,"RM1,RM2",30,30
|
||||
5803025116,1,,"MI1,MI2",30,30
|
||||
5803025117,1,,"RM1,RM2",30,30
|
||||
5803025127,1,,"MI1,MI2",30,30
|
||||
5803025130,1,,,30,30
|
||||
5803025131,1,,,30,30
|
||||
5803025134,1,,,30,30
|
||||
5803025135,1,,,30,30
|
||||
5803025136,1,,,30,30
|
||||
5803025137,1,,,30,30
|
||||
5803033719,1,,"MI1,MI2",30,30
|
||||
5803034025,1,,"RM1,RM2",30,30
|
||||
5803034029,1,,,30,30
|
||||
5803034807,1,,"RM1,RM2",30,30
|
||||
5803036737,1,,,30,30
|
||||
5803041432,1,,,30,30
|
||||
5803041433,1,,,30,30
|
||||
5802850935,1,,,30,30
|
||||
5802850936,1,,,30,30
|
||||
5803025108,1,,"RM1,RM2",30,30
|
||||
5803025109,1,,MI2,30,30
|
||||
5803025110,1,,RM2,30,30
|
||||
5803025115,1,,MB2,30,30
|
||||
5803025118,1,,RB2,30,30
|
||||
5803025132,1,,,30,30
|
||||
5803025133,1,,,30,30
|
||||
5803033717,1,,MI1,30,30
|
||||
5803034002,1,,,30,30
|
||||
5803034005,1,,,30,30
|
||||
5803034011,1,,,30,30
|
||||
5803034015,1,,RM1,30,30
|
||||
5803034017,1,,MB2,30,30
|
||||
5803034020,1,,,30,30
|
||||
5803034021,1,,,30,30
|
||||
5803034022,1,,,30,30
|
||||
5803034026,1,,"RB1,RB2",30,30
|
||||
5803034027,1,,MB2,30,30
|
||||
5803034028,1,,RB2,30,30
|
||||
5803034770,1,,,30,30
|
||||
5803034771,1,,,30,30
|
||||
5803034772,1,,"MB1,MB2",30,30
|
||||
5803036730,1,,RB2,30,30
|
||||
5803036731,1,,"RM1,RM2",30,30
|
||||
5803036732,1,,MI2,30,30
|
||||
5803036733,1,,RM2,30,30
|
||||
5803036734,1,,MB2,30,30
|
||||
5803036735,1,,RB2,30,30
|
||||
5803036741,1,,MI1,30,30
|
||||
5803036742,1,,RM1,30,30
|
||||
5803036743,1,,MI1,30,30
|
||||
5803036744,1,,RM1,30,30
|
||||
5803036746,1,,RB1,30,30
|
||||
5803036747,1,,MB1,30,30
|
||||
5803036751,1,,,30,30
|
||||
5803036753,1,,,30,30
|
||||
5803041434,1,,MB1,30,30
|
||||
5803041435,1,,RB1,30,30
|
||||
5803048129,1,,MI2,30,30
|
||||
5803048130,1,,RM2,30,30
|
||||
5803041436,2,,RM2,30,30
|
||||
5803041437,2,,MI2,30,30
|
||||
5803036748,2,,MI2,30,30
|
||||
5803036749,2,,RM2,30,30
|
||||
5803034810,2,,MI1,30,30
|
||||
5803034811,2,,RM1,30,30
|
||||
5803101533,2,,"RM1,RM2",30,30
|
||||
5803101535,2,,"MI1,MI2",30,30
|
||||
5803101537,2,,RM1,30,30
|
||||
5803101538,2,,MI1,30,30
|
||||
5803108304,2,,,30,30
|
||||
5803108310,2,,,30,30
|
||||
5803101534,2,,RM2,30,30
|
||||
5803101536,2,,MI2,30,30
|
||||
5803033718,2,,,30,30
|
||||
5803034812,2,,,30,30
|
||||
5803034813,2,,,30,30
|
||||
5803108305,2,,,30,30
|
||||
5803108311,2,,,30,30
|
||||
5803007806,2,,,30,30
|
||||
5803007807,2,,,30,30
|
||||
5803007808,2,,,30,30
|
||||
5803034023,2,,RM1,30,30
|
||||
5803034024,2,,MI1,30,30
|
||||
5803101541,2,,RM1,30,30
|
||||
5803101542,2,,MI1,30,30
|
||||
5803034778,2,,MB2,30,30
|
||||
5803034780,2,,RB2,30,30
|
||||
5803037200,2,,RM1,30,30
|
||||
5803037201,2,,MI1,30,30
|
||||
5803104802,2,,,30,30
|
||||
5803104803,2,,,30,30
|
||||
5803104804,2,,,30,30
|
||||
5803104806,2,,,30,30
|
||||
5803104807,2,,,30,30
|
||||
5803104808,2,,,30,30
|
||||
5803025103,2,,MB2,30,30
|
||||
5803025105,2,,RB2,30,30
|
||||
5802815391,2,,,30,30
|
||||
5802815400,2,,,30,30
|
||||
5803047088,2,,MB2,30,30
|
||||
5803047079,2,,MB2,30,30
|
||||
5803047080,2,,RB2,30,30
|
||||
5803047095,2,,MB2,30,30
|
||||
5803047096,2,,RB2,30,30
|
||||
5803034808,2,,"MI1,MI2",30,30
|
||||
5803034809,2,,"RM1,RM2",30,30
|
||||
5803108365,2,,,30,30
|
||||
5803108368,2,,,30,30
|
||||
5803034007,2,,,30,30
|
||||
5803034009,2,,,30,30
|
||||
5803037202,2,,,30,30
|
||||
5803037203,2,,,30,30
|
||||
5803108366,2,,,30,30
|
||||
5803108369,2,,,30,30
|
||||
5803025123,2,,"MI1,MI2",30,30
|
||||
5803025124,2,,"RM1,RM2",30,30
|
||||
5803025125,2,,MI1,30,30
|
||||
5803025126,2,,RM1,30,30
|
||||
5803034773,2,,RM1,30,30
|
||||
5803033716,2,,RM1,30,30
|
||||
5803034013,2,,MI1,30,30
|
||||
5803025100,2,,"MI1,MI2",30,30
|
||||
5803025101,2,,"RB1,RB2",30,30
|
||||
5803047093,2,,"MB1,MB2",30,30
|
||||
5803025099,2,,"MB1,MB2",30,30
|
||||
5803025102,2,,"RM1,RM2",30,30
|
||||
5803025104,2,,"MI1,MI2",30,30
|
||||
5803025106,2,,"RM1,RM2",30,30
|
||||
5803047087,2,,"MI1,MI2",30,30
|
||||
5803047090,2,,"RM1,RM2",30,30
|
||||
5803047092,2,,"MI1,MI2",30,30
|
||||
5803025128,2,,,30,30
|
||||
5803025129,2,,,30,30
|
||||
5803047075,2,,RM2,30,30
|
||||
5803047076,2,,MI2,30,30
|
||||
5803034776,2,,,30,30
|
||||
5803047073,2,,RM1,30,30
|
||||
5803047074,2,,MI1,30,30
|
||||
5803034774,2,,MI1,30,30
|
||||
5803036739,2,,MI1,30,30
|
||||
5803036740,2,,RM1,30,30
|
||||
5803047098,2,,,30,30
|
||||
5803047099,2,,,30,30
|
||||
5802815398,2,,,30,30
|
||||
5803047091,2,,RB2,30,30
|
||||
5803223729,3,priorita 3,MI2,30,30
|
||||
5803223730,3,priorita 3,"MI1,MI2",30,30
|
||||
5803223731,3,priorita 3,MB2,30,30
|
||||
5803223732,3,priorita 3,"RM1,RM2",30,30
|
||||
5803223733,3,priorita 3,RM2,30,30
|
||||
5803223734,3,priorita 3,RB2,30,30
|
||||
5803223735,3,priorita 3,,30,30
|
||||
5803223736,3,priorita 3,,30,30
|
||||
5803223737,3,priorita 3,,30,30
|
||||
5803223738,3,priorita 3,,30,30
|
||||
5803223739,3,priorita 3,,30,30
|
||||
5803223740,3,priorita 3,,30,30
|
||||
5803223741,3,priorita 3,,30,30
|
||||
5803223742,3,priorita 3,,30,30
|
||||
5803223743,3,priorita 3,,30,30
|
||||
5803223744,3,priorita 3,,30,30
|
||||
5803223745,3,priorita 3,,30,30
|
||||
5803223746,3,priorita 3,RM2,30,30
|
||||
5803223747,3,priorita 3,MI2,30,30
|
||||
5803223748,3,priorita 3,"RM1,RM2",30,30
|
||||
5803223749,3,priorita 3,"MI1,MI2",30,30
|
||||
5803223750,3,priorita 3,RB2,30,30
|
||||
5803223751,3,priorita 3,MB2,30,30
|
||||
5803223752,3,priorita 3,RM2,30,30
|
||||
5803223753,3,priorita 3,MI2,30,30
|
||||
5803120372,3,priorita 3,RB2,30,30
|
||||
5803120373,3,priorita 3,MB2,30,30
|
||||
5803120374,3,priorita 3,,30,30
|
||||
5803120375,3,priorita 3,,30,30
|
||||
5803101543,3,priorita 3,MI1,30,30
|
||||
5803101544,3,priorita 3,RM1,30,30
|
||||
5803101545,3,priorita 3,"RM1,RM2",30,30
|
||||
5803101546,3,priorita 3,"MI1,MI2",30,30
|
||||
5803101547,3,priorita 3,,30,30
|
||||
5803223754,3,priorita 3,,30,30
|
||||
5803223755,3,priorita 3,,30,30
|
||||
5803120371,3,priorita 3,,30,30
|
||||
5803228584,3,priorita 3,,30,30
|
||||
5803228585,3,priorita 3,,30,30
|
||||
5803236684,4,priorita 4,,30,30
|
||||
5803236685,4,priorita 4,,30,30
|
||||
5803229237,5,priorita 5,RB1,30,30
|
||||
5803229239,5,priorita 5,MB1,30,30
|
||||
5803229240,5,priorita 5,RM2,30,30
|
||||
5803229242,5,priorita 5,MI2,30,30
|
||||
5803229244,5,priorita 5,"RB1,RB2",30,30
|
||||
5803229245,5,priorita 5,"MB1,MB2",30,30
|
||||
|
165
config/csv_import/importazione da banco preformatura.csv
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
codice_ricetta,cliente,codice_prodotto,descrizione,pressione_di_test,pressione_di_test_delta_minimo,pressione_di_test_delta_massimo,tempo_riempimento,tempo_assestamento,tempo_di_test
|
||||
5802011947,fpt,5802011947,5802011947.dsg,2000,10,10,10,10,10
|
||||
5801970021,lancia bolzano,5801970021,5801970021.dsg,8000,10,10,10,10,10
|
||||
5802401058,FPT,5802401058,5802401058.dsg,2000,10,10,05,20,10
|
||||
579970919,iveco magirus,579970919,579970919.dsg,8000,20,20,10,10,10
|
||||
5801404429,fpt,5801404429,5801404429.dsg,2000,10,10,10,10,10
|
||||
5802108501,bolzano,5802108501,5802108501.dsg,8000,10,10,10,10,10
|
||||
5801871355,fpt,5801871355,test sonda 6 (2).dsg,2000,10,10,10,10,10
|
||||
5802195437,fpt,5802195437,5802195437.dsg,2000,10,10,10,10,10
|
||||
5802990922,cnh,5802990922,5802990922.dsg,10000,30,30,5,5,10
|
||||
5802754975,fpt,5802754975,5802754975.dsg,6000,30,30,10,10,10
|
||||
5802506048,fpt,5802506048,5802506048.dsg,2000,20,20,10,20,40
|
||||
5802772050,IVECO,5802772050,5802772050.dsg,10000,20,20,10,20,10
|
||||
5802401142,FPT,5802401142,5802401142.dsg,2000,10,10,10,10,10
|
||||
5801684362,fpt,5801684362,5801684362.dsg,2000,10,10,10,10,10
|
||||
5802362033,fpt,5802362033,5802362033.dsg,2000,10,10,10,10,10
|
||||
5801684373,fpt,5801684373,5801684373.dsg,2000,10,10,10,10,10
|
||||
5801592607,fpt,5801592607,5801592607.dsg,2000,10,10,10,10,10
|
||||
8051475,fpt,8051475,8051475.dsg,2000,10,10,10,10,10
|
||||
5801779216,fpt,5801779216,5801779216.dsg,6000,30,30,05,05,20
|
||||
5802731910,lancia bolzano,5802731910,5802731910.dsg,8000,10,10,10,10,10
|
||||
5802108503,bolzano,5802108503,5802108503.dsg,8000,10,10,10,10,10
|
||||
5801869611,fpt,5801869611,5801869611.dsg,6000,30,30,05,05,20
|
||||
504291549,bolzano,504291549,504291549.dsg,8000,10,10,10,10,10
|
||||
16L0001CP,fpt,16L0001CP,16L0001CP mc laren.dsg,1000,10,10,10,10,10
|
||||
504354068,fpt,504354068,504354068.dsg,2000,10,10,10,10,10
|
||||
5801588455,fpt,5801588455,5801588455.dsg,2000,10,10,10,10,10
|
||||
5802517329,fpt,5802517329,5802517329.dsg,2000,30,30,05,10,10
|
||||
5802899148,fpt,5802899148,5802899148.dsg,2000,10,10,10,20,99
|
||||
5803012719,cnh,5803012719,5803012719.dsg,10000,30,30,5,5,10
|
||||
TGA001EL,VANHOOL,TGA001EL,TGA001EL.dsg,120000,30,30,10,15,10
|
||||
5801667698,fpt,5801667698,5801667698.dsg,2000,10,10,10,10,10
|
||||
5802011985,fpt,5802011985,5802011985.dsg,2000,10,10,10,10,10
|
||||
504126998,bolzano,504126998,504126998.dsg,8000,10,10,10,10,10
|
||||
5801636013,fpt,5801636013,5801636013.dsg,2000,10,10,10,10,10
|
||||
5802200725,CNH,5802200725,5802200725.dsg,3000,30,30,10,10,40
|
||||
504049840,lancia bolzano,504049840,504049840.dsg,8000,10,10,10,10,10
|
||||
5801970066,bolzano,5801970066,5801970066.dsg,8000,10,10,10,10,10
|
||||
5802093875,FPT,5802093875,5802093875.dsg,2000,10,10,10,10,10
|
||||
5801368939,fpt,5801368939,5801368939.dsg,2000,10,10,10,10,10
|
||||
5802195441,fpt,5802195441,5802195441.dsg,2000,10,10,10,10,10
|
||||
003934,dts,003934,003934.dsg,2000,10,10,10,10,10
|
||||
5802093832,FPT,5802093832,5802093832.dsg,2000,10,10,10,10,10
|
||||
5802422752,fpt,5802422752,5802422752.dsg,2000,10,10,05,20,10
|
||||
5801632026,FPT,5801632026,5801632026.dsg,2000,10,10,10,10,10
|
||||
5801404445,fpt,5801404445,5801404445.dsg,2000,10,10,10,10,10
|
||||
5801970064,bolzano,5801970064,5801970064.dsg,8000,10,10,10,10,10
|
||||
5801615767,irisbus,5801615767,5801615767.dsg,10000,10,10,10,10,10
|
||||
5006217212,IVECO CDR,5006217212,5006217212 IVECO CDR.dsg,10000,20,20,10,10,10
|
||||
5801664502,fpt,5801664502,5801664502.dsg,2000,10,10,10,10,07
|
||||
5801871355,fpt,5801871355,TEST.dsg,2000,10,10,10,10,10
|
||||
5802457210,heuliez bus,5802457210,5802457210.dsg,10000,10,10,10,10,10
|
||||
5801541811,fpt,5801541811,5801541811.dsg,2000,10,10,10,10,10
|
||||
5802011990,fpt,5802011990,5802011990.dsg,2000,10,10,10,10,10
|
||||
5801970067,bolzano,5801970067,5801970067.dsg,8000,10,10,10,10,10
|
||||
5802772051,IVECO,5802772051,5802772051.dsg,10000,20,20,10,20,10
|
||||
5802832212,fpt,5802832212,5802832212.dsg,2000,10,10,10,20,40
|
||||
504354067,fpt,504354067,504354067.dsg,2000,10,10,10,10,10
|
||||
5801565620,fpt,5801565620,5801565620.dsg,2000,10,10,10,10,10
|
||||
5801565599,fpt,5801565599,5801565599.dsg,2000,10,10,10,10,10
|
||||
5803012724,cnh,5803012724,5803012724.dsg,10000,30,30,5,5,10
|
||||
504321531,bolzano,504321531,504321531.dsg,8000,10,10,10,10,10
|
||||
5802771992,IVECO,5802771992,5802771992.dsg,10000,20,20,05,10,10
|
||||
5802753762,fpt,5802753762,5802753762.dsg,2000,10,10,10,20,60
|
||||
5802729983,lancia bolzano,5802729983,5802729983.dsg,8000,10,10,10,10,10
|
||||
5801592617,fpt,5801592617,5801592617.dsg,2000,10,10,10,10,10
|
||||
5801501533,fpt,5801501533,5801501533.dsg,2000,10,10,10,10,10
|
||||
579970920,iveco magirus,579970920,579970920.dsg,8000,20,20,10,10,10
|
||||
5801869610,fpt,5801869610,5801869610.dsg,6000,30,30,05,05,20
|
||||
5801666343,fpt,5801666343,5801666343.dsg,2000,10,10,10,10,10
|
||||
5801616061,irisbus,5801616061,5801616061.dsg,10000,10,10,10,10,10
|
||||
5006217211,IVECO CDR,5006217211,5006217211 IVECO CDR.dsg,10000,20,20,10,10,10
|
||||
5802362019,fpt,5802362019,5802362019.dsg,2000,10,10,10,10,10
|
||||
504385052,fpt,504385052,504385052.dsg,10000,10,10,10,10,10
|
||||
5802991065,cnh,5802991065,5802991065.dsg,10000,30,30,5,5,10
|
||||
5801821750,fpt,5801821750,5801821750.dsg,2000,10,10,10,10,10
|
||||
5802282454,fpt,5802282454,5802282454.dsg,2000,10,10,10,20,20
|
||||
5802771977,IVECO,5802771977,5802771977.dsg,10000,20,20,05,10,10
|
||||
5801970018,lancia bolzano,5801970018,5801970018.dsg,8000,10,10,10,10,10
|
||||
60192054,lancia,60192054,60192054.dsg,8000,10,10,10,10,10
|
||||
5802991066,cnh,5802991066,5802991066.dsg,10000,30,30,5,5,10
|
||||
5801384839,lancia bolzano,5801384839,5801384839.dsg,8000,10,10,10,10,10
|
||||
5801384838,lancia bolzano,5801384838,5801384838.dsg,8000,10,10,10,10,10
|
||||
5802912912,fpt,5802912912,5802912912.dsg,2000,10,10,10,20,60
|
||||
5802399858,fpt,5802399858,5802399858.dsg,2000,10,10,05,20,10
|
||||
5801615766,irisbus,5801615766,5801615766.dsg,10000,10,10,10,10,10
|
||||
5801636018,fpt,5801636018,5801636018.dsg,2000,10,10,10,10,10
|
||||
5802170804,bolzano,5802170804,5802170804.dsg,8000,10,10,10,10,10
|
||||
5802459861,lancia bolzano,5802459861,5802459861.dsg,3000,10,10,05,25,10
|
||||
5801744070,fpt,5801744070,5801744070.dsg,2000,10,10,10,10,10
|
||||
504354065,fpt,504354065,504354065.dsg,2000,10,10,10,10,10
|
||||
5801429438,fpt,5801429438,5801429438.dsg,3000,10,10,10,10,10
|
||||
5801501538,fpt,5801501538,5801501538.dsg,2000,10,10,10,10,10
|
||||
5801871355,fpt,5801871355,5801871355.dsg,2000,10,10,10,10,10
|
||||
5802912988,fpt,5802912988,5802912988.dsg,2000,10,10,10,20,70
|
||||
579970907,iveco magirus,579970907,579970907.dsg,8000,20,20,10,10,10
|
||||
5802901208,fpt,5802901208,FPT_5802901208.dsg,3000,30,30,05,25,10
|
||||
5802399842,fpt,5802399842,5802399842.dsg,2000,10,10,10,20,57
|
||||
5801744059,fpt,5801744059,5801744059.dsg,2000,10,10,10,10,10
|
||||
5801779215,fpt,5801779215,5801779215.dsg,6000,30,30,05,05,20
|
||||
504321532,lancia bolzano,504321532,504321532.dsg,8000,10,10,10,10,10
|
||||
5802518329,fpt,5802518329,5802518329.dsg,2000,10,10,05,20,10
|
||||
5801404450,fpt,5801404450,5801404450.dsg,10000,30,30,30,30,10
|
||||
5801384841,lqncia bolzano,5801384841,5801384841.dsg,8000,10,10,10,10,10
|
||||
5801384842,lancia bolzano,5801384842,5801384842.dsg,8000,10,10,10,10,10
|
||||
504378974,fpt,504378974,504378974.dsg,5000,30,30,10,10,15
|
||||
5802912853,fpt,5802912853,5802912853.dsg,2000,10,10,05,20,120
|
||||
5801588464,fpt,5801588464,5801588464.dsg,2000,10,10,10,10,10
|
||||
60192056,lancia bolzano,60192056,60192056.dsg,8000,10,10,10,10,10
|
||||
5801770912,fpt,5801770912,5801770912.dsg,2000,10,10,10,10,10
|
||||
5801780088,fpt,5801780088,5801780088.dsg,6000,30,30,05,05,20
|
||||
test sonda 6,fpt,test sonda 6,Test controllo sonda n° 6.dsg,2000,10,10,10,10,10
|
||||
5006217210,IVECO CDR,5006217210,5006217210 IVECO CDR.dsg,10000,10,10,10,10,10
|
||||
5802011955,fpt,5802011955,5802011955.dsg,2000,10,10,10,10,10
|
||||
5802506033,fpt,5802506033,5802506033.dsg,2000,20,20,10,20,30
|
||||
5802195448,fpt,5802195448,5802195448.dsg,2000,10,10,10,10,10
|
||||
5802170779,bolzano,5802170779,5802170779.dsg,8000,10,10,10,10,10
|
||||
5801869604,fpt,5801869604,5801869604.dsg,6000,30,30,05,05,20
|
||||
001030,dts,001030,001030.dsg,5000,10,10,10,30,30
|
||||
5802782344,IVECO,5802782344,5802782344.dsg,5000,10,10,10,10,10
|
||||
5802784037,IVECO,5802784037,5802784037.dsg,5000,10,10,10,10,10
|
||||
5801615768,irisbus,5801615768,5801615768.dsg,10000,10,10,10,10,10
|
||||
504354070,fpt,504354070,504354070.dsg,2000,10,10,10,10,10
|
||||
5802401073,FPT,5802401073,5802401073.dsg,2000,10,10,05,20,10
|
||||
5801912552,fpt,5801912552,5801912552.dsg,6000,30,30,05,05,20
|
||||
5801524941,fpt,5801524941,5801524941.dsg,10000,30,30,10,30,30
|
||||
5802753755,fpt,5802753755,5802753755.dsg,2000,10,10,10,20,60
|
||||
5802930104,fpt,5802930104,5802930104.dsg,2000,10,10,05,20,120
|
||||
5801613010,fpt,5801613010,5801613010.dsg,2000,10,10,10,10,10
|
||||
5801603399,fpt,5801603399,5801603399.dsg,2000,10,10,10,10,10
|
||||
5801925887,fpt,5801925887,5801925887.dsg,3000,10,10,10,10,10
|
||||
5802990926,cnh,5802990926,5802990926.dsg,10000,30,30,5,5,10
|
||||
5801576299,fpt,5801576299,5801576299.dsg,2000,10,10,10,10,10
|
||||
011356,dts,011356,011356.dsg,5000,10,10,10,30,30
|
||||
5802269836,fpt,5802269836,5802269836.dsg,2000,30,30,05,10,10
|
||||
504049844,lancia bolzano,504049844,504049844.dsg,8000,10,10,10,10,10
|
||||
5801378904,fpt,5801378904,5801378904.dsg,2000,10,10,10,10,10
|
||||
5801970019,lancia bolzano,5801970019,5801970019.dsg,8000,10,10,10,10,10
|
||||
5802965967,fpt,5802965967,5802965967.dsg,2000,10,10,10,20,99
|
||||
5802832205,fpt,5802832205,5802832205.dsg,2000,10,10,10,20,40
|
||||
579970916,iveco magirus,579970916,579970916.dsg,8000,20,20,10,10,10
|
||||
5802889710,IVECO BUS,5802889710,5802889710.dsg,15000,15,15,10,30,50
|
||||
5802506036,fpt,5802506036,5802506036.dsg,2000,20,20,10,20,20
|
||||
5801429431,fpt,5801429431,5801429431.dsg,3000,10,10,10,10,20
|
||||
5801869609,fpt,5801869609,5801869609.dsg,6000,30,30,5,5,20
|
||||
5802425718,FPT,5802425718,5802425718.dsg,2000,10,10,10,20,20
|
||||
5802425688,fpt,5802425688,5802425688.dsg,2000,10,10,10,20,45
|
||||
504326641,lancia boolzano,504326641,504326641.dsg,8000,10,10,10,10,10
|
||||
5801780089,fpt,5801780089,5801780089.dsg,6000,30,30,05,05,20
|
||||
504365800,fpt,504365800,504365800.dsg,2000,10,10,10,10,10
|
||||
504291548,bolzano,504291548,504291548.dsg,8000,10,10,10,10,10
|
||||
5802195453,fpt,5802195453,5802195453.dsg,2000,10,10,10,10,10
|
||||
5801429403,fpt,5801429403,5801429403.dsg,3000,10,10,10,10,10
|
||||
5801384840,lancia bolzano,5801384840,5801384840.dsg,8000,10,10,10,10,10
|
||||
504126777,bolzano,504126777,504126777.dsg,8000,10,10,10,10,10
|
||||
5801862227,lbz,5801862227,5801862227.dsg,8000,10,10,10,10,10
|
||||
5801368948,fpt,5801368948,5801368948.dsg,2000,10,10,10,10,10
|
||||
5801565573,fpt,5801565573,5801565573.dsg,2000,10,10,10,10,10
|
||||
5801743988,fpt,5801743988,5801743988.dsg,2000,10,10,10,10,10
|
||||
5801923370,fpt,5801923370,5801923370.dsg,2000,10,10,10,10,10
|
||||
5801743980,fpt,5801743980,5801743980.dsg,2000,10,10,10,10,10
|
||||
MY83-6B747-BA,ASTON MARTIN,MY83-6B747-BA,MY83-6B747-BA.dsg,7000,20,20,05,05,30
|
||||
MY83-6B748-BA,ASTON MARTIN,MY83-6B748-BA,MY83-6B748-BA.dsg,7000,20,20,05,05,30
|
||||
MY83-6L694-AB,ASTON MARTIN,MY83-6L694-AB,MY83-6L694-AB.dsg,7000,20,20,05,05,30
|
||||
MY83-6L701-AB,ASTON MARTIN,MY83-6L701-AB,MY83-6L701-AB.dsg,7000,20,20,05,05,30
|
||||
|
8
config/csv_import/st-ten-8.csv
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
codice_ricetta,cliente,codice_prodotto,descrizione,tempo_riempimento,tempo_assestamento,tempo_di_test,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,modello_etichetta,richiedi_inserimento_scarto,istruzione_abilitata,tempo_svuotamento
|
||||
5803112815,IVECO,5803112815,Daily Automatico,5,10,10,5,5,30,5000,5,ETA30x16_203dpi.prn,x,x,1
|
||||
5803112816,IVECO,5803112816,Daily Automatico,5,10,10,5,5,30,5000,5,ETA30x16_203dpi.prn,x,x,1
|
||||
000746453 REV.5,FERRARI,000746453 REV.5,TUBO RITORNO OLIO,10,30,20,5,5,25,10000,5,ferrari_stten8.prn,,,1
|
||||
MY83-6L701-AB,ASTON MARTIN,MY83-6L701-AB,TRANSMISSION OIL,5,10,10,5,5,30,7000,5,aston_martin.prn,,,1
|
||||
MY83-6L694-AB,ASTON MARTIN,MY83-6L694-AB,TRANSMISSION OIL,5,10,10,5,5,30,7000,5,aston_martin.prn,,,1
|
||||
MY83-6B747-BA,ASTON MARTIN,MY83-6B747-BA,ENGINE OIL,5,10,10,5,5,30,7000,5,aston_martin.prn,,,1
|
||||
MY83-6B748-BA,ASTON MARTIN,MY83-6B748-BA,ENGINE OIL,5,10,10,5,5,30,7000,5,aston_martin.prn,,,1
|
||||
|
2
config/csv_import/st-ten-9.csv
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
codice_ricetta,cliente,codice_prodotto,descrizione
|
||||
R54967,Errecinque,R54967, Tubo in metallo
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
codice_ricetta,codice_prodotto,cliente,descrizione,prova_tenuta_abilitata,prova_tenuta_abilitata_2,config_elettrovalvole,config_elettrovalvole_2,modello_etichetta
|
||||
codice_ricetta,codice_prodotto,cliente,descrizione,prova_tenuta_abilitata,prova_tenuta_abilitata_2,canale_di_prova,canale_di_prova_2,modello_etichetta
|
||||
5802820548,5802820548,IVECO,Tubo doppio,x,x,0,1,EtichettaR5_Montaggio_2prove.prn
|
||||
5802820549,5802820549,IVECO,Tubo singolo,x,,0,1,EtichettaR5_Montaggio.prn
|
||||
|
13
config/csv_import/test_import_himatic my24.csv
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
codice_ricetta,cliente,codice_prodotto,descrizione,avvitatura_abilitata,viti,prova_tenuta_abilitata,tempo_riempimento,tempo_assestamento,percentuale_minima_pressione_assestamento,percentuale_massima_pressione_assestamento,tempo_di_test,pressione_di_test_delta_minimo,pressione_di_test,pressione_di_test_delta_massimo,tempo_svuotamento,pressione_svuotamento,stampa_etichetta_abilitata,modello_etichetta
|
||||
5803148257,IVECO,5803148257,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148256,IVECO,5803148256,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148263,IVECO,5803148263,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148261,IVECO,5803148261,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148264,IVECO,5803148264,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148265,IVECO,5803148265,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148267,IVECO,5803148267,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148266,IVECO,5803148266,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803166717,IVECO,5803166717,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148269,IVECO,5803148269,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803148268,IVECO,5803148268,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
5803167128,IVECO,5803167128,Daily Himatic MY24,,,x,5,5,10,10,5,30,5000,30,1,100,x,ETA30x16.prn
|
||||
|
80
config/instruction_images/st-ten-8/5803112815.svg
Normal file
|
After Width: | Height: | Size: 215 KiB |
80
config/instruction_images/st-ten-8/5803112816.svg
Normal file
|
After Width: | Height: | Size: 319 KiB |
49
config/instruction_images/st-ten-8/DEFAULT.svg
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1200"
|
||||
height="700"
|
||||
viewBox="0 0 1200 700"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
|
||||
sodipodi:docname="DEFAULT.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.0570734"
|
||||
inkscape:cx="365.15913"
|
||||
inkscape:cy="357.59106"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1023"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs2" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff7f2a;fill-opacity:1;stroke:#aa4400"
|
||||
x="277.31964"
|
||||
y="373.9111"
|
||||
id="text226"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan224"
|
||||
x="277.31964"
|
||||
y="373.9111"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.3333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke:#aa4400;fill:#ff7f2a">DISEGNO NON DISPONIBILE</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
BIN
config/instruction_images/st-ten-8/img/arw-yel-down.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
config/instruction_images/st-ten-8/img/ok.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
config/instruction_images/st-ten-8/img/tape_black.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
config/instruction_images/st-ten-8/img/tape_white.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
config/label_designs/ASTON MARTIN/aston_martin.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/MB1.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/MB2.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/MI1.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/MI2.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/RB1.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/RB2.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/RM1.nlbl
Normal file
BIN
config/label_designs/E-DAILY - ZT231/RM2.nlbl
Normal file
BIN
config/label_designs/FERRARI/000746453.nlbl
Normal file
BIN
config/label_designs/FERRARI/000952054.nlbl
Normal file
BIN
config/label_designs/FERRARI/F164F169.nlbl
Normal file
BIN
config/label_designs/SATIL/R5_30x17_203dpi.nlbl
Normal file
56
config/label_templates/F164F169.prn
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW472
|
||||
^LL1654
|
||||
^LS0
|
||||
^FT40,729^A0N,38,33^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27
|
||||
^FT259,729^A0N,38,33^FH\^CI28^FD{HH}:{MI}:{SS}^FS^CI27
|
||||
^FT27,1497^A0N,46,46^FH\^CI28^FDESITO:^FS^CI27
|
||||
^FT213,1497^A0N,46,46^FH\^CI28^FDCONFORME^FS^CI27
|
||||
^FT43,107^A0N,38,38^FH\^CI28^FDNumero Disegno^FS^CI27
|
||||
^FT40,683^A0N,38,38^FH\^CI28^FDData/Ora Prova^FS^CI27
|
||||
^FT40,784^A0N,38,38^FH\^CI28^FDStazione: {STATION}^FS^CI27
|
||||
^FT40,615^A0N,38,38^FH\^CI28^FDN. Pezzo:^FS^CI27
|
||||
^FT200,617^A0N,38,38^FH\^CI28^FD{SN4}^FS^CI27
|
||||
^FT40,831^A0N,38,38^FH\^CI28^FDOPERATORE: {BADGE_NUM}^FS^CI27
|
||||
^FO77,960^GB318,0,12^FS
|
||||
^FT28,1043^A0N,38,38^FH\^CI28^FDP. prova:^FS^CI27
|
||||
^FT28,1090^A0N,38,38^FH\^CI28^FDP. rilevata:^FS^CI27
|
||||
^FT214,1090^A0N,38,38^FH\^CI28^FD{RESPSET}mbar^FS^CI27
|
||||
^FT28,1130^A0N,38,38^FH\^CI28^FDCaduta ammessa:^FS^CI27
|
||||
^FT305,1130^A0N,38,38^FH\^CI28^FD{PMIN} mbar^FS^CI27
|
||||
^FT28,1179^A0N,38,38^FH\^CI28^FDCaduta rilevata:^FS^CI27
|
||||
^FT264,1179^A0N,38,38^FH\^CI28^FD{RESLEAK} mbar^FS^CI27
|
||||
^FT28,1342^A0N,38,38^FH\^CI28^FDT.Prova^FS^CI27
|
||||
^FT306,1348^A0N,38,38^FH\^CI28^FD{TTEST} s^FS^CI27
|
||||
^FT27,1278^A0N,38,38^FH\^CI28^FDT.Riempim.^FS^CI27
|
||||
^FT306,1278^A0N,38,38^FH\^CI28^FD{TFILL} s^FS^CI27
|
||||
^FT28,1310^A0N,38,38^FH\^CI28^FDT.Stabilizzazione^FS^CI27
|
||||
^FT306,1313^A0N,38,38^FH\^CI28^FD{TSET} s^FS^CI27
|
||||
^FT214,1043^A0N,38,38^FH\^CI28^FD{PTEST} mbar^FS^CI27
|
||||
^FT46,370^BXN,9,200,0,0,1,_,1
|
||||
^FH\^FD{PART}{HH}{MI}{JJJ}{YY}^FS
|
||||
^FT43,161^A0N,38,38^FH\^CI28^FD992752^FS^CI27
|
||||
^FT43,425^A0N,38,38^FH\^CI28^FD{PART}{HH}{MI}{JJJ}{YY}^FS^CI27
|
||||
^FT40,879^A0N,38,38^FH\^CI28^FDGB16897 / {DD}/{MO}/{YY}^FS^CI27
|
||||
^FT40,925^A0N,38,38^FH\^CI28^FDERRECINQUE / 21882^FS^CI27
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
59
config/label_templates/aston_martin.prn
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD20
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW336
|
||||
^LL1055
|
||||
^LS0
|
||||
^FT65,66^A0N,39,38^FH\^CI28^FDERRECINQUE^FS^CI27
|
||||
^BY1,3,56^FT52,291^BCN,,N,N
|
||||
^FH\^FD>:{PART}^FS
|
||||
^FT23,382^A0N,31,30^FH\^CI28^FDPart number:^FS^CI27
|
||||
^FT23,455^A0N,31,30^FH\^CI28^FD{PART}^FS^CI27
|
||||
^FT25,101^A0N,17,18^FH\^CI28^FDVia Meucci 31/A - 10079 Mappano(TO)^FS^CI27
|
||||
^FT61,173^A0N,39,38^FH\^CI28^FD{CLIENT}^FS^CI27
|
||||
^FT61,211^A0N,39,38^FH\^CI28^FDLEAK TEST^FS^CI27
|
||||
^FT23,921^A0N,23,23^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27
|
||||
^FT169,921^A0N,23,23^FH\^CI28^FD{HH}:{MI}:{SS}^FS^CI27
|
||||
^FT25,1006^A0N,31,30^FH\^CI28^FDCHECK:^FS^CI27
|
||||
^FT151,1006^A0N,31,30^FH\^CI28^FDPASSED^FS^CI27
|
||||
^FT23,964^A0N,25,25^FH\^CI28^FDOperator:^FS^CI27
|
||||
^FT151,964^A0N,25,25^FH\^CI28^FD{OPERATOR}^FS^CI27
|
||||
^FT51,323^A0N,31,30^FH\^CI28^FD{PART}^FS^CI27
|
||||
^FT23,417^A0N,31,30^FH\^CI28^FD{DESCRIPTION}^FS^CI27
|
||||
^FT23,513^A0N,31,30^FH\^CI28^FDSequential number:^FS^CI27
|
||||
^FT23,548^A0N,31,30^FH\^CI28^FD{SN5}^FS^CI27
|
||||
^FT27,658^A0N,28,28^FH\^CI28^FDTest 1:^FS^CI27
|
||||
^FT27,685^A0N,23,23^FH\^CI28^FDMeasured press.:^FS^CI27
|
||||
^FT199,687^A0N,20,20^FH\^CI28^FD{RESPSET} mbar^FS^CI27
|
||||
^FT27,707^A0N,23,23^FH\^CI28^FDAllowed leak:^FS^CI27
|
||||
^FT199,709^A0N,20,20^FH\^CI28^FD{PMIN} mbar^FS^CI27
|
||||
^FT27,730^A0N,23,23^FH\^CI28^FDMeasured leak:^FS^CI27
|
||||
^FT187,731^A0N,20,20^FH\^CI28^FD{RESLEAK} mbar^FS^CI27
|
||||
^FT27,817^A0N,23,23^FH\^CI28^FDMeasure time:^FS^CI27
|
||||
^FT215,818^A0N,20,20^FH\^CI28^FD{TTEST} s^FS^CI27
|
||||
^FT26,773^A0N,23,23^FH\^CI28^FDFill time:^FS^CI27
|
||||
^FT215,770^A0N,20,20^FH\^CI28^FD{TFILL} s^FS^CI27
|
||||
^FT27,795^A0N,23,23^FH\^CI28^FDSettling time:^FS^CI27
|
||||
^FT215,794^A0N,20,20^FH\^CI28^FD{TSET} s^FS^CI27
|
||||
^FT136,658^A0N,28,28^FH\^CI28^FD{PTEST} mbar^FS^CI27
|
||||
^FT151,124^A0N,17,18^FH\^CI28^FDItaly^FS^CI27
|
||||
^FT27,893^A0N,23,23^FH\^CI28^FDTest date/time:^FS^CI27
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
53
config/label_templates/ferrari_c01.prn
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD20
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW472
|
||||
^LL1654
|
||||
^LS0
|
||||
^FT40,729^A0N,38,33^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27
|
||||
^FT259,729^A0N,38,33^FH\^CI28^FD{HH}:{MI}:{SS}^FS^CI27
|
||||
^FT27,1497^A0N,46,46^FH\^CI28^FDESITO:^FS^CI27
|
||||
^FT213,1497^A0N,46,46^FH\^CI28^FDCONFORME^FS^CI27
|
||||
^FT43,130^A0N,38,38^FH\^CI28^FDNumero Disegno^FS^CI27
|
||||
^FT40,683^A0N,38,38^FH\^CI28^FDData/Ora Prova^FS^CI27
|
||||
^FT40,784^A0N,38,38^FH\^CI28^FDStazione: {STATION}^FS^CI27
|
||||
^FT40,615^A0N,38,38^FH\^CI28^FDN. Pezzo:^FS^CI27
|
||||
^FT200,617^A0N,38,38^FH\^CI28^FD{SN5}^FS^CI27
|
||||
^FT40,831^A0N,38,38^FH\^CI28^FDOPERATORE: {OPERATOR}^FS^CI27
|
||||
^FO77,960^GB318,0,12^FS
|
||||
^FT28,1043^A0N,38,38^FH\^CI28^FDP. prova:^FS^CI27
|
||||
^FT28,1090^A0N,38,38^FH\^CI28^FDP. rilevata:^FS^CI27
|
||||
^FT214,1090^A0N,38,38^FH\^CI28^FD{RESPSET}mbar^FS^CI27
|
||||
^FT28,1130^A0N,38,38^FH\^CI28^FDCaduta ammessa:^FS^CI27
|
||||
^FT305,1130^A0N,38,38^FH\^CI28^FD{PMIN} mbar^FS^CI27
|
||||
^FT28,1179^A0N,38,38^FH\^CI28^FDCaduta rilevata:^FS^CI27
|
||||
^FT264,1179^A0N,38,38^FH\^CI28^FD{RESLEAK} mbar^FS^CI27
|
||||
^FT28,1342^A0N,38,38^FH\^CI28^FDT.Prova^FS^CI27
|
||||
^FT306,1348^A0N,38,38^FH\^CI28^FD{TTEST} s^FS^CI27
|
||||
^FT27,1278^A0N,38,38^FH\^CI28^FDT.Riempim.^FS^CI27
|
||||
^FT306,1278^A0N,38,38^FH\^CI28^FD{TFILL} s^FS^CI27
|
||||
^FT28,1310^A0N,38,38^FH\^CI28^FDT.Stabilizzazione^FS^CI27
|
||||
^FT306,1313^A0N,38,38^FH\^CI28^FD{TSET} s^FS^CI27
|
||||
^FT214,1043^A0N,38,38^FH\^CI28^FD{PTEST} mbar^FS^CI27
|
||||
^FT46,352^BXN,9,200,0,0,1,_,1
|
||||
^FH\^FD{PART}{MO}{YY}{SN5}^FS
|
||||
^FT43,425^A0N,38,38^FH\^CI28^FD{PART}{MO}{YY}{SN5}^FS^CI27
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
58
config/label_templates/ferrari_stten8.prn
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD20
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW336
|
||||
^LL1055
|
||||
^LS0
|
||||
^FT65,66^A0N,39,38^FH\^CI28^FDERRECINQUE^FS^CI27
|
||||
^FT52,403^BQN,2,7
|
||||
^FH\^FDLA,{PART}^FS
|
||||
^FT23,436^A0N,31,30^FH\^CI28^FDPart number:^FS^CI27
|
||||
^FT23,527^A0N,31,30^FH\^CI28^FD{PART}^FS^CI27
|
||||
^FT25,101^A0N,17,18^FH\^CI28^FDVia Meucci 31/A - 10079 Mappano(TO)^FS^CI27
|
||||
^FT61,173^A0N,39,38^FH\^CI28^FD{CLIENT}^FS^CI27
|
||||
^FT61,211^A0N,39,38^FH\^CI28^FDLEAK TEST^FS^CI27
|
||||
^FT23,921^A0N,23,23^FH\^CI28^FD{DD}/{MO}/{YY}^FS^CI27
|
||||
^FT169,921^A0N,23,23^FH\^CI28^FD{HH}:{MI}:{SS}^FS^CI27
|
||||
^FT25,1006^A0N,31,30^FH\^CI28^FDCHECK:^FS^CI27
|
||||
^FT151,1006^A0N,31,30^FH\^CI28^FDPASSED^FS^CI27
|
||||
^FT23,964^A0N,25,25^FH\^CI28^FDOperator:^FS^CI27
|
||||
^FT151,964^A0N,25,25^FH\^CI28^FD{OPERATOR}^FS^CI27
|
||||
^FT23,489^A0N,31,30^FH\^CI28^FD{DESCRIPTION}^FS^CI27
|
||||
^FT23,567^A0N,31,30^FH\^CI28^FDSequential number:^FS^CI27
|
||||
^FT23,602^A0N,31,30^FH\^CI28^FD{SN5}^FS^CI27
|
||||
^FT27,658^A0N,28,28^FH\^CI28^FDTest 1:^FS^CI27
|
||||
^FT27,685^A0N,23,23^FH\^CI28^FDMeasured press.:^FS^CI27
|
||||
^FT199,687^A0N,20,20^FH\^CI28^FD{RESPSET} mbar^FS^CI27
|
||||
^FT27,707^A0N,23,23^FH\^CI28^FDAllowed leak:^FS^CI27
|
||||
^FT199,709^A0N,20,20^FH\^CI28^FD{PMIN} mbar^FS^CI27
|
||||
^FT27,730^A0N,23,23^FH\^CI28^FDMeasured leak:^FS^CI27
|
||||
^FT187,731^A0N,20,20^FH\^CI28^FD{RESLEAK} mbar^FS^CI27
|
||||
^FT27,817^A0N,23,23^FH\^CI28^FDMeasure time:^FS^CI27
|
||||
^FT215,818^A0N,20,20^FH\^CI28^FD{TTEST} s^FS^CI27
|
||||
^FT26,773^A0N,23,23^FH\^CI28^FDFill time:^FS^CI27
|
||||
^FT215,770^A0N,20,20^FH\^CI28^FD{TFILL} s^FS^CI27
|
||||
^FT27,795^A0N,23,23^FH\^CI28^FDSettling time:^FS^CI27
|
||||
^FT215,794^A0N,20,20^FH\^CI28^FD{TSET} s^FS^CI27
|
||||
^FT136,658^A0N,28,28^FH\^CI28^FD{PTEST} mbar^FS^CI27
|
||||
^FT151,124^A0N,17,18^FH\^CI28^FDItaly^FS^CI27
|
||||
^FT27,893^A0N,23,23^FH\^CI28^FDTest date/time:^FS^CI27
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/MB1.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT137,147^A0B,42,41^FH\^CI28^FDMB 1^FS^CI27
|
||||
^FO148,86^GB8,61,4^FS
|
||||
^FT394,147^A0B,42,41^FH\^CI28^FDMB 1^FS^CI27
|
||||
^FO405,86^GB8,61,4^FS
|
||||
^FT239,34^A0R,42,41^FH\^CI28^FDMB 1^FS^CI27
|
||||
^FO220,33^GB8,61,4^FS
|
||||
^FT504,34^A0R,42,41^FH\^CI28^FDMB 1^FS^CI27
|
||||
^FO485,33^GB8,61,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO100,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO357,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO220,94^GB56,0,53^FS^LRN
|
||||
^LRY^FO485,94^GB56,0,53^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/MB2.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT137,147^A0B,42,41^FH\^CI28^FDMB 2^FS^CI27
|
||||
^FO148,86^GB8,61,4^FS
|
||||
^FT394,147^A0B,42,41^FH\^CI28^FDMB 2^FS^CI27
|
||||
^FO405,86^GB8,61,4^FS
|
||||
^FT239,34^A0R,42,41^FH\^CI28^FDMB 2^FS^CI27
|
||||
^FO220,33^GB8,61,4^FS
|
||||
^FT504,34^A0R,42,41^FH\^CI28^FDMB 2^FS^CI27
|
||||
^FO485,33^GB8,61,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO100,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO357,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO220,94^GB56,0,53^FS^LRN
|
||||
^LRY^FO485,94^GB56,0,53^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/MI1.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT137,137^A0B,42,41^FH\^CI28^FDMI 1^FS^CI27
|
||||
^FO148,86^GB8,61,4^FS
|
||||
^FT394,137^A0B,42,41^FH\^CI28^FDMI 1^FS^CI27
|
||||
^FO405,86^GB8,61,4^FS
|
||||
^FT239,40^A0R,42,41^FH\^CI28^FDMI 1^FS^CI27
|
||||
^FO220,33^GB8,61,4^FS
|
||||
^FT506,44^A0R,42,41^FH\^CI28^FDMI 1^FS^CI27
|
||||
^FO487,35^GB8,61,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO100,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO357,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO220,94^GB56,0,53^FS^LRN
|
||||
^LRY^FO487,97^GB56,0,53^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/MI2.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT137,137^A0B,42,41^FH\^CI28^FDMI 2^FS^CI27
|
||||
^FO148,86^GB8,61,4^FS
|
||||
^FT394,137^A0B,42,41^FH\^CI28^FDMI 2^FS^CI27
|
||||
^FO405,86^GB8,61,4^FS
|
||||
^FT239,40^A0R,42,41^FH\^CI28^FDMI 2^FS^CI27
|
||||
^FO220,33^GB8,61,4^FS
|
||||
^FT506,44^A0R,42,41^FH\^CI28^FDMI 2^FS^CI27
|
||||
^FO487,35^GB8,61,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO100,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO357,33^GB56,0,53^FS^LRN
|
||||
^LRY^FO220,94^GB56,0,53^FS^LRN
|
||||
^LRY^FO487,97^GB56,0,53^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/RB1.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT393,150^A0B,42,43^FH\^CI28^FDRB 1^FS^CI27
|
||||
^FO404,89^GB8,61,4^FS
|
||||
^FT138,150^A0B,42,43^FH\^CI28^FDRB 1^FS^CI27
|
||||
^FO149,89^GB8,61,4^FS
|
||||
^FT245,35^A0R,42,43^FH\^CI28^FDRB 1^FS^CI27
|
||||
^FO226,32^GB8,61,4^FS
|
||||
^FT501,35^A0R,42,43^FH\^CI28^FDRB 1^FS^CI27
|
||||
^FO484,32^GB8,61,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO356,32^GB56,0,56^FS^LRN
|
||||
^LRY^FO101,32^GB56,0,56^FS^LRN
|
||||
^LRY^FO226,94^GB56,0,56^FS^LRN
|
||||
^LRY^FO484,94^GB56,0,56^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/RB2.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT393,150^A0B,42,43^FH\^CI28^FDRB 2^FS^CI27
|
||||
^FO404,89^GB8,61,4^FS
|
||||
^FT138,150^A0B,42,43^FH\^CI28^FDRB 2^FS^CI27
|
||||
^FO149,89^GB8,61,4^FS
|
||||
^FT245,35^A0R,42,43^FH\^CI28^FDRB 2^FS^CI27
|
||||
^FO226,32^GB8,61,4^FS
|
||||
^FT501,35^A0R,42,43^FH\^CI28^FDRB 2^FS^CI27
|
||||
^FO484,32^GB8,61,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO356,32^GB56,0,56^FS^LRN
|
||||
^LRY^FO101,32^GB56,0,56^FS^LRN
|
||||
^LRY^FO226,94^GB56,0,56^FS^LRN
|
||||
^LRY^FO484,94^GB56,0,56^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/RM1.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT139,151^A0B,42,43^FH\^CI28^FDRM 1^FS^CI27
|
||||
^FO149,85^GB8,66,4^FS
|
||||
^FT245,26^A0R,42,43^FH\^CI28^FDRM 1^FS^CI27
|
||||
^FO226,29^GB8,66,4^FS
|
||||
^FT397,151^A0B,42,43^FH\^CI28^FDRM 1^FS^CI27
|
||||
^FO407,85^GB8,66,4^FS
|
||||
^FT503,26^A0R,42,43^FH\^CI28^FDRM 1^FS^CI27
|
||||
^FO484,29^GB8,66,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO101,29^GB56,0,56^FS^LRN
|
||||
^LRY^FO226,95^GB56,0,56^FS^LRN
|
||||
^LRY^FO359,29^GB56,0,56^FS^LRN
|
||||
^LRY^FO484,95^GB56,0,56^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
38
config/label_templates/st-ten-7/RM2.prn
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW679
|
||||
^LL200
|
||||
^LS0
|
||||
^FT139,151^A0B,42,43^FH\^CI28^FDRM 2^FS^CI27
|
||||
^FO149,85^GB8,66,4^FS
|
||||
^FT245,26^A0R,42,43^FH\^CI28^FDRM 2^FS^CI27
|
||||
^FO226,29^GB8,66,4^FS
|
||||
^FT397,151^A0B,42,43^FH\^CI28^FDRM 2^FS^CI27
|
||||
^FO407,85^GB8,66,4^FS
|
||||
^FT503,26^A0R,42,43^FH\^CI28^FDRM 2^FS^CI27
|
||||
^FO484,29^GB8,66,4^FS
|
||||
^LRY^FO2,1^GB676,0,198^FS^LRN
|
||||
^LRY^FO101,29^GB56,0,56^FS^LRN
|
||||
^LRY^FO226,95^GB56,0,56^FS^LRN
|
||||
^LRY^FO359,29^GB56,0,56^FS^LRN
|
||||
^LRY^FO484,95^GB56,0,56^FS^LRN
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
32
config/label_templates/st-ten-9/R5_30x17_203dpi.prn
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
CT~~CD,~CC^~CT~
|
||||
^XA
|
||||
~TA000
|
||||
~JSN
|
||||
^LT0
|
||||
^MNW
|
||||
^MTT
|
||||
^PON
|
||||
^PMN
|
||||
^LH0,0
|
||||
^JMA
|
||||
^PR2,2
|
||||
~SD15
|
||||
^JUS
|
||||
^LRN
|
||||
^CI27
|
||||
^PA0,1,1,0
|
||||
^XZ
|
||||
^XA
|
||||
^MMT
|
||||
^PW256
|
||||
^LL144
|
||||
^LS0
|
||||
^FT156,132^BQN,2,3
|
||||
^FH\^FDLA,{PART}_{SN5}_{DATE}_{TIME}^FS
|
||||
^FT61,47^A0N,23,23^FH\^CI28^FD{PART}^FS^CI27
|
||||
^FT19,72^A0N,23,23^FH\^CI28^FDNum:{SN5}^FS^CI27
|
||||
^FT19,97^A0N,23,23^FH\^CI28^FD{DATE}^FS^CI27
|
||||
^FT19,122^A0N,23,23^FH\^CI28^FD{TIME}^FS^CI27
|
||||
^FO19,21^GFA,169,248,8,:Z64:eJxFz7ENAyEMBdCPrnCZEVgjRQQrUaY46RjtRmGElFec4vgbrNA82Rhji+qAnax60ar6pbulaAOkT7dzmsIxBX0v7X3Y2+zrRv656trf6BP9/T/rl+kLopyjQG6fs28fKgMeW1SoRV6Pyis7j56i0BdLa0Ec7g8asjdJ:20D6
|
||||
^PQ1,0,1,Y
|
||||
^XZ
|
||||
|
|
@ -11,12 +11,13 @@ barcode_recipe_selection: absent
|
|||
; label_printer: present
|
||||
; extra_label_printer: absent
|
||||
; multicomp: present
|
||||
; neo_pixels: present
|
||||
; neo_pixels: absent
|
||||
; remote_api: present
|
||||
; screwdriver: present
|
||||
; uvc_camera: present
|
||||
; vision_saver: present
|
||||
; vision: present
|
||||
; screwdriver: absent
|
||||
; uvc_camera: absent
|
||||
; vision_saver: absent
|
||||
; vision: absent
|
||||
; external_flush_blow: absent # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH
|
||||
|
||||
[galaxy_camera]
|
||||
horizontal_resolution: 2448
|
||||
|
|
@ -102,6 +103,7 @@ cliente: specificare cliente
|
|||
part_number: specificare part number
|
||||
dimensione_lotto_abilitata: x
|
||||
dimensione_lotto: 0
|
||||
richiedi_inserimento_scarto:
|
||||
verifica_connettore_abilitata: x
|
||||
connettore: SCRx
|
||||
verifica_codice_a_barre_abilitata:
|
||||
|
|
@ -109,9 +111,6 @@ codice_a_barre:
|
|||
avvitatura_abilitata:
|
||||
viti: 0
|
||||
istruzione_abilitata:
|
||||
numero nastri (n):0
|
||||
numero sensori anello (sa):0
|
||||
numero sensori presenza (sp):0
|
||||
|
||||
verifica_resistenza_connettore_abilitata: x
|
||||
scala_resistenza: 500
|
||||
|
|
@ -120,6 +119,14 @@ tolleranza_resistenza_pos: 10
|
|||
tolleranza_resistenza_neg: 5
|
||||
prova_tenuta_abilitata: x
|
||||
warning_img:
|
||||
|
||||
#TECNA RECIPE PARAMETERS
|
||||
pid_mode: 0 # 0=FAST 1=MEDIUM 2=SLOW 4 = FIXED 5 = AUTOMATIC 6 = FLOW 7 = LEAK WITH FLOW
|
||||
pid_level: 1
|
||||
pid_speed: 1
|
||||
tester_discharge_enable: no
|
||||
pid_pressure_correction: 110
|
||||
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 10
|
||||
|
|
@ -132,7 +139,9 @@ pressione_di_test: 1111
|
|||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
config_elettrovalvole: 0
|
||||
canale_di_prova: 0
|
||||
tempo_soffiaggio_esterno: 3
|
||||
tempo_svuotamento_esterno: 2
|
||||
prova_tenuta_abilitata_2:
|
||||
tempo_pre_riempimento_2: 0
|
||||
pressione_pre_riempimento_2: 1000
|
||||
|
|
@ -146,7 +155,9 @@ pressione_di_test_2: 2222
|
|||
pressione_di_test_delta_massimo_2: 200
|
||||
tempo_svuotamento_2: 1
|
||||
pressione_svuotamento_2: 100
|
||||
config_elettrovalvole_2: 0
|
||||
tempo_soffiaggio_esterno_2: 3
|
||||
tempo_svuotamento_esterno_2: 2
|
||||
canale_di_prova_2: 0
|
||||
test_visione_abilitato:
|
||||
ricetta_visione: termorestringente_923578.ini
|
||||
stampa_etichetta_abilitata: x
|
||||
|
|
@ -165,8 +176,8 @@ test_time: 10
|
|||
test_pressure_qneg: 5
|
||||
test_pressure: 9000
|
||||
test_pressure_qpos: 5
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
flush_time: 0
|
||||
flush_pressure: 0
|
||||
|
||||
[autotest_resistance]
|
||||
enabled: false
|
||||
|
|
|
|||
|
|
@ -7,3 +7,4 @@ st-ten-5: st-ten-5
|
|||
st-ten-6: st-ten-6
|
||||
st-ten-7: st-ten-7
|
||||
st-ten-8: st-ten-8
|
||||
ST-TEN-9: st-ten-9
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
[machine]
|
||||
description = MINO
|
||||
|
||||
[hardware_config]
|
||||
archive_synchronizer: present
|
||||
galaxy_camera: absent
|
||||
label_printer: present
|
||||
multicomp: present
|
||||
neo_pixels: present
|
||||
remote_api: present
|
||||
screwdriver: present
|
||||
tecna_t3: present
|
||||
uvc_camera: present
|
||||
vision_saver: present
|
||||
vision: present
|
||||
|
||||
[tecna_t3]
|
||||
model: t3l
|
||||
port: /dev/ttyUSB0
|
||||
|
||||
[multicomp]
|
||||
port: /dev/ttyACM0
|
||||
|
||||
[neo_pixels]
|
||||
port: /dev/ttyACM1
|
||||
|
||||
[archive_synchronizer]
|
||||
poll_time: 6
|
||||
hold_time: 1
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
[machine]
|
||||
description = NEO-DL
|
||||
|
||||
[hardware_config]
|
||||
archive_synchronizer: absent
|
||||
galaxy_camera: present
|
||||
label_printer: present
|
||||
neo_pixels: present
|
||||
remote_api: absent
|
||||
tecna_t3: present
|
||||
vision_saver: present
|
||||
vision: present
|
||||
|
||||
[tecna_t3]
|
||||
port: /dev/ttyUSB0
|
||||
|
||||
[neo_pixels]
|
||||
port: /dev/ttyACM0
|
||||
62
config/machine_settings/st-ten-1-linux.ini
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
[machine]
|
||||
description = ST-TEN-2 - COLLAUDO TUBI RISCALDATI VOLPIANO
|
||||
|
||||
[hardware_config]
|
||||
archive_synchronizer: present
|
||||
label_printer: present
|
||||
remote_api: absent
|
||||
tecna_t3: present
|
||||
|
||||
[digital_io]
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
id_flush_blow: USB-5860,BID#0
|
||||
blow_on: 0 # INPUT VALVE TO SERVICE AIR
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:2 # CLEAN INDICATOR
|
||||
test_on_led:3 # LEAK TEST ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
[tecna_t3]
|
||||
port: /dev/ttyUSB0
|
||||
|
||||
[recipe]
|
||||
recipe_name_field: cod finito cliente
|
||||
part_number_field: cod finito r5
|
||||
barcode_enable_field: verifica_codice_a_barre_abilitata
|
||||
barcode_serial_field: codice_a_barre
|
||||
label_template_field: etichetta
|
||||
description_field: cod semilavorato costampato
|
||||
|
||||
[recipes_defaults]
|
||||
prova_tenuta_abilitata: x
|
||||
warning_img:
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 10
|
||||
tempo_assestamento: 10
|
||||
percentuale_minima_pressione_assestamento: 5
|
||||
percentuale_massima_pressione_assestamento: 5
|
||||
tempo_di_test: 10
|
||||
pressione_di_test_delta_minimo: 30
|
||||
pressione_di_test: 15000
|
||||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
canale_di_prova: 0
|
||||
tester_discharge_enable: yes
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 1000
|
||||
filling_time: 5
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_time: 10
|
||||
test_pressure_qneg: 5
|
||||
test_pressure: 9000
|
||||
test_pressure_qpos: 5
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -3,7 +3,7 @@ description = ST-TEN-1
|
|||
|
||||
[hardware_config]
|
||||
archive_synchronizer: present
|
||||
; galaxy_camera: present
|
||||
# galaxy_camera: present
|
||||
uvc_camera: present
|
||||
label_printer: present
|
||||
neo_pixels: present
|
||||
|
|
@ -31,12 +31,10 @@ platform: windows
|
|||
printer: zd420
|
||||
|
||||
[recipes_defaults]
|
||||
|
||||
|
||||
codice_ricetta: specificare ricetta
|
||||
cliente: IVECO
|
||||
part_number: specificare part number
|
||||
config_elettrovalvole: 0
|
||||
canale_di_prova: 0
|
||||
warning_img:
|
||||
|
||||
dimensione_lotto_abilitata:
|
||||
|
|
@ -82,14 +80,16 @@ descrizione: inserire descrizione ricetta
|
|||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 1000
|
||||
filling_time: 15
|
||||
filling_time: 10
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_time: 10
|
||||
test_pressure_qneg: 10
|
||||
test_pressure: 7000
|
||||
test_pressure_qpos: 5
|
||||
test_time: 10
|
||||
test_pressure_qpos: 10 #Q+ Upper test leak limit
|
||||
test_pressure_qneg: 20 #Q- Lower test leak limit
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
67
config/machine_settings/st-ten-2-linux.ini
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
[machine]
|
||||
description = ST-TEN-2 - COLLAUDO TUBI RISCALDATI VOLPIANO
|
||||
|
||||
[hardware_config]
|
||||
archive_synchronizer: present
|
||||
label_printer: present
|
||||
multicomp: present
|
||||
remote_api: absent
|
||||
tecna_t3: present
|
||||
|
||||
[digital_io]
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
id_flush_blow: USB-5860,BID#0
|
||||
blow_on: 0 # INPUT VALVE TO SERVICE AIR
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:2 # CLEAN INDICATOR
|
||||
test_on_led:3 # LEAK TEST ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
[tecna_t3]
|
||||
port: /dev/ttyUSB0
|
||||
|
||||
[multicomp]
|
||||
port: COM10
|
||||
4wire: enabled
|
||||
|
||||
[recipe]
|
||||
recipe_name_field: cod finito cliente
|
||||
part_number_field: cod finito r5
|
||||
barcode_enable_field: verifica_codice_a_barre_abilitata
|
||||
barcode_serial_field: codice_a_barre
|
||||
label_template_field: etichetta
|
||||
description_field: cod semilavorato costampato
|
||||
|
||||
[recipes_defaults]
|
||||
prova_tenuta_abilitata: x
|
||||
warning_img:
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 10
|
||||
tempo_assestamento: 10
|
||||
percentuale_minima_pressione_assestamento: 5
|
||||
percentuale_massima_pressione_assestamento: 5
|
||||
tempo_di_test: 10
|
||||
pressione_di_test_delta_minimo: 30
|
||||
pressione_di_test: 15000
|
||||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
canale_di_prova: 0
|
||||
tester_discharge_enable: yes
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 1000
|
||||
filling_time: 5
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_time: 10
|
||||
test_pressure_qneg: 5
|
||||
test_pressure: 9000
|
||||
test_pressure_qpos: 5
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -8,6 +8,15 @@ multicomp: present
|
|||
remote_api: absent
|
||||
tecna_t3: present
|
||||
|
||||
[digital_io]
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
id_flush_blow: USB-5860,BID#0
|
||||
blow_on: 0 # INPUT VALVE TO SERVICE AIR
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:2 # CLEAN INDICATOR
|
||||
test_on_led:3 # LEAK TEST ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
[tecna_t3]
|
||||
port: COM6
|
||||
|
||||
|
|
@ -38,7 +47,8 @@ pressione_di_test: 15000
|
|||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
config_elettrovalvole: 0
|
||||
canale_di_prova: 0
|
||||
tester_discharge_enable: yes
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
|
|
|
|||
|
|
@ -38,4 +38,23 @@ pressione_di_test: 15000
|
|||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
config_elettrovalvole: 0
|
||||
canale_di_prova: 0
|
||||
tester_discharge_enable: yes
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 1000
|
||||
filling_time: 10
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_pressure: 7000
|
||||
test_time: 10
|
||||
test_pressure_qpos: 1 #Q+ Upper test leak limit
|
||||
test_pressure_qneg: 10 #Q- Lower test leak limit
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -1,31 +1,80 @@
|
|||
[machine]
|
||||
description = ST-TEN-4 - TERMOFORMATURA MAPPANO
|
||||
description = ST-TEN-4 - REPARTO PREFORMATURA - MAPPANO
|
||||
|
||||
[hardware_config]
|
||||
archive_synchronizer: present
|
||||
; galaxy_camera: present
|
||||
uvc_camera: present
|
||||
uvc_camera: absent
|
||||
label_printer: present
|
||||
neo_pixels: present
|
||||
neo_pixels: absent
|
||||
remote_api: absent
|
||||
tecna_t3: present
|
||||
vision_saver: absent
|
||||
vision: absent
|
||||
screwdriver: present
|
||||
screwdriver: absent
|
||||
|
||||
[tecna_t3]
|
||||
port: COM4
|
||||
model: t3l
|
||||
model: t3p
|
||||
|
||||
[neo_pixels]
|
||||
port: COM5
|
||||
|
||||
[label_printer]
|
||||
platform: windows
|
||||
printer: zd421
|
||||
|
||||
[recipe]
|
||||
recipe_name_field: codice_ricetta
|
||||
part_number_field: codice_prodotto
|
||||
label_template_field: modello_etichetta
|
||||
description_field: descrizione
|
||||
|
||||
[label_printer]
|
||||
platform: windows
|
||||
printer: zd420
|
||||
[recipes_defaults]
|
||||
dimensione_lotto_abilitata:
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 10
|
||||
tempo_assestamento: 10
|
||||
tempo_di_test: 10
|
||||
percentuale_minima_pressione_assestamento: 5
|
||||
percentuale_massima_pressione_assestamento: 5
|
||||
pressione_di_test_delta_minimo: 30
|
||||
pressione_di_test: 7000
|
||||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
canale_di_prova: 1
|
||||
prova_tenuta_abilitata_2:
|
||||
tempo_pre_riempimento_2: 0
|
||||
pressione_pre_riempimento_2: 1000
|
||||
tempo_riempimento_2: 10
|
||||
tempo_assestamento_2: 10
|
||||
tempo_di_test_2: 10
|
||||
percentuale_minima_pressione_assestamento_2: 5
|
||||
percentuale_massima_pressione_assestamento_2: 5
|
||||
pressione_di_test_delta_minimo_2: 30
|
||||
pressione_di_test_2: 15000
|
||||
pressione_di_test_delta_massimo_2: 30
|
||||
tempo_svuotamento_2: 1
|
||||
pressione_svuotamento_2: 100
|
||||
canale_di_prova_2: 2
|
||||
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
|
||||
pid_pressure_correction: 140
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 1000
|
||||
filling_time: 10
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_pressure: 2000
|
||||
test_time: 10
|
||||
test_pressure_qpos: 3 #Q+ Upper test leak limit (negative mbar)
|
||||
test_pressure_qneg: 15 #Q- Lower test leak limit (negative mbar)
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) (positive mbar)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) (negative mbar)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -9,7 +9,9 @@ extra_label_printer: present
|
|||
remote_api: absent
|
||||
tecna_t3: present
|
||||
digital_io: present
|
||||
digital_io_flush_blow: present
|
||||
barcode_recipe_selection: present
|
||||
external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH
|
||||
show_instructions: yes
|
||||
|
||||
[tecna_t3]
|
||||
|
|
@ -33,14 +35,20 @@ printer: xlp504
|
|||
|
||||
[digital_io]
|
||||
id: USB-5862,BID#0
|
||||
[digital_io_flush_blow]
|
||||
id: USB-5860,BID#0
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
blow_on: 0 # INPUT VALVE TO SERVICE AIR
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:2 # CLEAN INDICATOR
|
||||
ch1_led:3 # CHANNEL 1 ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
[recipes_defaults]
|
||||
|
||||
|
||||
codice_ricetta: specificare ricetta
|
||||
cliente: IVECO
|
||||
part_number: specificare part number
|
||||
config_elettrovalvole: 0
|
||||
canale_di_prova: 0
|
||||
warning_img:
|
||||
|
||||
dimensione_lotto_abilitata:
|
||||
|
|
@ -90,10 +98,12 @@ filling_time: 15
|
|||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_time: 10
|
||||
test_pressure_qneg: 10
|
||||
test_pressure: 5000
|
||||
test_time: 10
|
||||
test_pressure_qpos: 5
|
||||
test_pressure_qneg: 17
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) (positive mbar)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) (negative mbar)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -11,8 +11,10 @@ tecna_t3: present
|
|||
vision_saver: absent
|
||||
vision: absent
|
||||
screwdriver: absent
|
||||
digital_io: present
|
||||
digital_io_flush_blow: present
|
||||
second_leak_test: present
|
||||
external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH
|
||||
dual_channel: present
|
||||
|
||||
[tecna_t3]
|
||||
port: COM4
|
||||
|
|
@ -25,8 +27,17 @@ port: COM5
|
|||
platform: windows
|
||||
printer: zd421
|
||||
|
||||
[digital_io]
|
||||
[digital_io_flush_blow]
|
||||
id: USB-5860,BID#0
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
blow_on: 3 # INPUT VALVE TO SERVICE AIR
|
||||
out_channel_select: 2 # AIR OUT VALVE (0=CH1, 1=CH2)
|
||||
in_channel_select: 0 # AIR IN VALVE (0=CH1, 1=CH2)
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:7 # CLEAN INDICATOR
|
||||
ch1_led:6 # CHANNEL 1 ACTIVE INDICATOR
|
||||
ch2_led:5 # CHANNEL 2 ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
[recipe]
|
||||
recipe_name_field: codice_ricetta
|
||||
|
|
@ -36,6 +47,7 @@ description_field: descrizione
|
|||
|
||||
[recipes_defaults]
|
||||
dimensione_lotto_abilitata:
|
||||
tempo_soffiaggio: 5
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 10
|
||||
|
|
@ -48,7 +60,7 @@ pressione_di_test: 7000
|
|||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
config_elettrovalvole: 1
|
||||
canale_di_prova: 0
|
||||
prova_tenuta_abilitata_2:
|
||||
tempo_pre_riempimento_2: 0
|
||||
pressione_pre_riempimento_2: 1000
|
||||
|
|
@ -62,7 +74,7 @@ pressione_di_test_2: 15000
|
|||
pressione_di_test_delta_massimo_2: 30
|
||||
tempo_svuotamento_2: 1
|
||||
pressione_svuotamento_2: 100
|
||||
config_elettrovalvole_2: 2
|
||||
canale_di_prova_2: 1
|
||||
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
|
||||
|
||||
[autotest_leak]
|
||||
|
|
@ -77,8 +89,8 @@ test_pressure: 7000
|
|||
test_time: 10
|
||||
test_pressure_qpos: 5 #Q+ Upper test leak limit
|
||||
test_pressure_qneg: 15 #Q- Lower test leak limit
|
||||
test_pressure_tt_qpos: 0 # Q+ Upper test leak limit (tube-tube)
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
chan_sel: 0
|
||||
|
|
@ -5,65 +5,82 @@ description = ST-TEN-7 SECONDO BANCO IVECO DAILY ELETTRICO
|
|||
archive_synchronizer: present
|
||||
uvc_camera: absent
|
||||
label_printer: present
|
||||
neo_pixels: present
|
||||
extra_label_printer: present
|
||||
remote_api: absent
|
||||
tecna_t3: present
|
||||
vision_saver: absent
|
||||
vision: absent
|
||||
screwdriver: absent
|
||||
digital_io: present
|
||||
second_leak_test: present
|
||||
digital_io: absent
|
||||
barcode_recipe_selection: present
|
||||
show_instructions: no
|
||||
|
||||
[tecna_t3]
|
||||
port: COM4
|
||||
model: t3l
|
||||
|
||||
[neo_pixels]
|
||||
port: COM5
|
||||
[recipe]
|
||||
recipe_name_field: codice_ricetta
|
||||
part_number_field: codice_ricetta
|
||||
label_template_field: modello_etichetta
|
||||
description_field: descrizione
|
||||
|
||||
[label_printer]
|
||||
platform: windows
|
||||
printer: zd421
|
||||
|
||||
[digital_io]
|
||||
id: USB-5860,BID#0
|
||||
[extra_label_printer]
|
||||
platform: windows
|
||||
printer: zt231
|
||||
|
||||
[recipe]
|
||||
recipe_name_field: codice_ricetta
|
||||
part_number_field: codice_prodotto
|
||||
label_template_field: modello_etichetta
|
||||
description_field: descrizione
|
||||
|
||||
[digital_io]
|
||||
id: USB-5862,BID#0
|
||||
|
||||
[recipes_defaults]
|
||||
|
||||
|
||||
codice_ricetta: specificare ricetta
|
||||
cliente: IVECO
|
||||
part_number: specificare part number
|
||||
canale_di_prova: 0
|
||||
warning_img:
|
||||
|
||||
dimensione_lotto_abilitata:
|
||||
|
||||
istruzione_abilitata: x
|
||||
numero nastri (n):0
|
||||
numero sensori anello (sa):0
|
||||
numero sensori presenza (sp):0
|
||||
|
||||
prova_tenuta_abilitata: x
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 15
|
||||
tempo_assestamento: 15
|
||||
tempo_di_test: 10
|
||||
pressione_pre_riempimento: 5000
|
||||
tempo_riempimento: 5
|
||||
tempo_assestamento: 10
|
||||
percentuale_minima_pressione_assestamento: 5
|
||||
percentuale_massima_pressione_assestamento: 5
|
||||
tempo_di_test: 10
|
||||
pressione_di_test_delta_minimo: 30
|
||||
pressione_di_test: 7000
|
||||
pressione_di_test: 5000
|
||||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
config_elettrovalvole: 1
|
||||
|
||||
prova_tenuta_abilitata_2:
|
||||
tempo_pre_riempimento_2: 0
|
||||
pressione_pre_riempimento_2: 1000
|
||||
tempo_riempimento_2: 20
|
||||
tempo_assestamento_2: 20
|
||||
tempo_di_test_2: 10
|
||||
tempo_riempimento_2: 5
|
||||
tempo_assestamento_2: 5
|
||||
percentuale_minima_pressione_assestamento_2: 5
|
||||
percentuale_massima_pressione_assestamento_2: 5
|
||||
pressione_di_test_delta_minimo_2: 30
|
||||
pressione_di_test_2: 15000
|
||||
pressione_di_test_delta_massimo_2: 30
|
||||
tempo_di_test_2: 5
|
||||
pressione_di_test_delta_minimo_2: 200
|
||||
pressione_di_test_2: 1000
|
||||
pressione_di_test_delta_massimo_2: 200
|
||||
tempo_svuotamento_2: 1
|
||||
pressione_svuotamento_2: 100
|
||||
config_elettrovalvole_2: 2
|
||||
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
|
||||
|
||||
stampa_etichetta_abilitata: x
|
||||
modello_etichetta: ETA30x16_203dpi.prn
|
||||
descrizione: inserire descrizione ricetta
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
|
|
@ -73,10 +90,12 @@ filling_time: 15
|
|||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_pressure: 5000
|
||||
test_time: 10
|
||||
test_pressure_qneg: 35
|
||||
test_pressure: 15000
|
||||
test_pressure_qpos: 5
|
||||
test_pressure_qpos: 7
|
||||
test_pressure_qneg: 17
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube) (positive mbar)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube) (negative mbar)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -12,9 +12,11 @@ vision_saver: absent
|
|||
vision: absent
|
||||
screwdriver: absent
|
||||
digital_io: present
|
||||
second_leak_test: absent
|
||||
barcode_recipe_selection: present
|
||||
fixture_id: present
|
||||
discard_box: present
|
||||
enforce_piece_removal: yes
|
||||
external_flush_blow: present # EXTERNAL BOX CONTROLLING MULTI-CHANNEL TEST (IF PRESENT), BLOW-CLEANING AND EXTERNAL FLUSH
|
||||
|
||||
[tecna_t3]
|
||||
port: COM4
|
||||
|
|
@ -25,8 +27,20 @@ platform: windows
|
|||
printer: zd421
|
||||
|
||||
[digital_io]
|
||||
id: USB-5860,BID#0
|
||||
discard_idx:15 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
id_flush_blow: USB-5860,BID#0
|
||||
blow_on: 3 # INPUT VALVE TO SERVICE AIR
|
||||
out_channel_select: 2 # AIR OUT VALVE (0=CH1, 1=CH2)
|
||||
in_channel_select: 0 # AIR IN VALVE (0=CH1, 1=CH2)
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:7 # CLEAN INDICATOR
|
||||
ch1_led:6 # CHANNEL 1 ACTIVE INDICATOR
|
||||
ch2_led:5 # CHANNEL 2 ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
# OUTPUT MAP FOR FIXTURE CONNECTOR
|
||||
id_fixture: USB-5862,BID#0
|
||||
discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING
|
||||
|
||||
[fixture_rfid]
|
||||
port: COM5
|
||||
|
|
@ -38,7 +52,8 @@ label_template_field: modello_etichetta
|
|||
description_field: descrizione
|
||||
|
||||
[recipes_defaults]
|
||||
dimensione_lotto_abilitata:
|
||||
tester_discharge_enable: yes
|
||||
dimensione_lotto_abilitata: x
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 1000
|
||||
tempo_riempimento: 15
|
||||
|
|
@ -51,7 +66,7 @@ pressione_di_test: 7000
|
|||
pressione_di_test_delta_massimo: 30
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
config_elettrovalvole: 1
|
||||
canale_di_prova: 1
|
||||
prova_tenuta_abilitata_2:
|
||||
tempo_pre_riempimento_2: 0
|
||||
pressione_pre_riempimento_2: 1000
|
||||
|
|
@ -65,21 +80,24 @@ pressione_di_test_2: 15000
|
|||
pressione_di_test_delta_massimo_2: 30
|
||||
tempo_svuotamento_2: 1
|
||||
pressione_svuotamento_2: 100
|
||||
config_elettrovalvole_2: 2
|
||||
canale_di_prova_2: 2
|
||||
modello_etichetta: EtichettaR5_Montaggio_1prova.prn
|
||||
pid_pressure_correction: 110
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 1000
|
||||
filling_time: 15
|
||||
filling_time: 10
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_pressure: 7000
|
||||
test_time: 10
|
||||
test_pressure_qneg: 35
|
||||
test_pressure: 15000
|
||||
test_pressure_qpos: 5
|
||||
test_pressure_qpos: 10 #Q+ Upper test leak limit
|
||||
test_pressure_qneg: 30 #Q- Lower test leak limit
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
83
config/machine_settings/st-ten-9.ini
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
[machine]
|
||||
description = ST-TEN-9 SATIL SRL - BANCO PROVA TENUTA 10 BAR
|
||||
|
||||
[hardware_config]
|
||||
archive_synchronizer: absent
|
||||
label_printer: present
|
||||
remote_api: absent
|
||||
tecna_t3: absent
|
||||
furness_controls: present
|
||||
|
||||
[archive_synchronizer]
|
||||
archive_endpoint: https://satilportal.it/api/st-ten-save/
|
||||
poll_time: 60
|
||||
hold_time: 1
|
||||
|
||||
[furness_controls]
|
||||
port: COM3
|
||||
model: fco730
|
||||
|
||||
[label_printer]
|
||||
platform: windows
|
||||
printer: zd421
|
||||
|
||||
[digital_io]
|
||||
# OUTPUT MAP FOR EXTERNAL FLUSH/BLOW UNIT
|
||||
id_flush_blow: USB-5860,BID#0
|
||||
blow_on: 3 # INPUT VALVE TO SERVICE AIR
|
||||
out_channel_select: 2 # AIR OUT VALVE (0=CH1, 1=CH2)
|
||||
in_channel_select: 0 # AIR IN VALVE (0=CH1, 1=CH2)
|
||||
flush_on: 1 # OUTPUT VALVE TO DIRT COLLECTOR
|
||||
blow_led:7 # CLEAN INDICATOR
|
||||
ch1_led:6 # CHANNEL 1 ACTIVE INDICATOR
|
||||
ch2_led:5 # CHANNEL 2 ACTIVE INDICATOR
|
||||
flush_led:4 # FLUSH INDICATOR
|
||||
|
||||
# OUTPUT MAP FOR FIXTURE CONNECTOR
|
||||
id_fixture: USB-5862,BID#0
|
||||
discard_idx:12 # BIT NUMBER OF THE I/0 MODULE USED FOR DISCARD SENSING
|
||||
|
||||
[fixture_rfid]
|
||||
port: COM5
|
||||
|
||||
[recipe]
|
||||
recipe_name_field: codice_ricetta
|
||||
part_number_field: codice_prodotto
|
||||
label_template_field: modello_etichetta
|
||||
description_field: descrizione
|
||||
|
||||
[recipes_defaults]
|
||||
tester_discharge_enable: yes
|
||||
dimensione_lotto_abilitata:
|
||||
tempo_pre_riempimento: 0
|
||||
pressione_pre_riempimento: 0
|
||||
tempo_riempimento: 5
|
||||
tempo_assestamento: 10
|
||||
tempo_di_test: 10
|
||||
percentuale_minima_pressione_assestamento: 5
|
||||
percentuale_massima_pressione_assestamento: 5
|
||||
pressione_di_test_delta_minimo: 20 # +mbar
|
||||
pressione_di_test: 5000 # mbar
|
||||
pressione_di_test_delta_massimo: 20 # -mbar
|
||||
tempo_svuotamento: 1
|
||||
pressione_svuotamento: 100
|
||||
canale_di_prova: 1
|
||||
modello_etichetta: R5_30x17_203dpi.prn
|
||||
|
||||
[autotest_leak]
|
||||
enabled: true
|
||||
pre_filling_time: 0
|
||||
pre_filling_pressure: 0
|
||||
filling_time: 10
|
||||
settling_time: 10
|
||||
settling_pressure_min_percent: 5
|
||||
settling_pressure_max_percent: 5
|
||||
test_pressure: 5000
|
||||
test_time: 10
|
||||
test_pressure_qpos: 10 #Q+ Upper test leak limit
|
||||
test_pressure_qneg: 30 #Q- Lower test leak limit
|
||||
test_pressure_tt_qpos: 1 # Q+ Upper test leak limit (tube-tube)
|
||||
test_pressure_tt_qneg: 5 # Q- Lower test leak limit (tube-tube)
|
||||
flush_time: 1
|
||||
flush_pressure: 100
|
||||
relay_config: 1
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
[machine]
|
||||
description = VM
|
||||
|
||||
[tecna_t3]
|
||||
port: COM4
|
||||
|
||||
[neo_pixels]
|
||||
port: COM3
|
||||
|
|
@ -1,7 +1 @@
|
|||
#!/bin/bash -x
|
||||
cd "$(dirname "$0")"
|
||||
source "./venv/bin/activate" || source "./venv/Scripts/activate" || :
|
||||
#python3 -m pip install --upgrade qt5-tools
|
||||
#"$(python3 -c "import sys; print(sys.path[-1])")/qt5_applications/Qt/bin/designer" $*
|
||||
$(pwd)/venv/lib/python3.9/site-packages/qt5_applications/Qt/bin/designer $*
|
||||
#$(pwd)/venv/lib/python3.8/site-packages/qt5_applications/Qt/bin/designer $*
|
||||
pyqt5-tools designer
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
.\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
|
||||
pyqt5-tools designer
|
||||
6
init.sh
|
|
@ -4,11 +4,11 @@ here="$(realpath "$(dirname "$0")")"
|
|||
cd "$here"
|
||||
|
||||
echo "---------- initialize venv ----------"
|
||||
sudo apt-get install python3-venv
|
||||
sudo apt-get install python3 python3-venv python-is-python3 python3-pip
|
||||
lsof "./venv/bin/python" | awk 'NR > 1 {print $2}' | xargs kill || :
|
||||
lsof "./venv/Scripts/activate" | awk 'NR > 1 {print $2}' | xargs kill || :
|
||||
python="python"
|
||||
"${python}" -m pip install --upgrade pip
|
||||
#"${python}" -m pip install --upgrade pip
|
||||
"${python}" -m venv venv
|
||||
source "./venv/bin/activate" || source "./venv/Scripts/activate" || :
|
||||
"${python}" -m pip install --upgrade pip
|
||||
|
|
@ -42,7 +42,7 @@ source "./venv/bin/activate" || source "./venv/Scripts/activate" || :
|
|||
# DOCKER_IMAGE="ubuntu:18.04" DOCKER_TARGETS=libedgetpu make docker-build
|
||||
# sudo make install
|
||||
# cd "$here"
|
||||
#echo "---------- install gxlpy ----------"
|
||||
#echo "---------- install gxipy ----------"
|
||||
#sudo apt-get install -y g++ libc-bin
|
||||
#mkdir -p "$here/tmp"
|
||||
#cd "$here/tmp"
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@ cd tmp
|
|||
|
||||
:: Advantech XNAVI
|
||||
Invoke-WebRequest -uri "https://downloadt.advantech.com/download/downloadsr.aspx?File_Id=1-2BZC0F1" -usebasicparsing -outfile xnavi.zip
|
||||
Expand-Archive .\xnavi.zip
|
||||
cd xnavi
|
||||
./xnavi.exe
|
||||
|
||||
:: GXIPY
|
||||
Invoke-WebRequest -uri "https://dahengimaging.com/downloads/Galaxy_Windows_EN_32bits%2064bits_1.18.2208.9301.zip" -usebasicparsing -OutFile Galaxy_Windows_EN_32bits_64bits_1.18.2208.9301.zip
|
||||
9
make_desktop_file_noautotest.bat
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
|
||||
echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
|
||||
echo sLinkFile = "%USERPROFILE%\Desktop\NO AUTOTEST.lnk" >> %SCRIPT%
|
||||
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
|
||||
echo oLink.TargetPath = "%userprofile%\PycharmProjects\st-ten-1\runme_noautotest.bat" >> %SCRIPT%
|
||||
echo oLink.IconLocation = "%userprofile%\PycharmProjects\st-ten-1\src\ui\imgs\neo_red.ico"
|
||||
echo oLink.Save >> %SCRIPT%
|
||||
cscript /nologo %SCRIPT%
|
||||
del %SCRIPT%
|
||||
1
open_osk.bat
Normal file
|
|
@ -0,0 +1 @@
|
|||
osk
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
echo on
|
||||
SET mypath=%~dp0
|
||||
cd %mypath%
|
||||
.\venv\Scripts\activate.bat && python -O "./src/main.py" --no-edgetpu --no-tflite
|
||||
.\venv\Scripts\activate.bat && python -O "./src/main.py"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
echo on
|
||||
SET mypath=%~dp0
|
||||
cd %mypath%
|
||||
.\venv\Scripts\activate.bat && python -O "./src/main.py" --no-edgetpu --no-tflite --no-autotest
|
||||
.\venv\Scripts\activate.bat && python -O "./src/main.py" --no-autotest
|
||||
|
|
|
|||
|
|
@ -9,8 +9,9 @@ from .remote_api import RemoteAPI
|
|||
from .serial_label_printer import Serial_Label_Printer
|
||||
from .tecna_marposs_provaset_t3 import TecnaMarpossProvasetT3
|
||||
from .tecna_screwdriver import TecnaScrewdriver
|
||||
from .test_component import TestComponent
|
||||
from .usb_586x import USB_586x
|
||||
from .rfid_pn532 import RFID_PN532
|
||||
from .furness_controls_leak_tester import FurnessControlsLeakTester
|
||||
if "--vision" in sys.argv:
|
||||
from .galaxy_camera import GalaxyCamera
|
||||
from .neo_pixels import NeoPixels
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ class ArchiveSynchronizer(Component):
|
|||
record.archived = self.remote_archive(record) is True
|
||||
if record.uploaded is not True:
|
||||
record.uploaded = self.remote_store(record) is True
|
||||
else:
|
||||
self.log.info("simulated archive synchronizer cycle")
|
||||
record.save()
|
||||
if self.hold_time > 0:
|
||||
QThread.msleep(self.hold_time)
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ class Component(QObject):
|
|||
"""
|
||||
super().__init__()
|
||||
self.config = config
|
||||
self.log=logging.getLogger(f"{self.__class__.__name__}")
|
||||
self.name = name if name is not None else str(id(self))
|
||||
self._threaded = threaded
|
||||
self._period = period
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ if platform.architecture()[0] == '32bit':
|
|||
c_uint64 = c_uint32
|
||||
|
||||
|
||||
if platform.system().lower() == 'windows':
|
||||
dll = windll.LoadLibrary(r"biodaq")
|
||||
else:
|
||||
dll = None
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ class ModbusClient:
|
|||
return Readout([0] * count)
|
||||
|
||||
def write_register(self, register, data, unit=None, **kwargs):
|
||||
self.log.debug(f"{unit}->{register} ({kwargs}) write: {data}, ", flush=True)
|
||||
self.log.debug(f"{unit}->{register} ({kwargs}) write: {data}, ")
|
||||
return Readout()
|
||||
|
||||
def write_registers(self, registers, data, unit=None, **kwargs):
|
||||
self.log.debug(f"{unit}->{registers} ({kwargs}) write: {data}, ", flush=True)
|
||||
self.log.debug(f"{unit}->{registers} ({kwargs}) write: {data}, ")
|
||||
return Readout()
|
||||
|
||||
def close(self):
|
||||
|
|
|
|||
82
src/components/furness_controls_fco730_registers.py
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
registers = {
|
||||
"commands": {
|
||||
"program_data": b'A000',
|
||||
"product_data": b'B050',
|
||||
"function_data": b'D000',
|
||||
"counters": b'E000',
|
||||
"change_cur_prod": b'F000',
|
||||
"change_cur_prod_50": b'F050',
|
||||
"start_test": b'G000',
|
||||
"reset_test": b'H000',
|
||||
"version_num_range": b'I000',
|
||||
"reset_counters": b'J000',
|
||||
"self_check": b'K000',
|
||||
"last_test_result": b'L000',
|
||||
"current_status": b'M000',
|
||||
"zero_pressure": b'O000',
|
||||
"security_data": b'P000',
|
||||
"printer_settings": b'S000',
|
||||
"comm_settings": b'x000'
|
||||
},
|
||||
"product_tags": {
|
||||
"product_id": b'a',
|
||||
"test_pressure": b'b',
|
||||
"tolerance": b'c',
|
||||
"+fail": b'd',
|
||||
"-fail": b'e',
|
||||
"fill_time": b'f',
|
||||
"stab_time": b'g',
|
||||
"test_time": b'h',
|
||||
"prefill_time": b'l',
|
||||
"vent_time": b'm',
|
||||
"test_type": b'n',
|
||||
"fail_high": b'o',
|
||||
"fail_low": b'p',
|
||||
"outputs_a_h": b'q',
|
||||
"prefill_pressure": b'r',
|
||||
},
|
||||
|
||||
"program_tags": {
|
||||
"leak_units": b'a',
|
||||
"press_units": b'b',
|
||||
"leak_at_eot": b'c',
|
||||
"product": b'l',
|
||||
},
|
||||
"enums": {
|
||||
"status_status": {
|
||||
'0': 'ready_to_start',
|
||||
'1': 'fault',
|
||||
'2':'awaiting_reset',
|
||||
'3': 'pressure_high',
|
||||
'4': 'pressure_low',
|
||||
'5': 'testing',
|
||||
},
|
||||
"status_current_stage": {
|
||||
'0': 'STANDBY',
|
||||
'1': 'RIEMPIMENTO',
|
||||
'2': 'ASSESTAMENTO',
|
||||
'3': 'MISURA',
|
||||
'4': 'ATTESA RESET',
|
||||
'5': 'ATTESA START',
|
||||
'6': 'ERRORE',
|
||||
'7': 'PRESSIONE ALTA',
|
||||
'8': 'PRESSIONE BASSA',
|
||||
'9': 'jig_delay',
|
||||
'10': 'prefilling',
|
||||
'11': 'SCARICO',
|
||||
'12': 'reserverd',
|
||||
'13': 'sequence_delay',
|
||||
'14': 'jig_open'
|
||||
},
|
||||
"status_result":{
|
||||
'0': 'PASSED',
|
||||
'1': 'NEGATIVE FAIL',
|
||||
'2': 'POSITIVE FAIL',
|
||||
'3': 'RESERVED',
|
||||
'4': 'PRESSURE GROSS FAIL',
|
||||
'5': 'RESET DURING TEST',
|
||||
'6': 'GLOBAL FAIL',
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
45
src/components/furness_controls_fco780_registers.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
registers = {
|
||||
"commands": {
|
||||
"program_data": b'A000',
|
||||
"product_data": b'B050',
|
||||
"function_data": b'D000',
|
||||
"counters": b'E000',
|
||||
"change_cur_prod": b'F000',
|
||||
"change_cur_prod_50": b'F050',
|
||||
"start_test": b'G000',
|
||||
"reset_test": b'H000',
|
||||
"version_num_range": b'I000',
|
||||
"reset_counters": b'J000',
|
||||
"self_check": b'K000',
|
||||
"last_test_result": b'L000',
|
||||
"current_status": b'M000',
|
||||
"zero_pressure": b'O000',
|
||||
"security_data": b'P000',
|
||||
"printer_settings": b'S000',
|
||||
"comm_settings": b'x000'
|
||||
},
|
||||
"product_tags": {
|
||||
"product_id": b'a',
|
||||
"test_pressure": b'b',
|
||||
"tolerance": b'c',
|
||||
"+fail": b'd',
|
||||
"-fail": b'e',
|
||||
"fill_time": b'f',
|
||||
"stab_time": b'g',
|
||||
"test_time": b'h',
|
||||
"prefill_time": b'l',
|
||||
"vent_time": b'm',
|
||||
"test_type": b'n',
|
||||
"fail_high": b'o',
|
||||
"fail_low": b'p',
|
||||
"outputs_a_h": b'q',
|
||||
"prefill_pressure": b'r',
|
||||
},
|
||||
|
||||
"program_tags": {
|
||||
"leak_units": b'a',
|
||||
"press_units": b'b',
|
||||
"leak_at_eot": b'c',
|
||||
"product": b'l',
|
||||
}
|
||||
}
|
||||
291
src/components/furness_controls_leak_tester.py
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
import re
|
||||
import sys
|
||||
import time
|
||||
from collections import OrderedDict
|
||||
|
||||
from PyQt5.QtCore import QMutex
|
||||
|
||||
from components.component import Component
|
||||
from components.furness_controls_fco730_registers import registers as fco730_registers
|
||||
from components.furness_controls_fco780_registers import registers as fco780_registers
|
||||
|
||||
if "--sim-furness-controls" in sys.argv:
|
||||
from components.dummies.serial import serial
|
||||
else:
|
||||
import serial
|
||||
|
||||
ETX = b'\x03'
|
||||
EOT = b'\x04'
|
||||
ENQ = b'\x05'
|
||||
ACK = b'\x06'
|
||||
NACK = b'\x15'
|
||||
|
||||
|
||||
class FurnessControlsLeakTester(Component):
|
||||
|
||||
def __init__(self, config=None, name=None, period=1, lazy=True, paused=False, threaded=True):
|
||||
super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded)
|
||||
self.enums = None
|
||||
self.current_status = None
|
||||
self.product_tags = None
|
||||
self.bytesize = None
|
||||
self.timeout = None
|
||||
self.parity = None
|
||||
self.conn = None
|
||||
self.lock = QMutex()
|
||||
self.stopbits = None
|
||||
self.baudrate = None
|
||||
self.port = None
|
||||
self.model = None
|
||||
self.settings = None
|
||||
self.commands = None
|
||||
self.id1 = b'0'
|
||||
self.id2 = b'1'
|
||||
|
||||
def config_changed(self):
|
||||
super().config_changed()
|
||||
self.model = self.config[self.name]["model"].lower()
|
||||
if self.model == "fco730":
|
||||
self.commands = fco730_registers["commands"]
|
||||
self.product_tags = fco730_registers["product_tags"]
|
||||
self.enums = fco730_registers["enums"]
|
||||
else:
|
||||
raise NotImplementedError(f"Furness Controls model {self.model!r} not implemented.")
|
||||
self.port = self.config[self.name]["port"]
|
||||
self.baudrate = 9600
|
||||
self.stopbits = 1
|
||||
self.parity = serial.PARITY_NONE
|
||||
self.bytesize = serial.EIGHTBITS
|
||||
self.timeout = 0.1
|
||||
if self.conn is not None:
|
||||
self.conn.close()
|
||||
self.conn = serial.Serial(
|
||||
self.port,
|
||||
baudrate=self.baudrate,
|
||||
stopbits=self.stopbits,
|
||||
parity=self.parity,
|
||||
bytesize=self.bytesize,
|
||||
timeout=self.timeout,
|
||||
write_timeout=self.timeout,
|
||||
)
|
||||
|
||||
def _convert_from_format(self, data, formatting=None, decoding_map=None):
|
||||
if decoding_map is not None and data in decoding_map:
|
||||
data = decoding_map[data]
|
||||
if formatting is not None:
|
||||
# units = self.units[formatting]
|
||||
# data = [data * units[0], units[1]]
|
||||
data = data * self.units[formatting][0]
|
||||
return data
|
||||
|
||||
@Component.reconfig_on_error
|
||||
def _get(self):
|
||||
# READ INFO
|
||||
current_status = self.get_status()
|
||||
info = {
|
||||
"Real time test pressure output": current_status["pressure_reading"],
|
||||
"Real time differential pressure output": 0,
|
||||
"Real time pressure line regulator": 0,
|
||||
"Active alarm flags": 0,
|
||||
"Active test program number": 0,
|
||||
"Running test: active phase": current_status["current_stage"],
|
||||
"Running test: measured leak": current_status["leak_reading"],
|
||||
"Running test: test type": 0,
|
||||
"Running test: sequence index": 0,
|
||||
"Digital inputs status (mask)": 0,
|
||||
}
|
||||
|
||||
if current_status['new_result_available'] == '1': # NEW TEST RESULT AVAILABLE
|
||||
last_test_result = self.get_last_result() # READ RESULT TO RESET AVAILABLE FLAG
|
||||
info.update({"Running test: result": last_test_result['status'],
|
||||
"Running test: filling pressure": current_status["pressure_reading"],
|
||||
"Running test: pressure at the end of settling": current_status["pressure_reading"],
|
||||
|
||||
})
|
||||
for round_me in ["measured leak"]:
|
||||
if round_me in info.keys():
|
||||
info.update({round_me: float(f"{info[round_me]:.2f}")})
|
||||
self.log.debug(str(info))
|
||||
super()._get([info])
|
||||
|
||||
def start_test(self, table=None):
|
||||
self.log.info(f"starting test")
|
||||
self.send_command("start_test")
|
||||
|
||||
def stop_test(self):
|
||||
self.log.warning("resetting state...")
|
||||
current_status = self.get_status()
|
||||
if current_status['status'] in ('ready_to_start',):
|
||||
self.log.info("ready to start")
|
||||
elif current_status['status'] in ('pressure_high', 'pressure_low', 'fault'):
|
||||
self.log.info(f"{current_status['status']}, performing self check to reset")
|
||||
elif current_status['status'] == "testing":
|
||||
self.log.info("stop running test")
|
||||
self.send_command("reset_test")
|
||||
else:
|
||||
self.log.error(f"unknown state {current_status['status']}")
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
def get_status(self):
|
||||
status_str = str(self.send_enquiry("current_status"), encoding="ascii")
|
||||
status_str += 'z' # dummy terminator
|
||||
status_vars = OrderedDict(
|
||||
{
|
||||
'a': 'counter',
|
||||
'b': 'product_number',
|
||||
'c': 'step_number',
|
||||
'd': 'new_result_available',
|
||||
'e': 'mode',
|
||||
'f': 'status',
|
||||
'g': 'pressure_reading',
|
||||
'h': 'pressure_units',
|
||||
'i': 'leak_reading',
|
||||
'j': 'leak_offset',
|
||||
'k': 'current_stage',
|
||||
'z': 'dummy'
|
||||
})
|
||||
status_decoded = {}
|
||||
for tag, param in status_vars.items():
|
||||
next_tag = list(status_vars)[list(status_vars.keys()).index(tag) + 1]
|
||||
match = re.search(f"{tag}([0-9.-]+){next_tag}", status_str)
|
||||
value = None
|
||||
if match is not None:
|
||||
value = match.group(1)
|
||||
if param == 'status':
|
||||
value = self.enums['status_status'][value]
|
||||
elif param == 'current_stage':
|
||||
value = self.enums['status_current_stage'][value]
|
||||
elif param == 'pressure_reading':
|
||||
value = f"{float(value) * 1000:.1f}"
|
||||
|
||||
status_decoded[param] = value
|
||||
if next_tag == 'z':
|
||||
break
|
||||
|
||||
return status_decoded
|
||||
|
||||
def get_last_result(self):
|
||||
res_str = str(self.send_enquiry("last_test_result"), encoding="ascii")
|
||||
res_str += 'z' # dummy terminator
|
||||
status_vars = OrderedDict(
|
||||
{
|
||||
'a': 'counter',
|
||||
'b': 'step_number',
|
||||
'c': 'product_number',
|
||||
'd': 'status',
|
||||
'z': 'dummy'
|
||||
})
|
||||
res_decoded = {}
|
||||
for tag, param in status_vars.items():
|
||||
next_tag = list(status_vars)[list(status_vars.keys()).index(tag) + 1]
|
||||
match = re.search(f"{tag}([0-9.-]+){next_tag}", res_str)
|
||||
value = None
|
||||
if match is not None:
|
||||
value = match.group(1)
|
||||
if param == 'status':
|
||||
value = self.enums['status_result'].get(value, 'NOK')
|
||||
|
||||
res_decoded[param] = value
|
||||
if next_tag == 'z':
|
||||
break
|
||||
|
||||
return res_decoded
|
||||
|
||||
def write_recipe(self, recipe, step, table=None):
|
||||
# PREPARE DATA
|
||||
product_id = '"' + recipe.part_number[:16] + '"'
|
||||
product_id = product_id.encode("ascii")
|
||||
test_press_bar = step.spec["test_pressure"] / 1000
|
||||
prefill_press_bar = step.spec["pre_filling_pressure"] / 1000
|
||||
tolerance = int(step.spec["settling_pressure_min_percent"])
|
||||
fail_pos = (int(step.spec["test_pressure_qpos"]))
|
||||
fail_neg = (int(step.spec["test_pressure_qneg"]))
|
||||
fill_time = float(step.spec["filling_time"])
|
||||
stab_time = float(step.spec["settling_time"])
|
||||
test_time = float(step.spec["test_time"])
|
||||
prefill_time = float(step.spec["pre_filling_time"])
|
||||
vent_time = float(step.spec["flush_time"])
|
||||
# SEND RECIPE PARAMETERS
|
||||
self.send_command("change_cur_prod_50")
|
||||
self.send_product_tag("product_id", product_id)
|
||||
self.send_product_tag("prefill_pressure", f"{prefill_press_bar:2.3f}")
|
||||
self.send_product_tag("test_pressure", f"{test_press_bar:2.3f}")
|
||||
self.send_product_tag("tolerance", f"{tolerance:3.1f}")
|
||||
self.send_product_tag("+fail", f"{fail_pos:3.1f}")
|
||||
self.send_product_tag("-fail", f"{fail_neg:3.1f}")
|
||||
self.send_product_tag("fill_time", f"{fill_time:3.1f}")
|
||||
self.send_product_tag("stab_time", f"{stab_time:3.1f}")
|
||||
self.send_product_tag("test_time", f"{test_time:3.1f}")
|
||||
self.send_product_tag("prefill_time", f"{prefill_time:3.1f}")
|
||||
self.send_product_tag("vent_time", f"{vent_time:3.1f}")
|
||||
self.send_product_tag("fail_high", f"{fail_pos:3.1f}")
|
||||
self.send_product_tag("fail_low", f"{fail_neg:3.1f}")
|
||||
self.send_product_tag("outputs_a_h", f"{int(0b01000000)}")
|
||||
|
||||
self.get_last_result() # CLEAR POSSIBLE NEW RESULT AVAILABLE FLAG
|
||||
|
||||
def send_command(self, command):
|
||||
if type(command) is str:
|
||||
command = self.commands[command]
|
||||
out_bytes = bytearray()
|
||||
out_bytes.extend(EOT)
|
||||
out_bytes.extend(self.id1)
|
||||
out_bytes.extend(self.id2)
|
||||
out_bytes.extend(command)
|
||||
out_bytes.extend(ETX)
|
||||
checksum = self.calc_checksum(out_bytes)
|
||||
out_bytes.append(checksum)
|
||||
self.lock.lock()
|
||||
self.conn.write(out_bytes)
|
||||
response = self.conn.read(1)
|
||||
self.lock.unlock()
|
||||
if response == ACK:
|
||||
return True
|
||||
else:
|
||||
self.log.error(f"SEND COMMAND({command}):{response}")
|
||||
return None
|
||||
|
||||
def send_enquiry(self, enquiry):
|
||||
if type(enquiry) is str:
|
||||
enquiry = self.commands[enquiry]
|
||||
out_bytes = bytearray(EOT)
|
||||
out_bytes.extend(self.id1)
|
||||
out_bytes.extend(self.id2)
|
||||
out_bytes.extend(enquiry)
|
||||
out_bytes.extend(ENQ)
|
||||
checksum = self.calc_checksum(out_bytes)
|
||||
out_bytes.append(checksum)
|
||||
self.lock.lock()
|
||||
self.conn.write(out_bytes)
|
||||
response = self.conn.read(100)
|
||||
self.lock.unlock()
|
||||
if len(response):
|
||||
read_checksum = response[-1]
|
||||
else:
|
||||
read_checksum = None
|
||||
calculated_checksum = self.calc_checksum(response[0:-1], start_idx=0)
|
||||
if read_checksum != calculated_checksum:
|
||||
self.log.error(f"ENQUIRY RESPONSE CHECKSUM:{read_checksum}!={calculated_checksum}")
|
||||
return None
|
||||
else:
|
||||
response = response[:-2] # strip checksum & ETX
|
||||
return response
|
||||
|
||||
def send_product_tag(self, tag, tag_data):
|
||||
self.log.info(f"Sending tag:{tag}={tag_data}")
|
||||
command = bytearray(self.commands["product_data"])
|
||||
if type(tag_data) is str:
|
||||
tag_data = bytearray(tag_data, encoding="ascii")
|
||||
command.extend(self.product_tags[tag])
|
||||
command.extend(tag_data)
|
||||
self.send_command(command)
|
||||
|
||||
@staticmethod
|
||||
def calc_checksum(data, start_idx=1):
|
||||
checksum = 0
|
||||
for i, data_byte in enumerate(data):
|
||||
if i < start_idx:
|
||||
continue # skip EOT
|
||||
checksum = checksum ^ data_byte
|
||||
return checksum
|
||||
|
|
@ -33,8 +33,8 @@ class ModbusComponent(Component):
|
|||
self.stopbits = getattr(serial, self.config[self.name].get("stopbits", "stopbits_one").upper())
|
||||
self.parity = getattr(serial, self.config[self.name].get("parity", "parity_none").upper())
|
||||
self.bytesize = getattr(serial, self.config[self.name].get("bytesize", "eightbits").upper())
|
||||
self.byteorder = getattr(Endian, self.config[self.name].get("byteorder", "Big").title())
|
||||
self.wordorder = getattr(Endian, self.config[self.name].get("wordorder", "Little").title())
|
||||
self.byteorder = getattr(Endian, self.config[self.name].get("byteorder", "Big").upper())
|
||||
self.wordorder = getattr(Endian, self.config[self.name].get("wordorder", "Little").upper())
|
||||
self.timeout = int(self.config[self.name].get("timeout", 1))
|
||||
self.lock.lock()
|
||||
self.client = ModbusClient(
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import sys
|
||||
|
||||
if "--sim-serial" in sys.argv:
|
||||
if "--sim-multicomp" in sys.argv:
|
||||
from components.dummies.serial import serial
|
||||
else:
|
||||
import serial
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QMessageBox
|
|||
|
||||
from .component import Component
|
||||
|
||||
if platform.system() == "Windows":
|
||||
if platform.system().lower() == "windows":
|
||||
import win32print
|
||||
|
||||
|
||||
|
|
@ -34,8 +34,19 @@ class Os_Label_Printer(Component):
|
|||
def print_label(self, template, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
custom_label_folder=f"config/label_templates/{str(self.config.machine_id)}/"
|
||||
standard_label_folder=f"config/label_templates/"
|
||||
if os.path.exists(custom_label_folder):
|
||||
label_folder = custom_label_folder
|
||||
else:
|
||||
label_folder = standard_label_folder
|
||||
label_path = label_folder+str(template)
|
||||
if os.path.exists(label_path):
|
||||
pass
|
||||
else:
|
||||
label_path = standard_label_folder+str(template)
|
||||
# LOAD LABEL TEMPLATE
|
||||
with open(f"config/label_templates/{str(template)}", "r", errors="surrogateescape", encoding='iso-8859-1') as f:
|
||||
with open(label_path, "r", errors="surrogateescape", encoding='iso-8859-1') as f:
|
||||
label_file_contents = f.read()
|
||||
# LABEL PRINT
|
||||
#label = label.format(**context)
|
||||
|
|
@ -43,7 +54,7 @@ class Os_Label_Printer(Component):
|
|||
for key, val in context.items():
|
||||
key = "{" + key + "}"
|
||||
label_file_contents = label_file_contents.replace(key, val)
|
||||
if platform.system() == "Windows":
|
||||
if platform.system().lower() == "windows":
|
||||
try:
|
||||
printer = win32print.OpenPrinter(self.printer)
|
||||
job = win32print.StartDocPrinter(printer, 1, ("label", None, "RAW"))
|
||||
|
|
@ -64,16 +75,14 @@ class Os_Label_Printer(Component):
|
|||
label_file = "tmp/label.prn"
|
||||
with open(label_file, "w", errors="surrogateescape") as f:
|
||||
f.write(label_file_contents)
|
||||
if self.platform == "windows":
|
||||
if platform.system().lower() == "windows":
|
||||
cmd = f'print /d:"{self.printer}" "{label_file}"'
|
||||
elif self.platform == "cups":
|
||||
cmd = f'lp -d "{self.printer}" "{label_file}"'
|
||||
else:
|
||||
raise NotImplementedError(f"platform {self.platform!r} is not supported")
|
||||
cmd = f'lp -d "{self.printer}" "{label_file}"'
|
||||
if not self.simulate:
|
||||
p = subprocess.run(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True) # unsafe
|
||||
if p.returncode != 0:
|
||||
self.log.exception(f"failed to print: returncode: {p.returncode}\noutput:\n{p.stdout}")
|
||||
self.log.exception(f"failed to print: return code: {p.returncode}\noutput:\n{p.stdout}")
|
||||
QMessageBox.critical(
|
||||
None,
|
||||
"Errore Stampante",
|
||||
|
|
|
|||
|
|
@ -1,42 +0,0 @@
|
|||
import ctypes
|
||||
import sys
|
||||
import platform
|
||||
from PyQt5.QtCore import QMutex, Qt, QTimer, pyqtSlot, pyqtSignal
|
||||
from .component import Component
|
||||
import nfc
|
||||
from nfc.clf import RemoteTarget
|
||||
|
||||
|
||||
|
||||
is_win = platform.system() == "Windows"
|
||||
|
||||
class RFID(Component):
|
||||
def __init__(self, config=None, name=None, period=1, lazy=True, paused=False, threaded=True):
|
||||
super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded)
|
||||
self.mutex = QMutex()
|
||||
self.simulate="--sim-rfid" in sys.argv
|
||||
self.clf = nfc.ContactlessFrontend()
|
||||
|
||||
def open_device(self):
|
||||
self.clf.open('tty:USB0:pn532')
|
||||
|
||||
def close_device(self):
|
||||
pass
|
||||
|
||||
@pyqtSlot()
|
||||
def start(self):
|
||||
# ACQUISITION TIMER
|
||||
self.timer = QTimer()
|
||||
self.timer.setTimerType(Qt.PreciseTimer)
|
||||
self.timer.setInterval(int(1000 / 20))
|
||||
self.timer.timeout.connect(self.get)
|
||||
self.timer.start()
|
||||
super().start()
|
||||
|
||||
@pyqtSlot()
|
||||
def get(self):
|
||||
data=None
|
||||
if data is not None:
|
||||
super()._get([data])
|
||||
|
||||
|
||||
81
src/components/rfid_pn532.py
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import copy
|
||||
import ctypes
|
||||
import sys
|
||||
import platform
|
||||
from PyQt5.QtCore import QMutex, Qt, QTimer, pyqtSlot, pyqtSignal
|
||||
from .component import Component
|
||||
import ndef
|
||||
import nfc
|
||||
from nfc.clf import RemoteTarget
|
||||
|
||||
|
||||
|
||||
|
||||
class RFID_PN532(Component):
|
||||
new_id_signal = pyqtSignal(str)
|
||||
def __init__(self, config=None, name=None, period=1, lazy=True, paused=False, threaded=True):
|
||||
super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded)
|
||||
self.data_to_write = None
|
||||
self.mutex = QMutex()
|
||||
self.simulate="--sim-rfid" in sys.argv
|
||||
self.clf = None
|
||||
self.connected=False
|
||||
self.tag_present=False
|
||||
self.current_data=None
|
||||
self.is_win = platform.system().lower() == "windows"
|
||||
self.dev_list = [f"{'com'if self.is_win else 'tty'}:{self.config['fixture_rfid']['port']}:pn532"]
|
||||
self._period = 1
|
||||
|
||||
def open_device(self):
|
||||
self.clf = nfc.ContactlessFrontend()
|
||||
for dev in self.dev_list:
|
||||
self.connected = self.clf.open(dev)
|
||||
if self.connected:
|
||||
self.log.info(f"CONNECTED TO {dev}")
|
||||
break
|
||||
else:
|
||||
self.log.info(f"UNABLE TO CONNECT TO {dev}")
|
||||
|
||||
def close_device(self):
|
||||
self.clf.close()
|
||||
|
||||
@pyqtSlot()
|
||||
def start(self):
|
||||
super().start()
|
||||
|
||||
@pyqtSlot()
|
||||
def _get(self):
|
||||
if not self.simulate:
|
||||
if self.mutex.tryLock():
|
||||
try:
|
||||
if not self.connected:
|
||||
self.open_device()
|
||||
else:
|
||||
target = self.clf.sense(RemoteTarget('106A'), RemoteTarget('106B'), RemoteTarget('212F'))
|
||||
if target is not None:
|
||||
tag = nfc.tag.activate(self.clf, target)
|
||||
if tag is not None:
|
||||
self.log.debug("tag present")
|
||||
if tag.ndef is not None:
|
||||
tag_content=tag.ndef.records[0].text
|
||||
if tag_content!=self.current_data:
|
||||
self.log.info(f"new tag detected:{tag_content}")
|
||||
self.current_data=tag_content
|
||||
self.new_id_signal.emit(self.current_data)
|
||||
else:
|
||||
self.log.error("tag is not NDEF")
|
||||
else:
|
||||
if self.current_data:
|
||||
self.log.info(f"tag removed:{self.current_data}")
|
||||
self.current_data = None
|
||||
self.new_id_signal.emit(None)
|
||||
self.log.debug("no target present")
|
||||
|
||||
except Exception as e:
|
||||
self.log.info(f"{e}")
|
||||
self.connected = False
|
||||
finally:
|
||||
self.mutex.unlock()
|
||||
|
||||
def write_tag(self,data):
|
||||
self.data_to_write=copy.deepcopy(data)
|
||||
|
|
@ -24,7 +24,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
elif self.model == "t3l":
|
||||
self.registers = t3l_registers
|
||||
else:
|
||||
raise NotImplementedError(f"techna t3 model {self.model!r} not implemented.")
|
||||
raise NotImplementedError(f"tecna t3 model {self.model!r} not implemented.")
|
||||
self.set_measure_units()
|
||||
self.units = self.get_measure_units()
|
||||
self.max_program_number = self.read("Max number of programs")
|
||||
|
|
@ -67,7 +67,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
}.items():
|
||||
self.write(register, unit) # (decimals << 8) + unit)
|
||||
else:
|
||||
raise NotImplementedError(f"techna t3 model {self.model!r} not implemented.")
|
||||
raise NotImplementedError(f"tecna t3 model {self.model!r} not implemented.")
|
||||
|
||||
def get_measure_units(self):
|
||||
units = {}
|
||||
|
|
@ -105,7 +105,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
for unit_name in unit_names:
|
||||
units[unit_name] = unit_spec
|
||||
else:
|
||||
raise NotImplementedError(f"techna t3 model {self.model!r} not implemented.")
|
||||
raise NotImplementedError(f"tecna t3 model {self.model!r} not implemented.")
|
||||
return units
|
||||
|
||||
def _convert_from_format(self, data, formatting=None, decoding_map=None):
|
||||
|
|
@ -205,16 +205,15 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
# READ INFO
|
||||
info = {r: self.read(r) for r in [
|
||||
"Real time test pressure output",
|
||||
"Real time differential pressure output",
|
||||
"Real time pressure line regulator",
|
||||
#"Real time differential pressure output",
|
||||
#"Active alarm flags",
|
||||
#"Active test program number",
|
||||
"Active alarm flags",
|
||||
"Active test program number",
|
||||
"Running test: active phase",
|
||||
"Running test: test type",
|
||||
"Running test: measured leak",
|
||||
"Running test: sequence index",
|
||||
"Digital inputs status (mask)",
|
||||
"Digital outputs status (mask)",
|
||||
# "Digital outputs status (mask)",
|
||||
]}
|
||||
if self.model == "t3p":
|
||||
pass
|
||||
|
|
@ -272,6 +271,10 @@ 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))
|
||||
test_flags = 0b0110100001010100 if (step.spec.get("autotest", False) in ["ko_check"]) else 0b0110000001010100
|
||||
pid_mode = int(self.config["recipes_defaults"]["pid_mode"])<<4
|
||||
test_flags = test_flags | pid_mode
|
||||
pid_ramps=0b0000000000000000 | int(self.config["recipes_defaults"]["pid_level"])<<8 | int(self.config["recipes_defaults"]["pid_speed"])<<12
|
||||
spec = {
|
||||
"Flag: Instrument settings": 0b0000000000000000,
|
||||
"Test program for read/write operation": table,
|
||||
|
|
@ -281,8 +284,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
# **{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 flags": 0b0110000001011100 if step.spec.get("autotest", False) is not True else 0b0110000001010100,
|
||||
"Test flags": 0b0110100001010100 if step.spec.get("autotest", False) in ("ok_check","ko_check") else 0b0110000001010100,
|
||||
"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"],
|
||||
|
|
@ -295,6 +297,11 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
"Q+ Upper test leak limit": step.spec["test_pressure_qpos"],
|
||||
"FST - Discharge time": step.spec["flush_time"],
|
||||
"FSL - Discharge limit": step.spec["flush_pressure"],
|
||||
"PSQ - Next sequence program PSOUT mode": 0,
|
||||
"RAMPS: T1 configuration": pid_ramps,
|
||||
"PID: pressure correction": int(self.config["recipes_defaults"]["pid_pressure_correction"]),
|
||||
"Various flags": 0b0000000000010000 if self.config["recipes_defaults"]["tester_discharge_enable"] == "yes" else 0b0000000000000000
|
||||
|
||||
}
|
||||
if self.model == "t3p":
|
||||
pass
|
||||
|
|
@ -305,7 +312,7 @@ class TecnaMarpossProvasetT3(ModbusComponent):
|
|||
"Pn - Nominal test pressure": step.spec["test_pressure"],
|
||||
})
|
||||
else:
|
||||
raise NotImplementedError(f"techna t3 model {self.model!r} not implemented.")
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -275,9 +275,7 @@ registers = {
|
|||
# T1/Pr: Filling mode 0=TIME 1=PRESSURE (*)
|
||||
# T1/Pr (T3LPQ) = 0 - 250 (seconds)
|
||||
# T3/Q: Fail mode 0=TIME 1=PRESSURE (*)
|
||||
# PID MODE: 0=FAST 1=MEDIUM 2=SLOW 4 = FIXED 5 = AUTOMATIC 6 = FLOW 7 = LEAK WITH
|
||||
# -----
|
||||
# FLOW
|
||||
# PID MODE: 0=FAST 1=MEDIUM 2=SLOW 4 = FIXED 5 = AUTOMATIC 6 = FLOW 7 = LEAK WITH FLOW
|
||||
# P0-: 0= P0 pre-filling pressure is positive 1=P0 pre-filling pressure is negative (vacuum)
|
||||
# Pr-: 0= Pr filling pressure is positive 1=Pr filling pressure is negative (vacuum)
|
||||
# B: = beep (not used)
|
||||
|
|
@ -337,5 +335,7 @@ registers = {
|
|||
"T1 Steps - T1 Step %": [753 - 1, {"dt": "16bit_uint", }],
|
||||
# | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 |
|
||||
# | Step % T1 | T1 Steps |
|
||||
"Sequence": [754 - 1, {"dt": "16bit_uint", }],
|
||||
"PSQ - Next sequence program PSOUT mode": [754 - 1, {"dt": "16bit_uint", }],
|
||||
"RAMPS: T1 configuration": [755-1, {"dt": "16bit_uint", }],
|
||||
"Various flags": [758-1, {"dt": "16bit_uint", }]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ registers = {
|
|||
"PB - Minimum burst pressure": [743 - 1, {"dt": "16bit_uint", "f": 23, }],
|
||||
"BD - Burst gap / PD - Delta Aperture": [744 - 1, {"dt": "16bit_uint", "f": 23, }],
|
||||
"FSL - Discharge limit": [745 - 1, {"dt": "16bit_uint", "f": 23, }],
|
||||
"RP% - Pressure ratio": [746 - 1, {"dt": "16bit_uint", "g": 100, }],
|
||||
"PID: pressure correction": [746 - 1, {"dt": "16bit_uint", "g": 100, }],
|
||||
# Format; x.xx %
|
||||
"PR+ - Max pressure tolerance % (P+)": [747 - 1, {"dt": "16bit_uint", "g": 10, }],
|
||||
# Format: x.x %
|
||||
|
|
@ -297,6 +297,7 @@ registers = {
|
|||
# | 15 14 13 12 11 10 9 8 | 7 6 5 4 | 3 2 1 0 |
|
||||
# | PSQ | | PSOUT |
|
||||
# PSOUT MODE: 0 = While test run 1 = After start delay 2 = Always 3 = Only during start delay
|
||||
"Various flags": [758 - 1, {"dt": "16bit_uint", }]
|
||||
|
||||
# 1001-1060 Table of the last test performed X The order of the parameters is always the same, as indicated for register from 701 to 759.
|
||||
# 10001-10060 Direct access to test program table number 1 X X The order of the parameters is always the same, as indicated for register from 701 to 759.
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
from random import random
|
||||
|
||||
from .component import Component
|
||||
|
||||
|
||||
class TestComponent(Component):
|
||||
def __init__(
|
||||
self,
|
||||
config=None,
|
||||
name=None,
|
||||
period=1,
|
||||
lazy=True,
|
||||
paused=False,
|
||||
threaded=True,
|
||||
):
|
||||
super().__init__(
|
||||
config=config,
|
||||
name=name,
|
||||
period=period,
|
||||
lazy=lazy,
|
||||
paused=paused,
|
||||
threaded=threaded,
|
||||
)
|
||||
self.parameter = self.config[self.name]["parameter"]
|
||||
|
||||
def _get(self, data=None):
|
||||
super()._get([self.parameter] + [random() for i in range(2)])
|
||||
|
||||
def _set(self, val=None):
|
||||
super()._set(val)
|
||||
|
|
@ -5,10 +5,11 @@ import time
|
|||
from enum import Enum
|
||||
|
||||
from PyQt5.QtCore import QMutex, Qt, QTimer, pyqtSlot, pyqtSignal
|
||||
from PyQt5.QtWidgets import QMessageBox, QApplication
|
||||
|
||||
from .component import Component
|
||||
|
||||
is_win = platform.system() == "Windows"
|
||||
is_win = platform.system().lower() == "windows"
|
||||
|
||||
if "--sim-io" not in sys.argv:
|
||||
if is_win:
|
||||
|
|
@ -38,10 +39,12 @@ class USB_586x(Component):
|
|||
|
||||
def __init__(self, config=None, name=None, period=1, lazy=True, paused=False, threaded=True):
|
||||
super().__init__(config=config, name=name, period=period, lazy=lazy, paused=paused, threaded=threaded)
|
||||
self.buffer = None
|
||||
self.io_ok = False
|
||||
self.mutex = QMutex()
|
||||
self.simulate="--sim-io" in sys.argv
|
||||
# DEVICE INFORMATION
|
||||
self.id=config["digital_io"]["id"]
|
||||
self.id=config[name]["id"]
|
||||
if "5860" in self.id:
|
||||
self.type = "5860"
|
||||
self.in_size = 1
|
||||
|
|
@ -53,15 +56,14 @@ class USB_586x(Component):
|
|||
self.info = self.DeviceInformation()
|
||||
self.info.Description = self.id
|
||||
|
||||
# self.info.DeviceNumber = -1
|
||||
self.info.DeviceMode = 1
|
||||
self.info.ModuleIndex = 0
|
||||
|
||||
self.open_device()
|
||||
|
||||
# SET ALL RELAYS OFF
|
||||
for bit in range(0, self.out_size*8):
|
||||
self.set_bit(int(bit/8), bit%8, False)
|
||||
for bit in range(0, self.out_size * 8):
|
||||
self.set_bit(int(bit/8), bit % 8, False)
|
||||
|
||||
self.state_delay = 1
|
||||
self.last_get = None
|
||||
|
|
@ -69,14 +71,23 @@ class USB_586x(Component):
|
|||
self.last_out = None
|
||||
|
||||
def open_device(self):
|
||||
# DIGITAL INPUTS CLASS
|
||||
# DIGITAL I/O CLASS
|
||||
if not self.simulate:
|
||||
self.log.info("OPENING USB MODULE...")
|
||||
if is_win:
|
||||
self.di_ctrl = InstantDiCtrl(self.info.Description)
|
||||
self.do_ctrl = InstantDoCtrl(self.info.Description)
|
||||
self.di_read = self.di_ctrl.readAny
|
||||
self.do_write_bit = self.do_ctrl.writeBit
|
||||
self.buffer = ctypes.create_string_buffer(2)
|
||||
try:
|
||||
self.di_ctrl = InstantDiCtrl(self.info.Description)
|
||||
self.do_ctrl = InstantDoCtrl(self.info.Description)
|
||||
self.di_read = self.di_ctrl.readAny
|
||||
self.do_write_bit = self.do_ctrl.writeBit
|
||||
self.buffer = ctypes.create_string_buffer(2)
|
||||
self.io_ok=True
|
||||
except ValueError:
|
||||
QMessageBox.critical(None, "ERRORE", f"ERRORE I/O DIGITALE - VERIFICARE CONNESSIONE USB")
|
||||
exit(-1)
|
||||
self.io_ok = False
|
||||
|
||||
time.sleep(1)
|
||||
else:
|
||||
self.di_create = libbiodaq.AdxInstantDiCtrlCreate
|
||||
self.di_create.restype = ctypes.c_void_p
|
||||
|
|
@ -108,12 +119,14 @@ class USB_586x(Component):
|
|||
self.do_ctrl = self.do_create()
|
||||
self.di_init_status = self.di_setSelectedDevice(self.di_ctrl, ctypes.byref(self.info))
|
||||
self.do_init_status = self.do_setSelectedDevice(self.do_ctrl, ctypes.byref(self.info))
|
||||
self.io_ok = True
|
||||
else:
|
||||
self.di_ctrl = InstantDiCtrl(self.info.Description)
|
||||
self.do_ctrl = InstantDoCtrl(self.info.Description)
|
||||
self.di_read = self.di_ctrl.readAny
|
||||
self.do_write_bit = self.do_ctrl.writeBit
|
||||
self.buffer = ctypes.create_string_buffer(2)
|
||||
self.io_ok = True
|
||||
|
||||
def close_device(self):
|
||||
pass
|
||||
|
|
@ -156,25 +169,42 @@ class USB_586x(Component):
|
|||
def get(self):
|
||||
self.mutex.lock()
|
||||
read = []
|
||||
if is_win or self.simulate:
|
||||
if self.simulate:
|
||||
read=[1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]
|
||||
else:
|
||||
ret = self.di_read(0, self.in_size)
|
||||
if ret[0].value == ErrorCode.Success.value:
|
||||
self.buffer = ret[1]
|
||||
for byte_num in range(len(self.buffer)):
|
||||
byte = self.buffer[byte_num]
|
||||
read.append([bool(byte & m) for m in self.masks])
|
||||
|
||||
retry=0
|
||||
max_retry = 3
|
||||
while retry < max_retry:
|
||||
|
||||
if is_win or self.simulate:
|
||||
if self.simulate:
|
||||
read=[1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]
|
||||
break
|
||||
else:
|
||||
self.buffer = None
|
||||
else:
|
||||
self.di_read(self.di_ctrl, 0, self.in_size, self.buffer)
|
||||
if self.io_ok:
|
||||
ret = self.di_read(0, self.in_size)
|
||||
if ret[0].value == ErrorCode.Success.value:
|
||||
self.buffer = ret[1]
|
||||
for byte_num in range(len(self.buffer)):
|
||||
byte = self.buffer[byte_num]
|
||||
read.append([bool(byte & m) for m in self.masks])
|
||||
else:
|
||||
self.buffer = None
|
||||
self.log.error(f"READ ERROR")
|
||||
self.di_ctrl.dispose()
|
||||
self.do_ctrl.dispose()
|
||||
self.io_ok = False
|
||||
|
||||
for byte_num in range(len(self.buffer)):
|
||||
byte = int.from_bytes(self.buffer[byte_num], "little")
|
||||
read.append([bool(byte & m) for m in self.masks])
|
||||
|
||||
if self.io_ok:
|
||||
break
|
||||
else:
|
||||
time.sleep(1)
|
||||
self.open_device()
|
||||
else:
|
||||
self.di_read(self.di_ctrl, 0, self.in_size, self.buffer)
|
||||
|
||||
for byte_num in range(len(self.buffer)):
|
||||
byte = int.from_bytes(self.buffer[byte_num], "little")
|
||||
read.append([bool(byte & m) for m in self.masks])
|
||||
|
||||
self.mutex.unlock()
|
||||
return read
|
||||
|
|
@ -193,13 +223,17 @@ class USB_586x(Component):
|
|||
def set_bit(self, byte, bit, val):
|
||||
self.mutex.lock()
|
||||
# print("set", byte, bit, not val, flush=True)
|
||||
if not self.simulate:
|
||||
if is_win:
|
||||
ret=self.do_write_bit(byte, bit, int(val))
|
||||
if self.io_ok:
|
||||
if not self.simulate:
|
||||
if is_win:
|
||||
ret=self.do_write_bit(byte, bit, int(val))
|
||||
else:
|
||||
ret=self.do_write_bit(self.do_ctrl, byte, bit, int(val))
|
||||
else:
|
||||
ret=self.do_write_bit(self.do_ctrl, byte, bit, int(val))
|
||||
ret = ErrorCode.Success
|
||||
|
||||
else:
|
||||
ret = ErrorCode.Success
|
||||
ret =False
|
||||
self.mutex.unlock()
|
||||
return ret
|
||||
|
||||
|
|
@ -208,15 +242,15 @@ class USB_586x(Component):
|
|||
ok = False
|
||||
retry=0
|
||||
max_retry = 3
|
||||
while not ok and retry <max_retry:
|
||||
while not ok and retry < max_retry:
|
||||
ret = self.set_bit(byte, bit, val)
|
||||
if ret.value != ErrorCode.Success.value and not self.simulate:
|
||||
self.log.error(f"SET BIT ERROR")
|
||||
time.sleep(1)
|
||||
self.open_device()
|
||||
retry+=1
|
||||
retry += 1
|
||||
else:
|
||||
ok = True
|
||||
|
||||
return ok
|
||||
|
||||
# val from buffer channel
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ class VisionSaver(Component):
|
|||
save_time = int(save_time)
|
||||
if type(save_time) is int:
|
||||
save_time = datetime.fromtimestamp(save_time)
|
||||
if type(save_time) is str:
|
||||
save_time = datetime.now()
|
||||
if type(save_time) is not datetime:
|
||||
raise ValueError(f"save_time must be float int or datetime, not {type(save_time)}")
|
||||
timestamp = save_time.strftime(self.time_format)
|
||||
|
|
|
|||
25
src/lib/helpers/single_process.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
from PyQt5.QtCore import QSharedMemory
|
||||
|
||||
|
||||
class SingleProcess:
|
||||
def __init__(self, key='memory_condition_key'):
|
||||
self._shm = QSharedMemory(key)
|
||||
if not self._shm.attach():
|
||||
if not self._shm.create(1):
|
||||
raise RuntimeError('error creating shared memory: %s' %
|
||||
self._shm.errorString())
|
||||
self.condition = False
|
||||
|
||||
def __enter__(self):
|
||||
self._shm.lock()
|
||||
if self._shm.data()[0] == b'\x00':
|
||||
self.condition = True
|
||||
self._shm.data()[0] = b'\x01'
|
||||
self._shm.unlock()
|
||||
return self.condition
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
if self.condition:
|
||||
self._shm.lock()
|
||||
self._shm.data()[0] = b'\x00'
|
||||
self._shm.unlock()
|
||||
65
src/main.py
|
|
@ -11,6 +11,8 @@ import weakref
|
|||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from lib.helpers.single_process import SingleProcess
|
||||
|
||||
if platform.system().lower() == "windows":
|
||||
sys.path.append(f"{os.getcwd()}\src\components")
|
||||
else:
|
||||
|
|
@ -41,13 +43,13 @@ logs_dir = Path(".") / "data" / "logs"
|
|||
os.makedirs(logs_dir, exist_ok=True)
|
||||
logging.basicConfig(
|
||||
format="{asctime}:{name}:{levelname}:{message}",
|
||||
datefmt="%Y-%m-%dT%H-%M-%S%z",
|
||||
datefmt="%Y-%m-%d_%H-%M-%S",
|
||||
style="{",
|
||||
level="INFO",
|
||||
level="DEBUG" if "--debug" in sys.argv else "INFO",
|
||||
handlers=[
|
||||
logging.StreamHandler(stream=sys.stderr),
|
||||
logging.FileHandler(
|
||||
logs_dir / f"{datetime.now().isoformat().replace(':', '_')}.log",
|
||||
logs_dir / f"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log",
|
||||
mode="a",
|
||||
encoding="utf-8",
|
||||
delay=False,
|
||||
|
|
@ -60,15 +62,16 @@ logging.basicConfig(
|
|||
)
|
||||
|
||||
try:
|
||||
# IMPORT PROJECT ONLY AFTER SETTING UP SIGNAL, FAULTHANDLER AND LOGGHING
|
||||
# IMPORT PROJECT ONLY AFTER SETTING UP SIGNAL, FAULTHANDLER AND LOGGING
|
||||
from components import (ArchiveSynchronizer, Multicomp730424,
|
||||
Os_Label_Printer, RemoteAPI,
|
||||
TecnaMarpossProvasetT3, TecnaScrewdriver, USB_586x)
|
||||
TecnaMarpossProvasetT3,FurnessControlsLeakTester, TecnaScrewdriver, USB_586x,RFID_PN532)
|
||||
from lib.db import Users
|
||||
from lib.helpers import ConfigReader
|
||||
from PyQt5.QtCore import QObject, QThread, pyqtSignal
|
||||
from PyQt5.QtWidgets import QApplication, QMessageBox
|
||||
from ui import About, Archive, Login, Main_Window, Test, Users_Management, Recipe_Selection
|
||||
from ui import About, Archive, Login, Main_Window, Test, Users_Management, Recipe_Selection, \
|
||||
Barcode_Recipe_Selection
|
||||
|
||||
if "--vision" in sys.argv:
|
||||
from components import GalaxyCamera, NeoPixels, UVCCamera, Vision, VisionSaver
|
||||
|
|
@ -91,6 +94,7 @@ try:
|
|||
system_id = args.system_id if "system_id" in args else None
|
||||
|
||||
self.config = ConfigReader(system_id=system_id)
|
||||
logging.info(f"STARTING SESSION ON MACHINE {self.config['machine']['description']}")
|
||||
self.config["autotest_done"] = False
|
||||
# INIT COMPONENT
|
||||
self.components_specs = {
|
||||
|
|
@ -101,7 +105,10 @@ try:
|
|||
"remote_api": {"c": RemoteAPI, "k": {"main": self}},
|
||||
"screwdriver": {"c": TecnaScrewdriver, "k": {"paused": True}},
|
||||
"tecna_t3": {"c": TecnaMarpossProvasetT3, "k": {"paused": True}},
|
||||
"digital_io":{"c":USB_586x,"k":{"paused":True}}
|
||||
"furness_controls": {"c": FurnessControlsLeakTester, "k": {"paused": True}},
|
||||
"digital_io":{"c":USB_586x,"k":{"paused":True}},
|
||||
"digital_io_flush_blow":{"c":USB_586x,"k":{"paused":True}},
|
||||
"fixture_id":{"c":RFID_PN532,"k":{"paused":False, "lazy":False}},
|
||||
}
|
||||
# VISION COMPONENT IS OPTIONAL AND DISABLED BY DEFAULT
|
||||
if "--vision" in sys.argv:
|
||||
|
|
@ -146,15 +153,18 @@ try:
|
|||
logging.exception(traceback.format_exc())
|
||||
QMessageBox.critical(None, "Errore", f"Errore di avvio del programma di collaudo:\n\n{e}")
|
||||
quit()
|
||||
|
||||
# connect camera frames to vision
|
||||
if "vision" in self.components and "uvc_camera" in self.components:
|
||||
self.components["vision"].set_sources({"uvc_camera": self.components["uvc_camera"].out})
|
||||
elif "vision" in self.components and "galaxy_camera" in self.components:
|
||||
self.components["vision"].set_sources({"galaxy_camera": self.components["galaxy_camera"].out})
|
||||
|
||||
# connect tecna to screwdriver
|
||||
if "screwdriver" in self.components and "tecna_t3" in self.components:
|
||||
self.components["tecna_t3"].set_requestors({"screwdriver": self.components["screwdriver"].request})
|
||||
self.components["screwdriver"].set_sources({"tecna_t3": self.components["tecna_t3"].out})
|
||||
|
||||
# GUI INIT
|
||||
if "--no-gui" not in sys.argv:
|
||||
# self.main_window = Main_Window(self.bench)
|
||||
|
|
@ -177,7 +187,7 @@ try:
|
|||
self.main_window.users_management_a.triggered.connect(lambda checked, self=weakref.ref(self): self().main_window.open_dialog(Users_Management()))
|
||||
self.main_window.table_selection_a.triggered.connect(self.set_recipe_mode_table)
|
||||
self.main_window.barcode_selection_a.triggered.connect(self.set_recipe_mode_barcode)
|
||||
|
||||
self.main_window.ristampa_etichetta_a.triggered.connect(self.reprint_label)
|
||||
if "--users-management" in sys.argv:
|
||||
self.main_window.users_management_a.trigger()
|
||||
|
||||
|
|
@ -219,21 +229,24 @@ try:
|
|||
self.main_window.admin_m.menuAction().setVisible(False)
|
||||
# open test
|
||||
self.main_window.open_tab(Test(self.config, self.components,self))
|
||||
self.main_window.centralWidget().request_autotest("login")
|
||||
else:
|
||||
self.main_window.admin_m.menuAction().setVisible(False)
|
||||
|
||||
def logout(self):
|
||||
Users.logout()
|
||||
#Users.logout()
|
||||
self.main_window.admin_m.menuAction().setVisible(False)
|
||||
if type(self.main_window.centralWidget().centralWidget.widget) is Recipe_Selection:
|
||||
if type(self.main_window.centralWidget().centralWidget.widget) in (Recipe_Selection,Barcode_Recipe_Selection):
|
||||
# LOGOUT IMMEDIATELY IF NOT TESTING
|
||||
Users.logout()
|
||||
self.open_login()
|
||||
else:
|
||||
if not self.main_window.centralWidget().autotesting:
|
||||
self.main_window.centralWidget().change_recipe() # STOP CURRENT TEST
|
||||
# LOGOUT AFTER AUTOTEST IF TESTING
|
||||
self.main_window.centralWidget().request_autotest("logout")
|
||||
else:
|
||||
# LOGOUT IMMEDIATELY IF AUTOTESTING
|
||||
Users.logout()
|
||||
self.open_login()
|
||||
|
||||
def set_recipe_mode_table(self):
|
||||
|
|
@ -241,20 +254,28 @@ try:
|
|||
|
||||
def set_recipe_mode_barcode(self):
|
||||
self.main_window.centralWidget().set_recipe_mode_barcode()
|
||||
|
||||
def reprint_label(self):
|
||||
self.main_window.centralWidget().reprint_label()
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
main = Main()
|
||||
if "--no-gui" not in sys.argv:
|
||||
app.exec()
|
||||
if "--interact" in sys.argv:
|
||||
import code
|
||||
import readline
|
||||
|
||||
variables = globals().copy()
|
||||
variables.update(locals())
|
||||
shell = code.InteractiveConsole(variables)
|
||||
shell.interact()
|
||||
with SingleProcess() as single_process_lock:
|
||||
if not single_process_lock:
|
||||
logging.error(f"Program already opened, exiting...")
|
||||
QMessageBox.critical(None, "ERRORE", "IL PROGRAMMA E' GIA' IN ESECUZIONE")
|
||||
exit(0)
|
||||
|
||||
main = Main()
|
||||
if "--no-gui" not in sys.argv:
|
||||
app.exec()
|
||||
if "--interact" in sys.argv:
|
||||
import code
|
||||
import readline
|
||||
|
||||
variables = globals().copy()
|
||||
variables.update(locals())
|
||||
shell = code.InteractiveConsole(variables)
|
||||
shell.interact()
|
||||
except Exception:
|
||||
logging.exception(traceback.format_exc())
|
||||
# extype, value, tb = sys.exc_info()
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ bottle
|
|||
google-cloud-storage
|
||||
imutils
|
||||
lxml
|
||||
nfcpy
|
||||
numpy
|
||||
opencv-python-headless
|
||||
peewee
|
||||
|
|
@ -16,5 +17,5 @@ pyserial
|
|||
pyserial-asyncio
|
||||
requests
|
||||
tensorflow
|
||||
tflite-runtime
|
||||
#tflite-runtime
|
||||
zebra
|
||||
|
|
|
|||
5
src/scripts/fix_db_qpos_qneg.sqlite
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
-- REMEMBER TO BACKUP DB FIRST --
|
||||
update steps set spec = json_insert(spec,"$.test_pressure_qpos",(json_extract(steps.spec, '$.test_pressure_max_delta'))) where type == "leak_1" or type=="leak_2";
|
||||
update steps set spec = json_insert(spec,"$.test_pressure_qneg",(json_extract(steps.spec, '$.test_pressure_min_delta'))) where type == "leak_1" or type=="leak_2";
|
||||
update steps set spec = json_insert(spec,"$.test_pressure_qpos",(json_extract(steps.spec, '$.test_pressure_max_delta'))) where type == "leak_1" or type=="leak_2";
|
||||
update steps set spec = json_insert(spec,"$.test_pressure_qneg",(json_extract(steps.spec, '$.test_pressure_min_delta'))) where type == "leak_1" or type=="leak_2";
|
||||
|
|
@ -8,13 +8,19 @@ fieldnames = [
|
|||
"cliente",
|
||||
"codice_prodotto",
|
||||
"descrizione",
|
||||
"prova_tenuta_abilitata_2"
|
||||
"pressione_di_test",
|
||||
"pressione_di_test_delta_minimo",
|
||||
"pressione_di_test_delta_massimo",
|
||||
"tempo_riempimento",
|
||||
"tempo_assestamento",
|
||||
"tempo_di_test",
|
||||
#"prova_tenuta_abilitata_2"
|
||||
]
|
||||
|
||||
# FOLDER CONFIGURATION
|
||||
in_path="../../tmp/ricette/"
|
||||
files=glob(f"{in_path}/**/*.dsg",recursive=True)
|
||||
csv_path="../test/csv_import/importazione da banco montaggio.csv"
|
||||
csv_path="../test/csv_import/importazione da banco preformatura.csv"
|
||||
data=[]
|
||||
|
||||
#FOR EACH FILE CREATE A TEST RECIPE
|
||||
|
|
@ -30,7 +36,13 @@ for file in files:
|
|||
"cliente":list(read_values["cliente"].keys())[0],
|
||||
"codice_prodotto":list(read_values["numero disegno"].keys())[0],
|
||||
"descrizione":os.path.basename(file),
|
||||
"prova_tenuta_abilitata_2":"x" if list(read_values["prova2:tempo di riempimento"].keys())[0] not in ("0","00") else ""
|
||||
"pressione_di_test":str(int(list(read_values["prova2:pressione di test"].keys())[0])*10),
|
||||
"pressione_di_test_delta_minimo":list(read_values["prova2:tolleranza"].keys())[0],
|
||||
"pressione_di_test_delta_massimo":list(read_values["prova2:tolleranza"].keys())[0],
|
||||
"tempo_riempimento":list(read_values["prova2:tempo di riempimento"].keys())[0],
|
||||
"tempo_assestamento":list(read_values["prova2:tempo di stabilizzazione"].keys())[0],
|
||||
"tempo_di_test": list(read_values["prova2:tempo di prova"].keys())[0],
|
||||
#"prova_tenuta_abilitata_2":"x" if list(read_values["prova2:tempo di riempimento"].keys())[0] not in ("0","00") else ""
|
||||
|
||||
}
|
||||
data.append(line)
|
||||
|
|
|
|||