#include "diabolo.h" #include "bolo.h" #include "auto.h" #include "acqui.h" #include "fichier.h" #include "regul.h" #include "tm.h" #include "alarme.h" //----------------------------------------------------------------------------------------- //-------------------- fonction exec de la fenetre : regul -------------------------- //----------------------------------------------------------------------------------------- void exec_regul(int fen,int item,double valeur,...) { regul_p_i_d pid; int bolo,g; switch(item) { case ouverture : tachedefond(fen,10*60); case rg_num_bolo : case rg_nb_mes : case rg_chauf : case rg_p : case rg_p+1000: case rg_i : case rg_i+1000: case rg_d : case rg_d+1000: // case rg_periode_raz : case rg_periode_raz+1000 : pid.code=tc_regul; pid.num_bolo=litD(fen,rg_num_bolo,0L); pid.nb_mes=litD(fen,rg_nb_mes,0L); pid.chauf=litD(fen,rg_chauf,0L); pid.p=litD(fen,rg_p,0L); pid.i=litD(fen,rg_i,0L); pid.d=litD(fen,rg_d,0L); // tt->reg.per_raz=litD(fen,rg_periode_raz,0L); // printf(" nbmes=%d chauf=%d prop=%g compteur=%d \n",gg->reg.nb_mes,gg->reg.chauf,gg->reg.p,gg->reg.compteur); // printf(" valeur=%ld commande=%d int=%g compteur=%d \n",tt->.valeur,tt->reg.cc,tt->reg.tint,tt->reg.compteur); // for(i=0;i<10;i++) btc.mot[i]=mot[i]; emission_telecommande(tc_dir_transputer,&pid); break; case tache_de_fond : // toutes les 10 secondes, test la saturation de la regul if( ! litD(fenetre_acquisition,e_tache_inter,0) ) break; // break; pid.code=tc_regul; pid.num_bolo=bolo=litD(fen,rg_num_bolo,0L); pid.nb_mes=litD(fen,rg_nb_mes,0L); pid.p=litD(fen,rg_p,0L); pid.i=litD(fen,rg_i,0L); pid.d=litD(fen,rg_d,0L); if(test_saturation(bolo)) { pid.chauf=0; g=gainbrut(gg->reglage.bolo[bolo-1]); if(g>15) g=g&3; g--; if(g<0) g=0; printf("ecritgain dans regul\n"); ecritD(bolo,b_gain,g); ecritgain(bolo); if( litD(fenetre_alarme,a_sat_regul,0) >0) son(133); } else pid.chauf=litD(fen,rg_chauf,0L); emission_telecommande(tc_dir_transputer,&pid); break; case caseferme : cache(fen);stop_exec(fen); break; default: break; } } //----------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------- //-------------------- fonction exec de la fenetre : regulation --------------------- //----------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------- void ecrit_regulation(void); void exec_regulation(int fen,int item,double valeur,...) { if( (item>0) ou (item==ouverture) ) ecrit_regulation(); } void ecrit_regulation(void) { int i,a; long ll; //printf("ecrit regulation nombre_de_regul=%d \n",nombre_de_regul); for(i=0;ireglage.regul[i].mode))-(long)(&(gg->reglage.regul[0])); a=litD(fenetre_regulation,regu_mode+i,0L)-1; // printf(" a= %d reglage=%d ll=%d \n",a,gg->reglage.regul[i].mode,ll); if(a!=gg->reglage.regul[i].mode) { // printf(" envoie %d en regul mode \n",a); emission_tc_reduite(tc2_regul,ll,a); } ll=(long)(&(gg->reglage.regul[i].num_bolo))-(long)(&(gg->reglage.regul[0])); a=litD(fenetre_regulation,regu_bolo+i,0L)-1; if(a!=gg->reglage.regul[i].num_bolo) emission_tc_reduite(tc2_regul,ll,a); ll=(long)(&(gg->reglage.regul[i].voie_chauf))-(long)(&(gg->reglage.regul[0])); a=litD(fenetre_regulation,regu_voie_chauf+i,0L)-1; if(a!=gg->reglage.regul[i].voie_chauf) emission_tc_reduite(tc2_regul,ll,a); ll=(long)(&(gg->reglage.regul[i].prop))-(long)(&(gg->reglage.regul[0])); a=litD(fenetre_regulation,regu_prop+i,0L); if(a!=gg->reglage.regul[i].prop) emission_tc_reduite(tc2_regul,ll,a); ll=(long)(&(gg->reglage.regul[i].integ))-(long)(&(gg->reglage.regul[0])); a=litD(fenetre_regulation,regu_int+i,0L)-1; if(a!=gg->reglage.regul[i].integ) emission_tc_reduite(tc2_regul,ll,a); ll=(long)(&(gg->reglage.regul[i].deriv))-(long)(&(gg->reglage.regul[0])); a=litD(fenetre_regulation,regu_deriv+i,0L)-1; if(a!=gg->reglage.regul[i].deriv) emission_tc_reduite(tc2_regul,ll,a); } }