Our online shopping is experiencing intermittent service disruptions.

Support teams are actively working on the resolution.

Discusiones sobre Productos NI

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

tacometro

Hola:

Estoy intentando medir RPM de un motor, sobre el motor tengo un sensor que me entrega una onda cuadrada de 1 pulso por vuelta. Hice en siguiente el programa que ven abajo el cual toma 5 pulsos (5 revoluciones del motor) y mide el tiempo que tardó en hacer esas 5 revoluciones. Es decir que tengo fijo la cantidad de vueltas del motor y varia el tiempo.

El programa anda bien contando los primero 5 pulsos (figura)

 

figura 1

En la figura anterior (notar) simulo los pulso del motor con una llave booleana del mismo programa. 

El programa hasta aca anda muy bien, mide bien el tiempo uqe tarda en llegar los 5 pulsos. 

Pero cuando lo agrego el ciclo wileloop para que me mida las RPM del motor (siluladas por ahora) en forma contínua (ver siguiente figura) deja de medir bien el tiempo, siempre me arroja 0.004 o 0.003 cuando en realidad deberia indicar por ejemplo 7.84 segundos, o 9.53 seg.

 

fig 2

Desde ya muchas gracias.

PD.: les dejo el programa...

0 kudos
Mensaje 1 de 7
7.013 Vistas

Hola marcelo1986.

 

Revisé tu código y lo corrí tanto sin el while como con el while y no pude reproducir el comportamiento que mencionas. Te referías a que el valor en el indicador "x/y" siempre se va a 0.003 o 0.004 cuando corrias dentro de un ciclo While, correcto? Esto te sucede inmediatamente o después de un tiempo?

 

Te comento por que las funciones de Timer (ms) se quedan en el valor máximo (2^32) una vez que llegan a el, por lo que podría ser ese el problema.

 

Saludos.

Aldo H
Ingenieria de Aplicaciones
0 kudos
Mensaje 2 de 7
7.001 Vistas

Hola Aldo H:

Desde ya muchas gracias por tu ayuda.

Te comento que los pulsos llegan mucho antes que 2^32 milisegundos (2^32 milisegundos= 4294967296 milisegundos = 4294967.296segundos) los 5 pulsos que le cargo llegan en aproximadamente 10 segundos en la simulación y en la realidad son (como máximo) 116 pulsos por segundo (motor a 7000RPM entregando un pulso por cada RPM). Por ello uso como contador el canal de entrada rápido de 5 MHz que possee la USB 6009.

 

Probando encontré una solución provisoria que te la voy a comentar a ver si me ayudas vos o alguien a resolverlo... Lo que hice fué: probé correr el programa sin el ciclo wileloop, pero presionando la tecla RUN CONTINUO y ahi el programa anda prefecto, mide las RPM en forma contínua de 5 en 5 vueltas (pulsos en este caso)... El tema es que necesito que se corra con RUN; porque este programa va dentro de otro programa que corre bajo RUN. Es por ello que lo mas lógico sería poner un ciclo wileloop y listo... pero con el wileloop no me anda...

Saludos...

0 kudos
Mensaje 3 de 7
6.974 Vistas

Hola marcelo 1986.

 

Podrías anexarme el código con el ciclo while que no te funciona? Se me hace extraño ya que nunca logré reproducir el comportamiento que describiste.

 

Saludos!

Aldo H
Ingenieria de Aplicaciones
0 kudos
Mensaje 4 de 7
6.951 Vistas

Aldo H:

Acá te envío el código con el ciclo wile.

Abrazo

0 kudos
Mensaje 5 de 7
6.948 Vistas

Hola:

Otra consulta, correr los programas con RUN CONTINUOSLY genera algun problema? ya que el codigo anterior funciona muy bien con RUN CONTINUOSLY pero no funciona con RUN y un ciclo wile loop.

Saludos

0 kudos
Mensaje 6 de 7
6.923 Vistas

Hola Marcelo.

 

Una disculpa por la tardanza. Te comento que el código que me anexaste venía en blanco, no se si lo pudieras anexar nuevamente?

 

No habrá un problema en sí por usar el Run Continiously, aunque tendrás problema para integrarlo con el resto del código. También es menos eficiente que hacerlo con el ciclo while.

 

Saludos.

Aldo H
Ingenieria de Aplicaciones
0 kudos
Mensaje 7 de 7
6.873 Vistas