| 1 | //#define mode  taillesymbole
 | 
|---|
| 2 | /*
 | 
|---|
| 3 | Le fichier de données diabolo est un fichier mac de type 'DIA2' qui contient 
 | 
|---|
| 4 |         une suite d'enregistrements.
 | 
|---|
| 5 |         
 | 
|---|
| 6 | Il commence par une entete correspondant à la structure de type F_entete
 | 
|---|
| 7 |         - cette entete contient 
 | 
|---|
| 8 | 
 | 
|---|
| 9 | On a ensuite une suite d'enregistrements comportant chacun:
 | 
|---|
| 10 |         - une entete partielle avec les parametres de mesure, y compris les parametres DAC
 | 
|---|
| 11 |                 structure de type F_entete_part
 | 
|---|
| 12 |         - une suite de valeur correspondant à chaque point mesuré et contenant:
 | 
|---|
| 13 |                         Le temps calculé
 | 
|---|
| 14 |                         Les 6 signaux de synchro
 | 
|---|
| 15 |                         Les voies 1 à 7 :  5 bolometre + 1 temperature + 1 chauffage regul
 | 
|---|
| 16 | 
 | 
|---|
| 17 | */
 | 
|---|
| 18 | 
 | 
|---|
| 19 | 
 | 
|---|
| 20 | enum            {bol,bolxx,chauf,pipo};                 //  types de bolometres
 | 
|---|
| 21 | 
 | 
|---|
| 22 | 
 | 
|---|
| 23 | #define max_nb_donne    1000L                           // nombre maxi de donne dans un bloc du fichier
 | 
|---|
| 24 | #define temps_max_fichier       300                             // durée maxi d'un fichier (5 minutes) 
 | 
|---|
| 25 | 
 | 
|---|
| 26 | 
 | 
|---|
| 27 | 
 | 
|---|
| 28 | #define         max_nb_mesures          256                     // maxi dans une periode de modulation electrique
 | 
|---|
| 29 | 
 | 
|---|
| 30 | #define         nb_ds_table                     3                       // 4  DS :      -       signal
 | 
|---|
| 31 |                                                                                         //                      -       chauffage
 | 
|---|
| 32 |                                                                                         //                      -       transitoire
 | 
|---|
| 33 |                                                                                         //              pas de mesure de linéarité
 | 
|---|
| 34 | 
 | 
|---|
| 35 | #define         nb_max_bolo                     9                       //  5 bolo, 1 chauff  1 non util.  (MONTER À 11 maxi)
 | 
|---|
| 36 | #define         nb_sync                         6                       //      1 synchro diode + 5 synchro externes
 | 
|---|
| 37 | 
 | 
|---|
| 38 | 
 | 
|---|
| 39 | /*
 | 
|---|
| 40 |  long_entete                    = 272 
 | 
|---|
| 41 |  long_entete_part               = 2128 
 | 
|---|
| 42 |  long_donne                     = 14 
 | 
|---|
| 43 | 
 | 
|---|
| 44 | */
 | 
|---|
| 45 | 
 | 
|---|
| 46 | 
 | 
|---|
| 47 | typedef struct                  //  etat de l'ensemble de la manip , aussi pour entete partielle  
 | 
|---|
| 48 |         {
 | 
|---|
| 49 |         
 | 
|---|
| 50 |                                 long    duree;                                          // durée d'une periode (en µsec)
 | 
|---|
| 51 |                                 short   nb_mesures;                                     // nombre de mesures dans une periode
 | 
|---|
| 52 |                                 short   temp_mort;                                      // temps mort pour la detection synchrone numerique
 | 
|---|
| 53 | 
 | 
|---|
| 54 |                                 short   diode_etat;                                     // etat des diodes
 | 
|---|
| 55 |                                 short   diode_dure;                                     // duree de periode des diodes
 | 
|---|
| 56 | 
 | 
|---|
| 57 |                                 short   gainbrut[nb_max_bolo];                          // valeur du gain codé : (0,1,2,...,15) 
 | 
|---|
| 58 |                                 short   gain[nb_max_bolo];                                      // valeur du gain en vraies valeurs(1,2,4,8,10,...,8000) 
 | 
|---|
| 59 |                                 short   dac[4][nb_max_bolo];                            // les valeurs des DAC 4 voies en entier (0 à 4095)
 | 
|---|
| 60 |                                 short   phase[nb_max_bolo];                                     // valeur du dephasage individuel : valeur  0  à  4
 | 
|---|
| 61 | 
 | 
|---|
| 62 |         }
 | 
