/*********************************************** * * ************************************************/ #include #include #include #include #include #include "gas.h" #include #include #include "../lib/mylib1.h" #define BIT32 0x80000000 #define SVEGLIA 1010 #define N_MIN 900 #define N_2H 240 #define N_DAYS 20 float array[1000]; GAS_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; float percent[3], full_scale[3], flow[3], flow_percent[3]; float flow_percent1[3]; float iso_monitor, total_flow, t_mon, t_mon1; int nerr, nread, cycle; static char h_module[] = "GAS_HIST"; 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){ exit(0); } caller = argv[0]; intercept(sighand); hlimap(10000, h_module); evid = sem_link_cr("gas_mbox", argv[0]); /* create module for sy127 informations */ if((mod = (GAS_MBOX *)modlink("gas_mod", 0)) == (GAS_MBOX *)-1){ printf(" cannot open data module \n"); sem_unl_del(evid, "gas_mbox", argv[0]); exit(0); } hbook1(1, "Total Flow (l/h) ( every min. ) last 15 hours", (int)N_MIN, -(float)N_MIN, 0. ); hbook1(2, "C02 % ( every min. ) last 15 hours", (int)N_MIN, -(float)N_MIN, 0. ); hbook1(3, "Iso % ( every min. ) last 15 hours", (int)N_MIN, -(float)N_MIN, 0. ); hbook1(4, "Iso Monitor (V) ( every min. ) last 15 hours", (int)N_MIN, -(float)N_MIN, 0. ); hbook1(5, "Gas Room Temp. (C) ( every min. ) last 15 hours", (int)N_MIN, -(float)N_MIN, 0. ); hbook1(6, "Iso hut Temp. (C) ( every min. ) last 15 hours", (int)N_MIN, -(float)N_MIN, 0. ); for( i = 1; i<=6; i++) hreset(i); hbook1(11, "Total Flow (l/h) ( every 2h ) last 20 days", N_2H, -(float)N_DAYS, 0. ); hbook1(12, "C02 % ( every2h ) last 20 days", N_2H, -(float)N_DAYS, 0. ); hbook1(13, "Iso % ( every 2h ) last 20 days", N_2H, -(float)N_DAYS, 0. ); hbook1(14, "Iso Monitor (V) ( every 2h ) last 20 days", N_2H, -(float)N_DAYS, 0. ); hbook1(15, "Gas Room Temp. (C) ( every 2h ) last 20 days", N_2H, -(float)N_DAYS, 0. ); hbook1(16, "Iso hut Temp. (C) ( every 2h ) last 20 days", N_2H, -(float)N_DAYS, 0. ); for( i = 1; i<=6; i++) hreset(10+i); alm_cycle((int) SVEGLIA, (int) BIT32 | 256*60 ); cycle = 0; while(1){ cycle++; sem_wait(evid, argv[0]); nread = mod->nread_mix; nerr = mod->nerr_mix; for(i = 0; i < 6; i++) hra[i] = mod->mix_tim[i]; total_flow = 0.; for ( i = 0; i < 3; i++) { percent[i] = mod->perc[i]; flow[i] = mod->flow[i]; total_flow += flow[i]; flow_percent[i] = mod->flow_perc[i]; if (i > 0) flow_percent1[i] = mod->flow_perc1[i]; iso_monitor = mod->ugo; t_mon = mod->temp; t_mon1 = mod->temp_out; } sem_free(evid, argv[0]); for ( j = 1; j <= 6; j++){ hunpak( j, array, N_MIN); for ( i = 0 ; i < N_MIN - 1; i++ ) array[i] = array[i+1]; if ( j == 1 ) array[N_MIN -1] = total_flow; else if ( j == 2 ) array[N_MIN -1] = flow_percent[0]; else if ( j == 3 ) array[N_MIN -1] = flow_percent[1]; else if ( j == 4 ) array[N_MIN -1] = iso_monitor; else if ( j == 5 ) array[N_MIN -1] = t_mon; else if ( j == 6 ) array[N_MIN -1] = t_mon1; hpak( j, array); if (cycle != 0 && cycle % 120 == 0 ){ av_2hours = 0.; for (k = (N_MIN-120); k < N_MIN; k++) av_2hours += array[k]; av_2hours /= 120; hunpak( 10 + j, array, 240); for ( k = 0; k < 240 -1; k++) array[k] = array[k+1]; array[240-1] = av_2hours; hpak( 10 +j, array); } } sleep(0); /* aspetta l'allarme */ } }