LabView: Passer de la valeur entre les boucles while
J'ai un vi avec deux infinie while. La gauche de la boucle lit les données à partir d'un appareil et des parcelles, le droit de la boucle appelle une DLL personnalisée et utilise la sortie pour piloter un autre appareil. L'appel de la DLL blocs pendant environ une seconde, de sorte que les deux boucles ne sont pas synchronisées*. Maintenant, je voudrais utiliser la valeur momentanée de la première boucle, en tant que contribution à la DLL dans le second. J'ai essayé tout les connecter - LabVIEW insère bornes à la boucle limites - mais alors la deuxième boucle ne s'exécute pas. (Si c'est important, le type de données est "dynamique de données" - une mesure de la tension). Comment dois-je faire?
(* En fait, à l'origine il n'y avait qu'une seule boucle, et le graphique seulement eu une mise à jour entre DLL appels, ce qui n'était pas satisfaisante.)
Vous devez vous connecter pour publier un commentaire.
C'est la norme de comportement, depuis la première boucle n'a pas fini de données, à la sortie de la porte n'est pas disponible pour la boucle suivante pour démarrer.
La méthode la plus rapide pour obtenir des données à partir d'une boucle en utilisant une variable locale:
Il existe plusieurs autres façons de répartir vos données, et les habitants pourraient travailler pour le moment, mais vous devrez les déplacer sur si la mise à l'échelle pour des applications plus importantes.
D'autres options sont les files d'attente (sans perte de qualité ou de non-lossless), ou déclarant, ou des variables globales, et si vous l'avance dans LabVIEW, vous pourrez venir avec vos propres schémas.
Ce que vous cherchez est un "Producteur Consommateur" de la boucle.
Il y a un modèle qui est livré avec le logiciel LabVIEW(Fichier >> Nouveau... >> VI >> à Partir du Modèle " >> Design Patterns) qui est un bon point de départ.
Aussi, plus d'infos ici:
http://zone.ni.com/devzone/cda/tut/p/id/3023
http://zone.ni.com/wv/app/doc/p/id/wv-1295
PS - la raison de la seconde boucle n'est pas exécutée est parce que d'un concept appelé "Flux de Données". Un nœud (votre deuxième boucle) ne peut pas s'exécuter jusqu'à ce que tous ses entrées ont été reçues, y compris les données de la première boucle. Un nœud (la première boucle) n'est pas sortie de quelque chose, jusqu'à ce qu'il a fini de l'exécution, c'est à dire, jusqu'à ce que la boucle se termine.
Donc, essentiellement, votre deuxième boucle ne serait pas courir jusqu'à la première boucle a fini en boucle.
En fait, vous pourriez ne pas supplémentaires tels que l'indicateur sur le panneau avant, seulement à utiliser sa valeur via des variables locales. Vous pouvez alors utiliser une variable globale. Vous pourrez le trouver dans les "Structures". Cela crée un nouveau VI où vous pouvez déposer les différents indicateurs ou des contrôles juste pour l'écriture et la lecture des données vers/à partir d'eux. Vous pouvez déposer cette variable globale VI dans votre bloc-diagramme d'accéder aux données. Ensuite, vous pouvez utiliser la même variable globale VI et de ses valeurs dans les autres VIs ainsi, en cas de besoin.