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

classic Classic list List threaded Threaded
10 messages Options
troy22 troy22
Reply | Threaded
Open this post in threaded view
|

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

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
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Bruno JOFRET-3 Bruno JOFRET-3
Reply | Threaded
Open this post in threaded view
|

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 <stdint.h>'
    '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
[hidden email]
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

_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
remy chuchla remy chuchla
Reply | Threaded
Open this post in threaded view
|

[Enseignement] netcdf

Bonjour
Existe t il un moyen simple pour lire des fichiers netcdf sous scilab
???????
Merci pour votre reponse
Rémy Chuchla
_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Vincent COUVERT-2 Vincent COUVERT-2
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] netcdf

Bonjour,

C'est une fonctionnalité que nous avons en projet (pour un stage par
exemple).

Une première interface non-disponible sous ATOMS et qui n'est pas
maintenue ni développée par Scilab Enterprises existe :
http://math.acadiau.ca/ACMMaC/software/scilab_netcdf.html.

Cordialement,
Vincent COUVERT


Le 31/07/2013 16:58, remy chuchla a écrit :
> Bonjour
> Existe t il un moyen simple pour lire des fichiers netcdf sous scilab
> ???????
> Merci pour votre reponse
> Rémy Chuchla
> _______________________________________________
> enseignement mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/enseignement


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
remy chuchla remy chuchla
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] netcdf

Merci beaucoup pour votre reponse
Mais j ai oublie de vous dire que je travaille sous windows xp/7
Et le lien concerne plus l environnement linux.
cordialement
Rémy Chuchla

> Bonjour,
>
> C'est une fonctionnalité que nous avons en projet (pour un stage par
> exemple).
>
> Une première interface non-disponible sous ATOMS et qui n'est pas
> maintenue ni développée par Scilab Enterprises existe :
> http://math.acadiau.ca/ACMMaC/software/scilab_netcdf.html.
>
> Cordialement,
> Vincent COUVERT
>
>
> Le 31/07/2013 16:58, remy chuchla a écrit :
>> Bonjour
>> Existe t il un moyen simple pour lire des fichiers netcdf sous scilab
>> ???????
>> Merci pour votre reponse
>> Rémy Chuchla
>> _______________________________________________
>> enseignement mailing list
>> [hidden email]
>> http://lists.scilab.org/mailman/listinfo/enseignement
>
>
> _______________________________________________
> enseignement mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/enseignement

_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Sylvestre Ledru-4 Sylvestre Ledru-4
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] netcdf

Autrement, dans les nightly build de Scilab, la future 5.5.0, nous
proposons de manière native la lecture de n'importe
quel fichier HDF5.
Comme Netcdf est basé sur HDF5, vous pouvez accéder aux données (quelque
soit la plateforme) mais, malheureusement, si le formalisme
de netcdf est complexe, la lecture via HDF5 peut l'être aussi...

Sylvestre


On 31/07/2013 17:33, remy chuchla wrote:

> Merci beaucoup pour votre reponse
> Mais j ai oublie de vous dire que je travaille sous windows xp/7
> Et le lien concerne plus l environnement linux.
> cordialement
> Rémy Chuchla
>
>> Bonjour,
>>
>> C'est une fonctionnalité que nous avons en projet (pour un stage par
>> exemple).
>>
>> Une première interface non-disponible sous ATOMS et qui n'est pas
>> maintenue ni développée par Scilab Enterprises existe :
>> http://math.acadiau.ca/ACMMaC/software/scilab_netcdf.html.
>>
>> Cordialement,
>> Vincent COUVERT
>>
>>
>> Le 31/07/2013 16:58, remy chuchla a écrit :
>>> Bonjour
>>> Existe t il un moyen simple pour lire des fichiers netcdf sous
>>> scilab ???????
>>> Merci pour votre reponse
>>> Rémy Chuchla
>>> _______________________________________________
>>> enseignement mailing list
>>> [hidden email]
>>> http://lists.scilab.org/mailman/listinfo/enseignement
>>
>>
>> _______________________________________________
>> enseignement mailing list
>> [hidden email]
>> http://lists.scilab.org/mailman/listinfo/enseignement
>
> _______________________________________________
> enseignement mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/enseignement

