2
votes

Comment faire bloquer une fois une boucle labview?

Je suis un peu nouveau dans LabView et le problème est le suivant: je veux bloquer juste quand les valeurs sont différentes et ne bloquent pas après la mise à jour. La mauvaise manière serait:

mauvaise manière: nouvelle valeur différente de l'ancienne

mauvaise manière: la nouvelle valeur est égale à l'ancienne

Modifier: lien vers le code: télécharger ici


3 commentaires

S'il vous plaît, montrez votre VI complet - car il est difficile de dire ce qui ne va pas simplement sur la base de ce petit extrait de code.


merci d'avoir lu ce @kosist, c'est tout le VI que j'utilise, il sera utilisé dans d'autres VIs.


Bonjour @Paulo, envisagez de revoir les réponses données et acceptez-en une comme réponse ou fournissez plus d'informations, afin que ce sujet puisse être fermé. Merci :)


3 Réponses :


2
votes

Test:

J'ai implémenté le code dans mon LabVIEW et il semble bien fonctionner! Si les valeurs b_in et b_out sont différentes, il attend le temps prédéfini, si elles sont identiques, il n'attend pas. Vous pouvez utiliser le bouton "Mettre en évidence l'exécution" pour le tester dans votre code.

Solution:

Si vous le laissez tourner en boucle, il y a peut-être une condition de concurrence . Les variables locales sont prédestinées à ce problème. Je les utiliserais aussi rarement que possible. Si vous exécutez la structure de cas dans une boucle, vous devez utiliser shift-registers à la place.

Il y a des points peu clairs dans la question, auxquels il est impossible de répondre sans plus d'informations, veuillez donc apporter une modification pour ceux-ci:

  • S'agit-il simplement d'une partie d'un vi plus grand?
  • Pouvez-vous fournir le code de l'ensemble de vi?
  • L'extrait de code de votre question s'exécute-t-il en boucle?

(Je modifierai la réponse si de nouvelles informations sont fournies)

J'espère que je pourrais vous aider :)


6 commentaires

En fait, il n'y a pas de terme tel que la collision de flux de données, mais il vaut mieux utiliser la condition de concurrence. Mais dans l'ensemble, vous avez raison, car les variables locales - sont un pur mal dans LabVIEW.


Les variables locales sont un pur mal dans LabVIEW doit être qualifié. Ils sont souvent le bon outil à utiliser pour mettre à jour un indicateur d'interface utilisateur à partir de différents endroits d'un diagramme à des moments différents - par exemple, à partir de différents cadres d'une structure de cas ou d'une machine à états - ou pour lire un contrôle à différents endroits dans un diagramme, comme deux boucles asynchrones.


Cher @nekomatic - tous les cas d'utilisation que vous avez décrits sont possibles à implémenter sans utilisation de variables locales, c'est une question d'architecture. Demandez à n'importe quel membre du CLA, et il vous dira dans son intégralité pourquoi ne pas utiliser des variables locales et comment vous pouvez les remplacer par quelque chose de mieux.


@Salome, merci d'avoir lu ma question, les réponses à vos questions sont: * Est-ce juste une partie d'un VI plus grand? Je teste cette partie avant de l'ajouter à d'autres VIs. * Pouvez-vous fournir le code de l'ensemble de vi? Je viens de le faire * L'extrait de code de votre question s'exécute-t-il en boucle? J'utilise l'option "Exécuter en boucle" , pas dans une structure en boucle.


Salut, pas de problème :) Merci pour les réponses. Veuillez également les modifier dans votre question, afin que les autres puissent trouver ces informations sans consulter les commentaires. Quelques questions supplémentaires: je vois que vous utilisez un contrôle wait , probablement pour le temps qui devrait être attendu. - Quelle valeur utilisez-vous? Le VI Stall Data Flow utilise des millisecondes comme entrée et comme sortie. Peut-être que la valeur de temps que vous utilisez est trop basse pendant l'exécution du code.


- Avez-vous essayé la fonction d'exécution de surbrillance? Pour autant que je comprends la question, le vi fait ce que vous voulez. Sinon, veuillez clarifier ce qu'il doit faire :)



2
votes

Comme l'a souligné Salomé, j'ai recréé votre exigence avec des nœuds de rétroaction.

 Utilisation des nœuds de rétroaction

Faites-moi savoir si vous avez besoin d'aide supplémentaire!


0 commentaires

2
votes

Dans Labview 2018, vous pouvez également utiliser la fonction «Est-ce que la valeur a changé». Le SubVI est juste une syntaxe suger, qui est réalisée par le polymorphisme des VIs malléables. La fonctionnalité est la même que celle suggérée par Salome.

Is Value Changed


0 commentaires