SAGNES Christophe / Mbed 2 deprecated Le_Pont_V10015

Dependencies:   mbed

Fork of Le_Pont_V10015 by 3R

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