3R / Mbed 2 deprecated Le_Pont_V10015

Dependencies:   mbed

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?

UserRevisionLine numberNew 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