test

Revision:
6:c21017e969af
Parent:
5:420cb56093d3
Child:
7:60d157ef1134
--- a/main.cpp	Fri Jun 19 10:47:30 2020 +0000
+++ b/main.cpp	Wed Jul 01 11:43:45 2020 +0000
@@ -87,9 +87,6 @@
 volatile int timon_estribor;
 volatile enEstadoDireccion estado_direccion;
 volatile byte EstadoAnteriorServo;       //Guarda estado anterior del servo para salir de piloto-automatico o rumbo
-volatile byte estado_otro_servo;         // Estado del otro servo
-volatile int posicion_otro_servo;        // Posicion del otro servo
-volatile float rumbo_otro_servo;         // Rumbo del otro servo
 volatile int retardoActualizacion;       // para no visualizar estado durante este tiempo en ms
 volatile bool act_display;               // flag para actualizar display
 volatile bool trama_estado_valida;
@@ -115,6 +112,7 @@
 
 st_datos_servo datos_servo;       // ESTRUCTURA DE VARIABLES DE ESTADO DEL SERVO DE DIRECCION
 st_datos_GPS datos_GPS;           // ESTRUCTURA DE DATOS DE ESTADO DEL GPS
+volatile st_datos_servo datos_otro_servo;  // ESTRUCTURA DE VARIABLES DE ESTADO DEL OTRO SERVO DE DIRECCION
 
 
 
@@ -210,7 +208,7 @@
 int nc=0; 
 char out_buffer_2[50];
 static int posicion_mando_old = 0;
-
+static bool f_envia_trama_modbus = false;
 
     // Bring up the ethernet interface
     pc.printf("\r\n\r\n");
@@ -313,7 +311,7 @@
             datos_servo.posicion_mando = pos_objetivo_servo;  // PARA PILOTO AUTOMATICO
         
         if(datos_servo.posicion_mando != posicion_mando_old){ // Si cambia la posicion del mando envia trama
-            if(abs(desviacion_servo) >= 50 && datos_servo.estado == DIR_REPOSO && estado_otro_servo == DIR_REPOSO){
+            if(abs(desviacion_servo) >= 50 && datos_servo.estado == DIR_REPOSO && datos_otro_servo.estado == DIR_REPOSO){
                 datos_servo.estado = DIR_MASTER;
             }
         
@@ -325,6 +323,7 @@
         // PROCESA CADA SEGUNDO
         if(((tiempo_ms+500)%1000)==0){     // Envia cada segundo
 
+//            test_modbus();                 // TEST PARA TRAMA MODBUS
 //            getTime();
 
 //            SetDateTime(2020, 4, 25, 10, 00, 0);   // Actualiza hora del RTC
@@ -367,19 +366,31 @@
         }
 
         if(recibidoEstadoServo==true){            //Si ha recibido estado del otro servo está a true para sincronizacion
+            if(timerRS485.read_ms()>60 && f_envia_trama_modbus == true){
+                envia_trama_modbus();          // ENVIA TRAMA MODBUS RS485
+                f_envia_trama_modbus = false;
+            }
             if(timerRS485.read_ms()>=120){
                 envia_estado_mando();
                 recibidoEstadoServo = false;
+                f_envia_trama_modbus = true;
                 timerRS485.reset();
             }
         }
         else{
             int espera = (babor_estribor==0)? 240 :260;
-            if(timerRS485.read_ms()>=espera){      // Si es servo de babor = 240ms, estribor = 260ms, evita colision
+            if(timerRS485.read_ms()>espera){      // Si es servo de babor = 240ms, estribor = 260ms, evita colision
                 envia_estado_mando();
                 recibidoEstadoServo = false;
+                f_envia_trama_modbus = true;
                 timerRS485.reset();
             }
+            else{
+                if(timerRS485.read_ms()>(espera-60) && f_envia_trama_modbus == true){
+                    envia_trama_modbus();          // ENVIA TRAMA MODBUS RS485
+                    f_envia_trama_modbus = false;
+                }
+            }
         }
 
 //        control_PWR_servo =  (pulsador.read() == 1)?0:1;