航华Hanghua PSU64电子压力扫描阀是测量模型表面压强分布、流场速度分布的科研仪器。它内置64枚压强传感器以及一块数据采集卡,测量精度优于量程的千分之一。该系列仪器具有测压范围广、测量精度高以及响应速度快等特点,被多家科研单位采用。该仪器配置一套应用软件,可以进行标定、归零、数据采集、存储及初步分析等操作。该软件操作流程固定,在一定程度上限制了用户。本文将介绍如何使用Python编程语言来读取扫描阀的电压输出值。Python将为PSU64插上一对翅膀,赋予使用者极大的自由。操作流程如下:
1. 安装数据采集卡驱动软件。用户可在如下连接中【1】下载采集卡驱动程序,并参照说明书14页安装驱动。安装完毕后,打开“设备管理器”检查是否正确出现“libusbK USB Devices”
2. 在Python编程环境中,输入如下语句
from ctypes import * #读入可操作DLL库import numpy as np #读入Numpy库import matplotlib.pyplot as plt #读入绘图库#stdcall调用约定:两种加载方式#DAQdll = ctypes.windll.LoadLibrary("dllpath")DAQdll = WinDLL("Usb_Daq_V52_64.dll") #将下载的DLL文件放置于python文件相同目录下,使用windll命令载入channels=64 #通道数num_per_chan=101 #每通道采集数据数量,多采一个是因为第一个容易发生错误total_num=channels * num_per_chan #计算总数据量
3. 开启采集卡
erro=DAQdll.openUSB() #发出z指令,打开采集卡#ad_single(int dev,int ad_os,int ad_range,float* databuf);#函数需要返回一个采集结果,使用float*传入一个地址,采集结果写入这个指针所指向的地址,#所以需要先申明一个float类型的变量,然后使用byref得到这个变量地址当做指针传给函数advalue=(c_float *total_num)() #定义返回的数据
4. 执行采集,以500Hz在0号采集卡的64个通道上同步采集101个数据(每通道101个数据)
Dev=0 #采集第一块卡的数据。如果有2个及以上采集卡,第一个插入的卡为0号卡。注意,每次插拔编号都会根据插入顺序变化,这与NI采集卡不同sample_freq=500 #采样率, 数据点/秒ad_range=0 #0:+-5V, 1:+-10V#ad_continu(1int dev,2int 3ad_os,4int ad_range,5int freq,6int trig_sl,7int trig_pol,8intclk_sl,9int ext_clk_pol,10int num,float* databuf);#erro=DAQdll.ad_continu(Dev,0,1,0,sample_freq,0,0,0,0,3,total_num,advalue)erro=DAQdll.ad_continu(Dev,0,1,ad_range,sample_freq,0,0,0,0,3,total_num,advalue)#打印采集到的电压值#print(advalue[0],advalue[1],advalue[2],advalue[3],advalue[4])
5. 整理数据,并关闭采集卡
a=np.array(advalue) #将数据格式转为1维数组b=np.reshape(a,(num_per_chan, channels)) #再转为2维数组,64列,100行c= np.delete(b, (0), axis=0) #去除第一排数据,第一排数据容易产生错误,所以采集时建议再需求的基础上增加一个数据,比如需要100个,采集101个erro=DAQdll.closeUSB() #关闭采集卡
2维数组c即为采集的扫描阀输出电压数据。
6. 最后,显示采集数据
plt.figure()plt.plot(c)plt.xlabel("sample point")plt.ylabel("vol/V")plt.show()
获得采集的电压数据后,用户可使用扫描阀标定文件将电压转换为压强。用户可在本程序基础上改进、添加,形成适合自己科研项目的应用程序。本文经过Anaconda 3的Spyder环境测试验证。

引用:
【1】http://www.hanghualab.com/nd.jsp?id=129&fromMid=468