Discussions au sujet de NI LabVIEW

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

Duplication VI

Bonjour,

J'ai actuellement un VI qui pilotage l'envoi des données sur un bus numérique puis receptionne les réponses.

Je voudrais savoir si il existe une possibilité pour "dupliquer" ce que fait actuellement le VI.

 

Je m'explique actuellement j'envoi et receptionne sur un BUS. Je voudrais pouvoir le faire sur un deuxième de façon simultanée.

 

Concernant les données d'entrées il s'agit exactement des mêmes à envoyer sur les deux bus. Concernant les données d'entrées du VI, la seule variable qui change est celle indiquant le numéro du bus.

Et pour les données en sortie (reception du bus), la elle doivent-être toutes décorrélées.

 

J'ai réussi à faire ce que je voulais en copiant collant l'ensemble du diagramme. Mais cela à pour conséquence d'avoir l'ensemble des données d'entrées en double et refaire l'ensemble des liens en supprimant les doublons. 

 

Auriez-vous connaissance d'une manière plus adéquate de faire ?

 

Merci beaucoup pour votre aide.

Alexis.

 

 

 

0 Compliments
Message 1 sur 6
885 Visites

Bonjour, 

 

En LabVIEW, tu as comme dans tous les languages de programmation, l'opportunité de crée des sous fonction. Ici on les nommes des Sous VI.

 

Un VI (fonction) est constitué lui même d'autre fonction qui sont des sous VI.

 

Cela permet ainsi de réutiliser du code plus tard dans d'autre application et par d'autre personne, améliore la lisibilité de ton code, facilite les évolutions et la maintenances. 

 

Pour créer des fonctions tu peux partir :

- d'une page blanche

- de la sélection d'une portion de code puis créé un sous VI dans le menu d'édition 

- sauvegarder sous... 

 

Tu pourras ainsi réutiliser le même code en changeant juste le paramètre d'entrée. 

 

Pour gérer l'ensemble du code généré lors de nos développement, on le regroupe dans des librairies et des projets.

 

Au vu de la question, j'imagine que tu débute en LabVIEW et en programmation ?

Si oui dans ce cas je te conseil de te rapprocher de ton entourage pour t'accompagner et te former, chercher des ressources en lignes. Etc. 

 

Par exemple un point d'entre possible : https://learn.ni.com/learn/article/labview-tutorial

 

Bon courage et bonne continuation 

0 Compliments
Message 2 sur 6
863 Visites

Merci pour la réponse. Je connais les sous-VI pour en utiliser dans mon VI actuel. Ma question était plutôt de savoir si il existait un moyen très simple de le faire afin d'éviter au maximum d'intervenir dans le VI actuel (comporte bcp de terminaux donc obligé de faire plusieurs sous-VI). Mais je pense que cela est inévitable.

 

Pour résoudre mon problème, j'avais commencé par ouvrir deux fois l'application pour que chacune d'elle commande une sortie. Mais les deux applications rentrée en conflit pour contrôler le port USB (une seule prenait la main).
J'ai ensuite compilé le même VI deux fois dans la même .EXE et cela a résolue le problème de conflit USB. L'application ouvre les deux VI et j'arrive à contrôler les deux sorties avec chacunes sont VI.

Mais cela m'oblige à configurer les données d'entrées deux fois à chaque fois.

 

Je pense que je vais devoir si je souhaite avec un seul VI, modifié celui-ci.
Merci pour votre réponse.

Alexis.

0 Compliments
Message 3 sur 6
844 Visites

Bonjour,

As-tu regardé du côté de la programmation objet?

Une fois fait tu peux instancier 2 objet avec des configuration différentes.

Bonne journée

0 Compliments
Message 4 sur 6
839 Visites

Si j'ai bien compris tu souhaites effectuer deux fois la même opération en parallèle mais avec un paramètre en entrée différent.
Pour cela il est possible d'utiliser la réentrance que l'on retrouve dans les propriété du VI. On peut ainsi lancer le même vi plusieurs fois en parallèle avec des entreée différentes
Cela défini comment LabVIEW gère le fait d’exécuter deux fois la même fonction.
L'aide sur ces fonctions expliquera mieux que moi comment cela fonctionne.

0 Compliments
Message 5 sur 6
823 Visites

Bonjour,

 

@ipi : Je comprend mieux ton besoin.

 

 @louis57 : concernant ta proposition : 

 

As-tu regardé du côté de la programmation objet?

Une fois fait tu peux instancier 2 objet avec des configuration différentes.



Je rejoindrais celle de @didje007 : L'OOP seul ne permettra pas l'appel en simultanée a la même fonction.

 

Pour ce faire 2 options :

- Via les propriétés du VI dans l'onglet "Exécution"

 

Loc_fr_0-1682949279064.png

 

En choisissant selon les besoins l'option "Shared clone reentrant execution" ou bien "Preallocated clone reentrant execution".

 

- Via un appel asynchrone au VI avec l'option x80 :

 

Loc_fr_1-1682949516297.png

 

Disclaimer :

- Dans tous les cas il faudra que tu lises l'aide attentivement

- La configuration du VI de plus haut niveau ne suffira pas. Il faudra envisager de faire une passe sur toutes les fonctions susceptibles d'être appelées en simultanées pour les configurer soit en "Shared clone reentrant execution" soit en "Preallocated clone reentrant execution"

- Il faudra faire attention à l'utilisation de mémoire partagées tel que des FGV, DVR, Queue, références en tous genre...

- Dans le cas d'utilisation a des ressources partagées, il faudra faire attention à leurs cycle de vie et les maintenir en vie tant que tes VIs en auront besoin et faire attention a ce que les accès concurrentiels ne posent pas de problèmes.

- Le débogage de fonctions configurées comme telles est plus difficile car il faut accéder aux clones en cours d'exécution.

 

Pour ce faire : 

Une fois sur ton dans ton VI, il faut naviguer dans le menu "View", puis "Browse Relationship" et enfin "Reentrant Items" et choisir le clone qui t'intéresse.

 

Loc_fr_2-1682950149370.png

 

En espérant que cela t'aide à avancer.

 

Loïc

Message 6 sur 6
786 Visites