/*************************************** * hv_book.c * * * * * ***************************************/ #include #include #include #include #include #include #include "a200.h" #include "../lib/mylib1.h" #include "../dbase/hv_dbase.h" #define PAUSE 1001 #define CONTINUE 1002 #define STOP 1003 SY127_MBOX *mod127; SY227_MBOX *mod227; int mid127, mid227, evpro_id; hv_mod_struct *hv_mid; int tcp_ip_nr, cpu_nr; char *hv_config[3]; char *caller; int tcycle, command; int pid; int yy, mm, dd, hh, min, sec; int hra[6]; int jtime[2], jdate[2], jtick[2]; short jday[2]; int time_dif; int dis, sl, ch, i, ii, j, k; float vsum[40], vsum2[40], vmin[40]; float vmax[40], vmean[40], vsigma[40]; float isum[40], isum2[40], imin[40]; float imax[40], imean[40], isigma[40]; int ch_status[40]; int ntot, nread; int crate_status; int tot_chan = 32; float d_isum[N_DISTRIBUTORS][4][32]; float d_isum2[N_DISTRIBUTORS][4][32]; float d_imean[N_DISTRIBUTORS][4][32]; float d_isigma[N_DISTRIBUTORS][4][32]; float d_imin[N_DISTRIBUTORS][4][32]; float d_imax[N_DISTRIBUTORS][4][32]; int d_ch_status[N_DISTRIBUTORS][4][32]; int d_ntot, d_nread; char titolo[72]; char *tit = ": ch weigt. w. Int(i)"; sighand(signal) register int signal; { printf(" sy227_vi_send : signal %d received \n", signal); if ( signal == STOP || signal == 2 || signal == 3) { /* ^C ^E */ /* average_and_send(); */ close(pid); sem_unl(mid227, caller); sem_unl(evpro_id, caller); munlink(mod227); shclos(); /* close data module (can be omitted) */ exit(0); } else if ( signal == PAUSE ) sleep(0); else if ( signal == CONTINUE ) ; /* do nothing , used to awaike the process */ } main(argc, argv) int argc; char *argv[]; { static char name[] = "MYTEST"; int ncycle; intercept(sighand); if (argc < 2) usage(); caller = argv[0]; mid127 = sem_link("sy127mod", argv[0]); mid227 = sem_link("sy227mod", argv[0]); evpro_id = sem_link("hv_pr_info", argv[0]); if((mod127 = (SY127_MBOX *)modlink("sy127mod", 0)) == (SY127_MBOX *) -1) exit(_errmsg(errno, "err. link data module sy127mod, errno %d\n", errno)); if((mod227 = (SY227_MBOX *)modlink("sy227mod", 0)) == (SY227_MBOX *) -1) exit(_errmsg(errno, "err. link data module sy227mod, errno %d\n", errno)); get_config(&tcp_ip_nr, &cpu_nr, hv_config); if ((hv_mid = (hv_mod_struct *)modlink(hv_config[cpu_nr], 0)) == (hv_mod_struct *)-1) if ((hv_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])); _sysdate(1, &jtime[1], &jdate[1], &jtick[1], &jday[1]); /* julian time */ for (i = 0; i < tot_chan; i++){ vsum[i] = vsum2[i] = isum[i] = isum2[i] = 0.; vmin[i] = imin[i] = 9999.; vmax[i] = imax[i] = -1.; ch_status[i] = 0; } ntot = 0; crate_status = 0; for (dis = 0; dis < N_DISTRIBUTORS; dis++) for (sl = 0; sl < 4; sl++) for (ch = 0; ch < 32; ch++){ d_isum[dis][sl][ch] = 0.; d_isum2[dis][sl][ch] = 0.; d_imin[dis][sl][ch] = 9999.; d_imax[dis][sl][ch] = -1.; d_ch_status[dis][sl][ch] = 0; } d_ntot = 0; d_nread = 0; /* HBOOK initialization */ hlimap(2300,name); /* first:size of data module (long word)*/ /* second: name of the module */ ncycle = 0; while(1) { ncycle++; sem_wait(mid127, argv[0]); if( mod127->nvim > nread ) { /* there are new values */ nread = mod127->nvim; for (i = 0; i < tot_chan; i++) if(hv_mid->hv_used_ch[i]){ ch_status[i] |= mod127->hv_par[1].status[i]; vsum[i] += mod127->hv_par[1].vmon[i]; isum[i] += mod127->hv_par[1].imon[i]; vsum2[i] += mod127->hv_par[1].vmon[i] * mod127->hv_par[1].vmon[i]; isum2[i] += mod127->hv_par[1].imon[i] * mod127->hv_par[1].imon[i]; if (mod127->hv_par[1].vmon[i] > vmax[i]) vmax[i] = mod127->hv_par[1].vmon[i]; if (mod127->hv_par[1].vmon[i] < vmin[i]) vmin[i] = mod127->hv_par[1].vmon[i]; if (mod127->hv_par[1].imon[i] > imax[i]) imax[i] = mod127->hv_par[1].imon[i]; if (mod127->hv_par[1].imon[i] < imin[i]) imin[i] = mod127->hv_par[1].imon[i]; } crate_status |= mod127->hv_par[1].prot_word; ntot += 1; } sem_free(mid127, argv[0]); sem_wait(mid227, argv[0]); if( mod227->nvim > d_nread ) { /* there are new values */ d_nread = mod227->nvim; for (dis = 0; dis < N_DISTRIBUTORS; dis++) for (sl = 0; sl < 4; sl++){ if (hv_mid->distr[dis].slot[sl].d_used_ch){ if (ncycle == 1) { strcpy(titolo, hv_mid->distr[dis].slot[sl].cable[0].cable_name); strcat(titolo, tit); hbook1( dis * 4 + sl + 1, titolo, 33, 0., 33.); } hf1( dis * 4 + sl + 1, 32.1 , 1.); for (ch = 0; ch < 32; ch++) { if (hv_mid->distr[dis].slot[sl].d_used_ch & (1 << ch)) { hf1( dis * 4 + sl + 1, (float) ch + 0.1, (float) mod227->sl_par[dis][sl].imon[ch]); d_ch_status[dis][sl][ch] |= mod227->sl_par[dis][sl].status[ch]; d_isum[dis][sl][ch] += mod227->sl_par[dis][sl].imon[ch]; d_isum2[dis][sl][ch] += mod227->sl_par[dis][sl].imon[ch]* mod227->sl_par[dis][sl].imon[ch]; if (mod227->sl_par[dis][sl].imon[ch] > d_imax[dis][sl][ch]) d_imax[dis][sl][ch] = mod227->sl_par[dis][sl].imon[ch]; if (mod227->sl_par[dis][sl].imon[ch] < d_imin[dis][sl][ch]) d_imin[dis][sl][ch] = mod227->sl_par[dis][sl].imon[ch]; } else { hf1( dis * 4 + sl + 1, (float) ch + 0.1, -10.); } } } } d_ntot += 1; } sem_free(mid227, argv[0]); _sysdate(1, &jtime[2], &jdate[2], &jtick[2], &jday[2]); time_dif = jtime[2] -jtime[1] + (jdate[2] - jdate[1]) * 86400; sleep(10); } close(pid); munlink(hv_mid); sem_unl(mid227, caller); sem_unl(evpro_id, caller); munlink(mod227); shclos(); /* close data module (can be omitted) */ exit(0); } usage() { printf("\n hv_book to make HV histograms on OS-9 \n\n\n"); printf(" usage : hv_book ok \n"); exit(0); }