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

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mvargas_dtk 0:d74fc1505b54 1 /*
mvargas_dtk 0:d74fc1505b54 2 * - Proyecto: CH SABMiller.
mvargas_dtk 0:d74fc1505b54 3 * - Lenguaje: ANSI C/C++ (mbed)
mvargas_dtk 0:d74fc1505b54 4 * - Tarjeta: Nucleo F091RC
mvargas_dtk 0:d74fc1505b54 5 * - Referencias:
mvargas_dtk 0:d74fc1505b54 6 * - Fecha: 2016/May
mvargas_dtk 0:d74fc1505b54 7 * - Autor(es): Felícito Manzano /
mvargas_dtk 0:d74fc1505b54 8 Mario Vargas
mvargas_dtk 0:d74fc1505b54 9 * - Compañia: V.S.R. de Centroamérica
mvargas_dtk 0:d74fc1505b54 10 * - País: SV / CR
mvargas_dtk 0:d74fc1505b54 11 */
mvargas_dtk 0:d74fc1505b54 12
mvargas_dtk 0:d74fc1505b54 13 #include "mbed.h"
mvargas_dtk 0:d74fc1505b54 14 #include "BufferedSerial.h"
mvargas_dtk 0:d74fc1505b54 15 #include "constantes.hpp"
mvargas_dtk 0:d74fc1505b54 16
mvargas_dtk 0:d74fc1505b54 17 /* DEFINICIÓN DE FUNCIONES */
mvargas_dtk 0:d74fc1505b54 18 /*******************************************************************/
mvargas_dtk 0:d74fc1505b54 19 /*******************************************************************/
mvargas_dtk 0:d74fc1505b54 20
mvargas_dtk 0:d74fc1505b54 21 int ufs270_rtFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2])
mvargas_dtk 0:d74fc1505b54 22 {
mvargas_dtk 0:d74fc1505b54 23 /*
mvargas_dtk 0:d74fc1505b54 24 Descripción de la función.
mvargas_dtk 0:d74fc1505b54 25
mvargas_dtk 0:d74fc1505b54 26 REAL TIME FUEL LEVEL!!
mvargas_dtk 0:d74fc1505b54 27
mvargas_dtk 0:d74fc1505b54 28 Esta función recibe un puerto serial Buffered en el que se recibe la trama
mvargas_dtk 0:d74fc1505b54 29 *QL,411D,01,01580,02D0,2205,01551,null#
mvargas_dtk 0:d74fc1505b54 30
mvargas_dtk 0:d74fc1505b54 31 +-------------------------------------------------------+
mvargas_dtk 0:d74fc1505b54 32 | PARAMETER | LENGHT | EXAMPLE | DESCRIPTION |
mvargas_dtk 0:d74fc1505b54 33 +----------------------+--------+---------+-------------+
mvargas_dtk 0:d74fc1505b54 34 | HEADER | 3 | *QL, | |
mvargas_dtk 0:d74fc1505b54 35 | PROTOCOL | 1 | 4 | |
mvargas_dtk 0:d74fc1505b54 36 | FIRMWARE | 2 | 11 | |
mvargas_dtk 0:d74fc1505b54 37 | HARDWARE | 1 | D, | |
mvargas_dtk 0:d74fc1505b54 38 | RESERVED | 2 | 01, | |
mvargas_dtk 0:d74fc1505b54 39 | CALCULATE FUEL LEVEL | 5 | 01580, | Unit 0.1 mm |
mvargas_dtk 0:d74fc1505b54 40 | SIGNAL STRENG | 2 | 02 | |
mvargas_dtk 0:d74fc1505b54 41 | SOFTWARE STATUS CODE | 1 | D | |
mvargas_dtk 0:d74fc1505b54 42 | HARDWARE FAULT CODE | 1 | 0, | |
mvargas_dtk 0:d74fc1505b54 43 | RESERVED | 4 | 2205, | |
mvargas_dtk 0:d74fc1505b54 44 | REAL TIME FUEL LEVEL | 5 | 01551, | Unit 0.1 mm |
mvargas_dtk 0:d74fc1505b54 45 | RESERVED | 4 | null | |
mvargas_dtk 0:d74fc1505b54 46 | TAIL | 1 | # | |
mvargas_dtk 0:d74fc1505b54 47 +----------------------+--------+---------+-------------+
mvargas_dtk 0:d74fc1505b54 48
mvargas_dtk 0:d74fc1505b54 49 Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo
mvargas_dtk 0:d74fc1505b54 50 de caracteres, aprovechando que la longitud de la trama es fija se extrae la
mvargas_dtk 0:d74fc1505b54 51 información de nivel de combustible (REAL TIME FUEL LEVEL) en base al contador
mvargas_dtk 0:d74fc1505b54 52 de caracteres, también se extrae el estatus de software y hardware.
mvargas_dtk 0:d74fc1505b54 53
mvargas_dtk 0:d74fc1505b54 54 Si existe información en puerto Serial y es legible se retorna 1.
mvargas_dtk 0:d74fc1505b54 55 Si no existe información para leer en el puerto Serial se retorna 0.
mvargas_dtk 0:d74fc1505b54 56 */
mvargas_dtk 0:d74fc1505b54 57
mvargas_dtk 0:d74fc1505b54 58 char ufs270_begin = '*';
mvargas_dtk 0:d74fc1505b54 59 int char_fuel = 29;
mvargas_dtk 0:d74fc1505b54 60 int char_fuel_limit = 33;
mvargas_dtk 0:d74fc1505b54 61 int char_swstatus = 21;
mvargas_dtk 0:d74fc1505b54 62 int char_hwstatus = 22;
mvargas_dtk 0:d74fc1505b54 63
mvargas_dtk 0:d74fc1505b54 64 int char_counter = 0;
mvargas_dtk 0:d74fc1505b54 65 int z = 0;
mvargas_dtk 0:d74fc1505b54 66 int begin = 0;
mvargas_dtk 0:d74fc1505b54 67
mvargas_dtk 0:d74fc1505b54 68 while (puerto_data -> readable()) {
mvargas_dtk 0:d74fc1505b54 69 // If the character on the
mvargas_dtk 0:d74fc1505b54 70 char incoming_char = puerto_data -> getc();
mvargas_dtk 0:d74fc1505b54 71 if (incoming_char == ufs270_begin) {
mvargas_dtk 0:d74fc1505b54 72 char_counter = 1;
mvargas_dtk 0:d74fc1505b54 73 z=0;
mvargas_dtk 0:d74fc1505b54 74 begin = 1;
mvargas_dtk 0:d74fc1505b54 75 } else {
mvargas_dtk 0:d74fc1505b54 76 char_counter++;
mvargas_dtk 0:d74fc1505b54 77 }
mvargas_dtk 0:d74fc1505b54 78 if ((char_counter == char_swstatus) && begin) {
mvargas_dtk 0:d74fc1505b54 79 sw[0] = incoming_char;
mvargas_dtk 0:d74fc1505b54 80 } else if ((char_counter == char_hwstatus) && begin) {
mvargas_dtk 0:d74fc1505b54 81 hw[0] = incoming_char;
mvargas_dtk 0:d74fc1505b54 82 } else if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) {
mvargas_dtk 0:d74fc1505b54 83 nivel[z] = incoming_char;
mvargas_dtk 0:d74fc1505b54 84 z++;
mvargas_dtk 0:d74fc1505b54 85 }
mvargas_dtk 0:d74fc1505b54 86 }
mvargas_dtk 0:d74fc1505b54 87
mvargas_dtk 0:d74fc1505b54 88 if (begin) {
mvargas_dtk 0:d74fc1505b54 89 return (1);
mvargas_dtk 0:d74fc1505b54 90 } else {
mvargas_dtk 0:d74fc1505b54 91 return (0);
mvargas_dtk 0:d74fc1505b54 92 }
mvargas_dtk 0:d74fc1505b54 93 }
mvargas_dtk 0:d74fc1505b54 94
mvargas_dtk 0:d74fc1505b54 95
mvargas_dtk 0:d74fc1505b54 96
mvargas_dtk 0:d74fc1505b54 97 int ufs270_calcFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2])
mvargas_dtk 0:d74fc1505b54 98 {
mvargas_dtk 0:d74fc1505b54 99 /* Descripción de la función.
mvargas_dtk 0:d74fc1505b54 100
mvargas_dtk 0:d74fc1505b54 101 CALCULATE FUEL LEVEL
mvargas_dtk 0:d74fc1505b54 102
mvargas_dtk 0:d74fc1505b54 103 Esta función recibe un puerto serial Buffered en el que se recibe la trama
mvargas_dtk 0:d74fc1505b54 104 *QL,411D,01,01580,02D0,2205,01551,null#
mvargas_dtk 0:d74fc1505b54 105
mvargas_dtk 0:d74fc1505b54 106 +-------------------------------------------------------+
mvargas_dtk 0:d74fc1505b54 107 | PARAMETER | LENGHT | EXAMPLE | DESCRIPTION |
mvargas_dtk 0:d74fc1505b54 108 +----------------------+--------+---------+-------------+
mvargas_dtk 0:d74fc1505b54 109 | HEADER | 3 | *QL, | |
mvargas_dtk 0:d74fc1505b54 110 | PROTOCOL | 1 | 4 | |
mvargas_dtk 0:d74fc1505b54 111 | FIRMWARE | 2 | 11 | |
mvargas_dtk 0:d74fc1505b54 112 | HARDWARE | 1 | D, | |
mvargas_dtk 0:d74fc1505b54 113 | RESERVED | 2 | 01, | |
mvargas_dtk 0:d74fc1505b54 114 | CALCULATE FUEL LEVEL | 5 | 01580, | Unit 0.1 mm |
mvargas_dtk 0:d74fc1505b54 115 | SIGNAL STRENG | 2 | 02 | |
mvargas_dtk 0:d74fc1505b54 116 | SOFTWARE STATUS CODE | 1 | D | |
mvargas_dtk 0:d74fc1505b54 117 | HARDWARE FAULT CODE | 1 | 0, | |
mvargas_dtk 0:d74fc1505b54 118 | RESERVED | 4 | 2205, | |
mvargas_dtk 0:d74fc1505b54 119 | REAL TIME FUEL LEVEL | 5 | 01551, | Unit 0.1 mm |
mvargas_dtk 0:d74fc1505b54 120 | RESERVED | 4 | null | |
mvargas_dtk 0:d74fc1505b54 121 | TAIL | 1 | # | |
mvargas_dtk 0:d74fc1505b54 122 +----------------------+--------+---------+-------------+
mvargas_dtk 0:d74fc1505b54 123
mvargas_dtk 0:d74fc1505b54 124 Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo
mvargas_dtk 0:d74fc1505b54 125 de caracteres, aprovechando que la longitud de la trama es fija se extrae la
mvargas_dtk 0:d74fc1505b54 126 información de nivel de combustible en base al contador de caracteres, también
mvargas_dtk 0:d74fc1505b54 127 se extrae el estatus de software y hardware.
mvargas_dtk 0:d74fc1505b54 128
mvargas_dtk 0:d74fc1505b54 129 Si existe información en puerto Serial y es legible se retorna 1.
mvargas_dtk 0:d74fc1505b54 130 Si no existe información para leer en el puerto Serial se retorna 0.
mvargas_dtk 0:d74fc1505b54 131 */
mvargas_dtk 0:d74fc1505b54 132 char ufs270_begin = '*';
mvargas_dtk 0:d74fc1505b54 133 int char_fuel = 13;
mvargas_dtk 0:d74fc1505b54 134 int char_fuel_limit = 17;
mvargas_dtk 0:d74fc1505b54 135 int char_swstatus = 21;
mvargas_dtk 0:d74fc1505b54 136 int char_hwstatus = 22;
mvargas_dtk 0:d74fc1505b54 137
mvargas_dtk 0:d74fc1505b54 138 int char_counter = 0;
mvargas_dtk 0:d74fc1505b54 139 int z = 0;
mvargas_dtk 0:d74fc1505b54 140 int begin = 0;
mvargas_dtk 0:d74fc1505b54 141
mvargas_dtk 0:d74fc1505b54 142 if (puerto_data -> readable()) {
mvargas_dtk 0:d74fc1505b54 143 while (puerto_data -> readable()) {
mvargas_dtk 0:d74fc1505b54 144 // If the character on the
mvargas_dtk 0:d74fc1505b54 145 char incoming_char = puerto_data -> getc();
mvargas_dtk 0:d74fc1505b54 146 if (incoming_char == ufs270_begin) {
mvargas_dtk 0:d74fc1505b54 147 char_counter = 1;
mvargas_dtk 0:d74fc1505b54 148 z=0;
mvargas_dtk 0:d74fc1505b54 149 begin = 1;
mvargas_dtk 0:d74fc1505b54 150 } else {
mvargas_dtk 0:d74fc1505b54 151 char_counter++;
mvargas_dtk 0:d74fc1505b54 152 }
mvargas_dtk 0:d74fc1505b54 153 if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) {
mvargas_dtk 0:d74fc1505b54 154 nivel[z] = incoming_char;
mvargas_dtk 0:d74fc1505b54 155 z++;
mvargas_dtk 0:d74fc1505b54 156 } else if ((char_counter == char_swstatus) && begin) {
mvargas_dtk 0:d74fc1505b54 157 sw[0] = incoming_char;
mvargas_dtk 0:d74fc1505b54 158 } else if ((char_counter == char_hwstatus) && begin) {
mvargas_dtk 0:d74fc1505b54 159 hw[0] = incoming_char;
mvargas_dtk 0:d74fc1505b54 160 }
mvargas_dtk 0:d74fc1505b54 161 }
mvargas_dtk 0:d74fc1505b54 162 return (1);
mvargas_dtk 0:d74fc1505b54 163 } else {
mvargas_dtk 0:d74fc1505b54 164 return (0);
mvargas_dtk 0:d74fc1505b54 165 }
mvargas_dtk 0:d74fc1505b54 166 }