Использование PyDAQmx для чтения данных - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь получить данные, используя метод обратного вызова, и обнаружил PyDAQmx. Я преобразовал PyDAQmx 1.4.3 с использованием 2to3 и установил его для использования на python 3.7.6 (32 бита), windows 10, NIDAQ USB-6212, NIDAQmx 19,6

Я ссылался на https://pythonhosted.org/PyDAQmx/callback.html

Я написал код, как показано ниже, используя PyDAQmx, но он выдает ошибку.

from PyDAQmx import *
from PyDAQmx.DAQmxCallBack import *

class MyList(list):
    pass

def EveryNCallback_py(taskHandle, eventType, nSamples, callbackData_ptr):
    callbackData = get_callbackData_from_id(callbackData_ptr)
    read = uInt32()

    nidaq.DAQmxReadAnalogF64(AItaskHandle,samples_per_chan,float64(-1),DAQmx_Val_GroupByScanNumber,AIdata.ctypes.data,Length,ctypes.byref(read),None)

    if(read>0):
        print('Acquired %d samples.' %read)
    return 0

EveryNCallback = pydaqmx.DAQmxEveryNSamplesEventCallbackPtr(EveryNCallback_py)

def some_func(num): 

    ... # some other code including import, declare variables like DAQmx_Val_Acquired_Into_Buffer, etc...

    AIdata = MyList()
    AIdata = numpy.zeros( ( max_num_samples, ), dtype=numpy.float64 )
    AIdata_dummy = numpy.zeros( ( max_num_samples, ), dtype=numpy.float64 )
    Length = AIdata.size
    samples_per_chan = round(max_num_samples/2)
    id_a = create_callbackdata_id(AIdata)

    AItaskHandle = TaskHandle( 0 )

    nidaq.DAQmxCreateTask("",ctypes.byref(AItaskHandle))
    nidaq.DAQmxCreateAIVoltageChan(AItaskHandle,b"Dev%d/ai0,Dev%d/ai2" %(num,num),"",DAQmx_Val_Diff,float64(-5.0),float64(5.0),DAQmx_Val_Volts,None)
    nidaq.DAQmxCfgSampClkTiming(AItaskHandle,"",float64(sampleRate),DAQmx_Val_Rising,DAQmx_Val_ContSamps,uInt64(max_num_samples))
    nidaq.DAQmxSetDigLvlPauseTrigSrc(AItaskHandle, b"/Dev%d/PFI0" %num)
    nidaq.DAQmxSetPauseTrigType(AItaskHandle, DAQmx_Val_DigLvl)
    nidaq.DAQmxSetDigLvlPauseTrigWhen(AItaskHandle, DAQmx_Val_High)

    DAQmxRegisterEveryNSamplesEvent(AItaskHandle,DAQmx_Val_Acquired_Into_Buffer,1000,0,EveryNCallback,id_a)
    nidaq.DAQmxStartTask( AItaskHandle )

И если я запускаю этот код, он выдает мне следующую ошибку.

Traceback (most recent call last):
  File ~~~, line 118, in some_func
    pydaqmx.DAQmxRegisterEveryNSamplesEvent(AItaskHandle,DAQmx_Val_Acquired_Into_Buffer,1000,0,EveryNCallback,id_a)
  File "<string>", line 2, in function
  File "C:\Users\JungEun.Suh\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pydaqmx-1.4.3-py3.7.egg\PyDAQmx\DAQmxFunctions.py", line 57, in mafunction
    error = f(*arg)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

Ты хоть представляешь, что здесь не так? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Заранее спасибо!

...