le 11-23-2016 09:30 AM
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 //?
le 11-23-2016 09:39 AM
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
le 11-24-2016 01:05 AM
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....
le 11-24-2016 01:27 AM
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.
le 11-24-2016 02:04 AM
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
le 11-24-2016 05:26 AM
Ok merci je vais regarder tout ça.