/*************************************** * zero_current.c * * * ***************************************/ #include #include #include #include #include #include #include "a200.h" #include "../lib/mylib1.h" #include "../dbase/hv_dbase.h" main(argc, argv) int argc; char *argv[]; { hv_mod_struct *mid; int tcp_ip_nr, cpu_nr; char *hv_config[3]; short i, j, k, chan, value, code; int dis, sl; char *par_code, *crate_code, *chan_code, *set_code, *chamber_code; short par_val, crate_val, chan_val, set_val; int is_a_cable; char cline[80], str0[20]; int n_ch_switched = 0; if (argc < 2 || *argv[1] =='-') usage(); chamber_code = argv[1]; if ( strcmp("all", chamber_code) == 0 || strcmp("ALL", chamber_code) == 0) chamber_code = "0"; is_a_cable = 0; if (*(chamber_code + 2) == '/') is_a_cable = 1; get_config(&tcp_ip_nr, &cpu_nr, hv_config); if ((mid = (hv_mod_struct *)modlink(hv_config[cpu_nr], 0)) == (hv_mod_struct *)-1) if ((mid = (hv_mod_struct *)modload(hv_config[cpu_nr], 0)) == (hv_mod_struct *)-1) exit(_errmsg(errno, " %s: error loading/linking module %s\n", argv[0], hv_config[cpu_nr])); printf(" \n"); for(dis = 0; dis < mid->n_crates; dis++) for(sl = 0; sl < 4; sl++) if(((strcmp(chamber_code, mid->distr[dis].slot[sl].chamber) == 0 || strcmp(chamber_code, mid->distr[dis].slot[sl].cable_name) ==0 ) && strcmp("01", mid->distr[dis].slot[sl].chamber) != 0 ) || ( strcmp("0", chamber_code) == 0 && strcmp("01", mid->distr[dis].slot[sl].chamber) != 0 && mid->distr[dis].slot[sl].hv_ch_Ref >= 0 ) ) { printf(" d_crate %d, slot %d, hv_ch_A %d, hv_ch_Ref %d :", mid->distr[dis].crate_nr , sl, mid->distr[dis].slot[sl].hv_ch_A, mid->distr[dis].slot[sl].hv_ch_Ref); printf(" cable %s\n", mid->distr[dis].slot[sl].cable_name); if ( mid->distr[dis].slot[sl].d_used_ch ){ n_ch_switched++; printf(" wait 40 seconds \n"); sleep(10); A200_init(); D_Set(D_Z_I_SET, dis + 1, sl, ALL, D_ZERO); A200_end(); } } munlink(mid); if (!n_ch_switched) printf(" Unkown ( or not used ) chamber name \n"); } usage() { printf(" zero_currents : Reset current of distributor\n"); printf(" Warnings : 1) Switch OFF the HV before this command\n"); printf(" : 2) After the command one has to wait 30 sec\n"); printf(" : 3) This command may generate errors in \n"); printf(" monitor processes : ignore them \n"); printf("\n\n usage : zero_currents Chamber_name \n"); printf("\n The Chamber_name : is interpreted as \n"); printf(" Cable_name if the format \n"); printf(" XX/Y is used ( e.g. : 52/2 )\n"); exit(0); }