| 1 | 
 | 
|---|
| 2 | // Les données télémesure sont formées de blocks de type  block_tm
 | 
|---|
| 3 | // la table de transfert de ces blocks est la structure  table_tm
 | 
|---|
| 4 | // la longueur de table telemesure est    longueur_table_tm
 | 
|---|
| 5 | 
 | 
|---|
| 6 | 
 | 
|---|
| 7 | //#define   nb_per_block*2      24                              // nombre de demi periodes dans un block télémesure
 | 
|---|
| 8 | //#define   longueur_table_tm           20              // nb de blocks dans la table pour transmettre les télémesures
 | 
|---|
| 9 | //#define   longueur_table_tc   100                     // nb de datas dans la table de télécommandes
 | 
|---|
| 10 | 
 | 
|---|
| 11 | //longueur definies dans choix_param
 | 
|---|
| 12 | 
 | 
|---|
| 13 | 
 | 
|---|
| 14 |         //  -----   pour detection synchrone
 | 
|---|
| 15 | typedef struct          
 | 
|---|
| 16 |         {       
 | 
|---|
| 17 |         int     ii[nb_max_bolo];                        // compteur position dans la periode
 | 
|---|
| 18 |         short   dstable[nb_max_mes_per];                // table les différents ds
 | 
|---|
| 19 |         short   dsnorme;                                // norme des detections synchrones
 | 
|---|
| 20 |         long    sommeA[nb_max_bolo];    
 | 
|---|
| 21 |         long    sommeB[nb_max_bolo];    
 | 
|---|
| 22 |         }       detec_sync;
 | 
|---|
| 23 | 
 | 
|---|
| 24 | 
 | 
|---|
| 25 | 
 | 
|---|
| 26 | typedef struct                  //  block telemesure pour dialogue avec les interruptions  
 | 
|---|
| 27 |         {
 | 
|---|
| 28 |         unsigned long           temps_cntl[nb_per_block*2];     // temps du controlleur en µsec  
 | 
|---|
| 29 |         unsigned long           temps_mac[nb_per_block*2];              // temps du mac en sec  
 | 
|---|
| 30 |         reglage_bolo            reglage;                                        // parametr de reglage des bolos
 | 
|---|
| 31 |         int                     chauf_regul;                                            
 | 
|---|
| 32 |         
 | 
|---|
| 33 |         short                   flag_bolo[nb_max_bolo];                 // flag de lecture detail de la forme de modulation
 | 
|---|
| 34 |         short                   bol_per[nb_max_bolo][nb_max_mes_per];   // table une periode detail de la forme de modulation
 | 
|---|
| 35 |         F_donne                 don[nb_per_block*2];            // donnees bolo et synchro pour  "nb_per_block*2" periodes  
 | 
|---|
| 36 | //*****************************************************************************************
 | 
|---|
| 37 | #ifdef _archeops        //---------   pour  Archeops    ------------------------------  ***
 | 
|---|
| 38 | //*****************************************************************************************
 | 
|---|
| 39 |         block_type_modele               tmtrx;
 | 
|---|
| 40 | //*****************************************************************************************
 | 
|---|
| 41 | #endif          //--------------------------------------------------------------------  ***
 | 
|---|
| 42 | //*****************************************************************************************
 | 
|---|
| 43 |         }       block_tm;
 | 
|---|
| 44 | 
 | 
|---|
| 45 | 
 | 
|---|
| 46 | typedef struct                  //  block telecommande pour dialogue avec les interruptions  
 | 
|---|
| 47 |         {
 | 
|---|
| 48 |         char                    mot[10];        // 10 mots de commande
 | 
|---|
| 49 |         }
 | 
|---|
| 50 |         block_tc;
 | 
|---|
| 51 | 
 | 
|---|
| 52 | 
 | 
|---|
| 53 | 
 | 
|---|
| 54 | 
 | 
|---|
| 55 | typedef struct                  //  table courante telemesure pour dialogue avec les interruptions  
 | 
|---|
| 56 |         {
 | 
|---|
| 57 |         
 | 
|---|
| 58 |         int                             pos_ecrit;                                              // position dans la table 
 | 
|---|
| 59 |         int                             pos_lit;
 | 
|---|
| 60 |         block_tm                btm[longueur_table_tm];                 // longueur_table_tm  blocks de telemesure
 | 
|---|
| 61 |         }
 | 
