| 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 |  | 
|---|