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.

Discussions au sujet de NI LabVIEW

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

Bloc qui met trop de temps à s'executer/Comment effectuer tâche en parallèle

Bonjour,

 

J'ai un petit problème sur mon programme.

Je developpe une IHM pour piloter un système. Grace à une structure à gestion d'évenement, je viens envoyer des commandes à mon système et au "time out" de la structure je recupère l'état du système ( en position, en mouvement, etc...).

Mon problème c'est que j'ai un bloc qui mets beaucoup de temps à s'executer (je ne contrôle pas ce bloc, il s'agit d'un bloc de librairie créé par un fabriquant), et le temps qu'il s'execute, ben mon time out n'est pas declenché et je n'ai pas l'état de mon système.

Je n'ai rien de câblé en sortie de ce bloc donc mon programme n'attend aucune info pour continuer.

 

Je ne sais pas comment résoudre ça. Peut-on effectuer deux tâches en //?

0 Compliments
Message 1 sur 6
2 901 Visites

Bonjour,


Oui il est possible d'exécuter plusieurs taches en parallèle.
Après la manière de faire va dépendre de plusieurs critères :

1- Besoin de synchronisation

2- Besoin de performance

3- Lien hiérarchique entre lien tache / Interdépendance.

Sans nous fournir plus de précision, et idéalement un bout de programme, il va être difficile de t'apporter de l'aide.

Cdt,
Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 2 sur 6
2 900 Visites

Bonjour,

 

Merci de ta réponse.

 

Désolé mais je ne peux pas pouvoir fournir un bout de mon programme.

Par contre c'est clairement un soucis de performance ici. En fait quand je vais envoyer ma commande au système en appuyant sur le bouton, le bloc s'execute jusqu'à la fin de la tâche et je ne peux plus rien faire en attendant, ni cliquer sur un autre bouton de mon IHM et surtout moi en parallèle, j'aimerais récuperer lors du time out l'état de mon système (je le récupère toutes les 0.1s).

 

En plus ce fameux bloc à un temps d'erreur de 60s=> si il n'est toujours pas en position au bout de 60s il se met en erreur.

Donc le jour ou j'aurais une erreur mon IHM sera bloquée pendant 60s....

0 Compliments
Message 3 sur 6
2 874 Visites

Bonjour,

Je pense qu'il faudrait que tu t'inspires de l'exemple de projet "Gestionnaire de messages dans une file d'attente" proposé lors de la création de nouveau projet. Il permet de parralléliser les actions de l'IHM et les actions de bas-niveau. Dans tous les cas, l'interface reste réactive si on se débrouille bien.

 

Ensuite oui il est difficile de te coneseiller sans un bout de code.

Bonne suite.

0 Compliments
Message 4 sur 6
2 871 Visites

Bonjour,

De ce que je comprends de ta problématique, il faut que tu passes sur une architecture Producteur/Consommateur avec machine d'état.

http://www.ni.com/white-paper/6363/fr/
Ainsi la boucle while qui va géré l'IHM sera toujours "disponibles" pendant que la tache consommatrice sera en cours d'exécution.
L'avantage, d'autre part, c'est que la FIFO va stocké les commandes opérateurs pour les dérouler à la suite de ton bloc qui prend du temps.

 

Cdt,
Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 5 sur 6
2 867 Visites

Ok merci je vais regarder tout ça.

0 Compliments
Message 6 sur 6
2 855 Visites