# -*- 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")