| 1 | #include "diabolo.h"
 | 
|---|
| 2 | #include "dilution.h" 
 | 
|---|
| 3 | #include "controle.h" 
 | 
|---|
| 4 | #include "arcunit.h" 
 | 
|---|
| 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 | 
 | 
|---|
| 19 | #define  cnt_temperature(i)     (20+(int)val_temperature(blk->ADC_dil[i]))
 | 
|---|
| 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)
 | 
|---|
| 23 | 
 | 
|---|
| 24 | 
 | 
|---|
| 25 | void  ecrit_moteur_dilution(int valeur);        // valeur sur 10 bit: poid fort=on/off
 | 
|---|
| 26 | 
 | 
|---|
| 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 | 
 | 
|---|
| 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
 | 
|---|
| 58 | /*
 | 
|---|
| 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 | }
 | 
|---|
| 85 | */
 | 
|---|
| 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
 | 
|---|
| 90 | 
 | 
|---|
| 91 | void  ecrit_dac_dilution(void);
 | 
|---|
| 92 | 
 | 
|---|
| 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 | }
 | 
|---|
| 112 | 
 | 
|---|
| 113 | 
 | 
|---|
| 114 | 
 | 
|---|
| 115 | 
 | 
|---|
| 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)
 | 
|---|
| 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 |     
 | 
|---|
| 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;
 | 
|---|
| 141 | */
 | 
|---|
| 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 :
 | 
|---|
| 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 | /*
 | 
|---|
| 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 |                 }
 | 
|---|
| 168 | */
 | 
|---|
| 169 |                  break;
 | 
|---|
| 170 |                  
 | 
|---|
| 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;
 | 
|---|
| 178 |     
 | 
|---|
| 179 | //    case dil_dac_1 :
 | 
|---|
| 180 | //   case dil_dac_2 :
 | 
|---|
| 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;
 | 
|---|
| 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 | 
 | 
|---|
| 225 | 
 | 
|---|
| 226 | #define c(j,i)          (1e-4*(double)parametr.nom_coef[parametr.bolo[j].numero_nom_coef].coef[i])      
 | 
|---|
| 227 | 
 | 
|---|
| 228 | // les temperatures sur les cartes modifiées
 | 
|---|
| 229 | {
 | 
|---|
| 230 | double I,V,R[8],llR;
 | 
|---|
| 231 | int j,k;
 | 
|---|
| 232 | def_gains;
 | 
|---|
| 233 | k=0;
 | 
|---|
| 234 | 
 | 
|---|
| 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 
 | 
|---|
| 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.) 
 | 
|---|
| 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 |                         } 
 | 
|---|
| 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++;            
 | 
|---|
| 252 |                 }
 | 
|---|
| 253 |         }
 | 
|---|
| 254 | 
 | 
|---|
| 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 */
 | 
|---|
| 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 | 
 | 
|---|
| 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 |                         }
 | 
|---|
| 278 |         tracen(fenetre_temperature_dil,8,minutes,R);
 | 
|---|
| 279 |         }
 | 
|---|
| 280 | }
 | 
|---|
| 281 | 
 | 
|---|
| 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"
 | 
|---|
| 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
 | 
|---|
| 287 |         );
 | 
|---|
| 288 | ecritD(fenetre_dilution,dil_p_d_4He,"4He: %4.1fb -> %5.2fµm/s -> %4.1fb"
 | 
|---|
| 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
 | 
|---|
| 293 |         );
 | 
|---|
| 294 | 
 | 
|---|
| 295 | ecritD(fenetre_dilution,dil_p_air,"Van=%4.1fb  charb=%4.1fb  mmb=%4.3fb  haut=%4.3fb"
 | 
|---|
| 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])      );
 | 
|---|
| 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"
 | 
|---|
| 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]));
 | 
|---|
| 303 | 
 | 
|---|
| 304 | /* valeur seuil au mini (5.3 ou 15.3V) , *17 =  +5.9 V au maxi  */
 | 
|---|
| 305 | 
 | 
|---|
| 306 | 
 | 
|---|
| 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  */
 | 
|---|
| 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 | 
 | 
|---|
| 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])
 | 
|---|
| 324 |         );
 | 
|---|
| 325 | 
 | 
|---|
| 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));
 | 
|---|
| 333 | 
 | 
|---|
| 334 | 
 | 
|---|
| 335 | //  les afficheurs analogiques de pression helium et pirani  
 | 
|---|
| 336 | 
 | 
|---|
| 337 | ecritD(fenetre_dilution,dil_RP_He,(int)(2500*val_multiplex(blk->ADC_dil[ RP_He])-7500));
 | 
|---|
| 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 
 | 
|---|
| 341 | ecritD(fenetre_dilution,dil_pirani,(int)(1000*val_multiplex(blk->ADC_dil[ pirani])));
 | 
|---|
| 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 | 
 | 
|---|
| 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]));
 | 
|---|
| 356 |         ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
 | 
|---|
| 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]));
 | 
|---|
| 358 |         ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
 | 
|---|
| 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]));
 | 
|---|
| 360 |         ecritT(fenetre_dilution_lecture_brute,fin_f,"\n");
 | 
|---|
| 361 |         }
 | 
|---|
| 362 | // lecture des sondes de niveau helium
 | 
|---|
| 363 | 
 | 
|---|
| 364 | 
 | 
|---|
| 365 |         {
 | 
|---|
| 366 |         double y[8];
 | 
|---|
| 367 |         static int niveau_pre;
 | 
|---|
| 368 |         int niveau,fin;
 | 
|---|
| 369 | //      printf("dilution :  numero de block = %d  \n",numero_block(blk));
 | 
|---|
| 370 |         changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,rouge,blanc,blanc),"");
 | 
|---|
| 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);
 | 
|---|
| 379 |         if(blk->switch_dil & switch_helium)
 | 
|---|
| 380 |                 {
 | 
|---|
| 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);
 | 
|---|
| 396 |                 }
 | 
|---|
| 397 |         else    changecontrole(fenetre_dilution,dil_niveau_helium,idem,idem,idem,idem,calrefcon(0,0,vert,blanc,blanc),"");
 | 
|---|
| 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 | 
 | 
|---|