Essai ds3132

Dependencies:   ds3231 mbed

objet.h

Committer:
RCMISbed
Date:
2018-10-17
Revision:
0:13c98588f2fc

File content as of revision 0:13c98588f2fc:


#include <string>

//1- Definition/ Constantes 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#define   wBUFFER        300                                                    // Processus principal/ Trame/ Profondeur MAX du buffer de donnees  (exprimé en caracteres)
#define   wDTRAME          6                                                    // Processus principal/ Trame/ Nombre de donnees MAX par trame
// Definition/ Constante/ Nombre d'objet Event MAX
#define nbEVENTMAX        12

// Definition/ Constante/ Nombre de LED  intégrées MAX
#define nbLEDMAX          4                                                     // Carte/ nombre Max LED

// Definition/ Constante/ Nombre de Moteurs MAX
#define nbMOTORMAX        2 

// Definition/ Constante/ Nombre de SERVO MAX
#define nbSERVOMAX        2

//Definition/ Parametrage/ GPS/ Parcours/ Nombre maximal de WP
#define nbWPMAX         100                                                     // Parcours GPS/ Nombre de Way Point Maximum enregistrés

//Definition/ Constante/ Nombre d'objet PID MAX
#define nbPIDMAX         2        
                                             
//Definition/ Constante/ Nombre d'objet commande.axe
#define nbAXEMAX          2         

//Definition/ Constante/ ojet PAD/ nb axe MAX et nb SW MAX
#define padNBAXEMAX       2
#define padNBSWMAX        4
                                            
//Definition/ Constante/ Nombre Parametres MAX
#define nbPARAMAX        11         


// Definition/ Protocole/  Constantes/ Mode
#define mSTB              0                                                     // Mode/ STANDBY
#define mSTP              1                                                     // Mode/ STOP
#define mMAN              2                                                     // Mode/ MANUAL
#define mPA               4                                                     // Mode/ Pilote Automatique
#define mWP               8                                                     // Mode/ Enregistrement WP
#define mRAZ             64                                                     // Mode/ Remise à 0 des commandes   
#define mCHG            128                                                     // Mode/ recharge Accumulateurs



//2- Definition/ Type de donnees
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//2.1- Definition/ Type/ global/ data/ objet GLOBAL
typedef struct{
               bool fValid;                                                     // Validation module
               string designation;                                              // Identification produit
               string version;                                                  // Version produit (v.xx/yy , xx: annee, yy: semaine dans l'annee)
               bool   debug;                                                    // Activation du mode DEBUG
               int    nbLED;                                                    // Nombre LED integrées
               int    tBATT;                                                    // Batterie/ Structure Chimique 
               int    NbElement;                                                // Batterie/ Nombre Elements
               int    Dynmin;                                                   // Variables/ dynamique minimum
               int    DynMAX;                                                   // Variables/ dynamique MAXIMUM
               float  TSample;                                                  // Periode d'echantillonnage du processus (exprimée en secondes)
               int    TPWM;                                                     // periode PWM (exprimée en micro secondes)
               int    USBBaud;                                                  // UART sur USB BaudRate
               int    UART1Baud;                                                // UART 1 BaudRate
               int    UART2Baud;                                                // UART 2 BaudRate
               int    I2CBaud;                                                  // Frequence bus I2C
               int    CANBaud;                                                  // Frequence bus CAN
               struct{                                                          // Event
                     bool fValid;                                              // Event/ Validité
                     bool fPeriode;                                             // Event/ Periodicité
                     int wdt;                                                   // Event/ WatchDog
                     int wdtMAX;                                                // Event/ WatchDog MAX
                     }event[nbEVENTMAX];                                                  
              } GLOBAL_t;


