Real-Time Measurement and Control

cancel
Showing results for 
Search instead for 
Did you mean: 

Real time task synchronization

I am using LabVIEW real time and I want to "trigger" a lower priority task at the end of the highest priority task if it isn't already done. What is the best solution ? I have read somewhere on NI site that the synchronisation palette doesn't guarantee determinism but unfortunately the real time fifos do not provide a blocking read call. Is there a potential real time problem when using occurences ? I would just like a simple deterministic mechanism to wake up a task if it isn't already awake.

Thanks in advance.
0 Kudos
Message 1 of 4
(3,571 Views)
Bonjour,

Ce forum étant en français, je vais vous répondre en français.

La meilleure façon de préserver le déterminisme d'une application RT est en effet de programmer "propre".
Le moyen le plus simple et le plus efficace dans LabVIEW pour séquencer et donc synchroniser différentes tâches consiste à se baser sur le concept de flux de données intrinsèque à LabVIEW. Un VI n°1 réglé en priorité critique peut s'exécuter puis un VI n°2 réglé en priorité normale peut s'exécuter une fois le VI n°1 est terminé simplement à l'aide du flux de données. Pour cela, vous pouvez câbler les 2 VIs entre eux via leurs entrée/sortie d'erreurs ou tout simplement utiliser une structure séquence à 2 étapes.

La problématique est différente si VI n°1 s'exécute en parallèle avec VI n°2.

Cordialement.
Matthieu Gourssies
National Instruments France
0 Kudos
Message 2 of 4
(3,558 Views)
merci pour cette réponse. Le problème vient en effet de la nécessité d'exécuter les taches en question en parallèle.
Je cherche donc un moyen de séquencer ces taches compatibles avec les contraintes "temps réel". L'inconvénient lié à l'utilisation des RT-fifo vient de l'absence d'une fonction de lecture permettant de sortir le thread associé de la liste des threads prêts à être executés et de le rendre à nouveau prêt dès la réception d'un nouveau message. Cela permettrait de controler le séquencement avec un choix approprié des priorités. Ma question porte en fait sur les inconvénients potentiels liés à l'utilisation des objets de la palette de synchronisation depuis une tache de priorité critique en environnement temps réel.

Merci d'avance.
0 Kudos
Message 3 of 4
(3,556 Views)
Monsieur,

Je vous invite à consulter la doc ci-dessous pour plus d'infos sur comment LabVIEW gère les priorités lorsque plusieurs VIs s'exécutent en parallèle.
* How Does Priority Affect the Execution of VIs?
http://digital.ni.com/public.nsf/websearch/84081F249CEF7AB7862569450074168C?OpenDocument
* How is Priority of Execution Assigned when Loading and Executing Multiple VIs in LabVIEW?
http://digital.ni.com/public.nsf/websearch/44AB5BEDC20CB43C862565D4000D9885?OpenDocument
Les RT FIFOs sont le meilleur moyen pour transférer des données entre threads (typiquement, un thread critique avec un thread normal ou lower).
Les RT FIFOs ne cassent pas le déterminisme d'une application RT contrairement aux variables locales ou globales.
La gestion de l'exécution est entièrement faite par le Scheduler du moteur LabVIEW RT. Vous n'avez pas le contrôle sur son mode de fonctionnement.
Vous n'avez pas du tout intérêt à synchroniser avec les outils de LabVIEW une tâche critique RT avec une tâche non critique car vous allez forcément casser le déterminisme de l'application RT. Vous pouvez cependant synchroniser des portions de code du VI non critique (occurence pour déclencher du code sur génération d'un événement logiciel, rendez-vous pour synchro démarrage multi-VIs, sémaphores ...).

Cordialement.
Matthieu Gourssies
National Instruments
0 Kudos
Message 4 of 4
(3,549 Views)