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.
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.
el 11-30-2009 10:41 AM
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
¡Resuelto! Ir a solución.
el 12-01-2009 04:50 AM
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! 😉
el 12-01-2009 07:28 AM
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.
el 12-01-2009 07:47 AM
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
el 12-01-2009 09:03 AM
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.
el 12-02-2009 02:46 AM
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.