//2.2- Definition/ Type/ objet TRAME 
typedef struct{
               bool fValid;                                                     // Validation module
               int  wdtTX;                                                      // WatchDog Emission 
               int  wdtRX;                                                      // WatchDog Reception
               int  pcar;                                                       // Pointeur de caracteres
               char sb;                                                         // Protocole communication/ Start Beacon: 
               char dlb;                                                        // Protocole communication/ Delimiter Beacon
               char eb;                                                         // Protocole communication/ End Beacon
               int  id;                                                         // Mot identificateur de trame 
               char rx[wBUFFER];                                                // tableau des caracteres recus
               char tx[wBUFFER];                                                // tableau des caracteres envoyés
               bool fSB, fEB;                                                   // status startB et endB  
               int  c[wDTRAME];                                                 // Data Consigne
               int  r[wDTRAME];                                                 // Data Reponse
               int nbdata;                                                      // Nombre de Data sur la Trame
              } TRAME_t;



//2.3- Definition/ Type/ objet COMMANDE
typedef struct{
               struct{
                      bool    fValid;                                           // Validation Module
                      float   in;                                               // Variable Entree
                      float   out;                                              // Variable Sortie
                      float   dzm;                                              // Valeur Dead Zone inferieure (0..1)
                      float   dzM;                                              // Valeur Dead Zone supérieure (0..1)
                      float   cti;                                              // Valeur Constante de temps Integrale (0..1)
                      float   ctf;                                              // Valeur Constante de temps Proportionnelle  (0..1)
                      float   ctg;                                              // Valeur Constante de Temps Filtre de sortie
                      float   cgg;                                              // Valeur Gain Filtre de sortie
                      float     l;                                              // Valeur calcul loi non lineaire
                      float i, i0;                                              // Valeur calcul integral
                      float     p;                                              // Valeur calcul proportionnelle  
                      float     c;                                              // Valeur calcul proportionnelle - integrale   
                      float x, dx;                                              // Valeur filtre passe bas 
                     }axe[nbAXEMAX]; 
              } COMMANDE_t;





//2.4- Definition/ Type/ objet MUX (multiplexeur)
typedef struct{
               bool  fValid;                                                    // Validation Module
               float in0x, in0y, in1x, in1y, in2x, in2y,                              // Variables d'état d'entree  du module: variables d'entree
                     outx, outy;                                                    // Variables d'état de sortie du module: variables de sortie
               unsigned char sel;                                               // Variables d'état d'entree  du module: selection de la variable d'entrée
               unsigned char Status;                                            //  Variables Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: 
              }MUX_t; 


         
//2.5- Definition/ Type/ objet ENERGIE
typedef struct{ 
               bool fValid, fCHARGE, fVhigh, fVlow, fIhigh, fIlow, fFailed;
               unsigned char tBATT;                                             // Type de batterie (1: LEAD, 2: NIMH, 2: LION, 3: LIPO)   // Definition/ Parametres/ Type de batterie
               unsigned char NbElement;                                         // Nombre Element en Serie
               int seqPointer;                                                  // Sequenceur du processus de charge
               float tension, courant;                                          // Variables differentielles Energie, Tension, Courant Acquisition     
               float dE,dV,dI;                                                  // Variables differentielles Energie, Tension, Courant Filtrage
               float  E, E0, V, I;                                              // Variables Energie, Tension, Courant              
               float VMax, Vmin, IMax, Imin;                                    // Parametres internes   
               int wPWM, pPWM;                                                  // Largeur Impulsion, Periode PWM (chargeur)
               unsigned char     Status;                                        // Variables Status du module s0: fValid, s1: fCharge, s2:fVlow, s3:fVhigh, s4:fIlow, s5:fIhigh, s6: NA, s7: fFailed
              } ENERGY_t; 
       
       
//2.6- Definition/ Type/ objet GPS
typedef struct{
                bool fValid, fLocked, fFailed;                                  // Validation Module, Trame Valide
                int baud;                                                       // BaudRate
                int TSample;                                                    // Periode rafraichissement des trames
                int dop;                                                        // Variable Indice Dilution Satellites
                double utc, lng, lat, hdg, spd;                                 // Variables: Temps Universel (UTC), Longitude (LNG), Latitude (LAT), Cap (HDG), Vitesse Air (SPD)
                int speedmin;
                unsigned char Status;                                           //Variables Status du module s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed
              } GPS_t; 
   
   
