DAS capture card Python call example

Tags:
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 16 19:44:40 2024
@author: Admin
"""

import numpy as np
import time
from ctypes import *

import sys, win32api, os
def usleep(microseconds):
    start_time = time.perf_counter_ns()
    end_time = start_time+(microseconds * 1000)  # 因为是纳秒,所以要乘以1000
    while time.perf_counter_ns() < end_time:
        pass

dll = cdll.LoadLibrary("DasCardLib.dll")
if __name__ == '__main__':
    samples = 8192       #采样点数8192
    seg_num = 100        #每次读取100段数据
    pulse_frq = 10000    #脉冲频率10000
    pulse_width = 100    #脉冲宽度100ns
    data_sel =  1        #通道1幅度相位数据
    pulse_num = 10       #写脉冲数目10

    ret = dll.DasCardOpen()       #打开采集卡
    print(ret, 'open card!')
    ret = dll.DasCardSetSampleNum(c_int(samples))        #设置采样点数
    print(ret, 'DasCardSetSampleNum')
    
    ret = dll.DasCardSetPulseFrq(c_int(pulse_frq))       #设置脉冲频率
    print(ret, "DasCardSetPulseFrq!")
    
    ret = dll.DasCardSetPulseWidth(c_int(pulse_width))   #设置脉冲宽度
    print(ret, "DasCardSetPulseWidth!")
    
    ret = dll.DasCardSetDataSel(c_int(data_sel))         #设置数据源
    print(ret, "DasCardSetDataSel!")
    
    ret = dll.DasCardSetPulseNum(c_int(pulse_num))       #设置写脉冲数目
    print(ret, "DasCardSetPulseNum!")
    
    ret = dll.DasCardSetTest(c_int(0))                   #设置DAC数据
    print(ret, "DasCardSetTest!")
    
    ret = dll.DasCardStart()               #开展采样
    if(ret==-1):
        print(ret,"card initialization failed!")
    else:
        print(ret,"card initialied successfull!")
        
    buf = (c_int16*samples*seg_num*2)()   #分配读取缓存,原始数据和单通道解调为c_int16*samples*seg_num*2,双通道解调为c_int16*samples*seg_num*4
    count = 0
    tlast = time.time()
    
    try:
        while(True): 
            size = dll.DasCardQueryFifo()       #查询缓存数据量
            if size >=samples*seg_num*4:        #如果缓存数据够需要读取的数据量,读取缓存数据,否则继续查询
                # print(size.value, 'cache')
                ret = dll.DasCardReadFifo(buf, c_int(samples*seg_num*4))   #读取100个脉冲的缓存数据
                if ret==False:
                    print(size, 'read error')
                    continue
                else:
                    # 读取成功,处理数据
                    # 统计脉冲触发频率
                    count = count + 1
                    if count>=100:
                        tcurrent = time.time()
                        print("pulse_freq:",100*seg_num/(tcurrent-tlast))
                        tlast = tcurrent
                        count = 0

            else:
                usleep(10)       #缓存数据不足,休眠10us
                
    except KeyboardInterrupt:
        print("exit")    
        
    
    
    dll.DasCardStop()       #停止采集
    dll.DasCardClose()      #关闭采集卡
    print("close")