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 KBHere 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 KBBonjour,
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 KBBonjour,
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 KBBonjour,
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 -
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
ThanksFor 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'avanceBonjour 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
MBMB,
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. -
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étailsRodé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
cordialementMerci 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 ?
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-avec-un-callback-d-une-autre-fonctionappel-d-une/m-p...
Maybe you are looking for
-
Ipod Mini --Songs Won't Sync To Ipod, But They Show Up In My Library..Help!
OK, all my songs went missing off of my mini and I can't get them to sync back on but they are still in my library... and now when I try to connect the ipod into itunes and connect my ipod, an error messege comes up, something about playlists.. but i
-
How do I uninstall OS X Server 3.0.2 completely from iMac
I would like to remove all traces of OS X Server 3.0.2 from my iMac. Could someone please provide correct uninstall procedure. I then want to reinstall clean installation. I have made a total mess of previous installation. Thanks
-
When I open iMovie, it says that quick time componets are missing, "Please re-install"...When I do that it says that ONLY 9 is supported and I have to have that first. What gives with that?
-
Soap2JDBC : Problem while designing data structure for Query
Hi ALL, I am doing webservices(SOAP) to JDBC(syn) scenario without using BPM.We are sending the request from portal and getting the response from database. I have lot of Queries.I am going to design based on the database Query.Please find the followi
-
Applying custom icons to all files of a type
I used to use ResEdit back int he day - and have used various tools on Mac and Windows to change icons. BUt I am stuggling with a default custom icon option for Mac OS X. I have a set of farily simply icons for use with a number of file types that I