_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
troy22 troy22
Reply | Threaded
Open this post in threaded view
|

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

In reply to this post by Bruno JOFRET-3

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
[hidden email]
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
_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
troy22 troy22
Reply | Threaded
Open this post in threaded view
|

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

In reply to this post by Bruno JOFRET-3

Bonsoir

 

ceci concerne la suite de mon développement Dll de LabVIEW vers scilab.


je souhaite maintenant travailler avec des tableaux d'entiers (pour avancer d'un cran, les doubles pour après), et je rebloque lors de l'appel.

Je ne trouve pas d'exemple correspondant exactement à ma démarche donc je vous resollicite.

 

Fichier .h de la fonction en dll :

 

#include "extcode.h"

#pragma pack(push)

#pragma pack(1)

 

#ifdef __cplusplus

extern "C" {

#endif

typedef struct {

int32_t dimSize;

int32_t CommandeNumRique[1];

} Int32ArrayBase;

typedef Int32ArrayBase **Int32Array;

 

/*!

 * AddTabInt

 */

void __cdecl AddTabInt(Int32Array *tabA, Int32Array *tabB, 

Int32Array *tabRes);

 

long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);

 

/*

* Memory Allocation/Resize/Deallocation APIs for type 'Int32Array'

*/

Int32Array __cdecl AllocateInt32Array (int32 elmtCount);

MgErr __cdecl ResizeInt32Array (Int32Array *hdlPtr, int32 elmtCount);

MgErr __cdecl DeAllocateInt32Array (Int32Array *hdlPtr);

 

#ifdef __cplusplus

} // extern "C"

#endif

 

#pragma pack(pop)

 

 

 

 

Mon script scilab pour le test :

 

a=[12,25,24]

b=[2,41,9]

link('F:\Prog LabVIEW\Dll labview\dll2\SharedLibTabIntAdd.dll','AddTabInt','c')

res = call("AddTabInt",a,1,"i",b,2,"i","out",[1,3],3,"i")

disp(res)

 

Le message d'erreur dans la console :

 

-->exec('C:\Documents\Scilab\TestDllAddTabInt.sce', -1)

Bibliothèque partagée chargée.

Édition de liens effectuée.

Warning !!!

Scilab has found a critical error (EXCEPTION_ACCESS_VIOLATION)

with "call" function.

Save your data and restart Scilab.

 

 i   

 

Attention : Problème avec la pile...



Merci d'avance si vous voyez le problème d'accord entre prototype et appel de la fonction.

 

TR

ps :Par ailleurs y a t'il un document qui précise les limitations des types de données utilisables?

_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
troy22 troy22
Reply | Threaded
Open this post in threaded view
|

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

In reply to this post by Bruno JOFRET-3

Bonjour,

Ok pour opérations sur des tableaux d'entiers.

J'ai reconfiguré le prototype de la fonction AddTabint2 de la façon suivante (2 fonctions dans la bibliothèque) :

 

#include "extcode.h"

#pragma pack(push)

#pragma pack(1)

 

#ifdef __cplusplus

extern "C" {

#endif

typedef struct {

int32_t dimSize;

int32_t CommandeNumRique[1];

} Int32ArrayBase;

typedef Int32ArrayBase **Int32Array;

 

/*!

 * AddTabInt

 */

void __cdecl AddTabInt(Int32Array *tabA, Int32Array *tabB, 

Int32Array *tabRes);

/*!

 * AddTabInt2

 */

void __cdecl AddTabInt2(int32_t tabA[], int32_t tabB[], int32_t tabRes[], 

int32_t *NBelts);

 

long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);

 

/*

* Memory Allocation/Resize/Deallocation APIs for type 'Int32Array'

*/

Int32Array __cdecl AllocateInt32Array (int32 elmtCount);

MgErr __cdecl ResizeInt32Array (Int32Array *hdlPtr, int32 elmtCount);

MgErr __cdecl DeAllocateInt32Array (Int32Array *hdlPtr);

 

