Teststand tableau de pointeur

Bonjour,
J'ai réalisé sous CVI des fonctions de bases pour pouvoir piloter une carte DIO24 (NI USB-6501) avec les fonctions DAQmx.
J'ai entre autre une fonction pour créer une tâche par ligne, afin de pouvoir piloter indépendamment chaque ligne de chaque port.
Cette fonction à pour prototype : int CreerTache (int port, int ligne, TaskHandle HdleTache[8])
J'aimerais pouvoir l'appeler depuis Testand, mais je suis confronté à un problème : il faudrait que je puisse déclarer dans testand un tableau de pointeur vers des variables de type void (TaskHandle est un void*). Le type de mon troisième argument remonte bien dans teststand comme un void**, mais je ne parviens pas à déclarer un tableau de pointeur.
Savez vous comment faire ?
Merci
Étienne

Merci pour vos réponses,
Concernant la catégorie du paramètre de la fonction, elle est déjà en « Pointer/Handle ». Ce qui fait que la variable attendue est de type « object reference ».
J’ai essayé de créer un tableau d’ « object reference », mais ça ne fonctionne pas (j’ai une erreur avec l’analyseur de séquence m’indiquant que je mets un tableau à la place d’un object reference).
J’ai également essayé de créer un object référence que je fais pointer sur le tableau, pas d’erreur avec l’analyseur, mais à l’exécution j’ai une erreur m’indiquant « found object reference, expected object reference holding a pointer »…
J’ai l’impression qu'il faudrait que je puisse déclarer la catégorie de ce paramètre en « tab of pointer/handle », mais cette catégorie ne semble pas exister…
Concernant la possibilité de passer un tableau d’entier, c’est ce que j’ai fait de manière (j’espère) temporaire : j’ai modifié ma DLL pour que le paramètre soit un tableau d’entier, et je crée dans la fonction un tableau de void* que j’initialise en castant mon tableau d’entier… je ne trouve pas cette solution très propre mais elle a le mérite d’être fonctionnelle !
Merci
Étienne

