Version initiale

Dependencies:   mbed

Fork of Le_Pont_V10116 by SAGNES Christophe

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //******************************************************************
00002 //
00003 //      Pont Bacalan
00004 //
00005 //  Logiciel de pilotage du Pont Bacalan:
00006 //  - Afficheur Modbus autonome via RS422 4 fils
00007 //  - 2 variateur en RS422 4 fils
00008 //  - ? sorties logiques
00009 //  - ? entrées logiques
00010 // 
00011 //
00012 //********************************************************************
00013 
00014 #include "mbed.h"
00015 
00016 #include "Version.h"
00017 #include "Constantes.h"
00018 #include "Variable.h"
00019 #include "Pilote.h"
00020 #include "Modbus.h"
00021 #include "Synchronisation.h"
00022 #include "Gemma.h"
00023 
00024 
00025 // Objet liaison série sur USB pour mode debug
00026 Serial PC1(USBTX, USBRX) ;
00027 
00028 // Objet liaison série vers les variateurs
00029 Serial VAR_RD (p13, p14) ;
00030 Serial VAR_RG (p9, p10) ;
00031 
00032 // Objet pilote, de gestion du dialogue avec les variateurs
00033 Pilote Rive_Droite (1) ;
00034 Pilote Rive_Gauche (2) ;
00035 
00036 // Chronomètre
00037 Timer   Chrono ;
00038 
00039 int main()
00040     {
00041 
00042     int debut_boucle_us;
00043     int fin_boucle_us;
00044     int Duree_us;
00045 
00046     F32 Valeur_F32 ;
00047     F32 Hauteur_Avant_F32 [TAILLE_TABLEAU_HAUTEURS] ;
00048     F32 Vitesse_Avant_F32 = 0.0 ;
00049        
00050     S16 Index ;
00051     
00052     // Initialisation du Modbus
00053     vModbus_Init(115200) ;
00054     vModbus_Start() ;
00055 
00056     //Initialisation des variables
00057     Init_Variables();
00058     Version_Soft = VERSION_SOFT ;
00059     
00060     Index = 0 ;
00061     while ( Index < TAILLE_TABLEAU_HAUTEURS )
00062         {
00063         Hauteur_Avant_F32 [ Index] = 0.0 ;
00064         Index++ ;
00065         }
00066     
00067     // Initialisation des pilotes de varialeur
00068     Rive_Droite.pPort = &VAR_RD ;
00069     Rive_Gauche.pPort = &VAR_RG ;
00070     
00071     Rive_Droite.Init ( 115200 , 8 , 1 ) ;
00072     Rive_Droite.Id = 1 ;
00073     Rive_Gauche.Init ( 115200 , 8 , 1 ) ;
00074     Rive_Gauche.Id = 2 ;
00075     
00076     Rive_Droite.Etalonnage (Hauteur_RD1_pts , Hauteur_RD1_mm , Hauteur_RD2_pts , Hauteur_RD2_mm ) ;
00077     Rive_Gauche.Etalonnage (Hauteur_RG1_pts , Hauteur_RG1_mm , Hauteur_RG2_pts , Hauteur_RG2_mm ) ;   
00078     
00079     //Ininialise_Rampes () ;
00080     //Affiche_Motif ( 0 ) ;
00081     
00082     // Initialisation du Gemma
00083     vGemma_Init () ;
00084     
00085     Chrono.start() ;
00086     
00087     while (true) 
00088         {
00089         // Lecture du temps en début de boucle
00090         debut_boucle_us = 0;//Chrono.read_us() ;
00091         Chrono.reset();
00092         fin_boucle_us = debut_boucle_us + (int)Periode_Scrutation_ms * 1000.0 ;  
00093               
00094         // Gestion du Modbus
00095         vModbus() ;
00096         
00097         // Gestion du mode de fonctionnement
00098         vGemma ( &Rive_Droite ,  &Rive_Gauche ) ;
00099         
00100         // Gestion de l'eclairage des rampes
00101         //vRampe_RGB () ; 
00102             
00103         // Duree de la boucle en µs
00104         Duree_us =  Chrono.read_us() - debut_boucle_us  ;
00105         Duree_Boucle_us = (S16)( Duree_us ) ;
00106         
00107         //PC1.printf("\r\n Duree : %d \r\n",Duree_us) ;
00108         //PC1.printf("\r\n Duree : %d / %X \r\n",Duree_us,Duree_Boucle_us);
00109         
00110         while( Chrono.read_us() < fin_boucle_us )
00111             {
00112             Rive_Droite.Reception () ;
00113             Rive_Gauche.Reception () ;
00114             vModbus() ;
00115             wait_us(200) ;
00116             }
00117 
00118           
00119         // Traitement des réponses des variateurs
00120         Mesure_RD = Rive_Droite.Mesure_Courante ;
00121         Vitesse_RD = Rive_Droite.Vitesse_Courante ;
00122         Hauteur_RD = Rive_Droite.Hauteur_Courante ;
00123         Etat_COM_RD = Rive_Droite.COM_OK  ;
00124         Compteur_Timeout_RD = Rive_Droite.Compteur_Timeout ;
00125         PC1.printf("\r\n RD : %i \t %i \t %i \t %i\r\n",Mesure_RD,Hauteur_RD,Vitesse_RD,Compteur_Timeout_RD);
00126         
00127         Mesure_RG = Rive_Gauche.Mesure_Courante ;
00128         Vitesse_RG = Rive_Gauche.Vitesse_Courante ;
00129         Hauteur_RG = Rive_Gauche.Hauteur_Courante ;
00130         Etat_COM_RG = Rive_Gauche.COM_OK  ;
00131         Compteur_Timeout_RG = Rive_Gauche.Compteur_Timeout ;
00132         PC1.printf("\r\n RG : %i \t %i \t %i \t %i\r\n",Mesure_RG,Hauteur_RG,Vitesse_RG,Compteur_Timeout_RG);
00133         
00134         Hauteur_P = ( Hauteur_RD + Hauteur_RG ) / 2 ;
00135         Ecart_Synchronisation =  Hauteur_RD - Hauteur_RG ; 
00136         //PC1.printf("\r\n Hauteur P : %i  \r\n",Hauteur_P);
00137         //PC1.printf("0") ;
00138         
00139         //Valeur_F32 = (F32)Hauteur_P - Hauteur_Avant_F32 [ TAILLE_TABLEAU_HAUTEURS - 1 ] ;
00140         Valeur_F32 = (F32) ( Vitesse_RG + Vitesse_RD ) / 2.0 ;
00141         Valeur_F32 = Valeur_F32 * 19.5 * 3.14156 / 100.0 ;
00142         Valeur_F32 = ( Vitesse_Avant_F32 + Valeur_F32 ) / 2.0 ;
00143         Vitesse_Avant_F32 = Valeur_F32 ;
00144         Vitesse_P = (S16) Valeur_F32 ;
00145 
00146         }
00147 
00148  }   
00149 
00150 
00151