#ifdef __cplusplus

} // extern "C"

#endif

 

#pragma pack(pop)

 

Le code scilab pour l'utiliser :

a=[12,25,24]

b=[2,41,9]

nbelts=3

NomsFonctions=['AddTabInt','AddTabInt2']

link('F:\Prog LabVIEW\Dll labview\dll2\SharedLibTabIntAdd.dll',NomsFonctions,'c')

res = call("AddTabInt2",a,1,"i",b,2,"i",nbelts,4,"i","out",[1,3],3,"i")

disp(res)

 

résultat :

-->exec('C:\Documents\Scilab\TestDllAddTabInt2.sce', -1)

 

    14.    66.    33. 

 

Au niveau de LabVIEW il faut définir des pointeurs sur les données.

(si quelqu'un est intéressé je peux faire un petit document sur cette configuration)

 

reste à tester les tableaux de double.

Cordialement

TR

 


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Pierre Dieumegard Pierre Dieumegard
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] Dll acquisition (DAQ) labview -> scilab : autres DLL d'acquisition

Je me permets d'intervenir dans cette discussion, même si ce n'est pas le sujet principal.
Depuis de nombreuses années, je développe des pilotes de type bibliothèques dynamiques (dll de windows, so de linux)  pour des appareils et interfaces de mesure, et des logiciels pour utiliser ces pilotes. C'est disponible sur mon site http://sciencexp.free.fr.
Scilab ne peut pas utiliser directement ces pilotes, mais on peut faire un adaptateur (une dll spécifique de Scilab, qui est capable d'échanger avec les pilotes en question), voir
http://sciencexp.free.fr/sciencexp2011/documents/programmation/appilotes/appilotes_win_scilab.zip 

En espérant que ça puisse être utile à quelqu'un

Pierre Dieumegard

La 01/08/2013 09:24, Thierry ROYANT skribis:

Bonjour,

Ok pour opérations sur des tableaux d'entiers.

J'ai reconfiguré le prototype de la fonction AddTabint2 de la façon suivante (2 fonctions dans la bibliothèque) :

 

#include "extcode.h"

#pragma pack(push)

#pragma pack(1)

 

#ifdef __cplusplus

extern "C" {

#endif

typedef struct {

int32_t dimSize;

int32_t CommandeNumRique[1];

} Int32ArrayBase;

typedef Int32ArrayBase **Int32Array;

 

/*!

 * AddTabInt

 */

void __cdecl AddTabInt(Int32Array *tabA, Int32Array *tabB, 

Int32Array *tabRes);

/*!

 * AddTabInt2

 */

void __cdecl AddTabInt2(int32_t tabA[], int32_t tabB[], int32_t tabRes[], 

int32_t *NBelts);

 

long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);

 

/*

* Memory Allocation/Resize/Deallocation APIs for type 'Int32Array'

*/

Int32Array __cdecl AllocateInt32Array (int32 elmtCount);

MgErr __cdecl ResizeInt32Array (Int32Array *hdlPtr, int32 elmtCount);

MgErr __cdecl DeAllocateInt32Array (Int32Array *hdlPtr);

 

#ifdef __cplusplus

} // extern "C"

#endif

 

#pragma pack(pop)

 

Le code scilab pour l'utiliser :

a=[12,25,24]

b=[2,41,9]

nbelts=3

NomsFonctions=['AddTabInt','AddTabInt2']

link('F:\Prog LabVIEW\Dll labview\dll2\SharedLibTabIntAdd.dll',NomsFonctions,'c')

res = call("AddTabInt2",a,1,"i",b,2,"i",nbelts,4,"i","out",[1,3],3,"i")

disp(res)

 

résultat :

-->exec('C:\Documents\Scilab\TestDllAddTabInt2.sce', -1)

 

    14.    66.    33. 

 

Au niveau de LabVIEW il faut définir des pointeurs sur les données.

(si quelqu'un est intéressé je peux faire un petit document sur cette configuration)

 

reste à tester les tableaux de double.

Cordialement

TR

 



_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement