Conexión de un UFS270 al la tarjeta NUCLEO-F091RC, se envia el dato de la altura real del liquido al puerto RS232 del GV300 cada 30seg (Aplicacion para tanques estacionarios)

Dependencies:   BufferedSerial mbed

Files at this revision

API Documentation at this revision

Comitter:
mvargas_dtk
Date:
Thu May 26 21:19:42 2016 +0000
Commit message:
Conexion de un solo sensor ultrasonico de combustible al nucleo-F091RC, y lectura del valor real de altura del liquido. Aplicacion para tanques estacionarios

Changed in this revision

BufferedSerial.lib Show annotated file Show diff for this revision Revisions of this file
constantes.cpp Show annotated file Show diff for this revision Revisions of this file
constantes.hpp Show annotated file Show diff for this revision Revisions of this file
funciones_UFS270.h Show annotated file Show diff for this revision Revisions of this file
funciones_basicas.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d74fc1505b54 BufferedSerial.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BufferedSerial.lib	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/sam_grove/code/BufferedSerial/#a0d37088b405
diff -r 000000000000 -r d74fc1505b54 constantes.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/constantes.cpp	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,26 @@
+/*
+ * - Proyecto:      CH SABMiller.
+
+ * - Lenguaje:      ANSI C/C++ (mbed)
+ * - Tarjeta:       Nucleo F091RC
+ * - Referencias:
+ * - Fecha:         2016/May
+ * - Autor(es):     Felícito Manzano /
+                    Mario Vargas
+ * - Compañia:      V.S.R. de Centroamérica
+ * - País:          SV / CR
+*/
+
+#include "constantes.hpp"
+
+/* DEFINICIÓN DE CONSTANTES PARA GV300 */
+const char CABECERA_TX[] = "AT+GTDAT=gv300,2,,TCA|";
+const char CODIGO_INT_FUEL[] = "003|";
+const char FIN_CABECERA_TX[] = ",1,,,,";
+const char ULTIMO_CARACTER[] = "$";
+const char SEPARADOR[] = ";"; 
+const char RESET_TXT[] = "AT+GTDAT=gv300,2,,***BOOTING***,1,,,,0001$";
+ 
+// OTRAS CONSTANTES
+const int T_ESPERA_CP = 300; // mili segundos
+const int T_TX = 100; // mili segundos
diff -r 000000000000 -r d74fc1505b54 constantes.hpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/constantes.hpp	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,23 @@
+/*
+ * - Proyecto:      Accesorios  Queclink.
+ * - Lenguaje:      ANSI C/C++ (mbed)
+ * - Tarjeta:       Nucleo F091RC
+ * - Referencias:
+ * - Fecha:         2016/May
+ * - Autor(es):     Felícito Manzano /
+                    Mario Vargas
+ * - Compañia:      V.S.R. de Centroamérica
+ * - País:          SV / CR
+*/
+
+/* DEFINICIÓN DE CONSTANTES PARA GV300 */
+extern const char CABECERA_TX[23];
+extern const char CODIGO_INT_FUEL[5];
+extern const char FIN_CABECERA_TX[7];
+extern const char ULTIMO_CARACTER[2];
+extern const char SEPARADOR[2];
+extern const char RESET_TXT[43];
+
+// OTRAS CONSTANTES
+extern const int T_ESPERA_CP; // mili segundos
+extern const int T_TX; // mili segundos
diff -r 000000000000 -r d74fc1505b54 funciones_UFS270.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/funciones_UFS270.h	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,166 @@
+/*
+ * - Proyecto:      CH SABMiller.
+ * - Lenguaje:      ANSI C/C++ (mbed)
+ * - Tarjeta:       Nucleo F091RC
+ * - Referencias:
+ * - Fecha:         2016/May
+ * - Autor(es):     Felícito Manzano /
+                    Mario Vargas
+ * - Compañia:      V.S.R. de Centroamérica
+ * - País:          SV / CR
+*/
+
+#include "mbed.h"
+#include "BufferedSerial.h"
+#include "constantes.hpp"
+
+/* DEFINICIÓN DE FUNCIONES */
+/*******************************************************************/
+/*******************************************************************/
+
+int ufs270_rtFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2])
+{
+    /*
+    Descripción de la función.
+
+    REAL TIME FUEL LEVEL!!
+
+    Esta función recibe un puerto serial Buffered en el que se recibe la trama
+    *QL,411D,01,01580,02D0,2205,01551,null#
+
+    +-------------------------------------------------------+
+    | PARAMETER            | LENGHT | EXAMPLE | DESCRIPTION |
+    +----------------------+--------+---------+-------------+
+    | HEADER               |    3   |   *QL,  |             |
+    | PROTOCOL             |    1   |     4   |             |
+    | FIRMWARE             |    2   |    11   |             |
+    | HARDWARE             |    1   |     D,  |             |
+    | RESERVED             |    2   |    01,  |             |
+    | CALCULATE FUEL LEVEL |    5   | 01580,  | Unit 0.1 mm |
+    | SIGNAL STRENG        |    2   |    02   |             |
+    | SOFTWARE STATUS CODE |    1   |     D   |             |
+    | HARDWARE FAULT CODE  |    1   |     0,  |             |
+    | RESERVED             |    4   |  2205,  |             |
+    | REAL TIME FUEL LEVEL |    5   | 01551,  | Unit 0.1 mm |
+    | RESERVED             |    4   |  null   |             |
+    | TAIL                 |    1   |     #   |             |
+    +----------------------+--------+---------+-------------+
+
+    Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo
+    de caracteres, aprovechando que la longitud de la trama es fija se extrae la
+    información de nivel de combustible (REAL TIME FUEL LEVEL) en base al contador
+    de caracteres, también se extrae el estatus de software y hardware.
+
+    Si existe información en puerto Serial y es legible se retorna 1.
+    Si no existe información para leer en el puerto Serial se retorna 0.
+    */
+
+    char ufs270_begin = '*';
+    int char_fuel = 29;
+    int char_fuel_limit = 33;
+    int char_swstatus = 21;
+    int char_hwstatus = 22;
+    
+    int char_counter = 0;
+    int z = 0;
+    int begin = 0;
+
+    while (puerto_data -> readable()) {
+        // If the character on the
+        char incoming_char = puerto_data -> getc();
+        if (incoming_char == ufs270_begin) {
+            char_counter = 1;
+            z=0;
+            begin = 1;
+        } else {
+            char_counter++;
+        }
+        if ((char_counter == char_swstatus) && begin) {
+            sw[0] = incoming_char;
+        } else if ((char_counter == char_hwstatus) && begin) {
+            hw[0] = incoming_char;
+        } else if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) {
+            nivel[z] = incoming_char;
+            z++;
+        }
+    }
+
+    if (begin) {
+        return (1);
+    } else {
+        return (0);
+    }
+}
+
+
+
+int ufs270_calcFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2])
+{
+    /* Descripción de la función.
+
+    CALCULATE FUEL LEVEL
+
+    Esta función recibe un puerto serial Buffered en el que se recibe la trama
+    *QL,411D,01,01580,02D0,2205,01551,null#
+
+    +-------------------------------------------------------+
+    | PARAMETER            | LENGHT | EXAMPLE | DESCRIPTION |
+    +----------------------+--------+---------+-------------+
+    | HEADER               |    3   |   *QL,  |             |
+    | PROTOCOL             |    1   |     4   |             |
+    | FIRMWARE             |    2   |    11   |             |
+    | HARDWARE             |    1   |     D,  |             |
+    | RESERVED             |    2   |    01,  |             |
+    | CALCULATE FUEL LEVEL |    5   | 01580,  | Unit 0.1 mm |
+    | SIGNAL STRENG        |    2   |    02   |             |
+    | SOFTWARE STATUS CODE |    1   |     D   |             |
+    | HARDWARE FAULT CODE  |    1   |     0,  |             |
+    | RESERVED             |    4   |  2205,  |             |
+    | REAL TIME FUEL LEVEL |    5   | 01551,  | Unit 0.1 mm |
+    | RESERVED             |    4   |  null   |             |
+    | TAIL                 |    1   |     #   |             |
+    +----------------------+--------+---------+-------------+
+
+    Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo
+    de caracteres, aprovechando que la longitud de la trama es fija se extrae la
+    información de nivel de combustible en base al contador de caracteres, también
+    se extrae el estatus de software y hardware.
+
+    Si existe información en puerto Serial y es legible se retorna 1.
+    Si no existe información para leer en el puerto Serial se retorna 0.
+    */
+    char ufs270_begin = '*';
+    int char_fuel = 13;
+    int char_fuel_limit = 17;
+    int char_swstatus = 21;
+    int char_hwstatus = 22;
+    
+    int char_counter = 0;
+    int z = 0;
+    int begin = 0;
+
+    if (puerto_data -> readable()) {
+        while (puerto_data -> readable()) {
+            // If the character on the
+            char incoming_char = puerto_data -> getc();
+            if (incoming_char == ufs270_begin) {
+                char_counter = 1;
+                z=0;
+                begin = 1;
+            } else {
+                char_counter++;
+            }
+            if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) {
+                nivel[z] = incoming_char;
+                z++;
+            } else if ((char_counter == char_swstatus) && begin) {
+                sw[0] = incoming_char;
+            } else if ((char_counter == char_hwstatus) && begin) {
+                hw[0] = incoming_char;
+            }
+        }
+        return (1);
+    } else {
+        return (0);
+    }
+}
diff -r 000000000000 -r d74fc1505b54 funciones_basicas.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/funciones_basicas.h	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,54 @@
+/*
+ * - Proyecto:      Accesorios  Queclink.
+ * - Lenguaje:      ANSI C/C++ (mbed)
+ * - Tarjeta:       Nucleo F091RC
+ * - Referencias:
+ * - Fecha:         2016/May
+ * - Autor(es):     Felícito Manzano /
+                    Mario Vargas
+ * - Compañia:      V.S.R. de Centroamérica
+ * - País:          SV / CR
+*/
+
+#include "constantes.hpp"
+
+int incrementar_trama(int *tramas)
+{
+    /*
+    Esta función recibe un entero que es el contador de tramas
+    realiza el incremento en uno y verifica si el valor es mayor
+    o igual que 65535 que es equivalente a 0xFFFF. Si se cumple
+    la condución se regresa el valor a 1.
+    Esta función siempre retorna 0.
+    */
+    int actual = *tramas;
+    int limite = 65535;
+    actual++;
+
+    if (actual > limite) {
+        *tramas = 1;
+    } else {
+        *tramas = actual;
+    }
+    return(0);
+}
+
+int booting_gtdat(Serial *puerto_gv300, Serial *puerto_usb)
+{
+    /*
+    Esta función recibe los puertos Seriales del GV300 y de la PC
+    conectada por USB para notificar que se ha reiniciado la interfaz.
+    Siempre retorna 0
+    */
+    puerto_usb -> printf("*** BOOTING ***\r\n");
+    puerto_usb -> printf("VSR de Centroamerica\r\nSerial Port - OK\r\n");
+    puerto_usb -> printf("Enviar mensaje de re-inicio a CP\r\n\n");
+    wait_ms(T_TX);
+    puerto_gv300 -> printf("%s\r\n", RESET_TXT);
+    wait_ms(T_ESPERA_CP);
+    puerto_usb -> printf("%s\r\n", RESET_TXT);
+    wait_ms(T_TX);
+
+    return(0);
+}
+
diff -r 000000000000 -r d74fc1505b54 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,95 @@
+/*
+ * - Proyecto:      Accesorios  Queclink.
+ * - Lenguaje:      ANSI C/C++ (mbed)
+ * - Tarjeta:       Nucleo F091RC
+ * - Referencias:
+ * - Fecha:         2016/May
+ * - Autor(es):     Felícito Manzano /
+                    Mario Vargas
+ * - Compañia:      V.S.R. de Centroamérica
+ * - País:          SV / CR
+*/
+
+#include "mbed.h"
+#include "BufferedSerial.h"
+#include "funciones_basicas.h"
+#include "funciones_UFS270.h"
+#include "constantes.hpp"
+#include <stdio.h>
+
+//HARDWARE SETUP
+//***********************************
+extern Serial pcusb(USBTX, USBRX);    //Serial ports TX,RX Hardware
+extern Serial gv300(PC_10, PC_11);    // Para conexión con el GPS GV300 N/W
+extern BufferedSerial fuelR1(PB_10, PB_11); // 1er. tanque de combustible
+extern DigitalOut myled(LED1);              // LED1 Integrado
+int contador_tramas = 1;
+
+
+int main()
+{
+    // CONFIGURAR INTERFACES SERIALES
+    pcusb.baud(9600);       // Common PC Baudrate
+    gv300.baud(115200);       // GV300 USB Default Baudrate
+    fuelR1.baud(19200);     // UFS270 Default Baudrate
+
+    // Mensaje de Inicio
+    booting_gtdat(&gv300, &pcusb);
+
+    // Declaración de Variables
+    // Nivel de combustible UFS270
+    char level_FuelR1[6] = "-----";
+    char sw_StatusR1[2] = "-";
+    char hw_StatusR1[2] = "-";
+    int eval_Fuel1 = 0;
+    int contador_TX = 0;
+
+
+    while(1) {
+        myled = 1;
+        // Leer UFS270 en el tanque A
+        pcusb.printf("UFS270 A - INICIA\r\n");
+        eval_Fuel1 = ufs270_rtFL(&fuelR1, level_FuelR1, hw_StatusR1, sw_StatusR1);
+        if (eval_Fuel1) {
+            pcusb.printf("UFS270_A Altura=%s - OK\r\n",level_FuelR1);   
+            contador_TX++;       
+        } else {
+            pcusb.printf("UFS270_A - SIN DATOS\r\n");
+        }
+        wait_ms(T_TX); 
+
+              
+        // Transmitir
+        if ((eval_Fuel1)&&(contador_TX == 3)){
+            // Generar transmisión
+            pcusb.printf("REPORTE CONSOLIDADO COMBUSTIBLE\r\n");
+            pcusb.printf("Inicia comunicacion con CP. Enviando mensaje:\r\n");
+            pcusb.printf("%s%sFTMS%s%s%s%c%c%s%04X%s\r\n\n",
+                         CABECERA_TX, CODIGO_INT_FUEL, SEPARADOR,
+                         level_FuelR1, SEPARADOR, hw_StatusR1[0], sw_StatusR1[0],
+                         FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
+            wait_ms(T_ESPERA_CP);
+                                
+            gv300.printf("%s%sFTMS%s%s%s%c%c%s%04X%s\r\n",
+                         CABECERA_TX, CODIGO_INT_FUEL, SEPARADOR,
+                         level_FuelR1, SEPARADOR, hw_StatusR1[0], sw_StatusR1[0],
+                         FIN_CABECERA_TX, contador_tramas, ULTIMO_CARACTER);
+            wait_ms(T_ESPERA_CP);
+            contador_TX = 0;
+            incrementar_trama(&contador_tramas);
+            pcusb.printf("Mensaje escrito en puerto serial del CP\r\n\n");
+            wait_ms(T_TX);                  
+                   
+        }
+        /* CIERRE */
+        
+        pcusb.printf("Contador tx = %d\n", contador_TX);
+        pcusb.printf("***FIN***\r\n\n");
+        strcpy(level_FuelR1,"-----\0");
+        strcpy(sw_StatusR1, "-\0");
+        strcpy(hw_StatusR1, "-\0");
+        eval_Fuel1 = 0;
+        myled = 0;
+        wait(2);
+    }
+}
diff -r 000000000000 -r d74fc1505b54 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu May 26 21:19:42 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34
\ No newline at end of file