Discusiones sobre Productos NI

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

Problemas con Rs232

Hola , en primer lugar pedir disculpas por que le di a la opcion de problema resuelto sin darme cuenta, no es mi intencion llenar el foro con post del mismo tema, pero la solucion que en un principio pense que funcionaria no ha sido asi, mi problema es que quiero mandarme a un PIC16F886 una serie de comandos por Rs232, y como llevo muy poco tiempo con el labview voy bastente pez,,,,,, ya tengo el programa del micro funcionando perfectamente y lo pruebo por el hiperterminal de windows y funciona bien, lo que pasa es que quiero hacer que cada vez que aprieto un boton (un boton boleano para cada comando) me mande por Rs232 un comando del tipo "mode_laser" o "mode_standby" o algo asi, de momento solo he conseguido que me mande solo un comando cada que ejecuto el programa en modo run, mi problema es que despues de arrancar y mandar el primer el comando es como si se quedara colgado el pic, os adjunto el *vi por si me podeis decir en que estoy metiendo la pata.

Estoy usando una estructura del tipo swicht case que me recomendo un compañero forero ya que no sabia como hacer el programa para poder tener la opcion de mandar mas de un comando.

Gracias.

0 kudos
Mensaje 1 de 7
5.027 Vistas

Hola:

 

Indicarte algunas cuestiones:

 

- Tal como has hecho el programa está continuamente escribiendo el comando y solamente lees los datos cuando das a la opción leer. Sería bueno hacer el proceso escribir comando y leer datos con un solo boolean.

 

- La escritura no es necesario hacerla letra por letra, se puede hacer todo el comando de una vez.

 

- En el bucle es bueno poner una función White que espere 100ms o algo así para no sobrecargar el procesador.

 

- Te recomiendo que solo se envíe el comando cuando se accione un control booleano (y que además espere la respuesta y la lea para descargar el buffer).

 

Espero que esto sea de ayuda. Saludos.... Moisés

_________________________________________
https://aulamoisan.uva.es

0 kudos
Mensaje 2 de 7
5.023 Vistas

Hola ferorts,

 

Estuve revisando tu VI y tengo algunos comentarios:

 

- ¿Conoces los registros de desplazamiento (Shift Registers)? Son elementos que se utilizan para guardar información de la iteración anterior del ciclo. Te recomiendo que coloques registros de desplazamiento para la terminal de error. Puedes encontrar más información acerca de los registros de desplazamiento en esta liga:

 

http://zone.ni.com/devzone/cda/tut/p/id/7592

 

Aquí también puedes encontrar información acerca de la temporización que menciona moisan.

 

 

- No necesitas separar el string para escribirlo.

 

 

- Necesitas colocar un delay entre la escritura y la lectura.

 

 

- No configuraste ningun parámetro cuando creas el recurso de VISA (baudrate, parity, stop bits, etc). Revisa que los parámetros que LabVIEW utiliza por default sean los correctos para que la comunicación entre el PIC y LabVIEW se haga correctamente.

 

 

- El siguiente ejemplo muestra la comunicación básica por puerto serial. Rervísalo porque es muy similar a tu VI.

 

Basic Serial Write and Read.PNG

 

 

- Una vez que hayas revisado los puntos anteriores, puedes probar que el VI funciona correctamente al probarlo con hiperterminal de Windows, tal como lo hiciste con el programa del PIC, para comprobar que funciona correctamente. 

 

 

Espero que la información te sea de utilidad. Si tienes algun problema no dudes en escribirme por este medio.

 

Suerte!

 

Héctor Rojas

 

0 kudos
Mensaje 3 de 7
5.021 Vistas

Para hacer eso tienes que poner botones para cada comando y ponerlos con la accion mecanica de latch para que solo se mande el comando una vez cada que presiones el boton, y no como ahorita que se manda muchas veces y eso ha de ser lo que hace que no funcione la comunicación. Te mando un VI para que veas como lo podrias hacer.

Rodrigo Cuenca
www.cidesi.com

0 kudos
Mensaje 4 de 7
5.017 Vistas
Gracias a todos por las respuestas, he intentado haceros caso y he modificado el programa, lo unico que no he implentado aun es lo de los registros de desplazamiento, ya que primero quiero solucionar el problema que tengo con la lectura. Mi problema es el siguiente , todos los comandos funcionan menos el te temperatura que aun no he implementado nada,(ese no cuenta) pero el problema es que cuando intento leer en el buffer por RS232 me aparecen todos los comandos que acabo de introducir al pulsar los botones, es decir. Si arranco el programa y pulso una vez "modo laser" luego "modo carga" y luego "trigger interno" cuando pulse en adc me apareceran todos estos comandos que acabo de pulsar "modo laser" "modo Carga" y luego Trigger int" antes de aparecer el valor de tension que busco, y cuantos mas botones pulse mas veces tendre que pulsar el boton de leer para que vayan mostrando todos los comandos introducidos y al fianal me aparezca el valor que busco. Mirando por el foro he visto que el labview tiene un buffer en el que va guardando todo lo que se envia por el puerto serie, estoy intentando utilizar la instruccion "Visa clear" para borrar el buffer pero cada vez que la pongo antes o despues de escribir el comando adc en el puerto, el porgrama no me hace nada. He observado con una variable que tengo que se llama "Serial Settings:Number of Bytes at Serial Port" que cuanto mas botones pulso mas se va incrementando esta variable, y cuando le doy a leer el buffer esta variable decrece. Os Adjunto el programa. Gracias.
0 kudos
Mensaje 5 de 7
4.950 Vistas
Aqui adjunto el programa que no se ha subido antes....
0 kudos
Mensaje 6 de 7
4.949 Vistas

Ahora si que adjunto el archivo con el programa.

0 kudos
Mensaje 7 de 7
4.941 Vistas