Discussions au sujet des autres produits NI

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

PCI6229 et DaQmx : Générer et compter des impulsions

Bonjour,

avec labview 7.1 et une carte PCI629 :
Je souhaite 
-générer des impulsions pour piloter un moteur pas à pas
-pouvoir interrompre cette génération  par l'utilisateur (bouton) ou un fin de course
-compter les impulsions ainsi générées

en utilisant les exemples fournis avec DaQmx, je n'ai aucun problème pour séparément :
    -  générer des impulsions à la fréquence souhaitée sur la sortie CTR1 out de la carte et les interrompre par un bouton
    -  compter les impulsions arrivant sur l'entrée CTR0 in de la carte

par contre il semble impossible de faire les 2 à la fois. Si j'essaie  sur le vi  de génération d'impulsions  de créer un  nouveau canal virtuel pour compter les impulsions et de lancer la tache , j'ai un message "the specified ressource is reserved"

Une idée pour résoudre ce problème ?

D'avance merci

Daniel
0 Compliments
Message 1 sur 8
5 265 Visites
Ce message apparait lorsqu'une voie materielle est utilisée dans deux tâches; il est effectivement impossible d'utiliser deux fois la même ressource dans deux tâches simultanées. Dans votre cas, si vous souhaitez une sortie et une entrée de compteur, il vous faut utiliser les deux voie de votre carte, une pour générer vos impulsion, et l'autre pour les compter.

Une solution plus simple serait de faire un décompte logiciel des impulsions émises: les VI DAQmx de génération d'impulsion comprennent une sortie nombre d'échantillons écris par voie. Cette sortie est utilisable pour calculer le nombre d'impulsion que vous avez généré.

Espèrant que mes indications vous seront utiles, bon courage.
0 Compliments
Message 2 sur 8
5 252 Visites
La solution "plus simple" que vous proposez me plait beaucoup

mais je ne vois pas bien ou trouver la sortie "nombre d'échantillons écris par voie" dans les VI DaQmx de génération d'impulsions

mon programme s'inspire des exemples fournis avec DaQmx  ( generating digital pulses) et utilise
    - 1 VI Create virtual channel  fréquence 1Khz
    - 1 VI  DaQmx timing  où je précise le nombre d'impulsions
    -  1 VI start task  pour lancer la génération

    - une boucle avec un  VI " Is Task  done"  et un bouton Stop (sortie de boucle quand la tache est finie ou  Stop)

    - en sortie de boucle un VI "Clear Task"

Ou puis- je trouver, dans une telle stucture, le nombre d'échantillons écrits ? ou faut-il passer par un assistant ?

D'avance Merci

Daniel

0 Compliments
Message 3 sur 8
5 242 Visites
Je pensais à la fonction d'écriture DAQmx, mais qui ne correspnd pas à votre structure. Avec une génération continue, il est moins facile d'obtenir par programmation le nombre d'impulsions générées, ces informations n'étant pas remontée directement depuis les fonctions DAQ.

Pour poursuivre sur cette idée de décompte "logiciel", un noeud de propriété sur la voie de génération permet de récupérer des informations sur l'état de la sortie (haut - bas), la valeur du compteur utilisé, etc... A condition que la fréquence d'exécution de votre VI soit plus rapide que celle de vos impulsion (plus de deux fois supérieure), il est immaginable de coder une "surveillance" de l'état de sortie de votre compteur, pour compter le nombre d'impulsions générés. Une telle solution implique une fiabilité relative, puisque liée au logiciel: si le VI rate un changement d'état, soit parce que son cadencement est trop lent par rapport aux impulsions générées, soit parce qu'une autre tâche de votre ordinateur bloque son fonctionnement trop longtemps, le décompte d'impulsions sera erroné.

Une autre possibilité pour éviter un fil à l'extérieur, est le routage de voie; ce procédé vous permet de connecter une sortie à une entrée physiquement, sans avoir à le câbler au niveau de votre boîtier de conexion par exemple. Cependant, toutes les connexion ne sont pas disponibles, il vous faudra peut être choisir une autre voie de sortie, qui soit utilisable pour une telle redirection. Le fait d'utiliser une entrée compteur (autre que celle de votre génération) vous garantie la fiabilité materielle de l'acquisition. Sinon, reste un cablage externe de votre sortie vers une autre entrée de votre carte.
0 Compliments
Message 4 sur 8
5 234 Visites
J'aurais besoins de vos lumières pour quelques précisions:

1- Quand vous dites " Je pensais à la fonction d'écriture DAQmx, mais qui ne correspnd pas à votre structure" Est ce que cela signifie qu'une autre structure existe pemettant de générer ( avec possibilité d'interruption patr l'opérateur) des impulsions et de les compter ? Dans ce cas pourriez vous m'en dire un peu plus.

