Discussions au sujet de NI LabVIEW

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

Multiple DO timed on different Counter pulses for Odometer application on DAQmx

Bonjour à tous,

 

Description du programme:

Je souhaiterais simuler le comportement de codeurs rotatifs placés sur la roue droite et gauche d'un véhicule. Pour cela je dispose d'un DAQ serie X (USB-6341) et j'utilise labview pour générer ces signaux. À terme les VI de ce simulateur seront compilés dans une librairie partagée (DLL) et seront accédés via des commandes en C#.

Une commande InitOdometer(ID, Diameter, Teeth, Direction, Type) instancie un codeur en lui donnant un certain nombre de paramètres (id, taille, nombre de dents, roue gauche ou droite et type)

Selon le type de codeur (1 rangée, 2 rangées ou 3 rangées), le pattern généré sera différent :

/** ODO_TYPE 1 asymmetric (HASLER) / one signal per cell**/
Forward :
               _|-|__|--|_|-|__|--|_
Backward:
               _|--|__|-|_|--|__|-|_
/** ODO_TYPE 2  asymmetric (KES/DEUTA/SKF) phase shift 90deg / 2 signals per cell**/
Forward :
                _|--|__|--|__|--|__|--|
                __|--|__|--|__|--|__|--
Backward:
                __|--|__|--|__|--|__|--
                _|--|__|--|__|--|__|--|
/** ODO_TYPE 3 asymmetric (like URBAN) phase shift 120deg / 3 signals per cell**/
Forward :
                _|---|___|---|___|---|___|---
                __|---|___|---|___|---|___|--
                ___|---|___|---|___|---|___|-
Backward:
                ___|---|___|---|___|---|___|-
                __|---|___|---|___|---|___|--
                _|---|___|---|___|---|___|---

 

Une commande SetSpeed(ID, Speed) définit la vitesse d'un des codeurs et génère sur le DAQ le signal rectangulaire correspondant.

Plusieurs commandes SetSpeed peuvent être envoyées à la suite via la DLL, je suis donc parti du principe qu'aucun des VI ne peut pas tourner dans une boucle "while" mais doit être une exécution finie. Les tâches du DAQ sont donc créées avec le paramètre "auto cleanup" à "false" pour que le DAQ garde sa consigne de vitesse une fois que l'exécution du VI est terminée.

 

La vitesse de la roue gauche et de la roue droite pouvant être différente, pour générer les signaux des codeurs j'utilise deux counters en fréquence qui peuvent chacun générer un pulse à leur propre fréquence (hardware-timed).

Deux autres tâches contrôlent les sorties digitales sur lesquelles seront générées les signaux, timé sur la sample clock du counter correspondant à ce codeur.

 

Description du problème:

Le problème auquel je fais face est que je ne parviens pas à contourner l'erreur de partage des ressources hardware du DAQ. En effet, lorsque je donne une première consigne de vitesse à l'un des codeurs, les ressources du Sample Clock de la tâche WS_PATTERN y sont dédiées et lorsque je relance le VI SetSpeed mais en donnant cette fois une consigne de vitesse à l'autre codeur, j'obtiens une erreur (Error -89137 occurred at SetSpeed.vi).

 

Je comprends bien que seule une tâche "hardware-timed" peut être réalisée sur les digital output, comme précisé sur cette page NI, et dans mon cas j'essaye d'en lancer deux. En quoi consiste la solution Software Timed qui permet 1 tâche par sortie digitale? Cette tâche software timed permet-elle d'être lancée à plusieurs reprises via une les commandes DLL?

Une solution consistant à sortir le signal du premier codeur sur une sortie digitale et le signal du second sur une sortie analogique résoudrait le problème?

 

J'ai essayé d'être le plus explicite dans mes explications du problème. Je vous invite à regarder le code par vous-même.

Ci-joint les fichiers correspondants, à lancer dans l'ordre

Clear.vi

InitOdometer #1

InitOdometer #2

SetSpeed #1

SetSpeed #2

 

Merci d'avance pour votre aide,

 

Thomas

 

Tout télécharger
0 Compliments
Message 1 sur 3
2 323 Visites

Bonjour Thomorow,

 

Avez-vous pu résoudre votre conflit de ressources? Dans le principe, la mesure de codeurs angulaires est limité par le nombre de compteurs (donc ici 4), il n'y a donc pas vraiment de raison d'obtenir cette erreur.

Avez-vous consulté ce document et implémenté la solution proposée? je suis en transit et n'ai pas LabVIEW sur ce poste pour ouvrir vos mais si la problématique n'est pas réglée j'irai voir sur un autre poste.

Why Do I Get a Resource Error -89137 When Using a Reference Clock with NI-DAQmx Devices?

 

Bonne journée,

0 Compliments
Message 2 sur 3
2 252 Visites

Bonjour Jun',

 

Merci pour votre réponse. Je ne suis pas parvenu à contourner le problème du partage de ressources. Je parviens bien à faire des tâches compteurs indépendantes, mais lorsque j'essaye de timer deux sorties digitales, chacune sur un des deux compteurs, là je reçois une erreur de partage des ressources.

Ce que je pense donc faire, c'est externaliser cette fonction à l'aide d'un CPLD.

 

Bonne journée,

0 Compliments
Message 3 sur 3
2 236 Visites