bueno.ya he terminado con la recepcion de las tramas bluetooth.durante el desarroyo de esta aplicacion,se me ha presentado infinidad de problemas.ya sea
por fallos mios.o por no entender bien el funcionamieto del sitema bluetooth dentro de un terminal con android.yo ya he llegado al final de la comprension
de este sistema.y no quiero decir que lo sepa todo sobre el.el problema es que no encuentro mas informacion respecto al comportamiento interno del hardware
del bluetooth.
he aprendido lo suficiente para el descubrimiento y conexion a dispositivos bluetooth.tambien he aprendido a enviar datos por el buffer de salida de datos
que dispone android.
pero no entiendo bien el funcionamiento del buffer de entrada.en las primeras aplicaciones que hize.tambien se producia fallos durante la recepcion.
incluso con caracteres ASCII.
cuando enviamos una trama de datos al terminal.en el programa se produce un evento que ejecuta un thread.el cual envia los datos recibidos al hilo principal
mediante un Handler.
la cosa esta en que al recibir la trama,normalmente se produce un evento con el primer dato recibido.y seguidamente recibimos otro evento con el resto del
la trama.
si no gestionamos esto.se producirian dos llamadas al hilo principal mediante el Hndler.por eso he realizado unas instrucciones para que los dos eventos.
se traduzcan en el envio de una sola trama al hilo principal.
pero abezes en una misma trama se pueden producir varios eventos.quizas debido a una interferencia.o algun retardo en el tiempo entre datos.o quizas
un evento producido en nuestro terminal... yo no lo se.
tambien he visto como datos residuales de una trama anterior.se han quedado en el buffer de entrada.y he tenido que limpiarlos enviando una trama de ceros.
ya que no se como limpiar este buffer con algun tipo de instruccion del android.he mirado en el SDK y no he visto nada al respecto.
con todo esto.he llegado a la conclusion,de que el envio de datos atraves de bluetooth necesita de una buena comprobacion de los datos recibidos.
de ahi que use el CRC.pero ademas veo que es mejor usar tramas cortas para que se produzcan los menores fallos posibles.
esto no creo que sea un problema para el manejo del protocolo MODBUS.ya que en vez de direccionar los datos a enviar a una sola direccion con una trama larga.
podemos usar varias direcciones con una trama mas corta.
segun las pruebas que he hecho con esta aplicacion.raramente la trama no se envia a la primera,cuando la trama no excede de 10 datos hexgesimales.
tambien he hecho pruebas con 15 datos con 1 acierto un por cada 5 intentos,20 datos con 10 intentos para 1 acierto.y cuanto mas larga,mas fallos hay e incluso igual nunca se produce el acierto.
aunque esto no conlleva ningun problema en cuanto a la fidelidad de los datos.que llegaran bien gracias a la comprovacion del CRC. que sera el esclavo el que decidira cuantas veces le pedira al maestro
que la embie de nuevo.
claro esta que cuantos mas fallos,mas se ralentizara el proceso que tenga que realizar el esclavo ante la falta del dato que precisa.
pues aqui pongo la aplicacion.no exenta de bugs ya que soy novato en esto.y aunque he intentado por todos los medios calcular diferentes combinaciones
ante la generacion del CRC o transformacion de valores,puede que en algun calculo se desborde algun valor y esto haga que la aplicacion se pare.
asi que si alguien hace pruebas y le sale algun error.me lo indique para ver de donde viene el fallo.
http://www.4sync.com/rar/uHfEss_Z/SerialModbus37.htmlEn esta aplicacion en la parte de la transmision tambien he implementado el poder escribir las tramas de envio en minusculas.aunque tambien funciona con
mayusculas.
y en la parte de la recepcion.he añadido un contador de errores y aciertos.ademas de un reset en el menu para ponerlos a cero.
debajo de estos se ubica la trama recibida correcta.y abajo del todo todo el trafico de entrada separado por puntos y coma por trama recivida.
espero que le sea util a alguien.y podais aprender.
si aprendo mas cosas sobre el buffer de recepcion,ya modificaria el programa.
ahora no se si empezar a realizar circuitos y sus respectivas aplicaciones.o empezar con la recepcion/envio de datos mediante Wi-Fi.