/******************************************* * tubi_sitter.c * * * *******************************************/ #include #include #include #include #include #include #include #include "a200.h" /* definitions relative to the CAEN system */ #include "a200.hmn" #include "../lib/comx.h" #include "../lib/mylib1.h" #include "../dbase/hv_dbase.h" #define SLEEP_MAX 0 /* nr of cycles for which a chan. is put to sleep */ #define SECONDS #define MINUTES * 60 #define TWENTY_S 20 /* timeout value ( in seconds ) */ SY227_MBOX *sy227_mod; int sem_227mod_id; SY127_MBOX *sy127_mod; hv_mod_struct *mid; int sem_127mod_id; char *caller; char line[80], cline[80], tmpfile[64], tmpfile_h[64]; int n_order, alarm[40], sleep_count[40]; int cpu_nr, tcp_ip_nr; FILE *fp, *fp1, *fp2, *fopen(); sighand(signal) register int signal; { if ( signal >= 2 && signal <= 3){ /* ^C or ^E ? */ munlink(mid); exit(0); } } main(argc, argv) int argc; char *argv[]; { char chamber_code[6]; char old_chamber[6]; char *mod_name0 = "hv_config0"; char *mod_name1 = "hv_config1"; char *mod_name2 = "hv_config2"; char *mod_name, *hv_config[3]; int dis, sl; int ch1, ch2, first_print; int nwrite, nerror, par_val; short ndata, data[45], prot_word; short i, ir, j, k, chan, value, code; int n_good, n_bad; float imean, vmean; short ch_imax, imax, d_vmon[32], d_imon[32], d_status[32]; short hv_ch_A, hv_ch_Ref, on_off, hv_in; int sy127_mod_vim_tim[32]; int sy127_mod_sta_tim[32]; int sy227_mod_vim_tim[32]; int sy227_mod_sta_tim[32]; int sy127_mod_nvim; int sy127_mod_nvim_err; int sy127_mod_nsta; int sy127_mod_nsta_err; int sy227_mod_nvim; int sy227_mod_nvim_err; int sy227_mod_nsta; int sy227_mod_nsta_err; short status_hv_ch_Ref, status_hv_ch_A; short v0_hv_ch_Ref, v0_hv_ch_A; short vmon_hv_ch_Ref, vmon_hv_ch_A; short i0_hv_ch_Ref, i0_hv_ch_A; short imon_hv_ch_Ref, imon_hv_ch_A; int yy, mm, dd, hh, min, sec; int jtime1, jdate1; int jtime2, jdate2; int tick; short day; int time_lost, time_to_sleep; int ncycle, n_anomalous[40]; int skip_ch, switch_off; int imin, nmin, pmin; strcpy(old_chamber, "??"); intercept(sighand); imin = -1; if (argc > 1){ if (strcmp(argv[1], "-?") == 0){ printf(" usage: ``fil_parade'' : print all bad channels\n"); printf(" ``fil_parade imin'' : .... only channels\n"); printf(" with >= imin are printed\n"); printf(" ``fil_parade nmin volte'' : .... only channels\n"); printf(" found bad >= nmin times are printed\n"); printf(" ``fil_parade pmin %%'' : .... only channels\n"); printf(" found bad >= pmin %% of\n"); printf(" the times are printed\n"); exit(0); } imin = atoi(argv[1]); } pmin = 0; nmin = 0; if (argc > 2){ upperword(argv[2]); if ( strcmp(argv[2], "VOLTE") == 0){ nmin = imin; imin = 0; } else if (strcmp(argv[2], "%") == 0){ pmin = imin; if (pmin > 100) pmin = 100; if (pmin < 0) pmin = 0; imin = 0; } } get_config(&tcp_ip_nr, &cpu_nr, hv_config); mod_name = hv_config[cpu_nr]; if ((mid = (hv_mod_struct *)modlink(mod_name, 0)) == (hv_mod_struct *)-1) if ((mid = (hv_mod_struct *)modload(mod_name, 0)) == (hv_mod_struct *)-1) exit(_errmsg(errno, "%s: error linking module %s\n", argv[0], mod_name)); printf(" number of tubi_sitter checks with V1 active %d\n\n", mid->sitter_v1_controls); if (pmin){ nmin = (int)( (float) mid->sitter_v1_controls * (float) pmin /100. ); } strcpy (chamber_code, "0"); for(dis = 0; dis < mid->n_crates; dis++) for(sl = 0; sl < 4; sl++) /* successivamente si potrebbe chiedere soltanto una camera */ if((strcmp(chamber_code, mid->distr[dis].slot[sl].chamber) == 0 || strcmp(chamber_code, mid->distr[dis].slot[sl].cable_name) == 0 || ( strcmp("0", chamber_code) == 0 && mid->distr[dis].slot[sl].hv_ch_Ref >= 0) ) && mid->distr[dis].slot[sl].d_used_ch && !(mid->distr[dis].slot[sl].cond IS_CONDITIONING) ){ /* not cond */ if (mid->distr[dis].slot[sl].d_used_ch){ if (strcmp(mid->distr[dis].slot[sl].chamber,"01")) { /* distributors */ for (i = 0; i < 32; i++){ if ( mid->distr[dis].slot[sl].nvolte[i] && (mid->distr[dis].slot[sl].imedia[i] >= (float)imin && mid->distr[dis].slot[sl].nvolte[i] >= nmin ) ){ printf("> %s (cr %2d, sl %2d) ch %2d : ", mid->distr[dis].slot[sl].cable_name, dis +1 , sl, i); printf(" %5d times, ( imax =%4d, =%4.0f )\n", mid->distr[dis].slot[sl].nvolte[i], mid->distr[dis].slot[sl].imass[i], mid->distr[dis].slot[sl].imedia[i] ); } } } } } /* end if on used slot */ munlink(mid); }