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.
Dependencies: mbed
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 Fri Jul 15 2022 06:01:37 by
1.7.2