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
Revision 0:d74fc1505b54, committed 2016-05-26
- 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
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