source: Sophya/trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_general.c@ 652

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

archediab 28 vol

File size: 7.4 KB
Line 
1#include "diabolo.h"
2#include "bolo.h"
3#include "acqui.h"
4#include "carte_acqui.h"
5#include "carte_pci.h"
6#include "trace.h"
7#include "corel.h"
8#include "montimer.h"
9#include "synchro.h"
10#include "fichier.h"
11#include "onde.h"
12#include "tm.h"
13#include "tache.h"
14#include "compress.h"
15#include "controle.h"
16#include "simulmission.h"
17
18
19
20#define temps_timer 10 // 10 ms donc 2500 points pour 4µsec ( fifo 32k )
21
22tmtc* tt; // pointeur global sur la structure tmtc
23
24
25
26#define max_couleur 10
27int bolo_couleur[max_couleur]; // les numero de bolos des 10 couleurs affichées
28#define perm(a) {if(fenetre(a)) permanent(a);}
29
30
31// programme d'acquisition: affichage des résultats en tache de fond tous les 10 ticks (6 fois/seconde)
32
33
34
35void acqui(int fen,int item,double valeur,...)
36{
37int q;
38static int acquisition=0;
39static int count=0;
40static int nberr=0;
41static double x_err,errmoy;
42static int count_moy_err=0;
43int err;
44static bilan_err=0;
45
46if (item!=tache_de_fond) return;
47if (gg->depou_en_cours) return;
48
49gg->depou_en_cours=1;
50
51/*
52{ // test par envoie continue d'un changement de frequence
53static qq=0;
54qq++;
55if(qq==10) {ecritD(fenetre_acquisition,e_periode,"4"); calfreq(0);}
56if(qq==20) {qq=0;ecritD(fenetre_acquisition,e_periode,"8"); calfreq(0);}
57}
58*/
59
60//if( count-- < 0 )
61 {
62 count=3;
63 ecritD(fenetre_controle,con_fifo,tt->val_con_fifo/2);
64 tt->val_con_fifo=0;
65 }
66
67
68err=test_erreur(); //______________ test des erreurs _______________________________
69
70if(err) bilan_err+=10*err;
71
72// Pour la simulation, rempli les buffers avec les donnees simulees
73
74if (tt->PCI_actif==3) SimulMissionReadLoop();
75
76
77//_____________________ lit la table télémesure ______________________________________
78
79if(bilan_err>100) bilan_err=100;
80if(bilan_err>50) bilan_err-=20;
81if(bilan_err>10) bilan_err-=5;
82if(bilan_err>0) bilan_err--;
83if(bilan_err) ecritD(fenetre_controle,con_erreur,20+bilan_err*10);
84else ecritD(fenetre_controle,con_erreur,0);
85
86q=(longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm;
87
88ecritD(fenetre_controle,con_pile,(1000*((longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm))/longueur_table_tm);
89ecritD(fenetre_controle,con_donnee,tt->val_con_donnee);
90
91while(q)
92 {
93 ecritD(fenetre_controle,con_pile,(1000*((longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm))/longueur_table_tm);
94// printf(" pile = %d \n",(1000*((longueur_table_tm+tt->tm.pos_ecrit-tt->tm.pos_lit)%longueur_table_tm))/longueur_table_tm);
95//*****************************************************************************************
96// ***
97#ifdef _archeops //--------- pour Archeops ----------------------------- ***
98lit_block_archeops(err);
99#endif
100#ifdef _diabolo //--------- pour Diabolo ------------------------------ ***
101lit_block_diabolo(err);
102#endif //----------------------------------------------------------- ***
103// ***
104//*****************************************************************************************
105// printf(" pos=%d \n",tt->tm.pos_lit);
106 tt->tm.pos_lit++; if(tt->tm.pos_lit>=longueur_table_tm) tt->tm.pos_lit-=longueur_table_tm;
107 q--;
108 }
109//________________________________________________________________________________________
110
111gg->depou_en_cours=0;
112}
113
114
115
116
117
118void exec_acquisition(int fen,int item,double valeur,...)
119{
120//char ss[256];
121static TMInfoPtr TTm=0;
122int i,j;
123
124switch(item)
125 {
126 case ouverture : gg->flag_tc_reduite=litD(fen,e_tc_reduite,0);
127 if(acquisition_PCI) reset_carte;
128 ecritD(fen,e_tache_inter,0); // arreter les interruptions
129 reset_epld();
130 calfreq(0); // d'abord fixer la fréquence
131
132 case e_reset : reset_epld();
133
134 case e_bolo_couleur :
135 case e_bolo_couleur+1 :
136 case e_bolo_couleur+2 :
137 case e_bolo_couleur+3 :
138 case e_bolo_couleur+4 :
139 case e_bolo_couleur+5 :
140 case e_bolo_couleur+6 :
141 case e_bolo_couleur+7 :
142 case e_bolo_couleur+8 :
143 case e_bolo_couleur+9 :
144
145 for(i=0;i<max_couleur;i++)
146 {
147 bolo_couleur[i]=litD(fen,e_bolo_couleur+i,0L)-1;
148 if( (bolo_couleur[i]<1) ou (bolo_couleur[i]>nb_max_bolo) ) bolo_couleur[i]=0;
149 printf(" i=%d bolo=%d ",i,bolo_couleur[i]);
150 }
151 printf("\n");
152 break;
153
154 case e_montre : for(j=nb_max_bolo-1;j>=0;j--) if(parametr.bolo[j].bolo_code_util) select(j+1);
155 break;
156
157 case e_sauve : for(j=0;j<nb_max_bolo;j++) if(parametr.bolo[j].bolo_code_util)permanent(j+1);
158 perm(fenetre_acquisition);
159 perm(fenetre_liste_bolos);
160// perm(fenetre_regul);
161// perm(fenetre_auto);
162 perm(fenetre_regulation);
163 perm(fenetre_automatismes);
164// perm(fenetre_dilution);
165// perm(fenetre_senseur_stellaire);
166 break;
167
168
169 case e_flash :
170 case e_telemesure : {
171 long ll=(long)(&(gg->reglage.dilu.transmission))-(long)(&(gg->reglage.dilu));
172 int a=(int) (litD(fenetre_acquisition,e_flash,0)-1);
173 a=a<<4;
174 a=a + (int) (litD(fenetre_acquisition,e_telemesure,0)-1);
175 emission_tc_reduite(tc2_auto_dilu,ll,a);
176 }
177 break;
178
179 case e_vanne :
180 {
181 long ll=(long)(&(gg->reglage.dilu.vanne))-(long)(&(gg->reglage.dilu));
182 int a=(int) valeur;
183 if(a==vanne_ouvre)
184 if(alerte(2,"voulez-vous vraiment ouvrir la vanne ??")!=1) break;
185 emission_tc_reduite(tc2_auto_dilu,ll,a);
186 }
187 break;
188
189 case e_helium : {
190 long ll=(long)(&(gg->reglage.dilu.helium))-(long)(&(gg->reglage.dilu));
191 int a=(int) valeur;
192 emission_tc_reduite(tc2_auto_dilu,ll,a);
193 }
194 break;
195
196 case e_chauf : {
197 long ll=(long)(&(gg->reglage.dilu.chauffage))-(long)(&(gg->reglage.dilu));
198 int a=(int) valeur;
199 emission_tc_reduite(tc2_auto_dilu,ll,a);
200 }
201 break;
202
203 case e_cmd : emission_tc_reduite(tc2_horloge,tc3_commande,(int) valeur);
204 ecritD(fen,e_cmd,0);
205 break;
206
207
208 case e_tache_inter : calfreq(0); // command ou arrete le flag epld sortie data
209 if(TTm) stoptimer(TTm);
210 if(acquisition_PCI) reset_carte;
211 tt->vi.a=0;
212 if(valeur)
213 {
214 if(!TTm) TTm=setuptimer(temps_timer,lecture_fifo,tt);
215 else redemarretimer(TTm,temps_timer);
216 calfreq(1); // commande le flag epld sortie data
217 }
218 break;
219
220 case fermeture : if(TTm) stoptimer(TTm);
221
222 {long t=TickCount()+60; while(t>TickCount()) {};} //attente 1 sec
223
224 if(TTm) supprimetimer(TTm);
225 break;
226
227
228 case caseferme : cache(fen); stop_exec(fen); break;
229
230
231 case e_periode+1000 :
232 case e_periode : // printf("change la période \n");
233
234 case e_nb_mes : // printf("change le nombre de mesures \n");
235 case e_temp_mort :
236 case e_flag1 : // passe horloge externe ou local
237 case e_flag2 : // passe horloge externe ou local
238 calfreq((int)litD(fen,e_tache_inter,0));
239 break;
240 case e_tc_reduite : gg->flag_tc_reduite=valeur; break;
241
242 case e_correlations : gg->flag_corel=valeur; break;
243
244
245 default : break;
246 }
247}
248
249
250//------------------------------ montracen --------------------------------------
251
252
253void montracen(int fen,int n,double x,double*y)
254{
255int i;
256double yy[max_couleur];
257for(i=0;i<max_couleur;i++)
258 {
259 if(bolo_couleur[i]) yy[i]=y[bolo_couleur[i]-1];
260 else yy[i]=0;
261 }
262tracen(fen,max_couleur,x,yy);
263// printf("0=%g 1=%g 2=%g \n",yy[0],yy[1],yy[2]);
264}
265
266int bolo_rouge(void) // l'indice du bolo rouge
267{
268return(bolo_couleur[0]);
269}
270
Note: See TracBrowser for help on using the repository browser.