Discusiones sobre Productos NI

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

¿perdida datos con shared variable?

¡Resuelto!
Ir a solución

Saludos comunidad,

 

¿ es posible que se genere perdida de datos  cuando se transmiten datos  a traves de una shared variable de forma continua entre dos bucles while que funcionan a distintas velocidades? 

 

suponer caso en el que  se envian datos de un bucle que  muestrea datos de una tarjeta DAQ a 25 milisegundos, y los recibe otro bucle que funciona a 100 milisegundos, este ultimo  bucle solo se encarga contrastar datos en pantalla.

0 kudos
Mensaje 1 de 5
4.740 Vistas

Hola Cristian.

Una pregunta, los loops que hablas están en el mismo VI, en distintos VIs dentro del mismo computador o distintos VIs en computadores diferentes conectados a través de la red?

Saludos !

Patricio Cortes | NI Cono Sur
0 kudos
Mensaje 2 de 5
4.716 Vistas

Saludos Patricio,

 

los bucles while estan en el mismo VI. la duda es  porque preliminarmente tenia todos los bucles a la misma velocidad(bucle DAQ y bucle de supervision), pero por limitaciones de un algoritmo de control tuve que aumentar la velocidad dado que tiene embebido la lectura y escritura de un tarjeta de adquisicion de datos y por ende la velocidad de muestreo. entonces para transmitir datos use en vez de variables locales(para evitar condiciones de carrera)  shared variables para transmitir datos entre bucles de forma continua. 

0 kudos
Mensaje 3 de 5
4.714 Vistas

Cristian, 

 

para este caso, te recomiendo usar Network Streaming, ya que usa ethernet para hacer una comunicación entre un escritor y un lector en un VI. Este tipo de comunicación conviene ya que no presenta pérdida de datos y es más robusta ante interrupciones de conexión. Está basado en queues, por lo tanto, puede aceptar cualquier tipo de datos, incluso encapsulados en clusters. Maneja timeouts y errores. Lo bueno también, es que no solo puedes compartir datos en VIs presentes en una misma máquina, sino que puedes compartirlos en una red, con un lector en una máquina (computador) y un escritor en otra distinta (dentro de la misma red obviamente).

 

Te dejo este link para que aprendas como trabajan.

 

http://www.ni.com/white-paper/12267/en/

 

En la ayuda de LabVIEW también ejemplos para hacer.

 

Espero que te ayude esta información. Que pases un buen fin de semana.

Patricio Cortes | NI Cono Sur
0 kudos
Mensaje 4 de 5
4.711 Vistas
Solución
Aceptado por el autor del tema cristian.ccl

Hola Cristian,

 

Me imagino que estas utilizando variables compartidas del tipo single-process, con estas variables tambien se presenta el problema de condicion de carrera. 

 

Para lo que requieres, te recomiendo utilices Variables Globales Funcionales o Queues.

 

Los Queues es lo mejor para pasar datos de un ciclo a otro sin que tengas perdida de datos, estos son como FIFOs

 

Espero sea de gran ayuda esto

 

Saludos

Hiram Hernández

Project Engineer 

CIDESI

0 kudos
Mensaje 5 de 5
4.706 Vistas