source: Sophya/trunk/Poubelle/archediab.old/archediab.sources/c/acquisition_general.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: 6.1 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_chauf : {
168 long ll=(long)(&(gg->reglage.dilu.chauffage))-(long)(&(gg->reglage.dilu));
169 int a=(int) valeur;
170 emission_tc_reduite(tc2_auto_dilu,ll,a);
171 }
172 break;
173
174
175 case e_tache_inter : calfreq(0); // command ou arrete le flag epld sortie data
176 if(TTm) stoptimer(TTm);
177 if(tt->PCI_actif==1) reset_carte;
178 tt->vi.a=0;
179 if(valeur)
180 {
181 if(!TTm) TTm=setuptimer(temps_timer,lecture_fifo,tt);
182 else redemarretimer(TTm,temps_timer);
183 calfreq(1); // commande le flag epld sortie data
184 }
185 break;
186
187 case fermeture : if(TTm) stoptimer(TTm);
188
189 {long t=TickCount()+60; while(t>TickCount()) {};} //attente 1 sec
190
191 if(TTm) supprimetimer(TTm);
192 break;
193
194
195 case caseferme : cache(fen); stop_exec(fen); break;
196
197
198 case e_periode+1000 :
199 case e_periode : // printf("change la période \n");
200
201 case e_nb_mes : // printf("change le nombre de mesures \n");
202 case e_temp_mort :
203 case e_flag1 : // passe horloge externe ou local
204 case e_flag2 : // passe horloge externe ou local
205 calfreq((int)litD(fen,e_tache_inter,0));
206 break;
207 case e_tc_reduite : gg->flag_tc_reduite=valeur; break;
208
209 case e_correlations : gg->flag_corel=valeur; break;
210
211
212 default : break;
213 }
214}
215
216
217//------------------------------ montracen --------------------------------------
218
219
220void montracen(int fen,int n,double x,double*y)
221{
222int i;
223double yy[max_couleur];
224for(i=0;i<max_couleur;i++)
225 {
226 if(bolo_couleur[i]) yy[i]=y[bolo_couleur[i]-1];
227 else yy[i]=0;
228 }
229tracen(fen,max_couleur,x,yy);
230// printf("0=%g 1=%g 2=%g \n",yy[0],yy[1],yy[2]);
231}
232
233int bolo_rouge(void) // l'indice du bolo rouge
234{
235return(bolo_couleur[0]);
236}
237
Note: See TracBrowser for help on using the repository browser.