source: Sophya/trunk/Poubelle/archediab.old/archediab.sources/c/synchro.c@ 637

Last change on this file since 637 was 637, checked in by ansari, 26 years ago

archediab version 24 initial import

File size: 4.5 KB
RevLine 
[637]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 -----------------------------------
11void appel_detection_synchrone(void);
12
13
14double synchro_periode=0; // valeur courante mesurée de la periode en nb de pts de mesure
15int select_synchro=0;
16int sy_flag[nb_sync];
17double sy_per; // nombre de points de mesure dans une periode
18int force_scan,force_subscan;
19
20// ------------------ programme synchro : traite les synchro et appelle trace_DS avec argument ds_debut ou ds_suite
21
22void exec_synchro(int fen,int item,double valeur,...)
23{
24int j;
25
26switch(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
118void appel_detection_synchrone(void)
119{
120int i;
121double x;
122if(select_synchro==7) // selection valeur fixe
123 {
124 if(sy_per>=synchro_periode)
125 {
126 if(gg->trace_ouvert&2) exec_trace_1_per(fenetre_trace_1_per,ds_debut,0);
127 if(gg->trace_ouvert&4) exec_trace_DS(fenetre_trace_DS,ds_debut,0);
128 sy_per=1;
129 }
130 else
131 {
132 sy_per=sy_per+1;
133 if(gg->trace_ouvert&2) exec_trace_1_per(fenetre_trace_1_per,ds_suite,0);
134 if(gg->trace_ouvert&4) exec_trace_DS(fenetre_trace_DS,ds_suite,0);
135 }
136 }
137else
138 {
139 i=gg->don.sync[select_synchro-1];
140 if(i && !sy_flag[select_synchro-1])
141 {
142 x=1-2.*(double)i/(double)gg->reglage.horloge.nb_mesures;
143 ecritD(fenetre_synchro,sy_phase,(int)(x*100));
144 ecritD(fenetre_controle,con_phase,(int)(x*100));
145 sy_per=sy_per+x;
146// printf("i=%d x=%g p=%6.2f frequ=%g Hz\n",i,x,sy_per,1e6/(sy_per*gg->periode_echantillonage));
147 ecritD(fenetre_synchro,sy_periode," p=%6.2f\r frequ=%g Hz",sy_per,1e6/(sy_per*gg->periode_echantillonage));
148 ecritD(fenetre_controle,con_periode," p=%6.2f",sy_per);
149 synchro_periode=sy_per;
150 sy_per=1-x;
151 if(gg->trace_ouvert&2) exec_trace_1_per(fenetre_trace_1_per,ds_debut,0);
152 if(gg->trace_ouvert&4) exec_trace_DS(fenetre_trace_DS,ds_debut,0);
153 }
154 else
155 {
156 sy_per=sy_per+1;
157 if(gg->trace_ouvert&2) exec_trace_1_per(fenetre_trace_1_per,ds_suite,0);
158 if(gg->trace_ouvert&4) exec_trace_DS(fenetre_trace_DS,ds_suite,0);
159 }
160
161 }
162}
163// printf("\n");
164
Note: See TracBrowser for help on using the repository browser.