le 03-20-2019 10:16 AM
Bonjour,
Je développe un programme temps réel. Dans la partie RT j'utilise des variables partagées.
L'une d'entre elle me pause un soucis. Celle ci est composé d'un tableau de cluster, représentant une "recette" (chaque cluster représente une étape de la recette). Elle est configuré en mode publié sur le Réseau, FIFO RT activé, de type Un seul element, sans buffer.
Cette variable partagée est utilisée à deux endroits, dans le corps principal de mon VI RT et dans un sous VI RT, qui sera chargé d’enchaîner les différentes étapes.
Le tableau recette peut avoir un nombre variable de Step, lors de l'initialisation de ma VP, pas de soucis je retrouve ma recette complete ( qui peut allé jusque 25 étapes). Par contre dans mon sous VI, lorsque je place une sonde sur cette même VP, je n'ai que 2 Step.
Ma question est donc Pourquoi ? Ai-je mal configurée ma VP ?
Résolu ! Accéder à la solution.
le 03-20-2019 11:19 AM
peut être une configuration de la bufférisation
le 03-20-2019 11:57 AM
Je me suis poser la question du buffer et essayé.....sans grand succès.
le 04-26-2019 03:37 AM
Problème solutionné. Merci au support NI (Salah-Eddine ISMAIL).
Concernant mon problème de transfert de données via les Variables Partagées sur le Réseau (Network Shared Variables), il se trouve qu'il n'est pas possible de transférer plus de 2 données de types tableau de cluster via les NSV. Je ne saurais trop dire pourquoi, mais c'est comme cela qu'elles ont été construites.
L'alternative trouvée : la plus simple est de passer par les variables globales ou bien des notificateurs.
En utilisant ces modes de transfert là, cela fonctionne sans soucis.
Les NSV RT FIFO sont en général utilisée pour conserver le déterminisme de l'application lors du transfert des données, dans mon cas les autres mode de transfert fonctionneront très bien.
le 03-26-2021 05:51 AM
Bonjour,
Je reviens vers vous puisqu'il semble que vous ayez trouver une alternative via les variables globales.
J'ai créé mes variables globales côté Host et il semble qu'elles sont inaccessibles sur le RT. De fait, je ne comprends pas de quelle façon transférer des tableaux de cluster de mon RT à mon Host.
Comment faites-vous pour écrire sur des variables globales sur une cible RT et lire ces mêmes variables côté Host ?
Auriez-vous des conseils supplémentaires pour les intégrer à mon code ?
Merci d'avance
03-27-2021 03:04 AM - modifié 03-27-2021 03:06 AM
Bonjour Théo,
Les variables globales n'adressent pas la problématique d'échange de données entre deux cibles d'exécution (RT et Host, ici). Les globales s'appuient sur le maintient en mémoire d'un VI un peu particulier (sans diagramme) et aux nœuds d'accès aux contrôles qui y sont exposé pour partager des informations depuis un même "espace mémoire". La portée de ces globales est donc celle de l'application dans laquelle elles sont instanciées.
Ce qui se passe en mémoire de votre application côté RT n'est pas accessible depuis le Host, et réciproquement. Je dirais même que ce qui se passe dans "l'espace mémoire" d'une application n'est pas sensé être accessible à une autre application, y compris sur une même machine.
Donc pour communiquer entre votre cible RT et le Host, il va falloir passer par le réseau. Les variables partagées sont une option, qui à le mérite d'être assez simple à mettre en œuvre. Vous définissez un jeux de variables sur la cible, qui seront déployées sur le moteur de variables partagées de la cible RT, et ainsi rendues accessible via le réseau depuis le Host. Reste à construire le code pour surveiller (pooling) ces variables et réagir en fonction coté RT. Et à jouer avec ces variables depuis le Host.
Il existe également d'autres options. Je pense par exemple au Simple Messaging (STM) Communication Library for LabVIEW que j'ai eu l'occasion d'utiliser plusieurs fois, un peu costaud (il faut prendre le temps de se l'approprier), mais je le trouve très bien.
Tout dépend de ce que vous souhaitez faire de ce tableau de cluster. L'envoyer une fois pour paramétrage de l'application de la cible ? Périodiquement ? Qu'y aurait-il d'autre à faire transiter comme informations ? Est-ce que le pooling côté RT suffit à adresser vos besoins, ou est-ce que vous avez besoin de quelque chose de plus "efficace", qui ne réagit qu'à la réception d'un message ?
Cordialement,