|---|
| 63 |         etat_bolo;
 | 
|---|
| 64 | 
 | 
|---|
| 65 | 
 | 
|---|
| 66 | 
 | 
|---|
| 67 | typedef struct  {
 | 
|---|
| 68 |                                 short   version;                                        // 1 pour cette version du programme
 | 
|---|
| 69 |                                                 
 | 
|---|
| 70 |                                 short   long_entete;                            // longueur de l'entete 
 | 
|---|
| 71 |                                 short   long_entete_part;                       // longueur de l'entete partielle
 | 
|---|
| 72 |                                 short   long_donne;                                     // longueur d'une ligne de données
 | 
|---|
| 73 | 
 | 
|---|
| 74 |                                 unsigned long tempsdebut;                       // temps de debut de fichier    
 | 
|---|
| 75 |                                 unsigned long tempsfin;                         // temps de fin de fichier
 | 
|---|
| 76 |                                 char commentaires[256];                         // commentaires à la main
 | 
|---|
| 77 |                                 } F_entete;       
 | 
|---|
| 78 | 
 | 
|---|
| 79 | 
 | 
|---|
| 80 | typedef struct  
 | 
|---|
| 81 |                                 {
 | 
|---|
| 82 |                                 short   n_ligne_don;                            // Nombre de lignes de donné dans cet enregistrement
 | 
|---|
| 83 |                                                                                                         // ou    nombre d'octets du commentaire
 | 
|---|
| 84 |                                 short   n_blok;                                         // numero du blok dans le fichier
 | 
|---|
| 85 |                                 short   change;                                         // valeur 0 = bloc identique au precedent
 | 
|---|
| 86 |                                                                                                         // valeur 1 = bloc modifié
 | 
|---|
| 87 |                                                                                                         // valeur 2 = debut de prise de donnees
 | 
|---|
| 88 |                                                                                                         // valeur 10 = le block ne contient qu'un commentaire
 | 
|---|
| 89 | 
 | 
|---|
| 90 |                                 short   bololut;                                        //  bit 0 à bit 3  ==1  si les courbes bolo ont ete lues
 | 
|---|
| 91 |                                 } F_block_desc;
 | 
|---|
| 92 | 
 | 
|---|
| 93 | 
 | 
|---|
| 94 | typedef struct  
 | 
|---|
| 95 |                                 {
 | 
|---|
| 96 | 
 | 
|---|
| 97 |                                 unsigned long   temps_controleur_debut;         // en micro/secondes :temps du premier point dans le bloc                       
 | 
|---|
| 98 |                                 unsigned long   temps_controleur_fin;           // en micro/secondes :temps du dernier point dans le bloc                       
 | 
|---|
| 99 |                                 
 | 
|---|
| 100 |                                 etat_bolo       eb;
 | 
|---|
| 101 |                                 
 | 
|---|
| 102 |                                 short   bolo[nb_max_bolo][max_nb_mesures];      //   courbe echantillon d'une mesure
 | 
|---|
| 103 |                                                         
 | 
|---|
| 104 |                                 } F_block_param;          
 | 
|---|
| 105 | 
 | 
|---|
| 106 | 
 | 
|---|
| 107 | typedef struct  {
 | 
|---|
| 108 |                                 short   bolo[nb_max_bolo];                       
 | 
|---|
| 109 |                                 char    sync[nb_sync];                                  // les synchro en cara (6 signaux)
 | 
|---|
| 110 |                                 } F_donne;        
 | 
|---|
| 111 | 
 | 
|---|
| 112 | 
 | 
|---|
| 113 | //__________________________   calcul des valeurs  vraies en micro/volt  ou % de chauffage
 | 
|---|
| 114 | 
 | 
|---|
| 115 | #define         xbol(j)         ((1e5*(double)gg->don.bolo[j])/(65536.*((double)(gg->eb.gain[j]))))             // en µV
 | 
|---|
| 116 | #define         xsat(j)         ((100.*(double)gg->sat[j])/32768.)                                                                              //  0  à  100% 
 | 
|---|
| 117 | #define         xchauf(j)       ((100.*(double)gg->don.bolo[j])/32768.)                                                                 //  0  à  100% 
 | 
|---|
| 118 | #define         xtrans(j)       ((1e5*(double)gg->trans[j])/(65536.*((double)(gg->eb.gain[j]))))                                                                                //  0  à  100% 
 | 
|---|
| 119 | 
 | 
|---|
| 120 | 
 | 
|---|
| 121 | 
 | 
|---|