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 des autres produits NI

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

Fournir une tension NI-usb 6009

Résolu !
Accéder à la solution

Bonjour,

 

J'ai une carte d'acquisition NI-usb 6009 et je voudrais savoir comment est-ce qu'on fait pour que lorsque j'appuie sur un bouton-poussoir, la carte fournisse 5V. Parce que là elle fournit les 5V en permanence.

 

Merci d'avance.

0 Compliments
Message 1 sur 5
6 664 Visites
Solution
Accepté par l'auteur du sujet Boxiel

Bonjour,

 

En génération analogique, la carte va maintenir la dernière valeur mise à jour. Dans le code, initialisation de la tâche de sortie analogique, puis peut être une boucle; si appui sur le bouton, un DAQmx Write avec 5V. si bouton relâché, DAQmx Write avec 0V, et en sortie de boucle, DAQmx Write avec 0V et la fermeture de la tâche. A partir de l'exemple Voltage - On Demand Output.vi, ce pourrait être quelque chose de cet ordre :

 

Voltage - On Demand Output.vi (modifié)

(tiens, le png m'a fait sauter la mention "Generate 5V" : Value Change, et le Type de l'event semble invalide... curieux)

 

Pour l'utilisation de la structure event : http://zone.ni.com/reference/en-XX/help/371361J-01/glang/event_structure/

 

Cordialement,

Message 2 sur 5
6 655 Visites

Merci beaucoup, ça fonctionne bien. Par contre je n'ai pas mis le bloque "statut" et ça va quand même. Est-il vraiment nécessaire ?

0 Compliments
Message 3 sur 5
6 622 Visites

Oui et non.

 

La structure event attend que l'un des évènements déclarés (deux ici, Value Change sur le bouton Generate 5V, et un Timeout de 100ms) pour rentrer dans l'un des case. J'ai utilisé cette fonction pour pare au cas ou mon chien sera venu se prendre les pattes dans le câble USB du 6009 - ou tout autre cas débile dans le quel pour une raison que je ne maîtrise pas, une erreur DAQmx surviendrai. Comment est-ce que je peux récupérer cette information?

 

Si je ne passe pas dans une fonction DAQmx, je n'interroge pas le driver, je n'ai aucun moyen de savoir qu'une erreur est apparue, et donc aucun moyen d'arrêter mon programme (jusqu'à l'appui sur le Generate 5V). D'où l'utilisation de ce bloc (peut être pas tout à fait dans sa fonction première) pour contrôler l'état de ma tâche. Très accessoirement, ceci me permet aussi de contrôler la valeur du bouton stop (en dehors de la structure Event de temps à autre (sans Timeout, il faut recliquer sur Generate 5V pour pourvoir - peut être - arrêter la boucle.... pas top).

 

Quelques remarques:

  1. J'ai pris le parti de ne pas arrêter ma tâche DAQmx une fois dans ma boucle (start et stp en dehors de la boucle), ce qui implique en toute riguer de contrôler ce qui se passe de temps en temps, y compris si l'utilisateur ne clique pas sur le bouton Generate 5V.
  2. J'aurais très bien aussi pu faire ça un peu plus brutalement, en démarrant ma tâche, appliquant la nouvelle valeur de tension et en arrêtant ma tâche à chaque appui sur le bouton. Moins malin, je répète des opérations: est-ce gênant pour les performances générale de l'appli? Tout dépend de l'appli en question.
  3. Si la structure du code se complexifie, il est (très fortement) recommandé de séparer la gestion de l'interface utilisateur (les boutons) des opérations d'entrée/sorties matérielle. Si c'est ton cas, jette un oeil au template Producer/Consumer Design Pattern (Events).

...j'aurais aussi pu faire plus simple :

 

makeItSimple.png

0 Compliments
Message 4 sur 5
6 612 Visites

Tout est très claire


Merci beaucoup !

0 Compliments
Message 5 sur 5
6 600 Visites