[637] | 1 | #include "diabolo.h"
|
---|
| 2 | #include "dilution.h"
|
---|
| 3 | #include "controle.h"
|
---|
[651] | 4 | #include "arcunit.h"
|
---|
[637] | 5 |
|
---|
| 6 |
|
---|
| 7 | //-------------------- fonction exec de la fenetre : dilution -------------------------------
|
---|
| 8 |
|
---|
| 9 | #define bit0 0x01
|
---|
| 10 | #define bit1 0x02
|
---|
| 11 | #define bit2 0x04
|
---|
| 12 | #define bit3 0x08
|
---|
| 13 | #define bit4 0x10
|
---|
| 14 | #define bit5 0x20
|
---|
| 15 | #define bit6 0x40
|
---|
| 16 | #define bit7 0x80
|
---|
| 17 |
|
---|
| 18 |
|
---|
[643] | 19 | #define cnt_temperature(i) (20+(int)val_temperature(blk->ADC_dil[i]))
|
---|
[637] | 20 |
|
---|
| 21 | #define ecrit_switch(val,ii,bit) {if(val) ii=ii | bit ;else ii=ii& (0xffffffff^bit) ;}
|
---|
| 22 | #define calib(j) litD(fenetre_dilution_calibration,j,0L)
|
---|
[639] | 23 |
|
---|
| 24 |
|
---|
[643] | 25 | void ecrit_moteur_dilution(int valeur); // valeur sur 10 bit: poid fort=on/off
|
---|
[639] | 26 |
|
---|
[643] | 27 | void ecrit_moteur_dilution(int valeur)
|
---|
| 28 | {
|
---|
| 29 | int i;
|
---|
| 30 | char mot_tc[10];
|
---|
| 31 |
|
---|
| 32 | i=litD(fenetre_dilution,dil_switch_1,0);
|
---|
| 33 | i=i<<8; i+=litD(fenetre_dilution,dil_switch_2,0);
|
---|
| 34 | i=i<<8; i+=litD(fenetre_dilution,dil_switch_3,0);
|
---|
| 35 | i=i<<8; // les 3 octets en poid fort, rien dans le dernier octet
|
---|
| 36 | i=i& 0x003fffff;
|
---|
| 37 | i = i| ( (valeur & 0x3ff)<<22);
|
---|
| 38 | ecritD(fenetre_dilution,dil_switch_1,(i>>24)&0xff);
|
---|
| 39 | ecritD(fenetre_dilution,dil_switch_2,(i>>16)&0xff);
|
---|
| 40 | ecritD(fenetre_dilution,dil_switch_3,(i>>8 )&0xff);
|
---|
| 41 |
|
---|
| 42 | mot_tc[0]=tc_switch_dil;
|
---|
| 43 | mot_tc[1]=0;
|
---|
| 44 | mot_tc[2]=0;
|
---|
| 45 | mot_tc[3]=0;
|
---|
| 46 | mot_tc[4]=(i>>8 )&0xff;
|
---|
| 47 | mot_tc[5]=(i>>16)&0xff;
|
---|
| 48 | mot_tc[6]=(i>>24)&0xff;
|
---|
| 49 | mot_tc[7]=0;
|
---|
| 50 | emission_telecommande(tc_dir_transputer,mot_tc);
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 |
|
---|
[639] | 54 | // fonction ecrit un bit des switch dilution
|
---|
| 55 | // c'est une telecommande normale 64 bit a supprimer
|
---|
| 56 | // la telecommande passe a travers le transputer sans etre traitee par lui
|
---|
| 57 | // elle arrive directement sur l'EPLD
|
---|
[649] | 58 | /*
|
---|
[637] | 59 | void ecrit_bit_dilution(int valeur,int bit);
|
---|
| 60 |
|
---|
| 61 | void ecrit_bit_dilution(int valeur,int bit)
|
---|
| 62 | {
|
---|
| 63 | int i;
|
---|
| 64 | char mot_tc[10];
|
---|
| 65 |
|
---|
| 66 | i=litD(fenetre_dilution,dil_switch_1,0);
|
---|
| 67 | i=i<<8; i+=litD(fenetre_dilution,dil_switch_2,0);
|
---|
| 68 | i=i<<8; i+=litD(fenetre_dilution,dil_switch_3,0);
|
---|
| 69 | i=i<<8; // les 3 octets en poid fort, rien dans le dernier octet
|
---|
| 70 | ecrit_switch(valeur,i,bit);
|
---|
| 71 | ecritD(fenetre_dilution,dil_switch_1,(i>>24)&0xff);
|
---|
| 72 | ecritD(fenetre_dilution,dil_switch_2,(i>>16)&0xff);
|
---|
| 73 | ecritD(fenetre_dilution,dil_switch_3,(i>>8 )&0xff);
|
---|
| 74 |
|
---|
| 75 | mot_tc[0]=tc_switch_dil;
|
---|
| 76 | mot_tc[1]=0;
|
---|
| 77 | mot_tc[2]=0;
|
---|
| 78 | mot_tc[3]=0;
|
---|
| 79 | mot_tc[4]=(i>>8 )&0xff;
|
---|
| 80 | mot_tc[5]=(i>>16)&0xff;
|
---|
| 81 | mot_tc[6]=(i>>24)&0xff;
|
---|
| 82 | mot_tc[7]=0;
|
---|
| 83 | emission_telecommande(tc_dir_transputer,mot_tc);
|
---|
| 84 | }
|
---|
[649] | 85 | */
|
---|
[639] | 86 | // fonction ecrit un des dac dilution
|
---|
| 87 | // c'est une telecommande normale 64 bit a supprimer
|
---|
| 88 | // la telecommande passe a travers le transputer sans etre traitee par lui
|
---|
| 89 | // elle arrive directement sur l'EPLD
|
---|
[637] | 90 |
|
---|
[639] | 91 | void ecrit_dac_dilution(void);
|
---|
[637] | 92 |
|
---|
[639] | 93 | void ecrit_dac_dilution(void)
|
---|
| 94 | {
|
---|
| 95 | char mot_tc[10];
|
---|
| 96 | int k;
|
---|
| 97 | unsigned long i,j;
|
---|
| 98 | i=litD(fenetre_dilution,dil_dac_1,0); // les 2 bits adresse du dac
|
---|
| 99 | i=i<<14; i+=litD(fenetre_dilution,dil_dac_2,0); // les 12 bits valeur du dac
|
---|
| 100 | // ranger les bits a l'envers;
|
---|
| 101 | j=0; for(k=0;k<16;k++) {j=(j<<1) | (i&1);i=i>>1;}
|
---|
| 102 | mot_tc[0]=tc_dac_dil;
|
---|
| 103 | mot_tc[1]=(j)&0xff;
|
---|
| 104 | mot_tc[2]=(j>>8)&0xff;
|
---|
| 105 | mot_tc[3]=0;
|
---|
| 106 | mot_tc[4]=0;
|
---|
| 107 | mot_tc[5]=0;
|
---|
| 108 | mot_tc[6]=0;
|
---|
| 109 | mot_tc[7]=0;
|
---|
| 110 | emission_telecommande(tc_dir_transputer,mot_tc);
|
---|
| 111 | }
|
---|
[637] | 112 |
|
---|
[639] | 113 |
|
---|
| 114 |
|
---|
| 115 |
|
---|
[637] | 116 | void exec_dilution(int fen,int item,double valeur,...)
|
---|
| 117 | {
|
---|
| 118 | int i;
|
---|
| 119 |
|
---|
| 120 | if(item>1000) item-=1000; // pour appeler le case pour tous les cara d'un edit texte
|
---|
| 121 |
|
---|
| 122 | switch(item)
|
---|
[649] | 123 | {
|
---|
| 124 | case dil_switch_helium : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_switch_helium); break;
|
---|
| 125 | case dil_EVB : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_vanne_EVB); break;
|
---|
| 126 | case dil_EVO : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_vanne_EVO); break;
|
---|
| 127 | case dil_EVF : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_vanne_EVF); break;
|
---|
| 128 | case dil_EVV : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_vanne_EVV); break;
|
---|
| 129 | case dil_sw_pp5 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_switch_pile_par_5); break;
|
---|
| 130 | case dil_sw_pp15 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_switch_pile_par_15); break;
|
---|
| 131 |
|
---|
| 132 | /*
|
---|
| 133 |
|
---|
[637] | 134 | case dil_switch_helium : ecrit_bit_dilution((int)valeur,switch_helium); break;
|
---|
| 135 | case dil_EVB : ecrit_bit_dilution((int)valeur,vanne_EVB); break;
|
---|
| 136 | case dil_EVO : ecrit_bit_dilution((int)valeur,vanne_EVO); break;
|
---|
| 137 | case dil_EVF : ecrit_bit_dilution((int)valeur,vanne_EVF); break;
|
---|
| 138 | case dil_EVV : ecrit_bit_dilution((int)valeur,vanne_EVV); break;
|
---|
| 139 | case dil_sw_pp5 : ecrit_bit_dilution((int)valeur,switch_pile_par_5); break;
|
---|
| 140 | case dil_sw_pp15 : ecrit_bit_dilution((int)valeur,switch_pile_par_15); break;
|
---|
[649] | 141 | */
|
---|
[637] | 142 | // ---- commande directe d'un mot avec les 3 case de codage hexadecimales
|
---|
| 143 |
|
---|
| 144 | // case dil_switch_1 :
|
---|
| 145 | // case dil_switch_2 :
|
---|
| 146 | // case dil_switch_3 : ecrit_bit_dilution(0,0); break;
|
---|
| 147 |
|
---|
| 148 | // ---- telecommande du raz periodique des fets
|
---|
| 149 | case dil_raz_modul :
|
---|
[649] | 150 | case dil_fet_raz :
|
---|
| 151 | i =0;
|
---|
| 152 | if(litD(fen,dil_fet_raz,0)==2) i+=1;
|
---|
| 153 | if(litD(fen,dil_fet_raz,0)==3) i+=7;
|
---|
| 154 | emission_tc_reduite(tc2_raz_fet,0,i);
|
---|
| 155 | /*
|
---|
[637] | 156 | {
|
---|
| 157 | char mot_tc[10];
|
---|
| 158 | mot_tc[0]=7; // commande la premiere bebo directe -> il faut ecrire tc reduite
|
---|
| 159 | i=litD(fen,dil_raz_modul,0);
|
---|
| 160 | i=i<<3;
|
---|
| 161 | if(litD(fen,dil_fet_raz,0)==2) i+=1;
|
---|
| 162 | if(litD(fen,dil_fet_raz,0)==3) i+=7;
|
---|
| 163 | i=i<<4;
|
---|
| 164 | mot_tc[1]=i;
|
---|
| 165 | for(i=2;i<8;i++) mot_tc[i]=0;
|
---|
| 166 | emission_telecommande(tc_dir_transputer,mot_tc);
|
---|
| 167 | }
|
---|
[649] | 168 | */
|
---|
[637] | 169 | break;
|
---|
| 170 |
|
---|
[649] | 171 | case dil_ch1 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage1); break;
|
---|
| 172 | case dil_ch2 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage2); break;
|
---|
| 173 | case dil_ch3 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage3); break;
|
---|
| 174 | case dil_ch4 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage4); break;
|
---|
| 175 | case dil_ch5 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage5); break;
|
---|
| 176 | case dil_ch6 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage6); break;
|
---|
| 177 | case dil_ch7 : emission_tc_reduite(tc2_dilution,(valeur==1),nbit_chauffage7); break;
|
---|
[639] | 178 |
|
---|
| 179 | // case dil_dac_1 :
|
---|
| 180 | // case dil_dac_2 :
|
---|
[643] | 181 | // case dil_envoi_dac : ecrit_dac_dilution(); break;
|
---|
| 182 | case dil_envoi_dac : ecrit_moteur_dilution((int)litD(fenetre_dilution,dil_dac_2,0)); // les 12 bits
|
---|
| 183 | break;
|
---|
[637] | 184 |
|
---|
| 185 | default : break;
|
---|
| 186 | }
|
---|
| 187 | }
|
---|
| 188 |
|
---|
| 189 |
|
---|
| 190 |
|
---|
| 191 |
|
---|
| 192 | void traite_block_dilution(block_type_dilution* blk)
|
---|
| 193 | {
|
---|
| 194 | int i;
|
---|
| 195 |
|
---|
| 196 | // ouvre la fenetre de calibration
|
---|
| 197 | if(!fenetre(fenetre_dilution_calibration))
|
---|
| 198 | nouveauD(fenetre_dilution_calibration,dilution_calibrations_id,"dilution_calibration",exec_cache);
|
---|
| 199 |
|
---|
| 200 | if( (blk->switch_dil&0x3f ) != 6 ) {
|
---|
| 201 | // printf("**************** affiche erreur \n");
|
---|
| 202 | changecontrole(fenetre_dilution,dil_erreur,idem,idem,idem,idem,idem,"erreur");
|
---|
| 203 | }
|
---|
| 204 | else {
|
---|
| 205 | static int q;
|
---|
| 206 | char ss[10]="____";
|
---|
| 207 | q=(q+1)&3;
|
---|
| 208 | ss[q]='/';
|
---|
| 209 | changecontrole(fenetre_dilution,dil_erreur,idem,idem,idem,idem,idem,ss);
|
---|
| 210 | // printf("**************** pas d' erreur \n");
|
---|
| 211 | }
|
---|
| 212 |
|
---|
| 213 |
|
---|
| 214 | // lit les switchs
|
---|
| 215 | // -- les voyants de fin de course vanne principale (logique negative)
|
---|
| 216 | ecritD(fenetre_dilution,dil_voyant_EVO,((blk->switch_dil&switch_EVO)?0:1));
|
---|
| 217 | ecritD(fenetre_dilution,dil_voyant_EVF,((blk->switch_dil&switch_EVF)?0:1));
|
---|
| 218 |
|
---|
| 219 | // les retour de commande des electrovannes
|
---|
| 220 | ecritD(fenetre_dilution,dil_EVB_retour,((blk->switch_dil&vanne_EVB)?1:0));
|
---|
| 221 | ecritD(fenetre_dilution,dil_EVO_retour,((blk->switch_dil&vanne_EVO)?1:0));
|
---|
| 222 | ecritD(fenetre_dilution,dil_EVF_retour,((blk->switch_dil&vanne_EVF)?1:0));
|
---|
| 223 | ecritD(fenetre_dilution,dil_EVV_retour,((blk->switch_dil&vanne_EVV)?1:0));
|
---|
| 224 |
|
---|
[639] | 225 |
|
---|
[645] | 226 | #define c(j,i) (1e-4*(double)parametr.nom_coef[parametr.bolo[j].numero_nom_coef].coef[i])
|
---|
[639] | 227 |
|
---|
| 228 | // les temperatures sur les cartes modifiées
|
---|
| 229 | {
|
---|
[645] | 230 | double I,V,R[8],llR;
|
---|
[639] | 231 | int j,k;
|
---|
| 232 | def_gains;
|
---|
| 233 | k=0;
|
---|
[645] | 234 |
|
---|
[639] | 235 | for(j=0;(j<nb_max_bolo) && (k<4);j++)
|
---|
| 236 | {
|
---|
| 237 | if(parametr.bolo[j].bolo_code_util==bolo_thermo_simplifie)
|
---|
| 238 | {
|
---|
| 239 | I = 1e-3 * (double)dac_V(gg->reglage.bolo[j]) * 2441. / parametr.bolo[j].bolo_capa; // I en µA
|
---|
| 240 | V=0.001*bol_micro_volt(blk->temperature[k],(double)parametr.bolo[j].bolo_gain*gain_ampli(gg->reglage.bolo[j]));
|
---|
| 241 | if(I>0.0000001) R[k]=V/I; else R[k]=0; // R en
|
---|
[645] | 242 | //------ calcul de l'etalonnage en temperature des cartes temperature simplifiées
|
---|
| 243 | // j=numero de bebo T[k] = R[k+4] en Kelvin
|
---|
| 244 | if ((R[k]-c(j,6))>1.)
|
---|
[649] | 245 | {if((log(R[k]-c(j,6))-c(j,0))>0.001) llR= log(log(R[k]-c(j,6))-c(j,0)) ; else llR=0;
|
---|
| 246 | // printf("\nk=%d j=%d R=%g c2=%g c3=%g llR=%g",k,j,R[k],c(j,2),c(j,3),llR);
|
---|
| 247 | }
|
---|
[645] | 248 | else llR=0;
|
---|
| 249 | R[k+4] = exp( c(j,1) + c(j,2)* llR + c(j,3)* llR* llR + c(j,4)* llR* llR* llR + c(j,5)* llR* llR* llR* llR) ;
|
---|
| 250 | if(R[k+4]>9999) R[k+4]=9999;
|
---|
| 251 | k++;
|
---|
[639] | 252 | }
|
---|
| 253 | }
|
---|
| 254 |
|
---|
[649] | 255 | gg->temperature_cryo=R[4]; // Charge la temperature_cryo (0.1K) pour les calculs futurs avec les bolos
|
---|
| 256 | /* La germanium doit toujours etre en premier par rapport aux autres thermos absolus */
|
---|
[645] | 257 |
|
---|
| 258 | if(R[0]<90.) ecritD(fenetre_dilution,dil_temp
|
---|
| 259 | , "ge=%6.2f 4K=%6.2f 1.6K=%6.2f 10K=%6.2f\rge= %6.3fK 4K=%6.2fK 1.6K=%6.2fK 10K=%6.2fK "
|
---|
| 260 | ,R[0],R[1],R[2],R[3],R[4],R[5],R[6],R[7]);
|
---|
| 261 | else ecritD(fenetre_dilution,dil_temp
|
---|
| 262 | ,"ge=%6.3fk 4K=%6.2f 1.6K=%6.2f 10K=%6.2f\rge= %6.3fmK 4K=%6.2fK 1.6K=%6.2fK 10K=%6.2fK "
|
---|
| 263 | ,R[0]*0.001,R[1],R[2],R[3],R[4]*1000.,R[5],R[6],R[7]);
|
---|
| 264 |
|
---|
| 265 |
|
---|
[639] | 266 | if(litD(fenetre_dilution,dil_trace_tempe,0))// trace les sondes de niveau helium
|
---|
| 267 | {
|
---|
| 268 | int temps_cntl=numero_block(blk)*nb_per_block*2;
|
---|
| 269 | double secondes,minutes;
|
---|
| 270 | secondes=gg->periode_echantillonage*(double)temps_cntl;
|
---|
| 271 | minutes=secondes/60.;
|
---|
| 272 | if(!fenetre(fenetre_temperature_dil))
|
---|
| 273 | {
|
---|
| 274 | nouveauD(fenetre_temperature_dil,0,"temperature_dil",0);
|
---|
| 275 | selectgra(fenetre_temperature_dil);
|
---|
| 276 | strcpy(graph->xtitre,"minutes");
|
---|
| 277 | }
|
---|
[645] | 278 | tracen(fenetre_temperature_dil,8,minutes,R);
|
---|
[639] | 279 | }
|
---|
| 280 | }
|
---|
| 281 |
|
---|
[637] | 282 | // les pressions et debits metres des injections de la dilution
|
---|
| 283 | ecritD(fenetre_dilution,dil_p_d_3He,"3He: %4.1fb -> %5.2fµm/s -> %4.1fb"
|
---|
[643] | 284 | ,40. * val_multiplex(blk->ADC_dil[ p_R3]) -1.6 // 200 bars pour 5V et 1.6 bar d'offset
|
---|
| 285 | ,2. * val_multiplex(blk->ADC_dil[ d_3He]) // 10 MICRO MOLES pour 5V
|
---|
| 286 | ,20. * val_multiplex(blk->ADC_dil[ p_C3]) // 100 bars pour 5V
|
---|
[637] | 287 | );
|
---|
| 288 | ecritD(fenetre_dilution,dil_p_d_4He,"4He: %4.1fb -> %5.2fµm/s -> %4.1fb"
|
---|
[643] | 289 | ,40. * val_multiplex(blk->ADC_dil[ p_R4]) // 200 bars pour 5V
|
---|
| 290 | ,8. * val_multiplex(blk->ADC_dil[ d_4He]) // 40 MICRO MOLES pour 5V
|
---|
| 291 | // ,4. * val_multiplex(blk->ADC_dil[ d_4He]) // 20 MICRO MOLES pour 5V
|
---|
| 292 | ,20. * val_multiplex(blk->ADC_dil[ p_C4]) // 100 bars pour 5V
|
---|
[637] | 293 | );
|
---|
| 294 |
|
---|
| 295 | ecritD(fenetre_dilution,dil_p_air,"Van=%4.1fb charb=%4.1fb mmb=%4.3fb haut=%4.3fb"
|
---|
[643] | 296 | ,20.*val_multiplex(blk->ADC_dil[ p_air]),20.*val_multiplex(blk->ADC_dil[ p_charb])
|
---|
| 297 | ,0.2*val_multiplex(blk->ADC_dil[ p_memb]),0.2*val_multiplex(blk->ADC_dil[ p_haut]) );
|
---|
[637] | 298 |
|
---|
| 299 | ecritD(fenetre_dilution,dil_piles," Trp=%4.1fV Dil=%4.1fV / %4.1fV \rBebo=%4.1fV / %4.1fV / %4.1fV Ch=%4.1fV"
|
---|
[643] | 300 | ,2.03*val_multiplex(blk->ADC_dil[ p_10T]),3.90*val_multiplex(blk->ADC_dil[ p_p18D]),3.90*val_multiplex(blk->ADC_dil[ p_m18D])
|
---|
| 301 | ,2.03*val_multiplex(blk->ADC_dil[ p_10B]),3.90*val_multiplex(blk->ADC_dil[ p_p18B]),3.90*val_multiplex(blk->ADC_dil[ p_m18B])
|
---|
| 302 | ,3.8*val_multiplex(blk->ADC_dil[ p_Ch]));
|
---|
[637] | 303 |
|
---|
| 304 | /* valeur seuil au mini (5.3 ou 15.3V) , *17 = +5.9 V au maxi */
|
---|
| 305 |
|
---|
| 306 |
|
---|
[643] | 307 | ecritD(fenetre_dilution,dil_p_10T,(int)(17*(2.03*val_multiplex(blk->ADC_dil[ p_10T])-5.3)));
|
---|
| 308 | ecritD(fenetre_dilution,dil_p_p18D,(int)(17*(3.90*val_multiplex(blk->ADC_dil[ p_p18D])-15.3)));
|
---|
| 309 | ecritD(fenetre_dilution,dil_p_m18D,(int)(17*(-3.90*val_multiplex(blk->ADC_dil[ p_m18D])-15.3)));
|
---|
| 310 | ecritD(fenetre_dilution,dil_p_10B,(int)(17*(2.03*val_multiplex(blk->ADC_dil[ p_10B])-5.3)));
|
---|
| 311 | ecritD(fenetre_dilution,dil_p_p18B,(int)(17*(3.93*val_multiplex(blk->ADC_dil[ p_p18B])-15.3)));
|
---|
| 312 | ecritD(fenetre_dilution,dil_p_m18B,(int)(17*(-3.93*val_multiplex(blk->ADC_dil[ p_m18B])-15.3)));
|
---|
| 313 | ecritD(fenetre_dilution,dil_p_Ch,(int)(10*(3.8*val_multiplex(blk->ADC_dil[ p_Ch])-25))); /* 25 a 35 V */
|
---|
[637] | 314 |
|
---|
| 315 | // -- les voyants de switch de piles
|
---|
| 316 | ecritD(fenetre_dilution,dil_voyant_pp5,((blk->switch_dil&switch_pile_par_5)?1:0));
|
---|
| 317 | ecritD(fenetre_dilution,dil_voyant_pp15,((blk->switch_dil&switch_pile_par_15)?1:0));
|
---|
| 318 |
|
---|
| 319 |
|
---|
[649] | 320 | ecritD(fenetre_dilution,dil_temperatures,"temp-Haut = %4.1f° %4.1f° Base = %4.1f° %4.1f° \r tube He: %4.1f° piles %4.1f° driver %4.1f°"
|
---|
| 321 | ,val_temperature(blk->ADC_dil[ t_h2]),val_temperature(blk->ADC_dil[ t_h4])
|
---|
| 322 | ,val_temperature(blk->ADC_dil[ t_b1]),val_temperature(blk->ADC_dil[ t_b2]),val_temperature(blk->ADC_dil[ t_b3])
|
---|
| 323 | ,val_temperature(blk->ADC_dil[ t_pile]),val_temperature(blk->ADC_dil[ t_a1])
|
---|
[637] | 324 | );
|
---|
| 325 |
|
---|
[649] | 326 | ecritD(fenetre_dilution,dil_t_h1,cnt_temperature(t_h2));
|
---|
| 327 | ecritD(fenetre_dilution,dil_t_h2,cnt_temperature(t_h4));
|
---|
| 328 | ecritD(fenetre_dilution,dil_t_h3,cnt_temperature(t_b1));
|
---|
| 329 | ecritD(fenetre_dilution,dil_t_h4,cnt_temperature(t_b2));
|
---|
| 330 | ecritD(fenetre_dilution,dil_t_a1,cnt_temperature(t_b3));
|
---|
| 331 | ecritD(fenetre_dilution,dil_t_a2,cnt_temperature(t_pile));
|
---|
| 332 | ecritD(fenetre_dilution,dil_t_a3,cnt_temperature(t_a1));
|
---|
[637] | 333 |
|
---|
| 334 |
|
---|
| 335 | // les afficheurs analogiques de pression helium et pirani
|
---|
| 336 |
|
---|
[643] | 337 | ecritD(fenetre_dilution,dil_RP_He,(int)(2500*val_multiplex(blk->ADC_dil[ RP_He])-7500));
|
---|
[637] | 338 | // je veux 10000 pour 0.8 bars soit alors que l'on a 5V pour 1 bar ou 1V = 0.2 bar
|
---|
| 339 | // soit multiplier par 2500
|
---|
| 340 | // puis j'enleve 0.6 bars soit 7500
|
---|
[643] | 341 | ecritD(fenetre_dilution,dil_pirani,(int)(1000*val_multiplex(blk->ADC_dil[ pirani])));
|
---|
[637] | 342 |
|
---|
| 343 |
|
---|
| 344 |
|
---|
| 345 |
|
---|
| 346 |
|
---|
| 347 |
|
---|
| 348 | // ecriture des valeurs brutes de la dilution
|
---|
| 349 | if(litD(fenetre_dilution,dil_sortie_brute,0))
|
---|
| 350 | {
|
---|
| 351 | if(!fenetre(fenetre_dilution_lecture_brute)) nouveauT(fenetre_dilution_lecture_brute,0,"lecture dilution");
|
---|
| 352 |
|
---|
| 353 | ecritT(fenetre_dilution_lecture_brute,fin_f,"dil_switch= %x \n",blk->switch_dil);
|
---|
| 354 |
|
---|
[643] | 355 | for(i=0;i<16;i++) ecritT(fenetre_dilution_lecture_brute,fin_f,"%2d=%6.3f ",i<8?i+11:i+13,val_multiplex(blk->ADC_dil[ i]));
|
---|
[637] | 356 | ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
|
---|
[643] | 357 | for(i=16;i<32;i++) ecritT(fenetre_dilution_lecture_brute,fin_f,"%2d=%6.3f ",i<24?i+15:i+17,val_multiplex(blk->ADC_dil[ i]));
|
---|
[637] | 358 | ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
|
---|
[643] | 359 | for(i=32;i<48;i++) ecritT(fenetre_dilution_lecture_brute,fin_f,"%2d=%6.3f ",i<40?i+19:i+21,val_multiplex(blk->ADC_dil[ i]));
|
---|
[637] | 360 | ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
|
---|
| 361 | }
|
---|
| 362 | // lecture des sondes de niveau helium
|
---|
| 363 |
|
---|
[639] | 364 |
|
---|
[637] | 365 | {
|
---|
| 366 | double y[8];
|
---|
[639] | 367 | static int niveau_pre;
|
---|
[637] | 368 | int niveau,fin;
|
---|
[639] | 369 | // printf("dilution : numero de block = %d \n",numero_block(blk));
|
---|
[637] | 370 | changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,rouge,blanc,blanc),"");
|
---|
[643] | 371 | y[0]=val_multiplex(blk->ADC_dil[ j_he1])-calib(dil_j_he1);
|
---|
| 372 | y[1]=val_multiplex(blk->ADC_dil[ j_he2])-calib(dil_j_he2);
|
---|
| 373 | y[2]=val_multiplex(blk->ADC_dil[ j_he3])-calib(dil_j_he3);
|
---|
| 374 | y[3]=val_multiplex(blk->ADC_dil[ j_he4])-calib(dil_j_he4);
|
---|
| 375 | y[4]=val_multiplex(blk->ADC_dil[ j_he5])-calib(dil_j_he5);
|
---|
| 376 | y[5]=val_multiplex(blk->ADC_dil[ j_he6])-calib(dil_j_he6);
|
---|
| 377 | y[6]=val_multiplex(blk->ADC_dil[ j_he7])-calib(dil_j_he7);
|
---|
| 378 | y[7]=val_multiplex(blk->ADC_dil[ j_he8])-calib(dil_j_he8);
|
---|
[639] | 379 | if(blk->switch_dil & switch_helium)
|
---|
[637] | 380 | {
|
---|
[639] | 381 | changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,rouge,blanc,blanc),"");
|
---|
| 382 | niveau=0;fin=0;
|
---|
| 383 | for(i=0;i<8;i++)
|
---|
| 384 | {
|
---|
| 385 | if(y[i]>0.1) {
|
---|
| 386 | niveau++;
|
---|
| 387 | if(fin) niveau=9;
|
---|
| 388 | }
|
---|
| 389 | else fin=1;
|
---|
| 390 | }
|
---|
| 391 | // if(niveau==9) changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem
|
---|
| 392 | // ,calrefcon(0,0,jaune,blanc,blanc),"");
|
---|
| 393 | if(niveau<niveau_pre) niveau_pre=0;
|
---|
| 394 | else {niveau_pre=niveau; ecritD(fenetre_dilution,dil_niveau_helium,niveau);}
|
---|
| 395 | // printf("niveau=%d \n",niveau);
|
---|
[637] | 396 | }
|
---|
[639] | 397 | else changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,vert,blanc,blanc),"");
|
---|
[637] | 398 |
|
---|
| 399 | if(litD(fenetre_dilution,dil_trace_helium,0))// trace les sondes de niveau helium
|
---|
| 400 | {
|
---|
| 401 | int temps_cntl=numero_block(blk)*nb_per_block*2;
|
---|
| 402 | double secondes,minutes;
|
---|
| 403 | secondes=gg->periode_echantillonage*(double)temps_cntl;
|
---|
| 404 | minutes=secondes/60.;
|
---|
| 405 | if(!fenetre(fenetre_niveau_helium))
|
---|
| 406 | {
|
---|
| 407 | nouveauD(fenetre_niveau_helium,0,"niveau_helium",0);
|
---|
| 408 | selectgra(fenetre_niveau_helium);
|
---|
| 409 | strcpy(graph->xtitre,"minutes");
|
---|
| 410 | }
|
---|
| 411 | tracen(fenetre_niveau_helium,8,minutes,y);
|
---|
| 412 | }
|
---|
| 413 | }
|
---|
| 414 |
|
---|
| 415 | }
|
---|
| 416 |
|
---|
| 417 |
|
---|