Version initiale
Dependencies: mbed
Fork of Le_Pont_V10116 by
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
Generated on Tue Jul 12 2022 23:24:06 by
1.7.2
