/*************************************** * hv_set.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; char old_chamber[6]; 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; int conditioner, full; int from_vax, V_A, changed; if (argc < 4 || *argv[1] =='-') usage(); conditioner = 0; from_vax = 0; V_A = 0; if (argc >= 5){ if(atoi(argv[4]) == COND_CODE) conditioner = 1; else if(strcmp("remote", argv[4]) == 0 || strcmp("REMOTE", argv[4]) == 0) from_vax = 1; else if(strcmp("a", argv[4]) == 0 || strcmp("A", argv[4]) == 0){ V_A = 1; if (argc >= 6){ if(atoi(argv[5]) == COND_CODE) conditioner = 1; else if(strcmp("remote", argv[5]) == 0 || strcmp("REMOTE", argv[5]) == 0) from_vax = 1; } } } 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; full = 0; if ( strcmp("full", argv[2]) == 0 || strcmp("FULL", argv[2]) == 0) full = 1; if (full == 1){ if (argc < 11) usage(); V_A = 0; if ( strcmp(argv[3], "a") == 0 || strcmp(argv[3], "A") == 0 ) V_A = 1; from_vax = 0; if (argc >= 11 + V_A){ if ( strcmp(argv[10 + V_A], "remote") == 0 || strcmp(argv[10 + V_A], "REMOTE") == 0 ) from_vax = 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])); changed = 0; strcpy(old_chamber, "??"); printf(" \n"); for(dis = 0; dis < mid->n_crates; dis++) for(sl = 0; sl < 4; sl++){ if (mid->distr[dis].slot[sl].cond IS_CONDITIONING && conditioner == 0){ printf(" operation not allowed \n"); printf(" cable %s is under conditioning \n", mid->distr[dis].slot[sl].cable_name); } 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 ) && strcmp("00", mid->distr[dis].slot[sl].chamber) && strcmp("01", mid->distr[dis].slot[sl].chamber) ) && (!(mid->distr[dis].slot[sl].cond IS_CONDITIONING) || conditioner) ){ /* printf(" d_crate %d, slot %d, hv_ch_A %d hv_ch_Ref %d :\n", 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 ){ if(strcmp(old_chamber, mid->distr[dis].slot[sl].chamber) ){ strcpy(old_chamber, mid->distr[dis].slot[sl].chamber); changed = 0; } if ( strcmp (argv[2], "D_IMAX") == 0 || strcmp (argv[2], "d_imax") == 0) { cline[0] = '\0'; strncat(cline, "sy227_set " , strlen("sy127_set ")); strncat(cline, argv[2], strlen(argv[2])); strncat(cline, " ", strlen(" ")); itoa(dis + 1, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); itoa(sl, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, "ALL ", strlen("ALL ")); strncat(cline, argv[3], strlen(argv[3])); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); } else if (!changed) { changed = 1; if (! full){ cline[0] = '\0'; strncat(cline, "sy127_set " , strlen("sy127_set ")); strncat(cline, argv[2], strlen(argv[2])); strncat(cline, " ", strlen(" ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[3], strlen(argv[3])); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); } else { cline[0] = '\0'; strncat(cline, "sy127_set V0 " , strlen("sy127_set V0 ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[3 + V_A], strlen(argv[3 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); cline[0] = '\0'; strncat(cline, "sy127_set V1 " , strlen("sy127_set V1 ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[4 + V_A], strlen(argv[4 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); cline[0] = '\0'; strncat(cline, "sy127_set I0 " , strlen("sy127_set I0 ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[5 + V_A], strlen(argv[5 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); cline[0] = '\0'; strncat(cline, "sy127_set I1 " , strlen("sy127_set I1 ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[6 + V_A], strlen(argv[6 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); cline[0] = '\0'; strncat(cline, "sy127_set RAMP_UP " , strlen("sy127_set RAMP_UP ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[7 + V_A], strlen(argv[7 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); cline[0] = '\0'; strncat(cline, "sy127_set RAMP_DOWN " , strlen("sy127_set RAMP_DOWN ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[8 + V_A], strlen(argv[8 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); cline[0] = '\0'; strncat(cline, "sy127_set TRIP " , strlen("sy127_set TRIP ")); itoa((int)mid->hv_crate, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); if (V_A) itoa((int)mid->distr[dis].slot[sl].hv_ch_A, str0); else itoa((int)mid->distr[dis].slot[sl].hv_ch_Ref, str0); strncat(cline, str0, strlen(str0)); strncat(cline, " ", strlen(" ")); strncat(cline, argv[9 + V_A], strlen(argv[9 + V_A])); strncat(cline, " &", strlen(" &")); n_ch_switched++; system( cline ); printf(" command '%s' executed\n", cline); } } } } } munlink(mid); if (!n_ch_switched) printf(" Unkown chamber name \n"); else { if (!from_vax){ if (full) system("(sleep -s 20; sy127_par_all_mon 0 ) <>>>/nil &"); else system("(sleep -s 1; sy127_par_all_mon 0 ) <>>>/nil &"); /* store_command(cpu_nr, argc, argv); */ } } } usage() { printf(" hv_set : to set the HV of a chamber\n"); printf("\n usage : hv_set Chamber_name parameter value [A]\n"); printf("\n ( A : V_A will be affected \n"); printf(" instead of V_Ref )\n"); printf("\n The Chamber_name : \n"); printf(" ALL : all Chambers affected\n"); printf("\n parameter : V0, V1, I0, I1,\n"); printf(" RAMP_UP, RAMP_DOWN, \n"); printf(" TRIP, D_IMAX(*), FULL(**)\n"); printf("\n value(s) : depends on chosen parameter\n"); printf("\n\n (*) D_IMAX is the"); printf(" distributor\n"); printf(" maximum current\n"); printf(" (**) FULL: all SY127 parameters\n"); printf(" ( not suited for ALL)\n"); printf(" Eventually FULL can be \n"); printf(" followed by A to set V_A\n"); printf(" parameters \n"); exit(0); }