|---|
| 62 |         table_tm;
 | 
|---|
| 63 | 
 | 
|---|
| 64 | typedef struct                  //  table courante telemesure pour dialogue avec les interruptions  
 | 
|---|
| 65 |         {
 | 
|---|
| 66 |         
 | 
|---|
| 67 |         int                             pos_ecrit;                                              // position dans la table 
 | 
|---|
| 68 |         int                             pos_lit;
 | 
|---|
| 69 |         block_tc                btc[longueur_table_tc];                 // longueur_table_tc  blocks de telecommande
 | 
|---|
| 70 |         }
 | 
|---|
| 71 |         table_tc;
 | 
|---|
| 72 | 
 | 
|---|
| 73 | 
 | 
|---|
| 74 | typedef struct                  //  parametres de regul dans les interruptions  
 | 
|---|
| 75 |         {
 | 
|---|
| 76 |         regul_p_i_d     pid;
 | 
|---|
| 77 | 
 | 
|---|
| 78 |         long            valeur;
 | 
|---|
| 79 |         long            anc_ecart;
 | 
|---|
| 80 |         int             compteur;       
 | 
|---|
| 81 |         double          tint;
 | 
|---|
| 82 |         int             cc;
 | 
|---|
| 83 | //      int             per_raz;        // nombre de periode entre 2 raz (zero tension sur la modulation)
 | 
|---|
| 84 | //      int             nb_raz;         // nombre de periode courant
 | 
|---|
| 85 |         }
 | 
|---|
| 86 |         param_regul;
 | 
|---|
| 87 | 
 | 
|---|
| 88 | 
 | 
|---|
| 89 | //*****************************************************************************************
 | 
|---|
| 90 | //                                                                                      ***
 | 
|---|
| 91 | #ifdef _archeops        //---------   pour  Archeops    ------------------------------  ***
 | 
|---|
| 92 | //                                                                                      ***
 | 
|---|
| 93 | //*****************************************************************************************
 | 
|---|
| 94 | 
 | 
|---|
| 95 | 
 | 
|---|
| 96 | 
 | 
|---|
| 97 | typedef struct                  //  variables internes du programme d'interruption pour Archeops  
 | 
|---|
| 98 |         {
 | 
|---|
| 99 |         unsigned long   temps_cntl;             // temps courant du controlleur en unite de 4.8 µsec ??? en demi periodes  
 | 
|---|
| 100 | 
 | 
|---|
| 101 |         int             a;                      //  compteur pour check debut et fin de block
 | 
|---|
| 102 |         int             b;                      //  compteur de mot 32 bit dans un block
 | 
|---|
| 103 |         int             c;                      //  compteur de bytes dans un mot 32 bit
 | 
|---|
| 104 | 
 | 
|---|
| 105 |         block_type_modele       btt;                    //  le plus gros des blocs telemesure transputer dans arc_com.h
 | 
|---|
| 106 | //*****************************************************************************************
 | 
|---|
| 107 | #ifdef _sans_transputer         //---------   pour  Archeops avec ctb    -------------  ***
 | 
|---|
| 108 |         char            bkb[nb_per_block*nb_max_mes_per*5];     //  le block brut venant des bebo
 | 
|---|
| 109 | #endif          //--------------------------------------------------------------------  ***
 | 
|---|
| 110 | //*****************************************************************************************
 | 
|---|
| 111 |         }
 | 
|---|
| 112 |         var_internes;
 | 
|---|
| 113 | 
 | 
|---|
| 114 | //*****************************************************************************************
 | 
|---|
| 115 | //                                                                                      ***
 | 
|---|
| 116 | #else                   //---------   pour  Diabolo    ------------------------------   ***
 | 
|---|
| 117 | //                                                                                      ***
 | 
|---|
| 118 | //*****************************************************************************************
 | 
|---|
| 119 | 
 | 
|---|
| 120 | typedef struct                  //  variables internes du programme d'interruption pour diabolo  
 | 
