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

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

archediab 25

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