el 04-23-2014 03:33 AM
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.
¡Resuelto! Ir a solución.
el 04-25-2014 10:08 AM
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 !
el 04-25-2014 11:55 AM
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.
el 04-25-2014 12:57 PM
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.
el 04-25-2014 05:27 PM
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