Discusiones sobre Productos NI

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

comparar valores de una señal en un tiempo determinado

¡Resuelto!
Ir a solución

buenas tardes amigo.

les quiero comentar mi problema, espero y me entiendan, mi proyecto trata de dos sensores que me comparan tres valores detectan el ruido,  el que mayor detecten encendera, los sensores en la programacion, utilizo dentro de un case estructure dentro de el comparo 3 veces cada 500 ms  en en cual llame cada case pico 1 2 y 3, que al compararlo en el case el que me detecte mas alto del umbral que le estipulo encendera el foco este proceso lo repetira siempre. pero veo que mi diseño el shift no me guarda ningun valor .

 

mi duda es que otro metodo puedo utilizar , o como puedo mejorarlo , solo deseo que los valores que compare lo guarde y lo compare .

saludos y espero su pronta respuesta ya que estoy algo oxidado desde la universidad. aqui le pongo mi vi de prueba. 

 

 

0 kudos
Mensaje 1 de 7
3.086 Vistas

Hola Eduardo,

No me quedó muy claro el objetivo de tu aplicación. ¿Estás tratando de comparar 3 valores de 3 sensores cada 500 ms?

De ser así, primero que nada, estás haciendo tus comparaciones cada 1000 ms, no cada 500 ms.

Por otra parte, veo que estás utilizando enums con las palabras "Uno", "Dos" y "Tres", sin embargo si entras a revisar los valores correspondientes, están de la siguiente manera:

Items                       Values

Uno                               0

Dos                               1

Tres                               2

 

¿Es esto correcto? Por ejemplo en la segunda comparación del primer case structure, tu valor máximo puede llegar hasta dos, ya que sumas 0+1+(Resultado de la medición), por lo tanto NUNCA se va a cumplir tu condición de que la suma sea mayor que dos y el foco estará apagado.

Por otro lado, en la tercera comparación de tu primer case structure, estás haciendo una suma de 2+2+(Resultado de la medición). Por lo tanto, tu comparación SIEMPRE va  ser mayor que dos y el foco siempre estará prendido.

 

En tu segundo case structure se presenta la misma situación que en el primero.

No creo que el problema de tu código esté relacionado a que los "Shift Registers" no te estén guardando valores, sino a lo que te mencioné anteriormente.

 

Espero haberte ayudado, si tienes dudas solo responde a este mensaje 🙂

 

Staff Technical Support Engineer
National Instruments
0 kudos
Mensaje 2 de 7
3.049 Vistas

gracias limas por tu rápida respuesta . 

disculpa por no explicarlo bien , lo que deseo es cada cada cierto tiempo por ejemplo 500ms , guarde o almacene el valor de cada sensor, son dos sensores de sonido que lo utilizare para saber de que dirección viene una ambulancia(izq o der)  por ejemplo , 

 

500ms --------1

1000ms-------1

1500ms-------0

 

lo almacene y compare     2 ❤️  == false

así que deseo obtener cada 500ms un valor dentro de 5 seg o 3 seg y se repita o reinicie por ejemplo,

500ms, 1000ms, 1500ms  -----sumar 1--1--1 =3, ------comparar 3>=3 ,y volver a detectar y almacenar repetir el procedimiento.

 

 si es mayor enciende foco si no no enciende. así que el sensor que detecte mas valores sabre que viene de tal dirección espero y me entiendas, 

 

así es tienes razón en todo lo que dices , te entiendo no hace lo que deseo, y esta mal mi diseño.

 

que otra idea me recomendarías o otra estructura utilizar para poder almacenar valores del sensor y luego compararlas, gracias y saludos.

0 kudos
Mensaje 3 de 7
3.047 Vistas

Te recomiendo cambiar los Enums por constantes numéricas para que así elimines el problema de que los valores estén mal relacionados. Por ejemplo: En vez de poner un "Uno" en el Enum y mandarlo al Shift Register, pon una constante numérica, un uno, de tipo U16. Haz lo mismo para el 2 y el 3. De esa manera eliminarás el desfase y podrás realizar las sumas correspondientes 😉

Staff Technical Support Engineer
National Instruments
0 kudos
Mensaje 4 de 7
3.043 Vistas

orale, asi es empieza de 1 , nunca me imagine con algo tan facil se resolviera ese problema , rayos!

 

y una ultima pregunta limas disculpa, como puedo almacenar los valores , ya vi mi error que el compound aritmetic solo almacena los valores una vez y luego empieza de nuevo , no guarda los 3 valores que deseo para luego sumarlos y compararlos, que procederia en ese caso.

 

se podria utilizar la estructura Condition Verdad?

 

 

0 kudos
Mensaje 5 de 7
3.041 Vistas
Solución
Aceptado por Eduardo729

Lo que se me ocurre que puedes hacer, es utilizar shift registers. El resultado de Compound Arithmetic lo mandas a un shift register. Y el shift register del lado izquierdo lo conectas al mismo Compound Arithmetic. De esa manera vas a ir almacenando y sumando los valores anteriores con los actuales. ¿Esa era tu duda?

 

Si logré ayudarte, no olvides marcar el comentario como solución 🙂

Staff Technical Support Engineer
National Instruments
0 kudos
Mensaje 6 de 7
3.033 Vistas

muchas gracias limas por tu rapida respuesta.

 

gracias a tu idea se me ocurrio , que en el mismo compound aritmetic  agregar una variable mas que es la del mismo shift register del sensor, el cual me guarda los valores, y se repite el ciclo que como deseo y esta sensando tres valores cada 1500 ms,

te lo agradezco mucho que tenia batallando como 3 semanas muchas gracias a ti y a la comunidad.

 

saludos de mexico y mucho exito.

 

lml

Mensaje 7 de 7
3.028 Vistas