Как объединить модули 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())