Discussions au sujet des autres produits NI

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

Appel sous LabVIEW d'une DLL issue de Matlab

Bonjour,

Je travaille sur un projet sur lequel le service scientifique travaille sous Matlab et le système final est sous LabVIEW. Du classique :roll:

Une fonction sous Matlab doit être appelée par le soft sous Labview.
Après réunion avec les collègues, il y a deux possibilités:
1) Compiler la fonction sous la forme d'une dll. Normalement simple à utiliser et modifier, mais complexe pour configurer la compilation.
2) Créer un exécutable et faire une interface avec Labview. Il y a un léger flou artistique et il nécessiterai l'achat d'une licence.
Seulement personne ne sais exactement le faire -_-'. Je sollicite donc le forum!

Nous sommes en train de tester la solution de la dll (la 1)).
La fonction a été compilée sous Matlab avec la commande suivante:
mcc -B csharedlib:WD windshear_detect
En sortie j'ai 6 fichiers nommé WD (.dll, .c, .h, .exp, .exports, .lib).
Jusque là ça SEMBLE ok.
Dans le fichier WD.h, on trouve le prototype suivant:
extern LIB_WD_C_API bool MW_CALL_CONV mlfWindshear_detect(int nargout, mxArray** mat_bw, mxArray* M_vr, mxArray* r0, mxArray* r1, mxArray* delta_r, mxArray* t0, mxArray* t1, mxArray* delta_t, mxArray* seuil_cisaillement, mxArray* seuil_strict);
bool MW_CALL_CONV mlxWindshear_detect(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);
Je suppose que la fonction a appeler est mlfWindshear_detect.

Sous Labview, j'ai créé un VI contenant juste le test de cette dll. L'entrée est fichier texte  contenant des valeurs numériques et de NaN.
http://img135.imageshack.us/img135/4862/algocode.gif
J'utilise la boite "Appeler une fonction d'une DLL".
Pour la configuration de la boite, j'ai fait comme suis:
http://img818.imageshack.us/img818/3264/algocode1.gif
ça c'est la configuration du tableau de sortie:
http://img607.imageshack.us/img607/8499/algocode2.gif

Quand j'exécute mon VI, le tableau de sortie (mat_bw) contient les mêmes données que le tableau d'entrée (je devrai avoir des 0 ou des 1).
Je suppose donc que ça ne marche pas :redface:

Le soucis c'est que je n'ai aucune idée à quel(s) endroit(s) c'est mal configuré (compilation de la dll? appel? ...)

Si des personnes s'y connaissant peuvent me donner des indications 🙂

0 Compliments
Message 1 sur 3
4 074 Visites

Bonjour,

 

Attention aux fonctions retournant des pointeurs sous LabVIEW. Je ne peux que vous conseiller d'effectuer un test en premier lieu avec des fonctions basique de test que vous aurez cree vous meme en partant de zero afin d'etre sur de ce que vous faites plutot que je partir directement de la DLL creee par vos pairs.

 

Ainsi pour citer un ingenieur NI :

 

"Array variables in C/C++ are actually pointers that point to the first element of the array. Because of this, when a function returns an array, it is really returning a pointer to the array. To dereference a pointer to an array you can use either MoveBlock or GetValueByPointer."

 

Vous l'aurez compris, recuperer des donnees provenant d'un pointeur est assez difficile a faire directement via LabVIEW.

 

Heureusement depuis la version 8.5, il est fourni avec LabVIEW un nouveau VI (Xnode en realite) intitule "GetValueByPointer" qui est disponible sous vi.lib\utility\imports dans le dossier de LabVIEW.

 

Grace a celui-ci vous pourrez obtenir les donnees etant pointees par votre pointeur et non le pointeur lui meme.

 

Vous trouverez plus d'infos ici : http://decibel.ni.com/content/docs/DOC-9091/version/3

 

Cordialement.

 

PS : je vous conseille vivement de creer une DLL simple via Matlab pour commencer....

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
0 Compliments
Message 2 sur 3
4 063 Visites

Bonjour,

J'ai le problème inverse: j'ai récupéré une courbe sous labview venant d'un appareil tektronix et je souhaiterai transférer cette courbe sous matlab (sous forme de vecteurs).

Savez vous comment faire?

Cordialement,

 

0 Compliments
Message 3 sur 3
3 263 Visites