Version initiale

Dependencies:   mbed

Fork of Le_Pont_V10116 by SAGNES Christophe

main.cpp

Committer:
CS
Date:
2018-03-29
Revision:
2:a10c8133d71c
Parent:
1:570ba62fab91

File content as of revision 2:a10c8133d71c:

//******************************************************************
//
//      Pont Bacalan
//
//  Logiciel de pilotage du Pont Bacalan:
//  - Afficheur Modbus autonome via RS422 4 fils
//  - 2 variateur en RS422 4 fils
//  - ? sorties logiques
//  - ? entrées logiques
// 
//
//********************************************************************

#include "mbed.h"

#include "Version.h"
#include "Constantes.h"
#include "Variable.h"
#include "Pilote.h"
#include "Modbus.h"
#include "Synchronisation.h"
#include "Gemma.h"


// Objet liaison série sur USB pour mode debug
Serial PC1(USBTX, USBRX) ;

// Objet liaison série vers les variateurs
Serial VAR_RD (p13, p14) ;
Serial VAR_RG (p9, p10) ;

// Objet pilote, de gestion du dialogue avec les variateurs
Pilote Rive_Droite (1) ;
Pilote Rive_Gauche (2) ;

// Chronomètre
Timer   Chrono ;

int main()
    {

    int debut_boucle_us;
    int fin_boucle_us;
    int Duree_us;

    F32 Valeur_F32 ;
    F32 Hauteur_Avant_F32 [TAILLE_TABLEAU_HAUTEURS] ;
    F32 Vitesse_Avant_F32 = 0.0 ;
       
    S16 Index ;
    
    // Initialisation du Modbus
    vModbus_Init(115200) ;
    vModbus_Start() ;

    //Initialisation des variables
    Init_Variables();
    Version_Soft = VERSION_SOFT ;
    
    Index = 0 ;
    while ( Index < TAILLE_TABLEAU_HAUTEURS )
        {
        Hauteur_Avant_F32 [ Index] = 0.0 ;
        Index++ ;
        }
    
    // Initialisation des pilotes de varialeur
    Rive_Droite.pPort = &VAR_RD ;
    Rive_Gauche.pPort = &VAR_RG ;
    
    Rive_Droite.Init ( 115200 , 8 , 1 ) ;
    Rive_Droite.Id = 1 ;
    Rive_Gauche.Init ( 115200 , 8 , 1 ) ;
    Rive_Gauche.Id = 2 ;
    
    Rive_Droite.Etalonnage (Hauteur_RD1_pts , Hauteur_RD1_mm , Hauteur_RD2_pts , Hauteur_RD2_mm ) ;
    Rive_Gauche.Etalonnage (Hauteur_RG1_pts , Hauteur_RG1_mm , Hauteur_RG2_pts , Hauteur_RG2_mm ) ;   
    
    //Ininialise_Rampes () ;
    //Affiche_Motif ( 0 ) ;
    
    // Initialisation du Gemma
    vGemma_Init () ;
    
    Chrono.start() ;
    
    while (true) 
        {
        // Lecture du temps en début de boucle
        debut_boucle_us = 0;//Chrono.read_us() ;
        Chrono.reset();
        fin_boucle_us = debut_boucle_us + (int)Periode_Scrutation_ms * 1000.0 ;  
              
        // Gestion du Modbus
        vModbus() ;
        
        // Gestion du mode de fonctionnement
        vGemma ( &Rive_Droite ,  &Rive_Gauche ) ;
        
        // Gestion de l'eclairage des rampes
        //vRampe_RGB () ; 
            
        // Duree de la boucle en µs
        Duree_us =  Chrono.read_us() - debut_boucle_us  ;
        Duree_Boucle_us = (S16)( Duree_us ) ;
        
        //PC1.printf("\r\n Duree : %d \r\n",Duree_us) ;
        //PC1.printf("\r\n Duree : %d / %X \r\n",Duree_us,Duree_Boucle_us);
        
        while( Chrono.read_us() < fin_boucle_us )
            {
            Rive_Droite.Reception () ;
            Rive_Gauche.Reception () ;
            vModbus() ;
            wait_us(200) ;
            }

          
        // Traitement des réponses des variateurs
        Mesure_RD = Rive_Droite.Mesure_Courante ;
        Vitesse_RD = Rive_Droite.Vitesse_Courante ;
        Hauteur_RD = Rive_Droite.Hauteur_Courante ;
        Etat_COM_RD = Rive_Droite.COM_OK  ;
        Compteur_Timeout_RD = Rive_Droite.Compteur_Timeout ;
        PC1.printf("\r\n RD : %i \t %i \t %i \t %i\r\n",Mesure_RD,Hauteur_RD,Vitesse_RD,Compteur_Timeout_RD);
        
        Mesure_RG = Rive_Gauche.Mesure_Courante ;
        Vitesse_RG = Rive_Gauche.Vitesse_Courante ;
        Hauteur_RG = Rive_Gauche.Hauteur_Courante ;
        Etat_COM_RG = Rive_Gauche.COM_OK  ;
        Compteur_Timeout_RG = Rive_Gauche.Compteur_Timeout ;
        PC1.printf("\r\n RG : %i \t %i \t %i \t %i\r\n",Mesure_RG,Hauteur_RG,Vitesse_RG,Compteur_Timeout_RG);
        
        Hauteur_P = ( Hauteur_RD + Hauteur_RG ) / 2 ;
        Ecart_Synchronisation =  Hauteur_RD - Hauteur_RG ; 
        //PC1.printf("\r\n Hauteur P : %i  \r\n",Hauteur_P);
        //PC1.printf("0") ;
        
        //Valeur_F32 = (F32)Hauteur_P - Hauteur_Avant_F32 [ TAILLE_TABLEAU_HAUTEURS - 1 ] ;
        Valeur_F32 = (F32) ( Vitesse_RG + Vitesse_RD ) / 2.0 ;
        Valeur_F32 = Valeur_F32 * 19.5 * 3.14156 / 100.0 ;
        Valeur_F32 = ( Vitesse_Avant_F32 + Valeur_F32 ) / 2.0 ;
        Vitesse_Avant_F32 = Valeur_F32 ;
        Vitesse_P = (S16) Valeur_F32 ;

        }

 }