使用波形SDK
介绍
WaveForms SDK是在WaveForms安装中提供的一套工具,用于开发使用Digilent测试和测量设备的定制软件解决方案。波形SDK美国石油学会有多种编程语言可供使用,使其易于跨多种不同平台使用。
通常测试和测量设备是通过个人计算机的WaveForms应用程序控制和配置的。在给定的环境中,这样的设置可能是不可能的,或者在WaveForms的脚本环境之外,可能需要大量的自动信号测量。wavforms SDK提供了必要的工具来帮助为任何问题制定完美的解决方案。
示例应用程序
本指南将介绍两个示例应用程序的实现,以演示WaveForms SDK的用例以及正确的工作流程。一个用Python实现的示例应用程序将配置Digilent测试和测量设备,以使用示例填充数据缓冲区。然后使用这些示例生成图形图像,并在本地托管的网页上共享。另一个例子将展示如何使用测试和测量设备的数字I/O线作为输入和输出。
库存
-
一种数字化测试装置
-
数字发现-不支持模拟IO示例
-
MTE电缆,BNC示波器探头,和/或BNC到Minigrabber Clip电缆,取决于你正在使用的设备和你想运行的例子。
-
安装了波形的计算机
-
wavforms应用程序和wavforms SDK都可以通过以下步骤安装波形入门指南.
-
1.SDK概述
WaveForms SDK包含在WaveForms中,并与应用程序一起安装。SDK可以通过动态库与C/ c++、c#、Python和Visual Basic一起使用。
在Windows上,动态库可以在C:\Windows\System32\dwf.dll上找到,在Linux上在/usr/lib/libdwf.so.x.x.x上找到。
对于32位系统,Windows上的静态库位于C:\Program Files\Digilent\WaveOrmssdk\lib\x86;对于64位系统,静态库位于C:\Program Files(x86)\Digilent\WaveOrmssdk\lib\x64。
C头文件位于C:\Program Files\Digilent\WaveOrmsdk\inc(适用于Windows 32位)、C:\Program Files(x86)\Digilent\WaveOrmsdk\inc(适用于Windows 64位)和/usr/local/include/Digilent/waveforms(适用于Linux)。
SDK中提供了每种编程语言的其他工作代码示例,可在以下位置找到:适用于Windows 32位的C:\Program Files\Digilent\WaveOrmsdk\samples,适用于Windows 64位的C:\Program Files(x86)\Digilent\WaveOrmsdk\samples和Linux上的/usr/local/share/Digilent/waveforms/samples。
2.实现示例应用程序
2.1设置
在计算机上的某个位置创建新文件夹。这将是项目目录,与SDK项目相关的所有文件都将存储在该目录中。
必须将dwfconstants.py复制到项目目录中,其位置因操作系统:
-
Win32:C:\Program Files\Digilent\WaveFormsSDK\samples\py
-
Win64:C:\Program Files (x86)\Digilent\ WaveFormsSDK \ \ py样品
-
Linux:/usr/local/share/digilent/waveforms/samples/py
对于模拟IO示例,需要几个Python包,并通过调用
pip安装matplotlib numpy烧瓶mpld3
2.2脚本实现
下面给出了每个示例应用程序的代码片段。要查看特定示例的代码,请打开下面相应的下拉列表。
- 模拟IO示例
-
在项目目录中,创建一个名为main.py的文件,并使用文本编辑器在中打开。在文件顶部,按如下方式声明导入:
从…起ctypes进口*从…起dwfconstants进口*进口数学进口时间进口matplotlib。pyplot作为plt,mpld3进口系统进口努比从…起io进口拜特西奥,斯特林吉奥从…起瓶子进口瓶子,回答
必须加载dll,加载方法取决于操作系统。添加下一行代码以执行此操作。
如果系统.站台.开始(“赢”):dwf=cdll。dwfelif系统.站台.开始(“达尔文”):dwf=cdll。加载(“/Library/Frameworks/dwf.framework/dwf”)其他的:dwf=cdll。加载(“libdwf.so”)
接下来的几行代码声明了一些用于配置测试和测量设备的辅助变量。还声明了一个示例缓冲区,该缓冲区将很快充满从设备获取的数据。将代码段添加到项目代码中:
#声明ctype变量hdwf=c_int()sts=c_byte()hzAcq=c_double(100000)#100千赫nSamples=200000RGD样本=(c_double * nSamples)()可告诫=c_int()克洛斯特=c_int()腐败的=c_int()弗洛斯特=0fCorrupted=0
接下来,打开第一个可用的设备。这个美国石油学会返回将用于配置设备的设备句柄。添加以下代码:
#开放式设备dwf。FDwfDeviceOpen(c_int(-1),byref(hdwf))如果hdwf。价值==hdwfNone。价值:szerr=创建字符串缓冲区(512)dwf。FDwfGetLastErrorMsg(szerr)打印(str(谢尔。价值))打印(“无法打开设备”)退出()
要测量的信号将来自设备本身。它被配置为在设备的wavegen通道1上输出正弦波。添加以下代码:
#启用wavegen通道1,将波形设置为正弦,将频率设置为1 Hz,振幅设置为2v,然后启动wavegendwf。FDwfAnalogOutNodeEnableSet(hdwf,c_int(0),模拟输出节点载波,库布尔(符合事实的))dwf。FDwfAnalogOutNodeFunctionSet(hdwf,c_int(0),模拟输出节点载波,funcSine)dwf。FDwfAnalogOutNodeFrequencySet(hdwf,c_int(0),模拟输出节点载波,c_double(1))dwf。FDwfAnalogOutNodeAmplitudeSet(hdwf,c_int(0),模拟输出节点载波,c_double(2))dwf。FDwfAnalogOutConfigure(hdwf,c_int(0),库布尔(符合事实的))
然后,通过添加以下代码,将设备的示波器通道配置为采样并启动:
#使能scope channel 1,设置输入范围为5v,设置采集模式为记录,设置采样频率为100kHz,设置记录长度为2秒dwf。FDwfAnalogInChannelEnableSet(hdwf,c_int(0),库布尔(符合事实的))dwf。FDwfAnalogInChannelRangeSet(hdwf,c_int(0),c_double(5))dwf。FDwfAnalogInAcquisitionModeSet(hdwf,acqmodeRecord)dwf。FDWF模拟罕见集(hdwf,hzAcq)dwf。FDWFAnaloginRecordLength集合(hdwf,c_double(nSamples/hzAcq。价值))#-1无限记录长度#等待偏移量稳定至少2秒时间.睡眠(2)打印(“启动示波器”)dwf。FDWF模拟图形(hdwf,c_int(0),c_int(1))
然后,下一个代码片段将轮询设备的状态,将所有可用示例读入缓冲区。当缓冲区未满时,它将继续这样做。
cSamples=0虽然cSamples<n示例:dwf。FDwfAnalogInStatus(hdwf,c_int(1),byref(sts))如果cSamples==0和(sts==DwfStateConfig或sts==预填充或sts==DwfStateArmed):#收购尚未开始。持续#获取可用的样品数量,丢失的和损坏的dwf。FDWF模拟记录(hdwf,byref(可告诫),byref(克洛斯特),byref(腐败的))C样本+=克洛斯特。价值#设置丢失和损坏标志如果克洛斯特。价值:弗洛斯特=1如果腐败的。价值: fCorrupted=1#如果没有阅读样本,跳过如果cAvailable。价值==0:持续#如果缓冲区从实际可用的内容溢出,则对可用的样本设置上限如果C样本+可验证。价值>N示例:可警告=c_int(nSamples cSamples)#读取通道1的可用样本到缓冲区dwf。FDwfAnalogInStatusData(hdwf,c_int(0),byref(RGD样本,sizeof(c_double)*C样本),可告诫)#获取通道1数据C样本+=cAvailable。价值
采样后,最好关闭wavegen并关闭设备进行清理。
# reset wavegen停止,关闭设备dwf。模拟输出复位(hdwf,c_int(0))dwf。FDwfDeviceCloseAll()
从采样数据创建图形图像,图像保存在自己的缓冲区中,供web服务器使用。
#从样本生成图形图像,并将其存储在字节缓冲区中plt。情节(努比。fromiter(RGD样本,dtype=努比。浮动))生物=拜特西奥()plt。savefig(生物,总体安排=“png”)
最后,web服务器被设置为在收到HTTP请求时返回图形图像。
#仅当作为主服务器运行时启动web服务器如果__name__==“\uuuu main\uuuuuu”:app=瓶子(__name__)@应用程序。路线(' / ')defroot_handler():回来回答(生物。getvalue(),mimetype=“图像/ png”)#返回图形图像作为响应应用程序。跑()
可下载上述代码的完整副本在这里.
- 数字IO的例子
-
在项目目录中,创建一个名为main.py的文件,并使用文本编辑器在中打开。在文件顶部,按如下方式声明导入:
从…起ctypes进口*从…起dwfconstants进口*进口时间进口系统
必须加载dll,加载方法取决于操作系统。添加下一行代码以执行此操作。
如果系统.站台.开始(“赢”):dwf=cdll。dwfelif系统.站台.开始(“达尔文”):dwf=cdll。加载(“/Library/Frameworks/dwf.framework/dwf”)其他的:dwf=cdll。加载(“libdwf.so”)
接下来的几行代码声明了一些用于配置测试和测量设备的辅助变量。还声明了一个示例缓冲区,该缓冲区将很快充满从设备获取的数据。将代码段添加到项目代码中:
hdwf=c_int()德雷德=c_uint32()
下面,将确定WaveForms的当前版本:
版本=创建字符串缓冲区(16)dwf。FDwfGetVersion(版本)打印(“DWF版本:“+str(版本价值))
接下来,打开第一个可用的设备。这个美国石油学会返回将用于配置设备的设备句柄。添加以下代码:
打印(“先打开设备”)dwf。FDwfDeviceOpen(c_int(-1),byref(hdwf))如果hdwf。价值==hdwfNone。价值:打印(“无法打开设备”)szerr=创建字符串缓冲区(512)dwf。FDwfGetLastErrorMsg(szerr)打印(str(谢尔。价值))退出()
通过屏蔽相应位在某些线路上启用输出(禁用线路只能用作输入):
#启用8个LSB IO引脚的输出/掩码,从dio0到7dwf。FDwfDigitalIOOutputEnableSet(hdwf,c_int(0x00FF))
在一个循环中,计算引脚的电流值,然后在使能线上输出这个值。读回并显示数字I/O线的状态。在下一个迭代之前等待0.5秒。
尝试:#从100000000开始宾州=0x80虽然符合事实的:#计算新的产值宾州=pin_state *2如果宾州>0x80: pin_state=0x01#在启用的IO引脚上设置值dwf。FDwfDigitalIOOutputSet(hdwf,c_int(宾州))#从设备获取数字IO信息dwf。FDwfDigitalIOStatus(hdwf)#读取所有管脚的状态,而不考虑输出启用dwf。FDwfDigitalIOInputStatus(hdwf,byref(德雷德))#打印(DW读取为位字段(32位,删除前面的0b)打印(“数字IO引脚:”,箱子(dwRead。价值)[2:].兹菲尔(16))时间.睡眠(0.5)
按Ctrl+C退出回路,然后关闭测试和测量设备,使其可用于其他软件(如波形)。
除了键盘中断:#按ctrl+c组合键退出通过最后:#关闭打开的连接dwf。FDwfDeviceClose(hdwf)
以上代码的完整副本可以下载在这里.
3.运行应用程序
要运行上一步中创建的Python脚本并查看示例应用程序的结果,请遵循下面的说明。
- 模拟IO示例
-
此时,将测试和测量装置的Wavegen通道1和示波器通道1引脚连接在一起。将设备插入计算机。在控制台中,调用
python main.py
然后,控制台应具有与以下类似的输出:
DWF版本:b'3.10.9'打开第一个生成正弦波的设备。。。开始示波器记录完成*服务烧瓶应用程序“主”(延迟加载)*环境:生产警告:这是一个开发服务器。不要在生产部署中使用它。请改用生产WSGI服务器。*调试模式:关闭*正在运行http://127.0.0.1:5000/ (按CTRL+C退出)
打开web浏览器并导航到http://127.0.0.1:5000如图所示,采样后的正弦波曲线图:
- 数字IO的例子
-
数字I/O线0至7将同时用作输入和输出,而线8至15将仅用作输入。通过将针脚0连接到针脚8、针脚1连接到针脚9等方式创建一个简单的回路连接(按照右侧的接线图)。这样,第0-7行上输出的任何信息都将在第8-15行上可用。脚本的输出将显示两个字节,第一个字节是从第15-8行读取的信息,第二个字节是从第7-0行读取的位。
将该设备插入计算机,在控制台中调用:
python main.py
然后,控制台应具有与以下类似的输出:
数字IO引脚:0000000100000001数字IO引脚:0000001000000010数字IO引脚:0000010000000100数字IO引脚:0000100000001000数字IO引脚:0001000000010000数字IO引脚:0010000000100000…
按Ctrl+C可退出代码。