//2.7- Definition/ Type/ objet IMU
typedef struct{ 
               bool  fValid, fFailed;                                           // Validation module
               float roll, pitch, yaw, temp;                                    // Variables attitude; Roulis, Tangage, Lacet, Temperature
               float q0, q1, q2, q3;                                            // Variables attitude/ Quarternions
               float liax, liay, liaz;                                          // Variables acceleration lineaire x, y, z 
               float grvx, grvy, grvz;                                          // Variables gravité
               float gyrox, gyroy, gyroz;                                       // Variables gyroscopiques x, y, z
               float magx, magy, magz;                                          // Variables magnetometriques x, y, z
               unsigned char Status;                                            // Variables Status module.  s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed
              } IMU_t; 
    
                   
//2.8- Definition/ Type/ objet PA (pilote automatique)
typedef struct{ 
               bool fValid, fGPSLocked, fWPLocked, fDmin, fDMax, fFailed;
               double wLNG, wLAT,                                               // Variables d'état d'entree du module: Coordonnnees Consigne (WayPoint à rejoindre)
                      mLNG, mLAT;                                               // Variables d'état d'entree du module: Coordonnees reponse   (mesure GPS)
               float  mSPD,                                                     // Variables d'état d'entree du module: Vitesse (km/h)   (mesure GPS) 
                      mHDG,                                                     // Variables d'état d'entree du module: Cap     (deg)    (mesure GPS)
                      CtG,                                                      // Cap à suivre au WP  (calculé)
                      DtG,                                                      // Distance à parcourir au WP (calculée)
                      cPowerMax,                                                // Niveau de puissance Max (0 .. 1)
                      Dmin, DMax,                                               // Distance Max et minau WP 
                      Kp,                                                       // Correction/ Gain Proportionnel (exprimé en % 0..300)
                      outx, outy;                                               // Variables d'état de sortie du module
               unsigned char  Status;                                           // Variables Status du module s0: fValid, s1: fGPSLocked, s2: fWPLocked, s3:fDmin, s4:fDMax, s5: NA, s6: NA,s7: fFailed                    
              } PA_t; 

       
