From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discusiones sobre Productos NI

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

Prioridad de ejecución de dos Timed Loop

¡Resuelto!
Ir a solución

Hola,

 

Quiero que en mi aplicación se ejecute una parte del código cada minuto y la otra parte cada hora. Para ello utilizo dos timed loop, pero

necesito que se cumplan ciertas características:

 

- Que la primera ejecución siempre sea la del loop minutal (lo he intentado cambiando el valor de prioridad pero no lo he conseguido).

 

- Que aunque al loop horario le toque ejecutarse, no lo haga si el loop inferior está en medio de una ejecución, es decir, que espere a que el

  loop minutal termine la ejecución.

 

Adjunto un vi (representativo de mi aplicación final), a ver si alguien me puede ayudar.

 

Muchas gracias

 

 

 

 

 

 

 

0 kudos
Mensaje 1 de 6
3.801 Vistas

Hola joan_c,

 

creo que en tu caso, lo mejor es que trates la ejecución del bucle como si se tratase del acceso a un recurso compartido. En este caso, la utilización de un semáforo para controlar la ejecución de los bucles puede ser la mejro opción ya que mientras se ejecuta un bucle, con el semáforo bloquea la ejecución del segundo bucle.

 

Ene stos enlaces puedes encontrar información sobre como utilizar los semaforos (semaphores):

 

http://digital.ni.com/public.nsf/allkb/A1BA7477550DBFDE862565BC006CD410?OpenDocument

http://zone.ni.com/devzone/cda/tut/p/id/4981

 

... aunque una buena manera de utilizarlos es mediante los ejemplos. Puedes encontrar ejemplos en LabVIEW y en estos enlaces:

 

http://zone.ni.com/devzone/cda/epd/p/id/4490

http://decibel.ni.com/content/docs/DOC-4309

http://zone.ni.com/devzone/cda/epd/p/id/5039

 

Salu2.

 

Remember kudos those who help! 😉

 

 

Mensaje 2 de 6
3.792 Vistas

Muchas gracias Sendia,

 

Los semáforos vienen de perlas para situaciones como ésta, adjunto el vi anterior con la inclusión de los semáforos por si pudiera ser de

utilidad. Para lograr que el timed loop con menor periodo se ejecute en primer lugar, he tenido que ponerle un offset de 2 segundos al

timed loop de mayor periodo.

 

Aunque lo que yo deseo en mi aplicación final, es que el segmento de código a ejecutar cada hora, no se ejecute hasta que haya pasado

como mínimo una hora, me explico, si al iniciar la ejecución de mi programa, se ejecuta casi inmediatamente el código a repetir cada hora

(este código envía una trama de información horaria) no tendrá demasiado sentido.

 

A ver si alguien me puede echar un cable o tiene alguna idea. 

0 kudos
Mensaje 3 de 6
3.789 Vistas

Hola joan_c,

 

no me ha quedado muy claro que es loq ue necesitas. Un bucle de tu código se va ejecutando cada 1 minuto... y en paralelo hay otro que se ejecuta cada 1 hora. La única dependencia que hay entre los dos es que no se pueden ejecutar los dos al mismo tiempo y en caso de que el bucle de 1 hora le toca ejecutarse, tendría que esperar hasta que terminase el bucle de 1 minuto. ¿Esto es así?

 

En este caso ¿la duda es de temporización?

 

Salu2

0 kudos
Mensaje 4 de 6
3.787 Vistas

Hola sendia,

 

Intentaré explicarme correctamente. 

 

Características que mi aplicación ya cumple:

 

- Consigo que un bucle se ejecute cada minuto y el otro cada hora.

- Si alguno de los dos bucles debe ejecutarse, no lo hará hasta que haya finalizado la ejecución del bucle paralelo (ambos bucles comparten datos, tanto de 

  lectura como de escritura, de ahí mi interés en esta cuestión).

- Al arrancar mi aplicación, el primer "timed loop" que se ejecuta es el correspondiente a minuto (gracias a la aplicación de un offset en el "timed loop" de

  mayor periodo).

 

Características adicionales que mi vi no cumple:

 

- Al arrancar mi aplicación, quiero que la primera ejecución del código dentro del "timed loop" horario, se haga una hora después del arranque del programa.

 

 

Para cualquier aclaración estoy aquí, muchas gracias sendia.

 

 

0 kudos
Mensaje 5 de 6
3.782 Vistas
Solución
Aceptado por el autor del tema joan_c

Hola de nuevo,

 

He depurado el código para que cumpla con los requisitos anteriores, ahora, la primera ejecución dentro del "timed loop" horario se produce una hora después del arranque de la aplicación, lo he conseguido con una simple comparación. 

 

No hace falta que el "timed loop" minutal sea el primero en ejecutarse, el cambio anterior propicia esta situación.

 

Adjunto el vi por si puede ayudar a alguien.

 

Gracias, un saludo.

0 kudos
Mensaje 6 de 6
3.752 Vistas