Discusiones sobre Productos NI

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

enviar y recibir datos

hola a todos, estoy hace muy poco trabajando con este software por eso mi falta de conocimiento en fin, estoy haciendo un control de una lampara con labview y pic, la idea es controlar esta lampara por horas de encendido y apagado, o que esta funcione de manera independiente, le estoy enviando al pic una "B" para que funcione de manera independiente( que capte si hay luz o no por una ldr) un "AC" para prender la lampara por horario y un "AD" para apagarla, mis preguntas son ¿esta bien como estoy enviando los datos?  ¿como puedo leer desde labview un mensaje de recibido y encender un led? les adjunto lo que llevo si me pudieran ayudar se los agradeceria.

Se me olvidaba la comunicacion es serial

0 kudos
Mensaje 1 de 4
6.248 Vistas

Hola panchoreyes

Modifique un poco tu código, ya que solo es necesario que la función de VISA Write se encuentre dentro del ciclo while. Haciendo esto, evitamos que el puerto se abra y se cierre en cada iteración del ciclo. Note tambíen que tienes varios Waits por ahí. Cuidado con estos delays, ya que pudieran provocar que la sincronización con el dispositivo se vea perjudicada. Recuerda tambíen que el baudrate debe de coincidir con el baudrate del dispositivo (9600 es el default, solo hay que confirmar esta información. Al momento de crear los mensajes, la lógica pareciera estar bien implementada. 

Para leer datos que vienen desde el PIC, existe una función que se llama VISA Read, que nos permite leer los datos en el buffer. Con esto nosotros podemos realizar un loop-back y ver si el mensaje que estamos enviando, lo estamos recibiendo en el PIC. 

Voy a tratar de conseguir un código de ejemplo y tratar de compartirtelo. Por lo pronto puedes intentar explorando la función de VISA Read que se encuentra en la paleta de Instrument IO >> VISA

Adjunto tambíen tu código modificado. Espero que esta información te resulte útil.

Un saludo.

Omar R.
Technical Support Manager
CLA | CTD
0 kudos
Mensaje 2 de 4
6.218 Vistas

Hola de nuevo panchoreyes

Te comparto una imagen del código en LabVIEW que había desarrollado hace tiempo para un control de temperatura. Este código lo que hacia era escribir un comando al PIC y leer la temperatura del ADC. Todo esto lo realice utilizando comunicación serial. 

Code.png

Espero que este código te sirva de ejemplo para desarrollar tu aplicación. Un saludo ! 

Omar R.
Technical Support Manager
CLA | CTD
0 kudos
Mensaje 3 de 4
6.215 Vistas

hola y gracias por responder Omar R. lamentablemente no pude ver las modificaciones que le hiciste a mi programa por tener versiones distintas volvi a modificar el programa e hice el programa del pic para probarlo mediante puertos virtuales y proteus. El programa corre en el pic y labview pero creo que no se comunican, porque al enviar un dato desde el pic a labview no lo puedo observar adjuntare todo para que ojalas lo puedas ver ( y ayudarme a solucionarlo por favor).

 

saludos.

 

 

 

#include <16F877A.h>
#include <stdlib.h>
#use delay(clock = 4000000)      //Cristal de 4 MHz//

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)   //CONFIG USART //

#fuses XT, NOWDT, NOLVP, NOBROWNOUT   //Programación de bits de Configuración//

#byte pa=0x05
#byte pb=0x06
#byte pc=0x07
#byte pd=0x08

#int_RDA

void RDA_isr(){

char c;

disable_interrupts(GLOBAL);
c= getc();

if (c=="BD"){
   printf("escoja tipo de control");
   
   }
     else if(c=="ACF"){
    
    printf("Orden desconocida");
 
}
     else if(c=="AD"){
    
    printf("Control automatico activado");
    if (pa==0x01)
{
  pb=0xff;
  }
  else
{  
  pa==0x00;
   }}
  else if(c=="BCF"){
   
     printf("Cotrol horario activado");
     delay_ms(200);
     printf("luminarias apagadas");
     
     }
    
    else if(c=="BCE"){
   
  printf("Cotrol horario activado");
     delay_ms(200);
     printf("luminarias encendidas");
     
   pb=1;
  }
    }
void main(){
   set_tris_a (0xff);
   set_tris_b (0x00);
   set_tris_c (0xB8);
   
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
 
   while(1);
   enable_interrupts(GLOBAL);
   }

Descargar todos
0 kudos
Mensaje 4 de 4
6.155 Vistas