|---|
| 121 |         {
 | 
|---|
| 122 |         int             aa;                                     //  pour deux lectures fifo par point
 | 
|---|
| 123 |         int             a;                                      // compteur bit dans un mot
 | 
|---|
| 124 |         int             i;                                      // compteur position générale dans la periode
 | 
|---|
| 125 |         long            debut_per;                              // flag debut de periode
 | 
|---|
| 126 | 
 | 
|---|
| 127 |         int             numbol;                                 // le numero de bolo en cours de lecture par la bebo
 | 
|---|
| 128 |         long            mot[nb_max_bolo];                       // mot pour lecture de chaque voie ADC (phase en bit 12)
 | 
|---|
| 129 |         long            motsauve[nb_max_bolo][nb_max_mes_per];  // mot pour sauve mot precedent
 | 
|---|
| 130 |                 
 | 
|---|
| 131 |         char            synchro[nb_sync];                       // pour calcul interne des synchro avant de les envoyer
 | 
|---|
| 132 |                 
 | 
|---|
| 133 |                 
 | 
|---|
| 134 |         int             flag_ecriture_data;                     // flag pour ecrire les data sur le bus PCI
 | 
|---|
| 135 |         int             pos_block_tm;                           // position pour ecriture des données dans un block tm
 | 
|---|
| 136 |                 
 | 
|---|
| 137 |         unsigned long   temps_cntl;                             // temps courant du controlleur en µsec ou demi-periodes  
 | 
|---|
| 138 |                 
 | 
|---|
| 139 |         param_regul     reg;                                    //  ------  parametres de la regulation
 | 
|---|
| 140 |         
 | 
|---|
| 141 |         }
 | 
|---|
| 142 |         var_internes;
 | 
|---|
| 143 | 
 | 
|---|
| 144 | //*****************************************************************************************
 | 
|---|
| 145 | //                                                                                      ***
 | 
|---|
| 146 | #endif          //--------------------------------------------------------------------  ***
 | 
|---|
| 147 | //                                                                                      ***
 | 
|---|
| 148 | //*****************************************************************************************
 | 
|---|
| 149 | 
 | 
|---|
| 150 | 
 | 
|---|
| 151 | 
 | 
|---|
| 152 | //----------------------  structure complete  tm  +  tc  +  interne  tache
 | 
|---|
| 153 | 
 | 
|---|
| 154 | 
 | 
|---|
| 155 | typedef struct                  //  global connu de la tache et du prog principal  
 | 
|---|
| 156 |         {
 | 
|---|
| 157 |         int                     PCI_actif;              //      le PCI est actif
 | 
|---|
| 158 | 
 | 
|---|
| 159 |         
 | 
|---|
| 160 |         table_tm                tm;                     //      table de telemesure  
 | 
|---|
| 161 |         table_tc                tc;                     //      table de télécommande
 | 
|---|
| 162 | 
 | 
|---|
| 163 |         table_erreur            te;                     //      table courante pour gestion des erreurs de bus PCI
 | 
|---|
| 164 | 
 | 
|---|
| 165 |         int                     nb_lec_fofo_int;        //  nombre maxi de lectures dans la fifo en un coups d'interrupt
 | 
|---|
| 166 |         int                     val_con_fifo;           
 | 
|---|
| 167 |         int                     val_con_donnee;         
 | 
|---|
| 168 |         int                     val_con_pile;           
 | 
|---|
| 169 |         int                     val_con_erreur;         
 | 
|---|
| 170 |         int                     signal_scan_immediat;   //  signal scan immediat pour savoir avant
 | 
|---|
| 171 | 
 | 
|---|
| 172 | 
 | 
|---|
| 173 |         param_bolo              param;                  //      liste bolo dans le programme d'interruption
 | 
|---|
| 174 |         reglage_bolo            reglage;                        //      etat bolo dans le programme interruption        
 | 
|---|
| 175 |         
 | 
|---|
| 176 |         detec_sync              ds;                     //      registres pour detection synchrone numerique
 | 
|---|
| 177 |                                         //  -----   communication directe avec le  prog de lecture_fifo en interruption 
 | 
|---|
| 178 | 
 | 
|---|
| 179 | 
 | 
|---|
| 180 |         var_internes    vi;                                     //  variables internes du programme d'interruption
 | 
|---|
| 181 |         }
 | 
|---|
| 182 |         tmtc;
 | 
|---|
| 183 | 
 | 
|---|
| 184 | extern  tmtc  *tt;
 | 
|---|
| 185 | 
 | 
|---|