Bonjour,
j'essaie de communiquer avec un instrument Thorlab à l'aide des dll installées. Ces dll sont fonctionnelles avec matlab mais je voudrais passer tout le système en Python.
Voici mon code :
Il semble que le format de donnée ne convienne pas, j'obtiens des codes d'erreurs -1073807343 et -1073807247 (quand je retire le by_ref).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 import ctypes as ct ThorLDC4100_Library=ct.cdll.LoadLibrary('C:\\Program Files/IVI Foundation/VISA/Win64/Bin/TLDC4100_64.dll') rsrcName=ct.c_wchar_p("COM9") id_query = ct.c_ushort(1) reset_instr = ct.c_ushort(1) InstrumentHandle = ct.c_uint32(1) ThorLDC4100_Library.TLDC4100_init(rsrcName, id_query, reset_instr, ct.byref(InstrumentHandle))
J'ai une première doc qui donne la fonction TLDC4100_init comme :
En remontant les headers visatypes et TLDC4100.h, le format attendu semble être :
Code : Sélectionner tout - Visualiser dans une fenêtre à part # [long, int8Ptr, ulongPtr] TLDC4100_init(int8Ptr, uint16, uint16, ulongPtr)
Le code matlab qui fonctionne est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #ViStatus _VI_FUNC TLDC4100_init (ViRsrc rsrcName, ViBoolean id_query, ViBoolean reset_instr, ViPSession vi); #TLDC4100_init (charPtr, unsigned short , unsigned short, unsigned int Ptr);
Code MATLAB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ResourceName = [double('COM4\0') 0]; IDQuery = 1; Reset_Device = 1; InstrumentHandle = libpointer('uint32Ptr', 0); % [long, int8Ptr, ulongPtr] TLDC4100_init(int8Ptr, uint16, uint16, ulongPtr) status = calllib(libname, 'TLDC4100_init', ResourceName, IDQuery, Reset_Device, InstrumentHandle);
Mais mais Matlab appelle un compilateur c (gcc) pour vérifier et transformer les types des variables envoyées au dll.
Je suis novice, quelqu'un voit-il une erreur de base dans les types que j'envoie ?
Je ne vois pas comment entrer 'COM4' en charPtr autrement qu'avec c_wchar_p.
Merci de votre aide.
Partager