Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Le_Pont_V10015 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 "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
Generated on Tue Jul 12 2022 13:32:38 by
1.7.2