2 - concernant le décompte logiciel, je n'y croit pas trop car mes impulsions sont à 100Hz .


3 -
" Une autre possibilité pour éviter un fil à l'extérieur, est le routage de voie". j'ai bien vu le routage de voie  mais je n'ai pas insisté car le fil a l'extérieur ne me dérange pas. C'est même ce que j'ai fait en reliant la sortie "CTR1  out" d'un compteur de ma carte  PCI6229 à l'entrée "CTRL0 in" de l'autre compteur mais c'est là que j'ai le message "The specified ressource is reserved" (voir mon 1er message).  Si j'ai bien compris votre première réponse  les deux compteurs ne sont donc pas utilisables simultanément ?


J'avoue que je suis un peu dans le flou.
 je souhaite simplement
    - initialiser un compteur  
    - générer des impulsions à 100Hz (de l'ordre de quelques centaines)
    - lire le nombre d'impulsion générées
Est-ce possible avec une carte  PCI6229 ?

 Merci beaucoup de m'éclairer

Daniel
0 Compliments
Message 5 sur 8
5 231 Visites
Je vous prie d'excuser mon manque de clarté; vous utilisez la fonction DAQmx - Strat Task. La fonction dont je vous parlais est le DAQmx - Write qui propose un indicateur remontant le nombre d'échantillons qui ont été générés. D'autre part, je me rend compte que cette fonction est mal adaptée à la génération d'impulsions.

Les deux compteurs sont utilisables simultanément.

Je suis revenu aux exemples DAQmx; j'arrive à faire fonctionner simultanément les exemples "Gen Dig Pulse Train-continuous.vi" et "Count Digital Events" en utilisant pour l'un CTR 1 out, et pour l'autre CTR 0 source. Ces deux bornes reliées à l'aide d'un fil, le décompte s'effectue correctement (j'ai utilisé pour mes tests une PCI-6070E, qui comprend comme votre carte deux compteurs, et un bornier 2120 - génération à 100Hz).

A partir de ces deux VI d'exemple, j'ai créé un exemple, que joint à ce message, en espérant que cela pourra vous inspirer.

Pour information, certaines fonctions telle la mesure de fréquence Large Range ou la mesure de fréquence High Freq utilisent deux compteurs. Si l'on utilise l'une de ces fonctions, il est alors impossible de générer un signal compteur en parallèle (si votre carte ne comporte que deux compteurs). Je ne pense pas que cela soit la source de votre problème, mais par acquis de conscience, vérifions; pourriez vous indiquer quel mode de DAQ vous utilisez lors de la créaton de tâche?
0 Compliments
Message 6 sur 8
5 218 Visites
Cette fois, je crois avoir compris :

D'abord,  j'ai eu un problème pour charger votre exemple sur le PC ou j'ai la carte d'acquisition. Pendant le chargement, au moment de la lecture du fichier obsoleteniswitch.llb  le programme m'ouvre une fenetre de choix de fichier (comme s'il manquait un vi)  et stoppe le chargement quand j'annule (alors que d'habitude il propose d'ignorer le vi). Mais ce n'est pas grave car j'ai pu en visualiser la stucture sur un autre pc  sans carte d'acquisition.

J'ai pu voir que  votre programme était  très voisin du mien (sauf la partie arrêt demarrage de la tache de génération dont je n'avais pas besoin et la partie gestion des erreurs ) .

Il y a cependant une différence qui explique tout :
    - vous générez les impulsions en mode "continuous"
    -  je les générais en mode "finite" (car le voulais de déplacer de 100 pas par exemple)

J'ai  modifié  ce parametre sur mon programme et là :  les deux taches  fonctionnent parfaitement simultanément


Moralité : pour générer un train d'impulsion la carte utilise les 2 compteurs , 1 pour la fréquence et 1 pour le precompte... ce qui parait, some toute,  très logique.

En tout cas merci beaucoup pour votre  aide. Je n'aurais certainement pas trouvé tout seul !

Bien cordialement

Daniel
0 Compliments
Message 7 sur 8
5 209 Visites

Bonjour, j'ai essayer le programme que tu as fait mais avec LabView 15 et un assistant DAQ, mon problème est que ca ne compte pas comme il faut les impulsions : J'ai relié un interupteur entre la sortie +5V et l'entrée compteur de ma NI-6341. Lorsque j'appuie sur mon inter (donc je crée une implusion) ca ne m'en compte pas une mais plusieurs...

Ce que je veux : Compter le nombre de contact que j'ai fait avec mon interupteur.

Merci

0 Compliments
Message 8 sur 8
4 404 Visites