/*********************************************** * * ************************************************/ #include #include #include #include #include #include "lv.h" #include #include #include "../lib/mylib1.h" #define BIT32 0x80000000 #define SVEGLIA 1010 #define N_MIN 900 #define N_BIN 180 float array[1000]; LV_MBOX *mod; int evid; char *caller; sighand(signal) register int signal; { if ( signal == SVEGLIA ) ; else{ munlink(mod); sem_unl(evid, caller); exit(0); } } main(argc, argv) int argc; char **argv; { int i, j, k; int cpu_nr, tcp_ip_nr; char *hv_config[3]; int hra[6]; int giorno, mese, anno, ora, minuti, secondi; int stato[N_CHAMBERS][2]; float datv[N_CHAMBERS][2], t_max, t_mean, n_t; float vstar[3][N_LV], istar[3][N_LV], vsgs[2][N_LV], isgs[2][N_LV]; int sonda, cycle; int nread, nerr, n_order, n_order_v; static char h_module[] = "LV_HIST"; char h_name[256]; float av_2hours; if (get_config( &tcp_ip_nr, &cpu_nr, hv_config) != 0){ printf (" error in get_config \n"); exit (0); } if (cpu_nr < 1 || cpu_nr > 2){ exit(0); } caller = argv[0]; intercept(sighand); hset_idmax(400); hlimap(90000, h_module); evid = sem_link_cr("lv_mbox", argv[0]); if((mod = (LV_MBOX *)modlink("lv_mod", 0)) == (LV_MBOX *)-1){ printf(" cannot open data module \n"); sem_unl_del(evid, "lv_mbox", argv[0]); exit(0); } nread = 0; while (nread == 0){ sem_wait(evid, argv[0]); nread = mod->nread_t; nerr = mod->nerr_t; if (nread == 0){ sleep(5); } else{ for( i = 0; i < N_CHAMBERS; i++) { stato[i][0] = mod->st[i][0]; stato[i][1] = mod->st[i][1]; } } } sem_free(evid, argv[0]); n_order = 0; n_order_v = 0; for( i = 0; i < N_CHAMBERS; i++) { if (stato [i][0]){ strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1 ) + i ]); strcat(h_name, " - Probe 1. Temp. (C) every 5 min. Last 15 hours"); hbook1(++n_order, h_name, N_BIN, -(float)N_MIN, 0.); hreset(n_order); strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1 ) + i ]); strcat(h_name, " - Probe 1. Temp. (C) every 2h Last 20 days"); hbook1(100 + n_order, h_name, 240, -20., 0.); hreset(100 + n_order); } if (stato [i][1]){ strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1 ) + i ]); strcat(h_name, " - Probe 2. Temp. (C) every 5 min. Last 15 hours"); hbook1(++n_order, h_name, N_BIN, -(float)N_MIN, 0.); hreset(n_order); strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1 ) + i ]); strcat(h_name, " - Probe 2. Temp. (C) every 2h, Last 20 days"); hbook1(100 + n_order, h_name, 240, -20., 0.); hreset(100 + n_order); } } hbook1(++n_order, "Max. Chamber Temp. (C) every 5 min. Last 15 hours", N_BIN, -(float)N_MIN, 0.); hreset(n_order); hbook1(100 + n_order, "Max. Chamber Temp. (C) every 2h, Last 20 days", 240, -20., 0.); hreset(100 + n_order); hbook1(++n_order, "Average Chamber Temp. (C) every 5 min. Last 15 hours", N_BIN, -(float)N_MIN, 0.); hreset(n_order); hbook1(100 + n_order, "Average Chamber Temp. (C) every 2h, Last 20 days", 240, -20., 0.); hreset(100 + n_order); /* Power Supply: Currents */ for ( i = 0; i < N_LV; i++) { for ( j = 0; j < 3; j++){ strcpy(h_name, ch_name[ N_CHAMBERS * (cpu_nr -1) + lv_t[i] ]); strcat(h_name, " LV: I (A) "); if ( j == 0) strcat(h_name, " STAR(-6V) ( every 5 min, last 15 hours ) "); else if ( j == 1) strcat(h_name, " STAR(+6V) ( every 5 min, last 15 hours ) "); else if ( j == 2) strcat(h_name, " STAR(+5V) ( every 5 min, last 15 hours ) "); hbook1(++n_order, h_name, N_BIN, -(float)N_MIN, 0.); hreset(n_order); strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1) + lv_t[i] ]); strcat(h_name, " LV: I (A) "); if ( j == 0) strcat(h_name, " STAR(-6V) every 2h, last 20days)"); else if ( j == 1) strcat(h_name, " STAR(+6V) ( every 2h, last 20days)"); else if ( j == 2) strcat(h_name, " STAR(+5V) ( every 2h, last 20days)"); hbook1(100 + n_order, h_name, 240, -20., 0.); hreset(100 + n_order); } for ( j = 0; j < 2; j++){ strcpy(h_name, ch_name[ N_CHAMBERS * (cpu_nr - 1) + lv_t[i] ]); strcat(h_name, " LV: I (A) "); if ( j == 0) strcat(h_name, " SGS(-5V) ( every 5 min, last 15 hours ) "); else if ( j == 1) strcat(h_name, " SGS(+7V) ( every 5 min, last 15 hours ) "); hbook1(++n_order, h_name, N_BIN, -(float)N_MIN, 0.); hreset(n_order); strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1) + lv_t[i] ]); strcat(h_name, " LV: I (A) "); if ( j == 0) strcat(h_name, " SGS(-5V) ( every 2h, last 20days)"); else if ( j == 1) strcat(h_name, " SGS(+7V) ( every 2h, last 20days)"); hbook1(100 + n_order, h_name, 240, -20., 0.); hreset(100 + n_order); } } /* Power Supply: Voltages */ for ( i = 0; i < N_LV; i++) { for ( j = 0; j < 3; j++){ strcpy(h_name, ch_name[ N_CHAMBERS * (cpu_nr -1) + lv_t[i] ]); strcat(h_name, " LV: V (V) "); if ( j == 0) strcat(h_name, " STAR(-6V) ( every 5 min, last 15 hours ) "); else if ( j == 1) strcat(h_name, " STAR(+6V) ( every 5 min, last 15 hours ) "); else if ( j == 2) strcat(h_name, " STAR(+5V) ( every 5 min, last 15 hours ) "); hbook1(200 + ++n_order_v, h_name, N_BIN, -(float)N_MIN, 0.); hreset(200 + n_order_v); strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1) + lv_t[i] ]); strcat(h_name, " LV: V (V) "); if ( j == 0) strcat(h_name, " STAR(-6V) every 2h, last 20days)"); else if ( j == 1) strcat(h_name, " STAR(+6V) ( every 2h, last 20days)"); else if ( j == 2) strcat(h_name, " STAR(+5V) ( every 2h, last 20days)"); hbook1(300 + n_order_v, h_name, 240, -20., 0.); hreset(300 + n_order_v); } for ( j = 0; j < 2; j++){ strcpy(h_name, ch_name[ N_CHAMBERS * (cpu_nr - 1) + lv_t[i] ]); strcat(h_name, " LV: V (V) "); if ( j == 0) strcat(h_name, " SGS(-5V) ( every 5 min, last 15 hours ) "); else if ( j == 1) strcat(h_name, " SGS(+7V) ( every 5 min, last 15 hours ) "); hbook1(200 + ++n_order_v, h_name, N_BIN, -(float)N_MIN, 0.); hreset(200 + n_order_v); strcpy(h_name, ch_name[ N_CHAMBERS * ( cpu_nr - 1) + lv_t[i] ]); strcat(h_name, " LV: V (V) "); if ( j == 0) strcat(h_name, " SGS(-5V) ( every 2h, last 20days)"); else if ( j == 1) strcat(h_name, " SGS(+7V) ( every 2h, last 20days)"); hbook1(300 + n_order_v, h_name, 240, -20., 0.); hreset(300 + n_order_v); } } alm_cycle((int) SVEGLIA, (int) BIT32 | 5*60*256 ); cycle = 0; while(1){ cycle++; sem_wait(evid, argv[0]); nread = mod->nread_t; nerr = mod->nerr_t; for(i = 0; i < 6; i++) hra[i] = mod->t_tim[i]; for( i = 0; i < N_CHAMBERS; i++) { stato[i][0] = mod->st[i][0]; stato[i][1] = mod->st[i][1]; datv[i][0] = mod->t[i][0]; datv[i][1] = mod->t[i][1]; } for ( i = 0; i < N_LV; i++) { for ( j = 0; j < 3; j++){ vstar[j][i] = mod->vstar[j][i]; istar[j][i] = mod->istar[j][i]; } for ( j = 0; j < 2; j++){ vsgs[j][i] = mod->vsgs[j][i]; isgs[j][i] = mod->isgs[j][i]; } } sem_free(evid, argv[0]); t_max = -999.; t_mean= 0.; n_t = 0.; n_order = 0; n_order_v = 0; for( i = 0; i < N_CHAMBERS; i++) { if(stato[i][0]){ hunpak( ++n_order, array, N_BIN); for ( k = 0 ; k < N_BIN - 1; k++ ) array[k] = array[k+1]; array[N_BIN -1] = datv[i][0]; hpak( n_order, array); t_mean += datv[i][0]; n_t += 1.; if( datv[i][0] > t_max) t_max = datv[i][0]; if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 100 + n_order, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 100 + n_order, array); } } if(stato[i][1]){ hunpak( ++n_order, array, N_BIN); for ( k = 0 ; k < N_BIN - 1; k++ ) array[k] = array[k+1]; array[N_BIN -1] = datv[i][1]; hpak( n_order, array); t_mean += datv[i][1]; n_t += 1.; if( datv[i][1] > t_max) t_max = datv[i][1]; if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 100 + n_order, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 100 + n_order, array); } } } if (n_t > 0.) t_mean /= n_t; hunpak( ++n_order, array, N_BIN); for ( i = 0 ; i < N_BIN - 1; i++ ) array[i] = array[i+1]; array[N_BIN -1] = t_max; hpak( n_order, array); if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 100 + n_order, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 100 + n_order, array); } hunpak( ++n_order, array, N_BIN); for ( i = 0 ; i < N_BIN - 1; i++ ) array[i] = array[i+1]; array[N_BIN -1] = t_mean; hpak( n_order, array); if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24; hunpak( 100 + n_order, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 100 + n_order, array); } /* Currents */ for ( i = 0; i < N_LV; i++) { for ( j = 0; j < 3; j++){ hunpak( ++n_order, array, N_BIN); for ( k = 0 ; k < N_BIN - 1; k++ ) array[k] = array[k+1]; array[N_BIN -1] = istar[j][i]; hpak( n_order, array); if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 100 + n_order, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 100 + n_order, array); } } for ( j = 0; j < 2; j++){ hunpak( ++n_order, array, N_BIN); for ( k = 0 ; k < N_BIN - 1; k++ ) array[k] = array[k+1]; array[N_BIN -1] = isgs[j][i]; hpak( n_order, array); if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 100 + n_order, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 100 + n_order, array); } } } /* Voltages */ for ( i = 0; i < N_LV; i++) { for ( j = 0; j < 3; j++){ hunpak( 200 + ++n_order_v, array, N_BIN); for ( k = 0 ; k < N_BIN - 1; k++ ) array[k] = array[k+1]; array[N_BIN -1] = vstar[j][i]; hpak( 200 + n_order_v, array); if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 300 + n_order_v, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 300 + n_order_v, array); } } for ( j = 0; j < 2; j++){ hunpak( 200 + ++n_order_v, array, N_BIN); for ( k = 0 ; k < N_BIN - 1; k++ ) array[k] = array[k+1]; array[N_BIN -1] = vsgs[j][i]; hpak( 200 + n_order_v, array); if ( cycle != 0 && cycle % 24 == 0 ){ av_2hours = 0.; for (k=156; k < 180; k++) av_2hours += array[k]; av_2hours /= 24.; hunpak( 300 + n_order_v, array, 240); for ( k = 0 ; k < 240 - 1; k++ ) array[k] = array[k+1]; array[240 -1] = av_2hours; hpak( 300 + n_order_v, array); } } } sleep(0); /* aspetta l'allarme */ } }