[Enseignement] Dll acquisition (DAQ) labview -> scilab

Thierry ROYANT thierry.royant at orange.fr
Mer 31 Juil 19:03:55 CEST 2013


Merci pour cette réponse
le problème d'appel de la fonction est réglé grâce à cette configuration de call.
Entre la définition des arguments de la fonction et ce paramétrage, quelques difficultés...
Je vais maintenant faire évoluer cette bibliothèque de base pour transmettre des tableaux de double : j'espère qu'il n'y a pas de limitation particulière.
Encore merci
T. Royant
 





> Message du 31/07/13 15:04
> De : "Bruno JOFRET" 
> A : "Thierry ROYANT" , "French users mailing list for Scilab in education" 
> Copie à : 
> Objet : Re: [Enseignement] Dll acquisition (DAQ) labview -> scilab
> 
>
Bonjour,
> 
> Je vous joins un code Scilab qui fonctionne, avec un morceau de C compilé a la volée par Scilab.
> Si 'res' est votre variable de retour dans AddInt, alors il est en position 3 dans la séquence d'appel et doit
> se trouver après le "out" dans l'appel a call.
> 
> Bonne reception
> 
> //=================== Code Scilab ======================
> 
> cd TMPDIR;
> //Code C
> f1=['#include '
>     'void AddInt(int32_t *a, int32_t *b, int32_t *res)' 
>     '{'
>     ' *res = *a + *b;'
>     '}'];
> 
> //Ecriture dans un fichier
> mputl(f1, 'AddInt.c')
> // Creation de la librairie en code Scilab
> ilib_for_link('AddInt', 'AddInt.c',[],"c")
> // Chargement de la librairie
> exec loader.sce
> 
> a = 2;
> b = 4;
> // Entrees:
> // a est un entier 'i' a la position 1
> // b est un entier 'i' a la position 2
> // Sorties:
> // res est un entier 'i' a la position 3 de taille 1x1
> res = call("AddInt",a,1,"i",b,2,"i","out",[1,1],3,"i");
> disp(res) 
> 
> //===================================================
> 
> On 07/30/2013 12:52 PM, Thierry ROYANT wrote:
>
Je souhaite développer une partie acquisition de données (DAQ) en utilisant une Dll créée avec LabVIEW.
Je commence au plus simple, en essayant d'utiliser une fonction d'addition de 2 entiers, sans succès :
le chargement de la bibliothèque semble ok (link)
mais blocage au niveau de l'appel de la fonction (call) 
le protype de ma fonction est :

void __cdecl AddInt(int32_t *a, int32_t *b, int32_t *res);

 
si quelqu'un a déjà fait cette manip? 
peut-être est-ce un simple problème de paramétrage de la fonction call.
 
exemples de retours :
1°)

-->call('AddInt',a,b,res)
Warning !!!
Scilab has found a critical error (EXCEPTION_ACCESS_VIOLATION)
with "call" function.
Save your data and restart Scilab.
 ans  =
 
    5.  
 
Attention: problème avec la pile ... nettoyé.

 
2°)

-->call('AddInt',a,1,"i",b,2,"i",res,3,"i","out",[1,1],4,"i")
 ans  =
 
  - 11.  
 le résultat n'est pas correct (-11 tout le temps, quels que soient a et b)

 
merci d'avance
TR

>
>
_______________________________________________
enseignement mailing list
enseignement at lists.scilab.org
http://lists.scilab.org/mailman/listinfo/enseignement



> 
>
-- 
Bruno JOFRET
Software Architect

Scilab Enterprises
143bis rue Yves Le Coz - 78000 Versailles, France
Phone: +33.1.80.77.04.69
http://www.scilab-enterprises.com

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://lists.scilab.org/pipermail/enseignement/attachments/20130731/019e37d2/attachment.htm>


Plus d'informations sur la liste de diffusion enseignement