Similar Messages

  • Mesure sur tout les éléments d'un tableau avec Teststand

    Bonjour,
    J'ai actuellement un V.I Labview qui ferme des chemins de relais lus dans un fichier texte et qui vient ensuite mesurer la tension, il me sors ensuite un tableau avec toutes les valeurs de tension mesurées. J'ai fais une séquence Teststand où je viens exécuter mon V.I et faire un "Measure numeric limit" sur les valeurs de tension.
    Seulement sur le rapport il n'y a qu'un unique pass/failed. J'aimerais que le pas de test soit fait sur chaque mesure et avoir chaque valeur avec la mention pass/failed a coté
    Merci d'avance
    Merya
    Résolu !
    Accéder à la solution.

    Une solution basique serait d'appeler un VI qui ne traite qu'une seule tension par TestStand dans une boucle.
    Une solution plus élégante serait d'utiliser un step Multiple Numeric Limit test
    Rodéric L
    Certified LabVIEW Architect
    Pièces jointes :
    sequence.png ‏50 KB
    rapport.png ‏17 KB

  • NI teststand: affichage tableau dans le rapport

    Bonjour,
    Suite à des tests et des calculs, j'ai regroupé dans un tableau des temps de transmission par commande (image 1) j'aimerais afficher ce tableau dans un rapport TestStand après une séquence de test, cependant, l'affichage de ce tableau n'est vraiment pas esthétique ni pratique à lire (image 2), et encore moins lorsque j'ouvre le rapport xml sur internet explorer (image 3)
    J'ai cherché plusieurs solutions dans le forum mais rien ne fonctionne. Je voudrais que mon tableau s'affiche comme la première image.
    Quelqu'un pourrait m'aider svp ?
    Merci
    Mehdi
    Pièces jointes :
    tableau_tr.PNG ‏6 KB
    tableau_teststand.PNG ‏9 KB
    tableau_explorer.PNG ‏10 KB

    Bonjour,
    Ce temps permet à Teststand de se lancer. Il est donc normal de ne pas récupérer la référence par le GetEngine s'il n'existe pas encore
    A propos des fermetures de références : il faut les fermer une fois que vous n'en avez plus besoin. Ainsi, si vous avez créé une référence et que vous l'utilisez avec plusieurs noeuds de méthodes/propriétés, ne la fermez qu'à la fin.
    Cordialement,
    Mathieu P. | Certified LabVIEW Associate Developer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Journées techniques : des fondamentaux aux dernières technologies pour la mesure et le contrôle/comm...

  • TestStand pointeur en valeur retournée

    Bonjour,
    je dois utiliser une fonction dll standard, qui renvoie une chaine de caratctères : Prototype C : char  * version();
    Vu qu'il n'y a pas de possibilité de récupérer un pointeur dans une valeur retournée, comment peut-on récupérer la texte dans un appel de fonction TestStand ?
    Merci pour votre aide.
    Jean-Marie.
    JMCe
    Solved!
    Go to Solution.

    TestStand does not currently support string return values because TestStand doesn't know how to deallocate the memory associated with the string. If you must call a function in a standard DLL that returns a string, you have a couple of options. Each of them requires you to write your own DLL.
    1. Write a wrapper function in a DLL that calls the string function. Your wrapper DLL must link to the standard DLL. For example,
    void VersionWrapper(char returnValue[], int bufferLength)
        char *versionString = version();
        if (versionString != NULL)
            strncpy(returnValue, versionString, bufferLength);
        // You must deallocate versionString here if necessary.
    2. Call the string function in TestStand manually specifying the return value as an integer. Write a conversion function in a DLL that converts the integer to a char pointer. For example,
    void ConvertIntToString(int returnValueFromTestStand, char returnValue[], int bufferLength)
        const char *returnValueString = (const char *)returnValueFromTestStand;
        if (returnValueString != NULL)
            strncpy(returnValue, returnValueString , bufferLength);
        // You must deallocate returnValueString here if necessary.
    Note: If the string function in the standard DLL is exported with a C++ decorated name, the function will not appear in the function list in TestStand and you cannot use option 2.

  • Récupérer l'adresse de stockage d'un tableau sous LabVIEW

    Bonjour à tous,
    Je viens à vous pour résoudre le problème suivant:
    J'utilise une DLL en LabVIEW. Cette DLL possède une fonction qui passe (notamment) un pointeur de tableau en argument. J'ai remarqué que l'assistant "Importation d'une bibliothèque partagée" a choisi une variable chaîne à la place de ce pointeur de tableau, ce qui sous-entend que la fonction s'attend à l'adresse du premier élément du tableau...
    De fait, pour utiliser la fonction sous LabVIEW, je dois créer un tableau (jusque là, ça va) puis surtout récupérer l'adresse de son premier élément. Et c'est là que le bât blesse:
    - Existe-t-il un VI renvoyant l'adresse d'une variable ?
    - Et d'ailleurs, la création d'un tableau en LabVIEW se fait-elle de la même façon que la création d'un tableau en C (au niveau de l'adressage, j'entends) ?
    Merci d'avance !
    Résolu !
    Accéder à la solution.

    Tu dois "passer" un Tableau à une fonction contenue dans une DLL .... c'est bien ça ?
    un tableau de quoi ? ...
    voici un (tout petit) exemple avec un Tableau de U8.
    Tu cables directement le Tableau à l'entrée du Noeud "Call Library Function Node"
    mais "avant", tu dois configurer cet appel (clic droit sur le noeud ... "configure")
    et là tu peux demander à LV de passer l'adresse du Tableau
    Dans ce cas LV passera l'adresse (pointeur) du premier élément du Tableau

  • Transférer un tableau dans une structure évenement

    bonjour,
    Je souhaite commander l'acquistion et l'enregistrement des mesures par eux booléens.
    L'acquisition commence via une structure évenementielle lorsque qu'on change l'état du booléen "acquisition", les données sont mises dans un tableau.
    J'aimerais commander l"enregitrement via un autre évenement.
    Seulement, lorsque je clique sur un des booléens, le deuxiéme marche bien mais ne commande plsur rien
    et
    Je n'arrive pas a récupérer mon tableaude valeurs (j'ai essayé avec des fils et des variables locales.)
    Merci
    Pièces jointes :
    Capture.PNG ‏29 KB
    Capture1.PNG ‏20 KB

    Bonjour,
    Lorsque l'on souhaite transférer des données entre plusieurs itération d'une boucle le mieux est d'utiliser un registre à décalage.
    Pour le code, je pense que tu devrais jeter un coup d'oeil aux machines à états pour revoir l'architecture de ton soft
    Ce n'est pas génial de mettre une boucle dans un évênement, qui ne doit contenir que du code 'rapide' à exécuter, comme un changement d'état de ta machine à état.
    Un dernier points, il ne faut pas mettre de boucle comme ici sans aucune temporisation, elle va consommer tout ton processeur pour tourner à fond.
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Extraire les doublons d'un tableau

    Bonjour à tous.
    Je cherche à extraire tous les doublons d'un tableau afin de n'avoir que des éléments dont la valeur est unique dans mon tableau de sortie.
    Ex :
    [1-1-2-2-3] => [1-2-3]
    J'ai essayé le diagramme suivant, mais son temps d'éxecution s'acroit de façon exponentielle avec le nombre d'éléments à traiter (plusieurs secondes par tableau de 64k).
    (la condition "0, défaut" contient un simple fil de liaison)
    Existe-t-il un algorythhme plus rapide, ou un moyen d'optimiser celui-ci?
    Merci d'avance pour votre aide.
    Ben.
    Résolu !
    Accéder à la solution.

    elle implique le tri des données qui pourrait ne pas conveni à tout le monde.
    cela se fait sur une "copie" du Tableau, et cela ne pose donc aucun soucis.
    (je ne vois pas en quoi cela pourrait "ne pa convenir")
    de plus ... la fonction "reverse 1D" est très rapide 
    Je pense même que le LV ne "touche" pas réellement au Tableau.
    permuter l'index de fin avec celui du début, inverser le signe pour toutes formes d'accès au Tableau ...
    (uniquement pour cette copie du Tableau) Quelque chose comme ça ...  ça devrait être bon.
    "retourner" réellement le Tableau serait, je pense, un manque d'imagination.
    et je pense que les développeurs de LV n'en manque pas.  
    Ma main à couper que le Tableau est retourné en changeant un pointeur et un ou deux signes.

  • Affichage d'un tableau

     bonjour à tous 
    j'ai une petite probleme lors de l'affichage de mes mesures sur un tableau.
    je veux affiche les mesures de chaque iteration à coter de l'autre avec un interval entre eux pour les distinguer.
    pour une temperature fixer au debut de l'iteration je recoit une colonne de C et une colonne de t puis un interval qui separe et les mesures de 2eme iteration s'affiche ainsi de suite,
    mais c pas le cas que je fais il m'affiche les resultat sucessive ,je veux un retour au colonnes pas en linges.cad si je change la temperature 4 fois cad 4iteration donc le tableau afficher sera 8colonnes sur 3 lignes
    voici un VI simplifier  pour mieux partager mes idee.
    Pièces jointes :
    02-05-2014 17-00-58.jpg ‏81 KB
    1.vi ‏17 KB

    Bonjour,
    C'est dû au point rouge de ton cluster dans ta fenêtre pop-up. Cela signifie que tu n'as pas exactement les mêmes types de données. Ici tu dois avoir un ordre différent des éléments dans tes clusters. Pour les réorganiser, il faut faire un clic droit sur le cluster puis Reorder Controls in cluster...
    Si l'ordre est le même sur tes différents cluster cela devrait fonctionner.
    Il existe une méthode pour éviter d'avoir ce genre de problème: il faut définir tes clusters comme des typedef (advenced=>customize) puis les enregister en .ctl
    Cela permet de créer un "nouveau type de données" et donc tous tes clusters qui utilisent ce fichier de définition auront exactement les mêmes types de données.
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Affichage d'un tableau de cluster

    Bonjour,
    j'ai un petit probleme mais je ne sais plus quoi faire donc je viens demander l'aide aux experts.
    Donc je créé mon tableau de cluster (contenant un ring et 3 indicateurs numeriques)  en indexant en sortie d'une boucle for, j'ai vérifié et les valeurs du tableau sont correctes (img1). Je prend ce tableau et je le rentre dans mon sous vi qui est juste une fenetre pop up qui est doit afficher le tableau de cluster (img2).
    Le probleme est que les valeurs dans le cluster sont decalées, cad que le ring affiche toujours 0 et ce qu'il est sensé afficher est contenu dans l'indicateur numérique qui suit...et ainsi de suite . En img3 voila mon sousVi qui afffiche le tableau. Donc pourquoi mes valeurs dans le cluster se décalent? En espérant avoir été assez clair.
    Merci
    Cdt
    Mélanie
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    creation tableau cluster.png ‏13 KB
    put the array in subvi.png ‏4 KB
    sub vu pop up.png ‏19 KB

    Bonjour,
    C'est dû au point rouge de ton cluster dans ta fenêtre pop-up. Cela signifie que tu n'as pas exactement les mêmes types de données. Ici tu dois avoir un ordre différent des éléments dans tes clusters. Pour les réorganiser, il faut faire un clic droit sur le cluster puis Reorder Controls in cluster...
    Si l'ordre est le même sur tes différents cluster cela devrait fonctionner.
    Il existe une méthode pour éviter d'avoir ce genre de problème: il faut définir tes clusters comme des typedef (advenced=>customize) puis les enregister en .ctl
    Cela permet de créer un "nouveau type de données" et donc tous tes clusters qui utilisent ce fichier de définition auront exactement les mêmes types de données.
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Boucle FOR et tableau de cluster

    Bonjour,
    J'ai créé un tableau de cluster contenant deux éléments et je souhaite que l'indice de mon tableau corresponde au "i" d'une boucle FOR;
    ce qui me permettrait de remplir les valeurs de mes clés à chaque itération.
    Ci-joint mon VI.
    Cdt
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Test_Scenario.vi ‏12 KB

    Bonjour,
    Je t'invite à te renseigner sur l'auto-indexation des boucles FOR:
    Auto-Indexing Tunnels with For Loops and While Loops in LabVIEW
    L'auto-indexation va permettre que ta boucle FOR s'exécute autant de fois que tu as d'élément dans ton tableau.
    L'itération 0 prendra donc l'élément à l'indice 0 de ton tableau. 
    L'itération 1 prendra donc l'élément à l'indice 1 de ton tableau.
    Bonne journée,
    Valentin
    Certified TestStand Architect
    Certified LabVIEW Developer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France
    Pièces jointes :
    auto indexation.vi ‏11 KB

  • Convertir tableau de chiffre sientifique en tableau dbl

    Bonjour, je voudrais traiter un fichier tableur qui contient des chiffres sientifiques pour créer un graphe 3D surface, je ne trouve pas de fonction labview pour convertir mes données
    Pourriez vous m'aiguiller svp

    Bonjour darkpoet,
    Si par chiffres scientifiques tu entends des expressions de ce type "9.6E7" ou "5E-4" tu trouveras en pièce jointe un VI d'exemple.
    Cet exemple convertit une chaine de caractères (de la forme "9.6E7" ou "5E-4") en double.
    Je te laisse t'occuper de la partie tableau pour le moment 
    Valentin
    Certified TestStand Architect
    Certified LabVIEW Developer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France
    Attachments:
    Scientifique.vi ‏8 KB

  • Ajouter 2 tableaux 1D pour avoir deux colonnes

    Bonjour,
    Lorsque j'ajoute deux tableau 1D je me retrouve avec un tableau 2D mais ou tous les résultas sont mélangés sur une seule et même colonne !
    Comment avoir deux colonne(une pour chaque tableau1D ) ?
    Merci
    Résolu !
    Accéder à la solution.

    Tu utilises surement Interleave 1D array au lieu de Build Array.
    Un clic droit sur la fonction build array permet ensuite de sélctionner si les entrées sont concaténés (un tableau 1D) ou non (2D).
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Redimensio​nner un tableau

    Bonjour,
    Je dispose d'un tableau 2D de 64 lignes, ce tableau est un resulat d'une succession de calculs et je souhaite le redimmensionner afin d'obtenir une matrice 8x8.
    Comment faire?
    Merci d'avance ,
     Fatzo,
    Résolu !
    Accéder à la solution.

    Bonjour,
    Est-ce que c'est ce genre de comportement que tu souhaites obtenir? (separer un tableau et le reconstruire differement)
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect
    Pièces jointes :
    redimensioner.vi ‏14 KB

  • Ajout variable dans tableau

    Bonjour,
    Je souhaite ajouter 2 variables dans un tableau lorsque j'appuie sur un bouton (type bouton ok).
    Lorsque ces 2 variables sont ajoutées à la première ligne du tableau, on modifie ces 2 variables et on les ajoute ligne 2 du tableau après avoir cliqué sur sur le bouton ok et ainsi de suite.
    Le problème dans mon VI, c'est que je n'arrive pas à arrêter l'ajout dans le tableau après avoir cliqué sur la validation. Je suis obligé de l'arrêter avec le bouton stop.
    J'utilise labview 2012.
    Merci
    ps: je n'ai pas réussi a ajouter le VI dans la pièce jointe, si quelque connait la méthode...
    Thomas

    Bonjour MaxLamb,
    Concernant la réinitialisation de ton tableau, il faut que la constante 0 de ton tableau soit placé à l'extérieur de ta boucle, sinon, à chaque tour de boucle tu viens lire la constante 0, et cela réinitialise ton tableau.
    Tu trouveras le VI en pièce jointe.
    De manière générale, pour la structure de ton code, je te conseille d'utiliser des structures évènements. Elles vont te permettre de déclencher une partie de ton code quand tu cliqueras sur un bouton de la face avant, au lieu de venir lire tout le temps dans une boucle while la valeur du bouton booléen.
    Tu trouveras plus d'informations sur les structures évènements ici: https://decibel.ni.com/content/docs/DOC-8582
    Cordialement,
    Benoit S. - Field Sales Engineer
    Certified LabVIEW Developer
    Certified TestStand Developer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Été de LabVIEW 2014
    12 présentations en ligne, du 30 juin au 18 juillet
    Attachments:
    Aquis_boucle.vi ‏123 KB

  • Retour paramètre string par Labwindows/CVI pour Teststand

    Bonjour à tous,
    j'utilise Teststand 2012 Development System et Labwindows/CVI 2012 Development System sous Windows 7 professionnel.
    Le contexte : grâce à une DLL crée avec Labwindows/CVI j'appel la fonction "Traitement" par TS.
    Le prototype de la fonction est le suivant void __declspec(dllexport) Traitement (char message[256], car reponse[256]);
    Je passe en paramètre deux strings à cette fonction. Cette fonction reçoit un "message", effectue un traitement sur celui-ci et le renvois sous le tableau "reponse" à TS. Cette fonction a été testée et fonctionne sous CVI.
    Mon problème : J'ai vérifié ma fonction reçoit bien le message mais me retourne quelque chose d'erroné( cf. image) et n'est censé me retourner, dans"reponse", que les chiffres au début mais me rajoute des instructions en temps que string. Je ne comprend pas comment cette suite d'instruction ce rajoute et pourquoi?
    J'ai consulté tous les messages disponibles sur le forum et je n'ai pas réussi à trouver un problème équivalent et donc une solution.
    J'espère que vous aurez une idée, voir pourquoi pas une solution
    Dans l'attente d'une réponse,
    Cordialement,
    Erwan.
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    message.png ‏74 KB

    Bonjour Akagi,
    Dans une chaîne de caractère, "Null" ou "\0", correspond effectivement à une fin de chaîne.
    Pour éviter ce comportement, vous pouvez changer le type de passage de paramètre dans TS en tableau de Numérique.
    Ce faisant, aucun traitement ne sera fait sur le caractère "NULL". pour rappel un char = 1 Octet, on peut donc utiliser un tableau de numérique U8 pour représenter une chaîne de caractère.
    En résumé, si votre chaîne de caractère = 3"Null"01, vous obtiendrez ainsi: tab[0] = 3, tab[1] = 0, tab[2]=1.
    Je suis désolé, mais j'ai du mal à saisir où est intégré le caractère "NULL" dans CVI, est-ce une entrée clavier saisie par l'utilisateur, autre?
    Est-il possible d'utiliser un autre caractère ou série de caractère(non spécial) permettant d'identifier cette transition/caractère spécial "Null"?
    EX: (\) = "Null", soit la chaîne 3(\)01 équivalent à 3"Null"01. Il suffit ensuite d'établir un algorithme permettant de changer (\) en "NULL".
    Cordialement,
    Rémi D.
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    >> Les rencontres techniques de NI - Mesures et acquisition de données : de la théorie à la mise en ...

Maybe you are looking for