Discusiones sobre Productos NI

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

tiempo constante de un proceso

Si tengo un proceso que dura cerca de 3ms en completarse y quiero q se repita exactamente cada 10 ms, cual es la mejor forma en que puedo programarlo?

El proceso esta dentro de un bucle while, y segun tengo entendido, con poner un Wait until next ms multiple valdria, pero me han comentado q es mejor si este Wait lo pongo dentro de una estructura Sequence dentro del propio while y hago pasar por ahi las conexiones del proceso.

Es necesaria o aconsejable la estructura Squence?

0 kudos
Mensaje 1 de 5
3.842 Vistas

Que tal atme01.

La función del Wait until next ms multiple consiste en forzar a que un proceso o una iteración de un ciclo en LabVIEW dure exactamente el tiempo que se le asigna mediante un valor conectado a dicho VI. Si tu proceso dura 3 ms, el Wait until next ms multiple hace que la iteración completa dure 10 ms; por otro lado si tu proceso dura 13 ms, el VI lleva el tiempo de la iteración al siguiente múltiplo, es decir 20 ms.

La estructura Sequence permite romper con la estructura convencional de flujo de datos de LabVIEW, lo que provoca que ciertas partes de tu código se ejecuten en el orden que tu deseas, y no como vayan teniendo datos disponibles. 

Si colocas tu código a ejecutar en un frame de la estructura sequence, y en el siguiente frame colocas un Wait until next ms multiple, la iteración completa de tu código se tardará el tiempo que indiques al wait; esto sucede igualmente cuando pones tu código sin la estructura.

La diferencia entre tener la estructura y no tenerla es asegurar la secuencia de ejecución de tu código, y no permitir que esté sujeta a la disponibilidad de datos, que es el default de LabVIEW.

Como puedes ver, no es mejor o peor tener la estructura dentro de tu ciclo, sino que simplemente depende de como quieras temporizar.

Cualquier otra duda aqui estamos.

Saludos.

________________________________________________________
Carlos A. de los Santos
Ingeniero de Aplicaciones,
NI México.

www.ni.com/soporte
Mensaje 2 de 5
3.833 Vistas

Antes de nada muchas gracias, pero creo q no me he explicado bien.

 

La solucion que me haban propuesto y a la que no veo razon alguna es poner dentro del bucle donde está el proceso (el que dura al rededor de 3ms), osea dentro del while crear una estructura sequence (con un solo frame), donde pondre el wait until next ms multiple, y hacer que el proceso pase por ahi antes de que vuelva a iniciarse el bucle de nuevo. Segun pienso yo esto hara que el bucle tarde los 3ms mas el tiempo que ponga al Wait, cuando lo que yo queria era asegurar que el bucle se reiniciarse exactamente despues d elo que pusiese en el Wait until next ms multiple.

 

La estructura Sequence tiene sentido en este caso?

0 kudos
Mensaje 3 de 5
3.823 Vistas

Antes de nada muchas gracias, pero creo q no me he explicado bien.

 

La solucion que me haban propuesto y a la que no veo razon alguna es poner dentro del bucle donde está el proceso (el que dura al rededor de 3ms), osea dentro del while crear una estructura sequence (con un solo frame), donde pondre el wait until next ms multiple, y hacer que el proceso pase por ahi antes de que vuelva a iniciarse el bucle de nuevo. Segun pienso yo esto hara que el bucle tarde los 3ms mas el tiempo que ponga al Wait, cuando lo que yo queria era asegurar que el bucle se reiniciarse exactamente despues d elo que pusiese en el Wait until next ms multiple.

 

La estructura Sequence tiene sentido en este caso?

0 kudos
Mensaje 4 de 5
3.822 Vistas

Hola atme01,

La estructura sequence solo permite que el código se ejecute de manera secuencial, pero no actua como una estructura independiente en cuanto a temporización. Es decir, si tu código se tarda 3 ms y luego diriges los datos al interior de una sequence con un Wait Until Next VI de 10 ms, tu iteración completa tardará 10 ms. En pocas palabras, la estructura sequence no divide la temporización y en este caso particular, no tendría sentido. 

Si lo que quieres es hacer que tu ciclo tarde el tiempo del wait + el tiempo de tu código, en lugar de utilizar el Wait Until Next ms, utiliza el Wait (ms). Te anexo un VI para que compruebes lo anterior.

Cualquier duda seguimos en contacto.

________________________________________________________
Carlos A. de los Santos
Ingeniero de Aplicaciones,
NI México.

www.ni.com/soporte
0 kudos
Mensaje 5 de 5
3.809 Vistas