Как объединить модули PyVisa и ctypes в Python

Я пытаюсь получить данные с USB-устройства (Thorlabs - LC100/M Smart Line Camera). Thorlabs предоставляет файл.dll (динамическая библиотека) вместе с образцами LabVIEW.

Файл.dll содержит список функций, входными данными которых являются в основном объекты VISA, такие как VISA Resource Name.

Я хочу реализовать приложение Python, которое может получать данные этого устройства, используя тот же файл.dll.

До сих пор я использую pyvisa для создания объекта visa и ctypes для загрузки динамической библиотеки (файл.dll) в python. Мой вопрос заключается в том, как правильно предоставить входные данные для функций динамической библиотеки? (в данном конкретном случае).

Из документации.dll можно узнать параметры функций динамической библиотеки. Например, для функции LC100_Init параметры:

ViStatus LC100_init (ViRsrc resourceName, ViBoolean IDQuery, ViBoolean resetDevice, ViPSession instrumentHandle);

В исходном коде библиотеки (т. Е. Файле.h) описание функции LC100_Init:

Function: Initialize
Purpose: This function initializes the instrument driver session and returns an instrument handle which is used in subsequent calls.

Parameters:
ViRsrc resourceName:    The visa resource string.
ViBoolean IDQuery:      Boolean to query the ID or not.
ViBoolean resetDevice:  Boolean to reset the device or not.
ViPSession instrHandle: Pointer to opened device.

Эти параметры определены в файле.c следующим образом:

// driver private data
typedef struct
{
   ViSession               instr;         // instrument handle
   ViBoolean               reset;         // reset parameter passed to LC100_init()
   ViBoolean               idQuery;       // idQuery parameter passed to LC100_init()
   ViUInt16                pid;           // USB PID value
   ViUInt16                nvVersion;     // version of NV-memory, specifies record organisation
   const LC100_sensData_t  *sensData;     // sensor dependent data
   ViAttrState             userData;      // user data - available via LC100_setAttribute()/LC100_getAttribute()

   // device calibration
   LC100_wl_cal_t          factory_cal;
   LC100_wl_cal_t          user_cal;
   LC100_wl_cal_pts_t      factory_points;
   LC100_wl_cal_pts_t      user_points;

} LC100_data_t;

Исходные коды доступны здесь для более подробной информации (скачать коды союров). Мой код до сих пор:

# Import modules
import visa
from ctypes import *
# Create VISA Object (USB Raw model 00258494)
instr = rm.open_resource('USB0::0x1313::0x80A0::M00258494::RAW')
# Load .dll library
LC100_Lib = cdll.LoadLibrary ("C:\\LC100_Drv_32.dll")
# LC100_Init is one of the .dll functions. 
# Here I want to call LC100_init() function and print the output.
# My question is how I define the input parameters?
print(LC100_Lib.LC100_init())

0 ответов

Другие вопросы по тегам