Discusiones sobre Productos NI

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

entrada análoga y digital - salida digital

¡Resuelto!
Ir a solución

Hola!

Tengo la tarjeta NI USB 6210 y trabajo con el LabVIEW 2010 SP1.

Anteriormente pregunté como trabajar con 2 entradas (1 análoga y otra digital) y 1 salida (digital). Esto lo he logrado.

El problema es que la programación se me está complicando bastante para lo que deseo realizar. Les explico:

Debo medir continuamente una señal análoga y una señal digital. La señal análoga proviene de mi medición, la señal digital la leo ya que necesito guardar datos cuando esta se active.

Luego de medir estos datos, necesito hacer una comprobación. Si los datos están dentro de lo permitido, OK. Si no, necesito prender un LED (para esto es la salida digital), pero este LED necesito que parpadee sólo por 3 segundos. Aquí se me complica el problema...

Lo que hago para que el LED parpadee, es generar una onda cuadrada y hacer una comparación, si es mayor que 0 es V, en caso contrario, es F. Así genero un tren de pulsos V-F que hacen parpadear el LED. El tema ahora es que deseo que estos pulsos se activen sólo durante 3 segundos, y luego se apaguen, para luego volver a encenderse por 3 segundos si se da una condición...

Alguien podría ayudarme a lograr esto?

Muchas gracias de antemano,

Saludos!

 

0 kudos
Mensaje 1 de 9
4.314 Vistas

Que tal Samgut,

 

Mira, no estoy seguro si tu tarjeta tiene esto soportado, pero lo checaré en un momento.

 

Sin embargo, te dejo este ejemplo:

 

https://decibel.ni.com/content/docs/DOC-11451

 

Este ejemplo lo que hace es que cuando tiene en alto o bajo la señal de pause trigger no adquiriras en tu tarea DAQ.

 

Puedes intentarlo!! Espero tus comentarios y busco mientras otra manera de hacerlo!!

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
0 kudos
Mensaje 2 de 9
4.308 Vistas

Hola Elías,

Muchas gracias por tu ayuda, pero no entiendo de que forma puede ayudarme a solucionar mi problema.

Te lo explico nuevamente en forma resumida: Necesito activar un LED por una salida digital, sólo por un tiempo determinado (en mi caso es de 3 segundos). También deseo que ese LED, mientras está activado, parpadee (esto ya lo he logrado). Lo que aún no puedo lograr es que mi salida esté activa sólo por 3 segundos.

Espero puedas guiarme en esta tarea,muchas gracias de antemano.

Saludos!

0 kudos
Mensaje 3 de 9
4.301 Vistas

Una disculpa, entendí que cuando entrara el pulso tomarias datos.

 

Sobre lo que quieres hacer de temporizar hay dos maneras, la primera, si la temporización no debe ser tan exacta, es decir, que puede fallarte por unos cuantos milisegundos, puedes hacer temporización por Software.

 

Para temporizar por software lo que debes hacer es escribir el pulso digital, después cablear el cluster de error a una stacked structure (La que parece cinta de video) y ahí debes poner la función wait con un 3000 calbeado del lado izquierdo. Aquí probablemente no sean 3000 ms serán 3005 o algo asi. Que si no es tan importante el tiempo exacto pues te puede ayudar. Sólo no olivdes después de los 3000 ms debes de escribir un falso en esa misma linea!

 

Ahora, si es indispensable que sea 3000 ms, lo que puedes hacer es utilizar una salidad de contadord e tu tarjeta.

 

Debes configurar tu Canal Virtual DAQmx como CO Pulse Time. Después del play en el VI de write te da la opción de cuanto tiempo quieres que dure en high y cuanto en Low, ahi puedes ponerle los tres segundos en high.

 

Revisa estas dos opciónes a ver cual te acomoda más!!

Luis Elias
NI VeriStand and HIL Product Manager
0 kudos
Mensaje 4 de 9
4.299 Vistas

Hola Luís,

Gracias por tu respuesta. La temporización no es necesario que sea tan exacta, así que estoy tratando de hacerla por software.

Intenté como tu dices pero el wait al estar dentro del ciclo while, hace que toda mi progamación demore 3 segundos. Podrías explicarme un poco más, por favor?

Muchas gracias de antemano,

Saludos!

0 kudos
Mensaje 5 de 9
4.293 Vistas

Que tal Samgut,

 

Nó había pensado en eso, lo que yo te recomendaría entonces sería utilizar el expres VI llamado Elapsed time VI. Este lo que hace es que cuenta tiempo, pero no afecta la ejecución del programa.

 

PEro tendrías que utlizar alguna lógica con un case para mandar o dejar de mandar dicho pulso por un tiempo predeterminado (3 seg).

 

Ahora, si tienes algun contador libre, sería mucho más fácil. Aunque me da la impresión que también deberás de utilizar un case para evitar que se escriba o se escriba cada vez que tu quieras mandar el puslo.

 

Dejame pensarle un poco y te comento como lo haría!

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
0 kudos
Mensaje 6 de 9
4.290 Vistas

Que tal Samgut,

 

Nó había pensado en eso, lo que yo te recomendaría entonces sería utilizar el expres VI llamado Elapsed time VI. Este lo que hace es que cuenta tiempo, pero no afecta la ejecución del programa.

 

PEro tendrías que utlizar alguna lógica con un case para mandar o dejar de mandar dicho pulso por un tiempo predeterminado (3 seg).

 

Ahora, si tienes algun contador libre, sería mucho más fácil. Aunque me da la impresión que también deberás de utilizar un case para evitar que se escriba o se escriba cada vez que tu quieras mandar el puslo.

 

Dejame pensarle un poco y te comento como lo haría!

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
Mensaje 7 de 9
4.289 Vistas
Solución
Aceptado por el autor del tema Samgut

Hola Luís,

Te cuento que solucioné mi problema. Lo hice de la siguiente manera:

Introducí el "elapsed time" dentro del "case" en el que selecciono si quiero mandar la señal (control booleano). El "time has elapsed" lo conecte a una "compuerta NOT" y luego lo mandé a un "shift register". El "shift register" con el que comienza el ciclo, lo uní al selector de "case" (el control booleano) por medio de una "compuerta OR".

Así, mientras no han pasado los tres segundos, el "elapsed time" manda un F, que transformo a V con la compuerta NOT y luego este mismo "V" me sirve para mantener abierto el "case" que está enviando la señal. Una vez que ha transcurrido el tiempo, el "elapsed time" manda un "V" que transformo a "F", y así se cambia el estado del "case", y por ende se acaba el pulso.

Gracias por tu ayuda Luís. Si crees que se puede mejorar de alguna manera, coméntame por favor.

Saludos!

0 kudos
Mensaje 8 de 9
4.287 Vistas

Pues de hecho es muy buena solución, lo único que debes garantizar es que se comienze el Elapsed Time cuando entres al true del case.

 

La primera vez funcionará bien, pero el elapsed sigue corriendo aunque no te encuentre en el case. Lo que te recomendaría hacer para eso un reset que cuando estes en el falso le pongas un T a un shift register y cuando estes en el true (pulso) mandes un F para que no se te resetee continuamente.

 

Pero la verdad me gustó mucho tu solución!!

Luis Elias
NI VeriStand and HIL Product Manager
0 kudos
Mensaje 9 de 9
4.285 Vistas