Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

comunicacion bluetooth puerto serie labwindows/cvi

¡Resuelto!
Ir a solución

Hola a todos, os comento mi problema:

Estoy realizando mi proyecto de fin de carrera que consiste en monitorizar un espirómetro bluetooth. Al emparejar el espirómetro con el pc me crea dos puertos com virtuales, uno de entrada y otro de salida. He realizado una aplicación en cvi para mandarle comandos al dispositivo y que este me responda, pero no me funciona. El dispositivo conecta de forma correcta pero no responde, o no recoge el comando enviado.

Esta aplicación si funciona si la uso para comunicarme con mi móvil (con cambios para la comunicación AT Channel) que se empareja con un solo puerto com (vinculo modem).

Si uso Hyperterminal con el espirómetro no me deja escribir nada, creo que es debido a que hyperterminal se comunica con un único puerto com y yo tengo dos. En la aplicación de cvi yo leo del puerto de entrada y escribo en el de salida.

 

¿Alguien puede decirme una posible solución?,¿Estoy haciendo algo mal?. 

 

Gracias. 

0 kudos
Mensaje 1 de 8
4.527 Vistas

No tengo experiencia con comunicaciones sobre bluetooth, pero algunas sugerencias son comunes a todas comunicaciones seriales así que viene bien aquí también.

Lo primero es averiguar que los parámetros de comunicación son correctos (speed, parity, data bits, stop bits).

Secundariamente, ¿no tiene tu instrumento algo que pueda comandarse desde la PC sin necesidad de tener respuesta? ¿Alguna luz espía, un interruptor...? Esto para averiguar si por lo menos desde la PC al instrumento la comunicación está bien.

Y por último: ¿salida y entrada son definidas desde el lado del instrumento u de la PC? Porque la "salida" del instrumento es la "entrada" de la PC y viceversa. Esto es: ¿has probado a intercambiar los puertos, a ver si todo acaba bien?



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 2 de 8
4.519 Vistas

Hola, he seguido tus consejos pero no he tenido éxito.

La configuración está correcta y el dispositivo no tiene leds ni nada que pueda accionar. He probado a intercambiar los puertos como has comentado pero sigue sin funcionar y también a leer y escribir de un solo puerto, y nada.

Lo que no entiendo es porqué me asigna puerto de entrada y de salida y no solo uno, ¿esto es normal en otros dispositivos?.

Se me ocurre que mi problema pueda ser de los terminadores, yo uso '\r\n' como en AT que es lo mismo que <CR><LF>, ¿o me equivoco?.

 

¿Alguna otra sugerencia?

Gracias por contestar Roberto.

 

Saludos. 

0 kudos
Mensaje 3 de 8
4.505 Vistas

Como ya te he comentado, no tengo experiencia en el tema del bluetooth así que no puedo comentar lo de  los puertos de comunicación.

 

Lo único que se me ocurre es si el instrumento viene con algun manual en el que se pongan ejemplos de comunicación u si en el sitio del productor se encuentren documentos que profundicen en esto de la comunicación.

 

¿Has intentado ver si ya hay un driver para tu instrumento? Puedes ver aquí en la librería de drivers.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 4 de 8
4.501 Vistas

Ya se donde está el problema, antes de enviar los comandos tengo que iniciar el dispositivo para que me acepte dichos comandos con la cadena "ENQ".

El problema es que si hago:

sprintf(mensaje,"ENQ\r");

ComWrt(COM,mensaje,strlen(mensaje));

no me funciona porque el dispositivo no me reconoce ENQ.

Buscando he encontrado que ENQ viene de Enquiry que es un comando de control en ascii, equivalente a ^E o lo que es lo mismo crtl+E.

Pero si lo hago de la forma sprintf(mensaje,"^E\r") tampoco me funciona. 

¿Cómo puedo enviar ese 'ctrl' (tecla control) o el comando ^E?

He probado la comunicación con hyperterminal y me funcionan todos lo comandos después de pulsar ctrl+E.

¿Algún consejo? 

0 kudos
Mensaje 5 de 8
4.473 Vistas
Solución
Aceptado por el autor del tema Slizer

ENQ es la descripción del carácter ASCII 5, uno de los caracteres de control que fueron definido en el estandard del ASCII.

Ctrl+E es una manera de 'crear' este código mediante el teclado dentro de programas como el hyperterminal, pero si tienes que enviarlo dentro de tu programa simplemente debes enviar al 5, por ejemplo de esta manera:

 

char     cmd[8];

 

cmd[0] = 5;

cmd[1] = 13;

ComWrt (comPort, cmd, 2);

 

Creo que igualmente puede enviarse como ComWrt (comPort, "\5\r", 2); pero no puedo probarlo ahora.

 

De esta manera deberías solucionar tu problema.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Mensaje 6 de 8
4.466 Vistas
Olvidaba ponerte una referencia a la tabla de codigos: aquí puedes ver todos los codigos junto a la descripción de los primeros 32 de la serie (caracteres de control).


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 7 de 8
4.464 Vistas

Correcto Roberto, gracias.

 

Por si a alguien le interesa la forma correcta de enviar ENQ en mi caso sería:

 

cmd[8];

cmd[0]=5;

ComWrt(COM,cmd,1);

 

no debo poner el 13 (retorno de carro)  para este comando porque no me lo acepta, para los comandos posteriores una vez aceptado el ENQ si debo ponerlo.   

0 kudos
Mensaje 8 de 8
4.453 Vistas