| 1 | #include "diabolo.h" | 
|---|
| 2 | #include "bolo.h" | 
|---|
| 3 | #include "synchro.h" | 
|---|
| 4 | #include "fichier.h" | 
|---|
| 5 | #include "trace.h" | 
|---|
| 6 | #include "alarme.h" | 
|---|
| 7 | #include "controle.h" | 
|---|
| 8 | #include "tm.h" | 
|---|
| 9 |  | 
|---|
| 10 | //----------------------------------  fenetre : synchro  ----------------------------------- | 
|---|
| 11 | void appel_detection_synchrone(void); | 
|---|
| 12 |  | 
|---|
| 13 |  | 
|---|
| 14 | double  synchro_periode=0;                      //  valeur courante mesurée de la periode en nb de pts de mesure | 
|---|
| 15 | int select_synchro=0; | 
|---|
| 16 | int sy_flag[nb_sync]; | 
|---|
| 17 | double  sy_per;                 // nombre de points de mesure dans une periode | 
|---|
| 18 | int force_scan,force_subscan; | 
|---|
| 19 |  | 
|---|
| 20 | // ------------------  programme synchro : traite les synchro et appelle trace_DS avec argument ds_debut ou ds_suite | 
|---|
| 21 |  | 
|---|
| 22 | void exec_synchro(int fen,int item,double valeur,...) | 
|---|
| 23 | { | 
|---|
| 24 | int j; | 
|---|
| 25 |  | 
|---|
| 26 | switch(item) | 
|---|
| 27 | { | 
|---|
| 28 | case ouverture  : | 
|---|
| 29 | case sy_select  : | 
|---|
| 30 | case sy_fixe    : | 
|---|
| 31 | case sy_fixe+1000 : | 
|---|
| 32 | case sy_force_scan : | 
|---|
| 33 | case sy_force_subscan : | 
|---|
| 34 |  | 
|---|
| 35 | force_scan=litD(fenetre_synchro,sy_force_scan,0L); | 
|---|
| 36 | force_subscan=litD(fenetre_synchro,sy_force_subscan,0L); | 
|---|
| 37 |  | 
|---|
| 38 | select_synchro=litD(fenetre_synchro,sy_select,0L); | 
|---|
| 39 | if(select_synchro)      gg->trace_ouvert=gg->trace_ouvert | 32 ; | 
|---|
| 40 | else                    gg->trace_ouvert=gg->trace_ouvert & (255-32);           // enleve le 32 | 
|---|
| 41 | synchro_periode=litD(fenetre_synchro,sy_fixe,0L); | 
|---|
| 42 | if(fenetre(fenetre_trace_DS))  exec_trace_DS(fenetre_trace_DS,ds_choix_DS,0); | 
|---|
| 43 | break; | 
|---|
| 44 |  | 
|---|
| 45 |  | 
|---|
| 46 | case caseferme  :       cache(fen);stop_exec(fen);      break; | 
|---|
| 47 |  | 
|---|
| 48 |  | 
|---|
| 49 | case 100        :       //  appellé à chaque point de mesure avec err dans valeur | 
|---|
| 50 | if(force_scan)  gg->don.sync[sync_scan]=1; | 
|---|
| 51 | if(force_subscan)       gg->don.sync[sync_subscan]=1; | 
|---|
| 52 |  | 
|---|
| 53 | if(select_synchro)  appel_detection_synchrone(); | 
|---|
| 54 |  | 
|---|
| 55 | for(j=0;j<nb_sync;j++)           // eclaire tous les voyants | 
|---|
| 56 | { | 
|---|
| 57 | if(gg->don.sync[j]) | 
|---|
| 58 | { | 
|---|
| 59 | if(!sy_flag[j]) { | 
|---|
| 60 | sy_flag[j]=1; | 
|---|
| 61 | ecritD(fenetre_synchro,sy_voyant+j,j+1); | 
|---|
| 62 | ecritD(fenetre_controle,con_voyant+j,j+1); | 
|---|
| 63 | } | 
|---|
| 64 | } | 
|---|
| 65 | else | 
|---|
| 66 | { | 
|---|
| 67 | if(sy_flag[j])  { | 
|---|
| 68 | sy_flag[j]=0; | 
|---|
| 69 | ecritD(fenetre_synchro,sy_voyant+j,0); | 
|---|
| 70 | ecritD(fenetre_controle,con_voyant+j,0); | 
|---|
| 71 | } | 
|---|
| 72 | } | 
|---|
| 73 | } | 
|---|
| 74 | if( tt->signal_scan_immediat ou gg->don.sync[sync_scan] )               //  debut scan seulement si pas d'erreur synchro | 
|---|
| 75 | { | 
|---|
| 76 | if(!gg->scan_en_cours) | 
|---|
| 77 | { | 
|---|
| 78 | debut_scan_fich(); | 
|---|
| 79 | gg->compte_subscan=0; | 
|---|
| 80 | ecritD(fenetre_controle,con_subscan,"debut scan"); | 
|---|
| 81 | } | 
|---|
| 82 |  | 
|---|
| 83 | gg->scan_en_cours=10;   // ou n'importe quoi >0 | 
|---|
| 84 | if( (gg->don.sync[sync_subscan]) && (gg->compte_subscan<1) ) | 
|---|
| 85 | { | 
|---|
| 86 | gg->compte_subscan=-gg->compte_subscan+1; | 
|---|
| 87 | ecritD(fenetre_controle,con_subscan,"subscan %d",gg->compte_subscan); | 
|---|
| 88 | } | 
|---|
| 89 | if( (!gg->don.sync[sync_subscan]) && (gg->compte_subscan>0) ) | 
|---|
| 90 | { | 
|---|
| 91 | gg->compte_subscan=-gg->compte_subscan; | 
|---|
| 92 | ecritD(fenetre_controle,con_subscan,"fin (%d)",-gg->compte_subscan); | 
|---|
| 93 | } | 
|---|
| 94 | } | 
|---|
| 95 | else | 
|---|
| 96 | { | 
|---|
| 97 | if( gg->compte_subscan>0) | 
|---|
| 98 | { | 
|---|
| 99 | gg->compte_subscan=-gg->compte_subscan; | 
|---|
| 100 | } | 
|---|
| 101 | if(gg->scan_en_cours) | 
|---|
| 102 | { | 
|---|
| 103 | ecritD(fenetre_controle,con_subscan,"       "); | 
|---|
| 104 | // affiche rien mais compte_subscan se rappelle la derniere valeur en negatif | 
|---|
| 105 | if(litD(fenetre_alarme,a_fin_scan,0)>0) | 
|---|
| 106 | {son(5);son(6);son(7);son(8);son(133);son(135);son(133);} | 
|---|
| 107 | } | 
|---|
| 108 | gg->scan_en_cours=0; | 
|---|
| 109 | } | 
|---|
| 110 | break; | 
|---|
| 111 |  | 
|---|
| 112 | default : break; | 
|---|
| 113 | } | 
|---|
| 114 |  | 
|---|
| 115 | } | 
|---|
| 116 |  | 
|---|
| 117 |  | 
|---|
| 118 | void appel_detection_synchrone(void) | 
|---|
| 119 | { | 
|---|
| 120 | int i; | 
|---|
| 121 | double x; | 
|---|
| 122 | static long ancien_temps; | 
|---|
| 123 | if(select_synchro==7)   // selection  valeur fixe | 
|---|
| 124 | { | 
|---|
| 125 | if((gg->temps_cntl%(int)synchro_periode)==0) | 
|---|
| 126 | //      if(sy_per>=synchro_periode) | 
|---|
| 127 | { | 
|---|
| 128 | if(gg->trace_ouvert&2)  exec_trace_1_per(fenetre_trace_1_per,ds_debut,0); | 
|---|
| 129 | if(gg->trace_ouvert&4)  exec_trace_DS(fenetre_trace_DS,ds_debut,0); | 
|---|
| 130 | sy_per=1; | 
|---|
| 131 | } | 
|---|
| 132 | else | 
|---|
| 133 | { | 
|---|
| 134 | if(gg->temps_cntl!=ancien_temps+1) | 
|---|
| 135 | { | 
|---|
| 136 | sy_per+=gg->temps_cntl-ancien_temps; | 
|---|
| 137 | printf("erreur synchro corrigée\n"); | 
|---|
| 138 | } | 
|---|
| 139 | else    sy_per=sy_per+1; | 
|---|
| 140 |  | 
|---|
| 141 | if(gg->trace_ouvert&2)  exec_trace_1_per(fenetre_trace_1_per,ds_suite,0); | 
|---|
| 142 | if(gg->trace_ouvert&4)  exec_trace_DS(fenetre_trace_DS,ds_suite,0); | 
|---|
| 143 | } | 
|---|
| 144 | ancien_temps=gg->temps_cntl; | 
|---|
| 145 | } | 
|---|
| 146 | else | 
|---|
| 147 | { | 
|---|
| 148 | i=gg->don.sync[select_synchro-1]; | 
|---|
| 149 | if(i && !sy_flag[select_synchro-1]) | 
|---|
| 150 | { | 
|---|
| 151 | x=1-2.*(double)i/(double)gg->reglage.horloge.nb_mesures; | 
|---|
| 152 | ecritD(fenetre_synchro,sy_phase,(int)(x*100)); | 
|---|
| 153 | ecritD(fenetre_controle,con_phase,(int)(x*100)); | 
|---|
| 154 | sy_per=sy_per+x; | 
|---|
| 155 | //                                              printf("i=%d  x=%g  p=%6.2f  frequ=%g Hz\n",i,x,sy_per,1e6/(sy_per*gg->periode_echantillonage)); | 
|---|
| 156 | ecritD(fenetre_synchro,sy_periode," p=%6.2f\r frequ=%g Hz",sy_per,1e6/(sy_per*gg->periode_echantillonage)); | 
|---|
| 157 | ecritD(fenetre_controle,con_periode," p=%6.2f",sy_per); | 
|---|
| 158 | synchro_periode=sy_per; | 
|---|
| 159 | sy_per=1-x; | 
|---|
| 160 | if(gg->trace_ouvert&2)  exec_trace_1_per(fenetre_trace_1_per,ds_debut,0); | 
|---|
| 161 | if(gg->trace_ouvert&4)  exec_trace_DS(fenetre_trace_DS,ds_debut,0); | 
|---|
| 162 | } | 
|---|
| 163 | else | 
|---|
| 164 | { | 
|---|
| 165 | sy_per=sy_per+1; | 
|---|
| 166 | if(gg->trace_ouvert&2)  exec_trace_1_per(fenetre_trace_1_per,ds_suite,0); | 
|---|
| 167 | if(gg->trace_ouvert&4)  exec_trace_DS(fenetre_trace_DS,ds_suite,0); | 
|---|
| 168 | } | 
|---|
| 169 |  | 
|---|
| 170 | } | 
|---|
| 171 | } | 
|---|
| 172 | //                                      printf("\n"); | 
|---|
| 173 |  | 
|---|