| [637] | 1 | #include "manip.h" | 
|---|
|  | 2 | #include "choix_acquisition.h" | 
|---|
|  | 3 | #include "archeops.h" | 
|---|
|  | 4 | #include "choix_param.h" | 
|---|
|  | 5 | #include "structure.h" | 
|---|
|  | 6 | #include "carte_acqui.h" | 
|---|
|  | 7 | #include "carte_pci.h" | 
|---|
|  | 8 | #include "tm.h" | 
|---|
|  | 9 | #include "tache.h" | 
|---|
|  | 10 | #include "bolo.h" | 
|---|
|  | 11 |  | 
|---|
|  | 12 |  | 
|---|
|  | 13 | //***************************************************************************************** | 
|---|
|  | 14 | //                                                                                      *** | 
|---|
|  | 15 | #ifdef _diabolo //---------   pour  Diabolo    ------------------------------   *** | 
|---|
|  | 16 | //                                                                                      *** | 
|---|
|  | 17 | //***************************************************************************************** | 
|---|
|  | 18 |  | 
|---|
|  | 19 |  | 
|---|
|  | 20 |  | 
|---|
|  | 21 |  | 
|---|
|  | 22 |  | 
|---|
|  | 23 | double  deglitch_regul(double x); | 
|---|
|  | 24 | double  deglitch_regul(double x) | 
|---|
|  | 25 | { | 
|---|
|  | 26 | double dx; | 
|---|
|  | 27 | static int debut=1; | 
|---|
|  | 28 | static double X,DX; | 
|---|
|  | 29 | //return(x);                    //  ligne a retirer pour deglitcher | 
|---|
|  | 30 |  | 
|---|
|  | 31 | if(debut) {     X=0;DX=1000;    debut=0;        } | 
|---|
|  | 32 |  | 
|---|
|  | 33 | dx=x-X; if(dx<0)  dx=-dx; | 
|---|
|  | 34 | if( dx > DX ) | 
|---|
|  | 35 | { | 
|---|
|  | 36 | x=X; | 
|---|
|  | 37 | DX *=1.1; | 
|---|
|  | 38 | } | 
|---|
|  | 39 | else    { | 
|---|
|  | 40 | DX=0.9 * DX + 0.5 * dx +1 ; | 
|---|
|  | 41 | X=x; | 
|---|
|  | 42 | }               // en moyenne, 5 fois l'interval moyen | 
|---|
|  | 43 | return(x); | 
|---|
|  | 44 | } | 
|---|
|  | 45 |  | 
|---|
|  | 46 |  | 
|---|
|  | 47 | void  tache_regul(tmtc* tt) | 
|---|
|  | 48 | { | 
|---|
|  | 49 | block_tc  btc; | 
|---|
|  | 50 | btc=tt->tc.btc[tt->tc.pos_lit]; | 
|---|
|  | 51 | tt->vi.reg.pid=* ( (regul_p_i_d*)    &btc ); | 
|---|
|  | 52 | } | 
|---|
|  | 53 |  | 
|---|
|  | 54 |  | 
|---|
|  | 55 | void    regul(tmtc* tt) | 
|---|
|  | 56 | { | 
|---|
|  | 57 | int j,cc; | 
|---|
|  | 58 | double i,ecart; | 
|---|
|  | 59 |  | 
|---|
|  | 60 |  | 
|---|
|  | 61 | if(tt->vi.reg.pid.nb_mes<1) return;             // pas de regul si repetition <1 | 
|---|
|  | 62 | tt->vi.reg.compteur++; | 
|---|
|  | 63 | if( (tt->vi.reg.compteur>0) && (tt->vi.reg.compteur< (tt->vi.reg.pid.nb_mes*4+4) ) )    return; | 
|---|
|  | 64 |  | 
|---|
|  | 65 | ecart=-deglitch_regul(tt->vi.reg.valeur); | 
|---|
|  | 66 | ecart/=4*tt->vi.reg.pid.nb_mes;         //  valeur mesurée et moyennée apres repetition | 
|---|
|  | 67 | ecart=ecart/(long)tt->ds.dsnorme; | 
|---|
|  | 68 | ecart=((1e5*(double)ecart)/(65536.*tt->reglage.gain[tt->vi.reg.pid.num_bolo-1])); | 
|---|
|  | 69 | tt->vi.reg.valeur=(long)ecart; | 
|---|
|  | 70 | i=tt->vi.reg.tint; | 
|---|
|  | 71 | i=i+ecart*tt->vi.reg.pid.i;                                     //      terme intergral | 
|---|
|  | 72 | if(i>4000) i=4000; | 
|---|
|  | 73 | if(i<0) i=0; | 
|---|
|  | 74 | cc=tt->vi.reg.pid.p*ecart+i+(ecart-tt->vi.reg.anc_ecart)*tt->vi.reg.pid.d;      //      calcul de la commande | 
|---|
|  | 75 | if(cc>4000) cc=4000; | 
|---|
|  | 76 | if(cc<0) cc=0; | 
|---|
|  | 77 | if(!tt->vi.reg.pid.chauf) cc=0; | 
|---|
|  | 78 | //cc=tt->vi.reg.pid.p; | 
|---|
|  | 79 | tt->vi.reg.cc=cc; | 
|---|
|  | 80 | cc=( 0x0fff - cc ) & 0x0fff;            //  12 bits  avec inverser la polarité | 
|---|
| [649] | 81 | if( (acquisition_PCI) && ( tt->vi.flag_ecriture_data>2 ) )              //    rien en attente d'ecriture: j'ecris direct en interruption | 
|---|
| [637] | 82 | { | 
|---|
|  | 83 | ecrit_carte(tc_regul );                 // ecrit bolo 251  -->  ecrit regulation | 
|---|
|  | 84 | ecrit_carte( ( (tt->vi.reg.pid.chauf&3 ) <<6 ) |  (cc>>6)  );           // ecrit relais (2 bits) + 6 bits de data | 
|---|
|  | 85 | ecrit_carte( (cc<<2) |  2  );                                                           // ecrit  6 bits de data + 1  +  0 | 
|---|
|  | 86 | for(j=0;j<7;j++)        ecrit_carte(0);                         // reste 7 mots à ecrire | 
|---|
|  | 87 | tt->vi.flag_ecriture_data=0; | 
|---|
|  | 88 | } | 
|---|
|  | 89 |  | 
|---|
|  | 90 | tt->vi.reg.compteur=0; | 
|---|
|  | 91 | tt->vi.reg.valeur=0; | 
|---|
|  | 92 | tt->vi.reg.anc_ecart=(int)ecart; | 
|---|
|  | 93 | tt->vi.reg.tint=i; | 
|---|
|  | 94 | } | 
|---|
|  | 95 |  | 
|---|
|  | 96 | void    raz_periodique(tmtc* tt) | 
|---|
|  | 97 | { | 
|---|
|  | 98 | /*****************************  ne  fait  rien  !!!!!!!! | 
|---|
|  | 99 | int j; | 
|---|
|  | 100 | if(tt->reg.per_raz<1) return;           // pas de raz si periode demandee = 0 | 
|---|
|  | 101 | tt->reg.nb_raz++; | 
|---|
|  | 102 | if( (tt->reg.nb_raz>0) && (tt->reg.nb_raz< (tt->reg.per_raz) ) )        return; | 
|---|
|  | 103 |  | 
|---|
|  | 104 |  | 
|---|
|  | 105 | if( tt->vi.flag_ecriture_data>2 )       //   j'ecris direct en interruption sans regrader si autre chose est en cours d'ecriture | 
|---|
|  | 106 | { | 
|---|
|  | 107 | ecrit_carte(23 );                       // ecrit bolo 23  -->  bebo A | 
|---|
|  | 108 | ecrit_carte( 16);                       // ecrit a | 
|---|
|  | 109 | for(j=0;j<8;j++)        ecrit_carte(0);                         // reste 8 mots à ecrire | 
|---|
|  | 110 | } | 
|---|
|  | 111 |  | 
|---|
|  | 112 | tt->tb.synchro[2][tt->tb.pos_ecrit]=999; | 
|---|
|  | 113 | tt->reg.nb_raz=0; | 
|---|
|  | 114 | */ | 
|---|
|  | 115 | } | 
|---|
|  | 116 |  | 
|---|
|  | 117 |  | 
|---|
|  | 118 | //***************************************************************************************** | 
|---|
|  | 119 | //                                                                                      *** | 
|---|
|  | 120 | #endif          //--------------------------------------------------------------------  *** | 
|---|
|  | 121 | //                                                                                      *** | 
|---|
|  | 122 | //***************************************************************************************** | 
|---|
|  | 123 |  | 
|---|
|  | 124 |  | 
|---|