Parametre envoyé à une DLL Labview

Bonjour
J'ai créé une DLL sous Labview (5 Vi + 1 Global). Cette DLL ouvre un port de commication série (fixé à 1 pour l'instant).
Cette DLL est appelée par un programme tiers (BATEMC).
Elle est implantée sur plusieurs PCs différents sur lesquels le port Com à utiliser est différent.
Je voudrai passer en paramètre le N ° de port Com (1,2,3...) ou son nom (Com1,Com2, Com3...).
Pouvez vous m'expliquer comment reccupérer cette valeur ?
Merci d'avance pour votre contribution.
PS: Je suis débutant sous Labview

La ressource VISA à spécifier est polymorphe, et peut notamment être indiquée par une chaine de caractère. Après, on peut facilement étendre ça à d'autres possibilités avec les fonctions de formatage de chaines de caractères. Par exemple ici, l'option 3 montre qu'avec un type énum (ou entier!) on peut obtenir la chaine qui sera utilisée pour ouvrir une session VISA.
(Attention, il faut que la commande soit connectée au connecteur du VI et il faut l'exporter au moment de la création de la DLL pour que cela devienne un paramètre de fonction dans l'environnement d'appel).
Cdt,
Eric M. - Application Engineering Specialist
Certified LabVIEW Architect
Certified LabWindows™/CVI Developer

Similar Messages

  • 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

  • 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

  • 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

  • Comment envoyé une donnée via rs232 avec labview

    Salut, comment envoyé une donnée via rs232 avec labview ?
    Hello, how given sent via rs232 with labview?
    Solved!
    Go to Solution.

    You can use the LabVIEW example for "Basic Serial Write and Read." In the English LabVIEW it is found here:
    Vous pouvez utiliser l'exemple LabVIEW pour "SerialBasic écrire et lire." Dans le LabVIEW anglais, il se trouve ici:
    Zach P.
    Product Support Engineer | LabVIEW R&D | National Instruments

  • 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

  • Paaser un booleen à une DLL créer sous labview

    J'ai créé une dll à partir d'un VI. Pendant la création je précise bien une variable booleenne que j'utilise. Mais au moment d'utiliser cette dll avec labview il me propose un  signed 8. J'aimerais savoir comment faire passer directement mon booleen à la dll sans etre obligé d'adapter la variable...
    j'ai éfféctué beaucoup de recherche sur le forum, si vous avez  une solution merci de me faire signe

    Bonjour,
    Afin de pouvoir plus facilement vous aider, je vais avoir besoin de vos informations afin de mieux cerner le problème.
    Pouvez-vous m’indiquer quelle est la version de LabVIEW que vous utilisez ?
    Vous est il possible, également, de préciser par quel moyen vous communiquez entre le PC d’où vous exécutez le code LabVIEW et le banc de test (bus GPIB, port USB + compact DAQ, autre…) ?
    Le VI d’origine dont vous souhaitez extraire des informations fonctionne t il bien avec le banc de mesure ?
    Dans le nouveau VI que vous créez, contenant vos DLL, est ce que les protocoles habituels de communication sont bien définis (gestion des tâches, si besoin, ouverture et fermeture des  communications avec le banc…) ?
    Pourriez vous m’envoyer, par exemple, le VI sur lequel vous travaillez ou un exemple de code reproduisant le problème (par exemple un sous VI contenant votre DLL) ?
    Je vous remercie par avance pour votre réponse.
    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

  • 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

  • Appel d'une dll avec un callback d'une autre fonctionappel 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.

    Salut,
    Tu dois utiliser un "Call Library Function Node".  Je ne saurais comment traduire en francais. 
    Ca se situe a l'interieur des fonctions de connectivite sous libraries et executables.
    Lorsque tu installes le "Call Library Function Node" sur ton diagramme, tu dois par-apres le configurer.
    Tu cliques (2x) sur l'icone et tu choisi la fonction dll auquel tu veux envoyer des valeurs.  Une fois choisi, tu peux joindre les parametres.

  • 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

  • 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​...

  • [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

  • Appeler une dll qui est referencé à une autre dll

    Bonjour tout le monde.
    J'ai besoin de votre aide pour résoudre mon problème :
    En effet je dispose d' un laminoir qui est piloté par un programme de VB6 référencé a une dll de "MX du fabricant de moteur" J'ai créé une dll sous vb édition express 2008 pour récupérer ce programme et et j ai reussi à appeler cette cette dll par vb.net pour controler mes moteurs mais pour appeler cette dll par labview 7.0 j 'obtiens l'erreur 1172 qui me dit qu'il y a un pb d instance lié à la dll de MX component.
    Ce que j arrive pas a comprendre c est k j ai utiliser labview pour appeler une dll.net référencé a une dll.net et ça marche. Mais pas une dll.net référencé a une dll de MX composent

    Bonjour,
    Merci d'avoir posté votre question sur le forum de National Instruments.
    Pourvez-vous m'envoyer votre code?
    Brice S.
    National Instruments France

  • Erreur suite au chargement d'une DLL

    Bonjour à tous,
    Dans le cadre de mon projet, je suis amené à utiliser une DLL que je charge au début de mon programme avec LoadLibrary et GetProcAddress. Tout se passe alors sans erreur!
    Puis j'affiche un ID sur un nouveau panel. Sur celui-ci en cliquant sur un bouton qui permet de revenir au panel précédent, le programme marque :
    " FATAL RUN-TIME ERROR:  The program has caused a 'Double' fault at 001B:685A6297 ".
    Or quand je mets en commentaire le chargement de la DLL, le problème n'apparaît plus!
    J'ai déjà tenté de résoudre le problème notamment avec les discussions sur vos forums, mais rien qui marche..
    Quelqu'un peut-il m'aider?
    Merci d'avance
    Cordialement
    Hervé M.

    Bonjour mago,
    Le fait d'appeler LoadLibrary via une autre fonction n'en fait pas un thread particulier :
    http://www.ni.com/white-paper/3663/en
    Ensuite, l'erreur obtenue coincide avec plusieurs soucis potentiels, dont le principal est la DLL appelée. Si cette dernière est créée en Borland Delphi, il y a des chances pour qu'elle fasse crasher l'application lors du rafraichissement de l'UI, en passant notamment dans une DLL Windows nommée icm32.dll.
    Si vous n'avez pas d'emprises sur la DLL, il n'y a donc que peu de solutions si ce n'est :
    - faire du multithreading, ou
    - renommer la dll icm32.dll (dans Windows\System32) par exemple en icm32.toto. Cela handicapera certaines fonctionnalités visuelles du programme (au niveau de l'interface utilisateur), mais théoriquement dans une moindre mesure.
    Qu'en est-il de la construction de l'application en mode Release ? Ou avec un autre compilateur que CVI (choisissable dans les options) ? Ce sont deux idées supplémentaires.
    Cdt,
    Eric
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

Maybe you are looking for