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@0:a53b6ec3fbb3, 2016-05-30 (annotated)
- Committer:
- CS
- Date:
- Mon May 30 07:04:49 2016 +0000
- Revision:
- 0:a53b6ec3fbb3
RAZ integrale de la synchronisation
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| CS | 0:a53b6ec3fbb3 | 1 | //****************************************************************** |
| CS | 0:a53b6ec3fbb3 | 2 | // |
| CS | 0:a53b6ec3fbb3 | 3 | // Pont Bacalan |
| CS | 0:a53b6ec3fbb3 | 4 | // |
| CS | 0:a53b6ec3fbb3 | 5 | // Logiciel de pilotage du Pont Bacalan: |
| CS | 0:a53b6ec3fbb3 | 6 | // - Afficheur Modbus autonome via RS422 4 fils |
| CS | 0:a53b6ec3fbb3 | 7 | // - 2 variateur en RS422 4 fils |
| CS | 0:a53b6ec3fbb3 | 8 | // - ? sorties logiques |
| CS | 0:a53b6ec3fbb3 | 9 | // - ? entrées logiques |
| CS | 0:a53b6ec3fbb3 | 10 | // |
| CS | 0:a53b6ec3fbb3 | 11 | // |
| CS | 0:a53b6ec3fbb3 | 12 | //******************************************************************** |
| CS | 0:a53b6ec3fbb3 | 13 | |
| CS | 0:a53b6ec3fbb3 | 14 | #include "mbed.h" |
| CS | 0:a53b6ec3fbb3 | 15 | |
| CS | 0:a53b6ec3fbb3 | 16 | #include "Constantes.h" |
| CS | 0:a53b6ec3fbb3 | 17 | #include "Variable.h" |
| CS | 0:a53b6ec3fbb3 | 18 | #include "Pilote.h" |
| CS | 0:a53b6ec3fbb3 | 19 | #include "Modbus.h" |
| CS | 0:a53b6ec3fbb3 | 20 | #include "Synchronisation.h" |
| CS | 0:a53b6ec3fbb3 | 21 | #include "Gemma.h" |
| CS | 0:a53b6ec3fbb3 | 22 | |
| CS | 0:a53b6ec3fbb3 | 23 | |
| CS | 0:a53b6ec3fbb3 | 24 | #define VERSION_SOFT 10015 |
| CS | 0:a53b6ec3fbb3 | 25 | |
| CS | 0:a53b6ec3fbb3 | 26 | // Objet liaison série sur USB pour mode debug |
| CS | 0:a53b6ec3fbb3 | 27 | Serial PC1(USBTX, USBRX) ; |
| CS | 0:a53b6ec3fbb3 | 28 | |
| CS | 0:a53b6ec3fbb3 | 29 | // Objet liaison série vers les variateurs |
| CS | 0:a53b6ec3fbb3 | 30 | Serial VAR_RD (p13, p14) ; |
| CS | 0:a53b6ec3fbb3 | 31 | Serial VAR_RG (p9, p10) ; |
| CS | 0:a53b6ec3fbb3 | 32 | |
| CS | 0:a53b6ec3fbb3 | 33 | // Objet pilote, de gestion du dialogue avec les variateurs |
| CS | 0:a53b6ec3fbb3 | 34 | Pilote Rive_Droite (1) ; |
| CS | 0:a53b6ec3fbb3 | 35 | Pilote Rive_Gauche (2) ; |
| CS | 0:a53b6ec3fbb3 | 36 | |
| CS | 0:a53b6ec3fbb3 | 37 | // Chronomètre |
| CS | 0:a53b6ec3fbb3 | 38 | Timer Chrono ; |
| CS | 0:a53b6ec3fbb3 | 39 | |
| CS | 0:a53b6ec3fbb3 | 40 | int main() |
| CS | 0:a53b6ec3fbb3 | 41 | { |
| CS | 0:a53b6ec3fbb3 | 42 | |
| CS | 0:a53b6ec3fbb3 | 43 | int debut_boucle_us; |
| CS | 0:a53b6ec3fbb3 | 44 | int fin_boucle_us; |
| CS | 0:a53b6ec3fbb3 | 45 | int Duree_us; |
| CS | 0:a53b6ec3fbb3 | 46 | |
| CS | 0:a53b6ec3fbb3 | 47 | F32 Valeur_F32 ; |
| CS | 0:a53b6ec3fbb3 | 48 | F32 Hauteur_Avant_F32 [TAILLE_TABLEAU_HAUTEURS] ; |
| CS | 0:a53b6ec3fbb3 | 49 | F32 Vitesse_Avant_F32 = 0.0 ; |
| CS | 0:a53b6ec3fbb3 | 50 | |
| CS | 0:a53b6ec3fbb3 | 51 | S16 Index ; |
| CS | 0:a53b6ec3fbb3 | 52 | |
| CS | 0:a53b6ec3fbb3 | 53 | // Initialisation du Modbus |
| CS | 0:a53b6ec3fbb3 | 54 | vModbus_Init(115200) ; |
| CS | 0:a53b6ec3fbb3 | 55 | vModbus_Start() ; |
| CS | 0:a53b6ec3fbb3 | 56 | |
| CS | 0:a53b6ec3fbb3 | 57 | //Initialisation des variables |
| CS | 0:a53b6ec3fbb3 | 58 | Init_Variables(); |
| CS | 0:a53b6ec3fbb3 | 59 | Version_Soft = VERSION_SOFT ; |
| CS | 0:a53b6ec3fbb3 | 60 | |
| CS | 0:a53b6ec3fbb3 | 61 | Index = 0 ; |
| CS | 0:a53b6ec3fbb3 | 62 | while ( Index < TAILLE_TABLEAU_HAUTEURS ) |
| CS | 0:a53b6ec3fbb3 | 63 | { |
| CS | 0:a53b6ec3fbb3 | 64 | Hauteur_Avant_F32 [ Index] = 0.0 ; |
| CS | 0:a53b6ec3fbb3 | 65 | Index++ ; |
| CS | 0:a53b6ec3fbb3 | 66 | } |
| CS | 0:a53b6ec3fbb3 | 67 | |
| CS | 0:a53b6ec3fbb3 | 68 | // Initialisation des pilotes de varialeur |
| CS | 0:a53b6ec3fbb3 | 69 | Rive_Droite.pPort = &VAR_RD ; |
| CS | 0:a53b6ec3fbb3 | 70 | Rive_Gauche.pPort = &VAR_RG ; |
| CS | 0:a53b6ec3fbb3 | 71 | |
| CS | 0:a53b6ec3fbb3 | 72 | Rive_Droite.Init ( 115200 , 8 , 1 ) ; |
| CS | 0:a53b6ec3fbb3 | 73 | Rive_Droite.Id = 1 ; |
| CS | 0:a53b6ec3fbb3 | 74 | Rive_Gauche.Init ( 115200 , 8 , 1 ) ; |
| CS | 0:a53b6ec3fbb3 | 75 | Rive_Gauche.Id = 2 ; |
| CS | 0:a53b6ec3fbb3 | 76 | |
| CS | 0:a53b6ec3fbb3 | 77 | Rive_Droite.Etalonnage (Hauteur_RD1_pts , Hauteur_RD1_mm , Hauteur_RD2_pts , Hauteur_RD2_mm ) ; |
| CS | 0:a53b6ec3fbb3 | 78 | Rive_Gauche.Etalonnage (Hauteur_RG1_pts , Hauteur_RG1_mm , Hauteur_RG2_pts , Hauteur_RG2_mm ) ; |
| CS | 0:a53b6ec3fbb3 | 79 | |
| CS | 0:a53b6ec3fbb3 | 80 | //Ininialise_Rampes () ; |
| CS | 0:a53b6ec3fbb3 | 81 | //Affiche_Motif ( 0 ) ; |
| CS | 0:a53b6ec3fbb3 | 82 | |
| CS | 0:a53b6ec3fbb3 | 83 | // Initialisation du Gemma |
| CS | 0:a53b6ec3fbb3 | 84 | vGemma_Init () ; |
| CS | 0:a53b6ec3fbb3 | 85 | |
| CS | 0:a53b6ec3fbb3 | 86 | Chrono.start() ; |
| CS | 0:a53b6ec3fbb3 | 87 | |
| CS | 0:a53b6ec3fbb3 | 88 | while (true) |
| CS | 0:a53b6ec3fbb3 | 89 | { |
| CS | 0:a53b6ec3fbb3 | 90 | // Lecture du temps en début de boucle |
| CS | 0:a53b6ec3fbb3 | 91 | debut_boucle_us = 0;//Chrono.read_us() ; |
| CS | 0:a53b6ec3fbb3 | 92 | Chrono.reset(); |
| CS | 0:a53b6ec3fbb3 | 93 | fin_boucle_us = debut_boucle_us + (int)Periode_Scrutation_ms * 1000.0 ; |
| CS | 0:a53b6ec3fbb3 | 94 | |
| CS | 0:a53b6ec3fbb3 | 95 | // Gestion du Modbus |
| CS | 0:a53b6ec3fbb3 | 96 | vModbus() ; |
| CS | 0:a53b6ec3fbb3 | 97 | |
| CS | 0:a53b6ec3fbb3 | 98 | // Gestion du mode de fonctionnement |
| CS | 0:a53b6ec3fbb3 | 99 | vGemma ( &Rive_Droite , &Rive_Gauche ) ; |
| CS | 0:a53b6ec3fbb3 | 100 | |
| CS | 0:a53b6ec3fbb3 | 101 | // Gestion de l'eclairage des rampes |
| CS | 0:a53b6ec3fbb3 | 102 | //vRampe_RGB () ; |
| CS | 0:a53b6ec3fbb3 | 103 | |
| CS | 0:a53b6ec3fbb3 | 104 | // Duree de la boucle en µs |
| CS | 0:a53b6ec3fbb3 | 105 | Duree_us = Chrono.read_us() - debut_boucle_us ; |
| CS | 0:a53b6ec3fbb3 | 106 | Duree_Boucle_us = (S16)( Duree_us ) ; |
| CS | 0:a53b6ec3fbb3 | 107 | |
| CS | 0:a53b6ec3fbb3 | 108 | //PC1.printf("\r\n Duree : %d \r\n",Duree_us) ; |
| CS | 0:a53b6ec3fbb3 | 109 | //PC1.printf("\r\n Duree : %d / %X \r\n",Duree_us,Duree_Boucle_us); |
| CS | 0:a53b6ec3fbb3 | 110 | |
| CS | 0:a53b6ec3fbb3 | 111 | while( Chrono.read_us() < fin_boucle_us ) |
| CS | 0:a53b6ec3fbb3 | 112 | { |
| CS | 0:a53b6ec3fbb3 | 113 | Rive_Droite.Reception () ; |
| CS | 0:a53b6ec3fbb3 | 114 | Rive_Gauche.Reception () ; |
| CS | 0:a53b6ec3fbb3 | 115 | vModbus() ; |
| CS | 0:a53b6ec3fbb3 | 116 | wait_us(200) ; |
| CS | 0:a53b6ec3fbb3 | 117 | } |
| CS | 0:a53b6ec3fbb3 | 118 | |
| CS | 0:a53b6ec3fbb3 | 119 | |
| CS | 0:a53b6ec3fbb3 | 120 | // Traitement des réponses des variateurs |
| CS | 0:a53b6ec3fbb3 | 121 | Mesure_RD = Rive_Droite.Mesure_Courante ; |
| CS | 0:a53b6ec3fbb3 | 122 | Vitesse_RD = Rive_Droite.Vitesse_Courante ; |
| CS | 0:a53b6ec3fbb3 | 123 | Hauteur_RD = Rive_Droite.Hauteur_Courante ; |
| CS | 0:a53b6ec3fbb3 | 124 | Etat_COM_RD = Rive_Droite.COM_OK ; |
| CS | 0:a53b6ec3fbb3 | 125 | Compteur_Timeout_RD = Rive_Droite.Compteur_Timeout ; |
| CS | 0:a53b6ec3fbb3 | 126 | PC1.printf("\r\n RD : %i \t %i \t %i \t %i\r\n",Mesure_RD,Hauteur_RD,Vitesse_RD,Compteur_Timeout_RD); |
| CS | 0:a53b6ec3fbb3 | 127 | |
| CS | 0:a53b6ec3fbb3 | 128 | Mesure_RG = Rive_Gauche.Mesure_Courante ; |
| CS | 0:a53b6ec3fbb3 | 129 | Vitesse_RG = Rive_Gauche.Vitesse_Courante ; |
| CS | 0:a53b6ec3fbb3 | 130 | Hauteur_RG = Rive_Gauche.Hauteur_Courante ; |
| CS | 0:a53b6ec3fbb3 | 131 | Etat_COM_RG = Rive_Gauche.COM_OK ; |
| CS | 0:a53b6ec3fbb3 | 132 | Compteur_Timeout_RG = Rive_Gauche.Compteur_Timeout ; |
| CS | 0:a53b6ec3fbb3 | 133 | PC1.printf("\r\n RG : %i \t %i \t %i \t %i\r\n",Mesure_RG,Hauteur_RG,Vitesse_RG,Compteur_Timeout_RG); |
| CS | 0:a53b6ec3fbb3 | 134 | |
| CS | 0:a53b6ec3fbb3 | 135 | Hauteur_P = ( Hauteur_RD + Hauteur_RG ) / 2 ; |
| CS | 0:a53b6ec3fbb3 | 136 | Ecart_Synchronisation = Hauteur_RD - Hauteur_RG ; |
| CS | 0:a53b6ec3fbb3 | 137 | //PC1.printf("\r\n Hauteur P : %i \r\n",Hauteur_P); |
| CS | 0:a53b6ec3fbb3 | 138 | //PC1.printf("0") ; |
| CS | 0:a53b6ec3fbb3 | 139 | |
| CS | 0:a53b6ec3fbb3 | 140 | //Valeur_F32 = (F32)Hauteur_P - Hauteur_Avant_F32 [ TAILLE_TABLEAU_HAUTEURS - 1 ] ; |
| CS | 0:a53b6ec3fbb3 | 141 | Valeur_F32 = (F32) ( Vitesse_RG + Vitesse_RD ) / 2.0 ; |
| CS | 0:a53b6ec3fbb3 | 142 | Valeur_F32 = Valeur_F32 * 19.5 * 3.14156 / 100.0 ; |
| CS | 0:a53b6ec3fbb3 | 143 | Valeur_F32 = ( Vitesse_Avant_F32 + Valeur_F32 ) / 2.0 ; |
| CS | 0:a53b6ec3fbb3 | 144 | Vitesse_Avant_F32 = Valeur_F32 ; |
| CS | 0:a53b6ec3fbb3 | 145 | Vitesse_P = (S16) Valeur_F32 ; |
| CS | 0:a53b6ec3fbb3 | 146 | |
| CS | 0:a53b6ec3fbb3 | 147 | } |
| CS | 0:a53b6ec3fbb3 | 148 | |
| CS | 0:a53b6ec3fbb3 | 149 | } |
| CS | 0:a53b6ec3fbb3 | 150 | |
| CS | 0:a53b6ec3fbb3 | 151 | |
| CS | 0:a53b6ec3fbb3 | 152 |