Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

multithreading and states machine

Bonjour,
bon voila mon problème est un petit peu compliqué.
Structure de mon programme :
un fichier main avec une machine à état.
un état de ma machine attend l'appui sur un bouton pour lancer 2 sous vis en multithread (un d'acquisition et un autre de traitement d'interface utilisateur).
jusque là tout va bien, le multithreading fonctionne correctement pour ces deux sous vis.
petite precision : le sous vi de traitement d'interface possède lui meme sa machine à états.

venons en maintenant au problème, mon interface principale est composée de deux onglets (peu importe les noms)
chaque onglet possède un bouton d'activation comme celui pour lancer les deux sous vis.
et je souhaites pouvoir lancer des taches annexes aux 2 sous vis fonctionnant simultanément en cliquant sur le bouton de l'autre onglet mais le soucis c'est qu'un des vis possède son execution dans sa machine a états et ceci est bloquant pour le reste.

je ne peux meme pas utiliser 2 sous vis simultanément qui appelleront a leur tour 2 sous vi simultanément a l'appui du bouton car j'ai trop de contrôle sur ma face avant et 28 E/S d'un sous vis seraient insuffisantes.

c'est assez embetant et complexe mais je posterais mon application si vous ne voyez pas ou je veux en venir

en résumé , j'ai une machine a état comprenant un état avec 2 conditions sur 2 boutons lancant chacune 2 sous vi simultanés et je souhaites pour voir lancer les 4 sous vis en meme temps.

 

--------------------------------------------------------------------------------------------------------------------

Laurent Gendre
Etudiant Polytech' Nice Sophia Antipolis
SGL CARBON EUROPE
0 Compliments
Message 1 sur 6
3 788 Visites
Bonjour Laurent,

Sur le principe, ok, mais sans vos fichiers, il est difficile de voir comment vous procédez et de vous dire quoi faire (ou ne pas faire).

En attendant l'envoi de vos VIs, un conseil, faîtes très attention à la façon dont vous structurez et documentez votre code: plus vous êtes lisible, plus il sera facile pour les utilisateurs du forum de vous aider.
0 Compliments
Message 2 sur 6
3 780 Visites
bon voila j'ai modifier rapidemment mon sous prog pour qu'il fonctionne sans la machine en aleatoire.
tu as tout mon projet en fichier zip ci joint.
ca ne serta rien de t'attarder sur le projet mais il faut que tu ouvres le fichier main.vi et que tu regardes a l'etape 1 de ce fichier (normalement mes commentaires sont explicites).

ps :
si vraiment tu veux executer le programme
1 cliques sur bp rotap on
2 cliques sur acquisition
3 choisis la durée
4 essaie de changer d'onglet et d'effectuer une action pdt ce temps
5 reviens sur le bonne onglet et cliques sur fin tamisage
6 cliques sur debut mesure
7 cliques sur un bouton dessus le tableau
8 cliques sur une case a cocher (dans les premieres jai pas cablé les dernieres)
9 enregistres
10 fichier > quitter

reps : si vraiment ca vous embetes, laissez tomber, j'arriverais bien a trouver une combine
--------------------------------------------------------------------------------------------------------------------

Laurent Gendre
Etudiant Polytech' Nice Sophia Antipolis
SGL CARBON EUROPE
0 Compliments
Message 3 sur 6
3 776 Visites
Une machine d'état n'est pas adaptée à un fonctionnement parallèle: cette structure permet de gérer l'enchaînement de tâches séquentielles, s'éxécutants l'une après l'autre. Par exemple, une étape pour l'identification d'un utilisateur avec login et mot de passe, une étape de paramétrage d'une acquisition, et une troisième étape de traitement des données et d'enregistrement. Le tout est géré par un VI menu avec plusieurs boutons, pour appeler l'une ou l'autre des étapes, en fonction des précédentes.

Dans votre cas vous voulez une exécution parallèle; câblez en parallèle! Faîtes deux boucles, l'une pour ROTAP, l'autre pour ALPINE. Ces boucles peuvent, si le fonctionnement de votre application le nécessite, contenir une machine d'état chacune. LabVIEW gérera de lui même les tâches en parallèle (Using LabVIEW to Create Multithreaded Applications for Maximum Performance and Reliability >> Exampl...).

Si certaines variables (sous forme d'indicateurs ou de commandes) ont besoin d'être lues dans les deux boucles, utilisez des variables globale, ou des variables fonctionnelles. Les données pour les deux tâches sont elles indépendantes?

Autres remarques d'ordre général:
  • pour une alternative vrai/faux, recherchez dans la palette fonction le VI Select (nom anglais), plus léger à utiliser que la structure case.
  • câblez toutes vos E/S d'erreurs: vous saurez d'où elles proviennent et quelle sont elles. Cela peut également vous permettre de donner un ordre d'exécution à vos VIs (LV attend que l'ensembles les entrées soient prêtes/disponibles pour entrer dans un VI).

Tenez-moi au courant de vos avancés.
0 Compliments
Message 4 sur 6
3 766 Visites
un grand merci,
je ne savais absolument pas que les boucles s'executaient en parallele dans un mm fichier.
cela m'aide enormement pour mes taches.
pourquoi chercher compliqué alors que c'etait si simple Smiley tirant la langue
sinon pour les structures etats, je sais bien qu'elles sont utilisés pour la succession d'actions.
et sinon pour passer mes variables j'utilise mes controles d'affichage, de toute maniere je dois ecrire dedans donc pourquoi ne pas venir y lire (j'espere que je n'aurais pas une lecture en meme temps qu'une ecriture bien qu'improbable).

--------------------------------------------------------------------------------------------------------------------

Laurent Gendre
Etudiant Polytech' Nice Sophia Antipolis
SGL CARBON EUROPE
0 Compliments
Message 5 sur 6
3 757 Visites
je continue sur ce topic pour ne pas en créer un nouveau a moins que je n'ai pas de reponses.
mon vi principal se compose d'un noeud de methode pour reinitialiser tout les controles.
mais maintenant que j'ai plusieurs taches en meme temps, lorsque je reinitialise je veux que ce ne soit pas tout le vi mais juste les controles de l'onglet, est ce possible ??
sinon je vais devoir cabler 20 controles voir plus pour mettre tout à 0.
--------------------------------------------------------------------------------------------------------------------

Laurent Gendre
Etudiant Polytech' Nice Sophia Antipolis
SGL CARBON EUROPE
0 Compliments
Message 6 sur 6
3 726 Visites