| 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 | 
 | 
|---|