Passage d'un tableau de cluster a une DLL

RR

Merci pour les reponses.
Je fais appel a la dll nifb.dll.l'une de ces fonctions me demande de passer un tableau de cluster, et pour cela j'utilise "Adapt to type".
non de la fonction : nifError_t nifGetDeviceList
Attachments:
nifbus.h ‏11 KB
nifbtest.c ‏14 KB
FieldBus.vi ‏44 KB

Similar Messages

  • Possibilité de passage d'une structure C d'une dll appelée dans Labview

    Bonjour, 
    J'aimerais savoir s'il existe un moyen de passer une structure (type de donnée en C) au
    travers de la  boîte de dialogue : "Appeler une fonction d'une
    DLL" pour l'utiliser dans Labview (idéalement sauver directement dans un
    cluster).
    A ce jour j'utilise des pointeurs sur les paramètres individuels pour passer les
    données traitées par ma DLL. 
    Exemple : void  Message(uint32_t *arg1, double *arg2, int32_t arg3)
    En vous remerciant d'avance,
    Meilleures salutations.

    Bonjour,
    En effet, il existe un moyen de passer un cluster dans une DLL en utilisant le type de données "Adapt to Type".
    Il existe une knowledgeBase sur le site de National Instruments expliquant la procédure à suivre.
    How Do I Use Adapt To Type For Call Library Function Nodes?
    Salutations,
    Laurent P.
    Application Engineer
    National Instruments

  • Rendre visible ou invisible un élément d'un cluster le tout dans un tableau de cluster

    Bonjour
    J'ai un tableau de cluster. Chaque cluster contient quatres controls (numérique1, booleen1, menu déroulant1, numérique2).
    En fonction de la valeur du booléen1, je veux rendre visible ou invisible le numérique2.
    Ceci sur chaque cluster du tableau et de façon indépendante pour chaque cluster
    Est-il possible de réaliser celà?
    Merci
    Attachments:
    Labview.jpg ‏27 KB

    Here is my answer to your other posting translated to French. If the wording is wrong blame the Babel Fish Translator not me
    La réponse est oui et non. Il est possible de rendre différentes commandes dans un faisceau évidentes et invisibles. Cependant, ce n'est pas le même pour des rangées. Une rangée est une collection d'articles avec le SEUL differnce étant valeur. Tellement toutes les propriétés de chaque élément doivent être identiques. Vous pouvez programaticaly changer les propriétés de l'élément de rangée, mais notez que c'est élément. Une rangée n'a pas une collection d'éléments qu'elle a 1 élément et un groupe de valeurs. Imaginez la mémoire qui serait nécessaire si chaque propriété simple de chaque index devait être stockée. Ainsi vous pourriez rendre tous des commandes numeric1 invisibles, mais elle sera pour chaque faisceau. Vous ne pouvez pas la rendre évidente à l'index 1 et invisible à l'index 2.

  • 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

  • Passer un tableau à une dll labview

    Bonjour
    J'ai créé une dll labview avec une methode qui sert à passer un tableau de double.
    Quand je passe mon tableau , j'ai une erreur memoire insufissante et ça ne fonctionne pas. je joints mon code et le projet de la dll
    la methode : labview dll_tableau
    le client de test pour la dll : test dll.vi
    question annexe : comment fait on pour débugger une dll en labview?
    Merci
    Attachments:
    test.zip ‏808 KB

    Bonjour,
    J'ai essayé de faire fonctionner votre programme. En appelant le programme test dll.vi j'obtiens bien une erreur de mémoire insuffisante. En revanche je ne comprends pas l'intérêt de la structure séquence, ni celui des différentes étapes. En n'utilisant uniquement l'étape n°2, cette erreur de mémoire n'intervient plus. Je n'ai pas été plus loin dans les tests. Aussi, à quoi de servent les différentes étapes de cette structure?
    Bonne journée,
    M-Junior

  • Formalisme Donnée pour appel d'une DLL

    Bonjour à tous,
    Je suis confronté à un problème dans le cadre de l'utilisation d'une DLL externe, je n'arrive pas à formaliser les données sous labview pour qu'elle soit correctement interprété par la dll via un noeud d'appel externe.
    Les informations fournies par les fichiers d'entête sont les suivantes :
    /** \brief Permet de lire et vérifier l'EEPROM BARTON HILL */
    EXPORT int EEPROM_BARTONHILL_CheckRead(FATHANDLE fatHandle, Read_EEPROM_BARTONHILL* data);
    /** \brief parametres de la lecture de l'EEPROM BARTON HILL */
    typedef struct
    char errorCode; /** \brief code erreur de la requete */
    char refFile[FILENAME_SIZE]; /** \brief Chemin et nom du fichier de reference */
    char maskFile[FILENAME_SIZE]; /** \brief Chemin et nom du fichier de mask */
    unsigned int testResult; /** \brief Nombre d'octet different de la reference */
    } Read_EEPROM_BARTONHILL;
    /** \brief Taille maximum en octets du chemin d'un fichier */
    #define FILENAME_SIZE 50
    Sous python, elles sont interprétées de la manière suivante :
    class Read_EEPROM_BARTON(Structure):
    _pack_ = 1
    _fields_ = [("errorCode", c_byte),
    ("refFile", c_char*50),
    ("maskFile", c_char*50),
    ("result", c_uint),
    J'arrive à faire fonctionner correctement cette bibliothèque sous Python, mais je n'arrive pas à mettre en forme correctement les chaines de caractères pour que labview les interprètes correctement. Il s'agit de lien relatif vers un fichier.
    Comment faire pour que labview interprète correctement les pointeurs inclus dans la structure, je pense avoir utiliser quasiment toutes les possibilités du noeud d'appel sans succès.
    Je vous remercie d'avance pour vos réponses.
    Cordialement,
    Michael.

    Bonjour Eric,
    Merci de ta réponse.
    Comme tu l'as signalé, j'ai bien réaliser l'appel à DLL avec un cluster, en configurant le noeud de méthode en "Adapter au type".
    A partir de là, j'ai tester de les configurations possibles (handle par valeur, pointeur sur les handles, .....), rien n'y fait la dll me retourne un code d'erreur me signalant que mes paramètres sont non valides.
    Quand tu parles de préallouer les chaines de caractères, tu signifies quoi ?
    Pour ma part, j'ai forcé la taille des chaines de caractères à 50 via deux méthodes (soit avec la fonction formater chaine qui force la taille de la chaine résultat à 50, soit en passant par un tableau de U8 redimensionner).
    Je pense que mon problème vient justement de la gestion des chaînes de caractères, mais je ne vois pas le problème dans ma gestion.
    Cordialement,
    Michael

  • Recupérer les valeur d'un Control via un .obj appelé depuis une DLL- Getting a Control value from an .obj file called from a dll

    Bonjour,
    Suite au passage à la version CVI 2013, il faut passer par un fichier .obj au lieu du .c quand on veut utiiser la LoadExternalModule.
    Le pb qui en résulte impossibilité de récupérer la valeur des control dans l'uir géré par le .obj qui est appelé par une dll.
    Autrement, il m'est impossible de faire parvenir à la dll les valeur des control ( dll qui appelle le .obj).
    Quelqu'un a eu le même soucis amigos?
    Merci
    Hi,
    When using the LoadExternalModule function in CVI 2013, we can no longer use a .c file. Instead we have to use an .obj file.
    My issue is that' impossible for me to get a control value from an .iur managed by the .obj witchi is called by a dll. 
    Otherwise it's impossible for me to get the control vale when calling the .obj from a dll.
    Any suggestions Amigos
    Thanks

    For people who could be interested in, here the code I provided to the customer. This code demonstrates that calling a function defined in a .obj file from a DLL which is called itself by a program can be realized without throwing any error.
    In order to use this example, you will have to :
    1) Open "main.cws"
    2) Define "Madll" as Active Project (right clic on the project and click on "Set Active Project")
    3) Build the DLL (CTRL+M)
    4) Define "Main" as Active Project
    5) Click on "Debug Project" in order to build the executable and run it
    This example has been built with CVI 2013.
    Jérémy C.
    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:
    main.zip ‏70 KB

  • [Labwindows/CVI] Integration d'une DLL VC++

    Bonjour à tous,
    J'ai une DLL VC++ avec le .h et le .lib et je n'arrive pas à l'integrer correctement dans un projet CVI.
    dans le .h j'ai une fonction declaré comme suite
    GET_TX(const int FreqMhz, double& resultsevm);
    Labwindows n'accepte pas le passage par reference (double&) donc j'ai modifier la declaration comme suite à fin de l'integrer
    GET_TX(const int FreqMhz, double *resultsevm);
    c'est vrai que j'ai pas d'erreur de compilation suite a cette modif, mais il me semble que la valeur resultsevm retourné par la DLL pas correcte (valeur tres grand % au valeur attendu ) !!!
    Pouvez-vous m'expliquer comment faire pour integrer la dll correctement ?
    si non comment loader la dll dynamiquement ?
    merci d'avance

    Bonjour Tanite, et bienvenue sur le forum de discussins de National Instruments.
    Voici deux documents qui pourraient éventuellement vous aider à utiliser votre DLL dans votre projet CVI :
    1. Creating Import Libraries for a DLL in LabWindows/CVI
    2. FAQ: Using Dynamic Link Libraries with LabWindows/CVI
    Cordialement,
    Vincent.O
    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

  • Pass error cluster from labview dll to teststand

    Hello,
    I just want to pass an error cluster from a dll compiled in LV7.1 to TestStand 3.1. I never receive the contents of the LV error cluster in TS. I compiled my function with standard calling convention option, this should work. In my VI I generate only an error and pass to error output.
    LV Settings:
     TS settings:
    regards
    MB

    MB,
    please follow the info in this KB:
    http://digital.ni.com/public.nsf/allkb/22BF02003B4588808625717F003ECD67?OpenDocument
    Please note that using "By Value" will never return any values to TestStand!
    You cannot use the default error-container in TestStand to receive data from the LV error cluster if you compile the VI into a LV DLL.
    So either you choose to follow the KB or you split up the error cluster in your LV VIs to return error.occurred (boolean), error.code (numeric i32) and error.msg (LV String) .
    hope this helps,
    Norbert
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • Intégration d'une DLL générée sur Simulink dans un algorithme Labview, à finalité app temps réel sur NI myRIO

    Bonjour à tous,
    En deux mots : dans le cadre d'un projet interfacultés, je dois intégrer à mon algorithme Labview l'exécution d'un algorithme d'optimisation actuellement codé sur Simulink d'un tiers. La finalité de mon algorithme est de générer une app temps réel que j'exécute sur le matériel embarqué, NI myRIO.
    J'ai pu lire que justement il était possible d'intéragir entre Labview et Simulink, via le fait que Simulink permet de générer une DLL, et Labview de la lire/exécuter.
    Mes questions sont :
    Est-ce tout-à-fait envisageable dans mon optique d'app temps réel sur myRIO ? (Par exemple, l'exécution de la DLL pourra-t-elle se faire en parallèle du reste mon algorithme Labview (autres acquisitions de données, etc))
    Quid du toolkit NI Labview model interface ? Est-il indispensable de l'acquérir (et si oui pourquoi) ?
    Je sais qu'il est possible de réécrirer directement sur Labview des algorithmes d'optimisation (ici, du MPC), mais ce serait à priori la dernière option envisagée.

    Bonjour,
    Le MIT est la seule option non-obsolète pour exécuter des modèles Simulink dans LabVIEW. Et si tant est que vous utilisez MIT 2014 (avec LabVIEW 2014), vous pourrez exécuter votre modèle Simulink sur le myRIO.
    Les bases pour que tout fonctionne se trouvent ici :
    - http://digital.ni.com/public.nsf/allkb/E552B0CD4E48215586257DF7005BE055?OpenDocument
    Cordialement,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

  • Liaison d'une structure entre CVI et TestStand pour une DLL

    Bonjour,
    Je vous écris car en se moment je fais un ajout d'instrument sur un driver en passant par une DLL. Pour le nouvel appareil, il me faut modifier un projet existant. Ce qui me pose porblème c'est que dans le projet il y a une structure qui est passé en paramètre de fonctions usuelles et j'aimerais pouvoir ajouter dans cette structure de nouveau élément. Car quand je code dans la structure les nouvelles composantes et que je modifie, la structure déjà existant dans la séquence TestStand lié à l'ancien code, je n'arrive pas à transmettre les valeurs de TestStand à mon code. Alors que les anciens composants de la structure prennent bien leurs valeurs. J'ai bien essayé de recréer sous TestStand un nouveau type de structure sans partir de l'existant, hélas le résultat à été le même.
    Il est fort possible que j'ai oublié une manipulation n'étant pas encore totalement bien familiariser avec l'environnement de CVI et de TestStand.
    Merci de l'effort de lecture. En attendant une réponse à mon problème, je reste disponible pour plus de détails

    Rodéric -- En ce qui concerne la structure, j'y ai pensé et du coup la première chose que j'ai fait c'est en recréer une nouvelle. en ce qui concerne le menu déroulant, je t'ai pris un imprimé. On voit bien ma structure dans les choixs mais quand je la séléectionne on se retrouve dans le cas du premier screenshot.
    Eric -- Pour le Header, je le recompile en même temps que mon projet et j'arrive ensuite à voir mon paramètre lors d'une implantation de celle-ci depuis ma structure. concrètement j'ai du mal à percevoir le "reconstruire la DLL en prenant en considérant la nouvelle structure". Si tu pouvais un peu plus m'éclairer sur ce point, s'il te plait.
    Pièces jointes :
    MenuDeroulant.JPG ‏19 KB
    PieceOfCode.JPG ‏18 KB

  • Comment attaquer une DLL sous labview

    bonjour,
    pour le cadere d'un projet je cherche à savoir s'il est possible d'attaquer directement une DLL sous LABVIEW
    cordialement

    Merci mehdi pour la traduction: "Appeler une fonction d'une DLL"

  • Comment créer une dll sous labview avec plusieurs fonctions venant du même VI et possédant un tabcontrol ?

    Comment créer une dll sous labview avec plusieurs fonctions venant du même VI et possédant un tabcontrol ?

    Bonjour,
    L’utilisation d’une « commande d’onglet », ou « tabcontrol », ne pose pas de problème pour la définition d’une DLL à partir d’un VI.
    Selon la version de LabVIEW que vous utilisez, le processus de création de DLL sera différent.
    Si vous utilisez une version antérieure à la v8, vous pouvez vous reporter à ce lien : Construire une DLL avec LabVIEW 7.0.
    Sinon, vous devez enregistrer votre VI dans un projet, puis définir le connecteur de votre VI avec les paramètres d’entrées/sorties (cette opération est indépendante des différentes « commandes d’onglet » que vous avez pu implémenter).
    Sélectionnez, dans le projet les « spécifications de construction » dans le projet (via un click droit), pour créer une DLL. Dans la boite de dialogue qui s’ouvre alors, à l’onglet « fichiers source », vous pouvez ajouter votre VI parmi les « VIs exportés » et configurer, en fonction des E/S câblées sur le connecteur de votre VI, les fonctions contenues dans la DLL.
    J’espère que ces quelques éléments auront pu vous éclairer.
    Cordialement,
    Guillaume H.
    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;}
    >> NIDays 2011, le mardi 8 février au CNIT de Paris La Défense

  • Appel d'une dll avec un callback d'une autre fonction

    Bonjour.
    J'ai une carte d"acquisition vidéo dont je souhaite réaliser les drivers sous labview. Une DLL est fournie avec le manuel SDK d'utilisation.
    Mais je coince à ce niveau :
    Register Draw callback function: RegisterDrawFun()
    API:
    int RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun), LONG nUser)
    Parameters:
    DWORD nport Channel Index
    DRAWFUN(DrawFun) callback function
    LONG nUser user data
    Callback function explanation:
    void CALLBACK DrawFun(LONG nPort,HDC hDc,LONG nUser)
    nPort channel number
    hDc devide context of offscreen surface is similar to the DC of display window
    nUser user data
    Return Values:
    If the function succeeds, the return value is 0.
    Remarks:
    When the video is previewed with offcreen mode, the application call this function to get the device context of offscreen surface so that the application can draw lines, strings, rectangles on the surface of video.
    C'est le callback de la fonction "drawfun"  que je ne sais pas mettre en oeuvre. Et dans quelle DLL de windows ce trouve cette fonction car elle n'est pas dans la DLL fournie.
    Pourriez vous aussi me dire , comment obtient t'on le "handle" d'une valeur contenu dans un indicateur pour le donner en argument d'un appel à une DLL.
    Merci d'avance pour votre aide.
    Cordialement,
    MH.

    Dupliqué >> http://forums.ni.com/t5/LabVIEW/appel-d-une-dll-av​ec-un-callback-d-une-autre-fonctionappel-d-une/m-p​...

Maybe you are looking for