//2.9- Definition/ Type/ objet DIGITAL (Accessoire)       
typedef struct{ 
               bool fValid;                                                     // Validation Module
               unsigned int cDigital;                                           // Variables d'état d'entree du module  (c0: Klaxon, c1: Phare)
               unsigned int rDigital;                                           // Variables d'état de sortie du module (c0: Klaxon, c1: Phare)        
               unsigned char Status;                                            // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              }DIGITAL_t; 


//2.10- Definition/ Type/ objet SERVO      
typedef struct{ 
               bool fValid;                                                     // Validation Module
               int c;                                                           // Variables d'état d'entree  du module/ Variable (0 .. 1)
               float x, dx, tSERVO;                                             // Variables d'état Filtre  x, dx/ constante de temps du filtre
               int r;                                                           // Variables d'état de sortie du module/ Variable (0 .. 1)
               int pmin;                                                        // Constante/ valeur position minimum
               int pmax;                                                        // Constante/ valeur position maximum
               unsigned char Status;                                            // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              } SERVO_t; 
 
//2.11- Definition/ Type/ objet LOI
 typedef struct{ 
               bool  fValid;                                                    // Validation Module
               float inx;                                                       // Variable/ Entree/ Power
               float iny;                                                       // Variable/ Entree/ Teta
               float outx;                                                      // Variable/ Sortie/ Gauche
               float outy;                                                      // Variable/ Sortie/ Droit
               unsigned char Status;                                            // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              } LAW_t; 

                     
       
//2.12- Definition/ Type/ objet filtre PID
typedef struct{  
               bool   fValid;                                                   // Filtre PID/ Validite
                float inc;                                                      // Filtre PID/ Variable/ Consigne
                float inr;                                                      // Filtre PID/ Variable/ FeedBack
                float eM;                                                       // Filtre PID/ Variable/ Erreur (Consigne- Feedback)
                float eMp;
                float eMd; 
                float eMd0;
                float uMi;
                float uMi0;
                float uMd;
                float uMd0;
                float out;                                                      // Filtre PID/ Variable/ Sortie
                float cPID1;                                                    // Filtre PID/ Constante/1/       
                float cPID2;                                                    // Filtre PID/ Constante/2/       
                float cPID3;                                                    // Filtre PID/ Constante/3/       
                float cPID4;                                                    // Filtre PID/ Constante/4/       
                float cPID5;                                                    // Filtre PID/ Constante/5/        
                float cPID6;                                                    // Filtre PID/ Constante/6/
                unsigned char Status;                                           // Filtre PID/ Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              } PID_t;
 
                   
//2.13- Definition/ Type/ objet MOTEUR
typedef struct{
                bool fValid;                                                    // Validite Module 
                float in;                                                       // Variable d'état/ entrée/ puissance (0..1)
                float dx, x;                                                    // Variables d'etat/ interne / Filtre Passe Bas
                float out;                                                      // Variables d'état/ sortie / puissance (0.. 1)
                float tMOTOR;                                                   // Constante de temps/ Filtre Passe Bas
                float gMOTOR;                                                   // Constante/ Gain/ Filtre Passe Bas
                unsigned char Status;                                           // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
                } MOTOR_t;


        
//2.14- Definition/ Type/ objet TRACK
typedef struct{ 
               bool fValid;                                                     // TRACK/ validite/ module
               bool fRecord;                                                    // TRACK/ Acquisition/ En cours
               int  nbWP;                                                       // TRACK/ nombre WP
               int  pWP;                                                        // TRACK/ pointeur WP
               struct{                                                          // TRACK/ structure WP
                      bool fValid;                                              // wp/ valide
                      double lat, lng;                                          // wp/ Coordonnees Geographiques 
                     }wp[nbWPMAX];
               int Status;                                                      // wp/ status
               } TRACK_t; 
    
    
    
//2.15- Definition/ Type/ objet MOBILE             
typedef struct{
               bool   fValid;                                                   // Mobile/ Validite 
               int    cWDTRX;                                                   // Mobile/ Contante/ WatchDog RX
               float  inx, iny, outx, outy;                                     // Mobile/ Commande: Niveau de puissance vectorielle: Amplidude/ Phase exprimé de 0 à 100%
               int    cMODE, rMODE;                                             // Mobile/ Mode de Fonctionnement
               double lng, lat, alt, speed, head;                               // Mobile/ Variables localisation (GPS)
               float  roll, pitch, yaw, altitude;                               // Mobile/ Variables attitude (IMU)
               int    Status;                                                      // Mobile/ Status Module 
              } MOBILE_t; 
 
 
//2.16- Definition/ objet PAD
typedef struct{
               bool  fValid;
               struct{
                      float   in;   // Variable Entree
                      float   out;  // Variable Sortie
                      int     scB;  // Pourcentage Proportionnal- Integral (0..100) sc=0: Commande Integrale pure .... sc= 100: Commande Proportionnelle pure   
                      int     dzB;  // Pourcentage Dead Zone (0..100)
                      int    znlB; // Pourcentage Zone Non Lineaire (0..100)
                      float  ctiB;  // Pourcentage Constante de temps loi integrale (0..100)
                      float  gainI; // Gain Integrale deuxieme zone lineaire 
                      float  ctfB;  // Pourcentage Constante de temps loi proportionnelle (0..100)
                      float    sc;  // Valeur Proportionnel Integral
                      float     dzm;  // Valeur Dead Zone inferieure
                      float     dzM;  // Valeur Dead Zone supérieure
                      float    znlm;  // Valeur Non Linearite inferieure
                      float    znlM;  // Valeur Non Linearite supérieure
                      float   cti;   // Valeur Constante de temps Integrale
                      float   ctf;  // Valeur Constante de temps Proportionnelle  
                      float     l;  // Valeur calcul loi non lineaire
                      float i, i0;  // Valeur calcul integral
                      float     p;  // Valeur calcul proportionnelle     
//                     float fm[5];  // Valeur filtre moyenneur
                      float x, dX, X; // Valeur filtre passe bas          
                     }axe[padNBAXEMAX]; 
               struct{
                     bool   value; 
                     }sw[padNBSWMAX];
                     
//               float roulis, tangage;      
} PAD_t;