IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Comment génerer une tension sur une carte ni-6009 avec Windev ? [WD16]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Comment génerer une tension sur une carte ni-6009 avec Windev ?
    Bonjour à toute la communauté de developpez.com,

    Dans le cadre d'un projet je dois utiliser une carte ni-6009 pour acquérir des signaux analogiques et en générer.
    Comme j'utilise en parallèle une base de données, je programme sous Windev.

    Voici mon problème :
    - Je n'arrive pas à générer un signal analogique constant de +3V sur le port Dev1/ai0. Ce dernier servira à alimenter un capteur.

    Mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    //Mes variables
    
    eTaskhandle1 est un entier sans signe
    eTaskhandle2 est un entier sans signe
    eErreur est un entier
    chPortin, ChPortout est une chaîne
    Data est un réel
    ENbrEchEcrit est un entier sans signe
    
    //Définitions
    
    chPortin = "Dev1/ai0"
    ChPortout="Dev1/ao0"
    Data=3
    eTaskhandle1=0
    eTaskhandle2=0
    ENbrEchEcrit=0
    
    //Création de la tâche
    eErreur=AppelDLL32("nicaiu.dll","DAQmxCreateTask","U_gen",&eTaskhandle2)
    //Lancement
    eErreur=AppelDLL32("nicaiu.dll","DAQmxStartTask",&eTaskhandle2)
    //Je définie le port comme une sortie analogique
    eErreur = AppelDLL32("nicaiu.dll","DAQmxCreateAOVoltageChan",eTaskhandle2,ChPortout,"",0.0,5.0,10348,"")
    //J'écris 3V
    eErreur = AppelDLL32("nicaiu.dll","DAQmxWriteAnalogF64",&eTaskhandle2,1,1,10.0,"DAQmx_Val_GroupByChannel",&Data,&ENbrEchEcrit,Null)
    //Je supprime la tâche une fois finie
    eErreur=AppelDLL32("nicaiu.dll","DAQmxClearTask",&eTaskhandle2)
    Seule la ligne rouge ne fonctionne pas. Le compilateur me dit que le nombre de paramètre de la fonction est trop grand, mais la doc National Instrument précise bien qu'il y en a 8.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 053
    Points : 9 468
    Points
    9 468
    Par défaut
    Bonjour,
    je n'utilise pas la dll de Ni mais il me semble qu'il y a déjà des erreurs dans ton code avant la ligne en rouge :
    tu récupères un handle avec le CreateTask mais ensuite tu l'utilises parfois avec le & (l'adresse) ce qui je pense n'est pas correct. DAQmx_Val_GroupByChannel est normalement une constante qui vaut 0.
    Data est un tableau de réels.

    tu peux faire une tentative (sans garantie car je ne peux pas faire d'essai) avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /Mes variables
    // quelques constantes NI 
    // DAQmx_Val_Volts = 10348
    // DAQmx_Val_Rising = 10280
    // DAQmx_Val_FiniteSamps = 10178
    // DAQmx_Val_GroupByChannel = 0
     
    eTaskhandle1 est un entier sans signe
    eTaskhandle2 est un entier sans signe
    eErreur est un entier
    chPortin, ChPortout est une chaîne
    Data est un tableau de réel
    ENbrEchEcrit est un entier sans signe
     
    //Définitions
     
    chPortin = "Dev1/ai0"
    ChPortout="Dev1/ao0"
     
    eTaskhandle1=0
    eTaskhandle2=0
    ENbrEchEcrit=0
     
    //Création de la tâche
    eErreur=AppelDLL32("nicaiu.dll","DAQmxCreateTask","U_gen",&eTaskhandle2)
    //Lancement
    eErreur=AppelDLL32("nicaiu.dll","DAQmxStartTask",eTaskhandle2)
    //Je définie le port comme une sortie analogique
    eErreur = AppelDLL32("nicaiu.dll","DAQmxCreateAOVoltageChan",eTaskhandle2,ChPortout,"",0.0,5.0,10348,Null)
     
    //J'écris 3V
    ajoute(Data, 3.0)
    eErreur = AppelDLL32("nicaiu.dll","DAQmxWriteAnalogF64",eTaskhandle2,1,1,10.0,0,&Data,&ENbrEchEcrit,Null)
    //Je supprime la tâche une fois finie
    eErreur=AppelDLL32("nicaiu.dll","DAQmxClearTask",eTaskhandle2)
    Ami calmant, J.P ;-)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Bonjour,
    je n'utilise pas la dll de Ni mais il me semble qu'il y a déjà des erreurs dans ton code avant la ligne en rouge :
    tu récupères un handle avec le CreateTask mais ensuite tu l'utilises parfois avec le & (l'adresse) ce qui je pense n'est pas correct. DAQmx_Val_GroupByChannel est normalement une constante qui vaut 0.
    Data est un tableau de réels.

    ...


    Ami calmant, J.P ;-)
    Merci beaucoup J.P pour ton aide. Ton code fonctionne bien; et me voila débloqué. Par contre, si tu me le permets j'aimerai te poser une autre question.

    La tension générée de 3V reste malgré la fermeture du programme. En effet je ne parviens pas exécuter ces deux fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    eErreur=AppelDLL32("nicaiu.dll","DAQmxStartTask",&eTaskhandle1)
    eErreur=AppelDLL32("nicaiu.dll","DAQmxStartTask",&eTaskhandle2)
     
    eErreur=AppelDLL32("nicaiu.dll","DAQmxStopTask",&eTaskhandle1)
    eErreur=AppelDLL32("nicaiu.dll","DAQmxStopTask",&eTaskhandle2)
    La valeur renvoyée par l'entier eErreur est négative.

    Aurais-tu une idée ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Le problème est résolu, je passais en paramètre l'adresse du taskhandle, alors qu'il ne fallait pas. Par contre même la "tâche nettoyée" la sortie reste a 3V. J'ai rajouter une requête d'écriture à 0V à la fermeture de la fenêtre pour corriger cela.

    Merci à vous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Comment MySQL optimise-t-il une requête sur une view ?
    Par Jean-Jacques Engels dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/11/2011, 17h39
  3. Réponses: 1
    Dernier message: 30/08/2011, 09h53
  4. Réponses: 2
    Dernier message: 27/03/2010, 10h48
  5. Réponses: 4
    Dernier message: 25/07/2005, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo