使用波形SDK.

介绍

WaveForms SDK是一组提供的波形安装工具,用于开发使用Digent测试和测量设备的自定义软件解决方案。波形SDK.API可以在多种编程语言中使用,使其易于在许多不同的平台上使用。

通常通过具有个人计算机的波形应用来控制和配置测试和测量设备。在给定的上下文中可能是不可能的,或者可以在波形的脚本环境之外寻求自动信号测量量。WaveForms SDK提供了必要的工具,以帮助为任何问题进行完美的解决方案。

示例应用程序

本指南介绍了两个示例应用程序的实现,以演示波形SDK的用例以及适当的工作流程。在Python中实现的一个示例应用程序将配置Digent测试和测量设备以填充具有样本的数据缓冲区。然后使用这些样本来生成在本地托管的网页上共享的图形图像。另一个例子将介绍如何使用测试和测量设备的数字I / O线作为输入和输出。


库存


1.SDK概述

波形SDK包含波形并安装在应用程序旁边。通过动态库可以使用C / C ++,C#,Python和Visual Basic使用的SDK。

在Windows上,动态库可以在C:\ Windows \ System32 \ DWF.DLL和In /Usr/lib/libdwf.so.x.x.x上的Linux上找到。

Windows上的静态库是C:\Program Files\Digilent\ WaveFormsSDK\lib\x86,适用于32位系统,适用于64位系统是C:\Program Files (x86)\Digilent\ WaveFormsSDK\lib\x64。

C头文件位于C:\Program Files\Digilent\ WaveFormsSDK\inc为Windows 32位,C:\Program Files (x86)\Digilent\ WaveFormsSDK\inc为Windows 64位,在/usr/local/include/ digilent/wavforms为Linux。

SDK提供了每种编程语言的其他工作代码示例,可以在C:\Program Files\Digilent\ WaveFormsSDK\samples for Windows 32位,C:\Program Files (x86)\Digilent\ WaveFormsSDK\samples for Windows 64位和/usr/local/share/ digilent/wavforms/samples / Linux上找到。


2.实现示例应用程序

2.1设置

在计算机某处创建一个新文件夹。这将是项目目录,与您的SDK项目相关的所有文件将被存储在这里。

必须将Dwfconstants.py复制到项目目录中,其位置因操作系统

  • Win32:C:\Program Files\Digilent\ WaveFormsSDK \ \ py样品
  • Win64:C:\ Program Files(x86)\ digiled \ waveformssdk \ samples \ py
  • Linux:/ usr / local / share / digilent /波形/ samples / py

对于模拟IO示例,需要几个Python包,并通过调用

PIP安装matplotlib numpy烧瓶mpld3

2.2脚本实现

在下文中,提出了每个示例应用程序的代码片段。要查看特定示例的代码,请打开下面的相应下拉。

模拟输入输出示例
在project目录中,创建一个名为main.py的文件,并用文本编辑器打开。在文件的顶部,像这样声明导入:
ctypes进口*dwfconstants进口*进口数学进口时间进口matplotlib。pyplot作为pltmpld3进口sys进口numpyIO.进口BytesIOStringIO进口响应

必须加载dll,而加载方法取决于操作系统。添加下面的代码行。

如果sys平台startswith“赢”的): dwf=cdll。dwfelsys平台startswith“达尔文”的): dwf=cdll。LoadLibrary“/图书馆/框架/ dwf.framework / dwf”的)别的: dwf=cdll。LoadLibrary“libdwf.so”的)

接下来的几行代码声明了一些用于配置Test和Measurement设备的helper变量。还声明了一个样本缓冲区,该缓冲区将很快被从该设备获得的数据填充。将代码片段添加到项目代码中:

#声明ctype变量HDWF.=c_int的)sts=c_byte.的)hzAcq=c_double.100000的)# 100千赫nSamples=200000rgdSamples=c_double * nsamples.的)的)cAvailable=c_int的)cLost=c_int的)cCorrupted=c_int的)fLost=0.fcorrupted.=0.

接下来,打开第一个可用的设备。的API返回将用于配置设备的设备句柄。在下面添加代码:

#打开设备DWF。fdwfdeviceopen.c_int-1的)Byref.HDWF.的)的)如果HDWF。价值==hdwfnone。价值: szerr=create_string_buffer512.的)DWF。FDwfGetLastErrorMsgszerr的)打印strszerr。价值的)的)打印"无法打开设备"的)辞职的)

被测量的信号将来自设备本身。它被配置为在设备的波源通道1上输出正弦波。添加以下代码:

#启用wavegen通道1,设置波形为正弦,设置频率为1hz,振幅为2v,并启动wavegenDWF。FDWFANALOGOUTNODEEEEENAblesHDWF.c_int0.的)AnalogOutNodeCarrierc_bool真正的的)的)DWF。FDwfAnalogOutNodeFunctionSetHDWF.c_int0.的)AnalogOutNodeCarrier粘虫油的)DWF。fdwfanalogoutnodefrequencequencyset.HDWF.c_int0.的)AnalogOutNodeCarrierc_double.1的)的)DWF。FDwfAnalogOutNodeAmplitudeSetHDWF.c_int0.的)AnalogOutNodeCarrierc_double.2的)的)DWF。FDwfAnalogOutConfigureHDWF.c_int0.的)c_bool真正的的)的)

然后,设备的示波器通道被配置为取样,并启动,并添加以下代码:

#使能范围通道1将输入范围设置为5V,设置采集模式记录,将样本频率设置为100kHz并将记录长度设置为2秒钟DWF。FDWFANALOGINCHANNELENABLENET.HDWF.c_int0.的)c_bool真正的的)的)DWF。fdwfanaloginchannelrangeset.HDWF.c_int0.的)c_double.5.的)的)DWF。fdwfanaloginacquisitionmineset.HDWF.acqmodeRecord的)DWF。FDwfAnalogInFrequencySetHDWF.hzAcq的)DWF。FDwfAnalogInRecordLengthSetHDWF.c_double.nSamples / hzAcq。价值的)的)# -1无限记录长度#wait至少2秒才能稳定时间睡觉2的)打印“从示波器”的)DWF。FDwfAnalogInConfigureHDWF.c_int0.的)c_int1的)的)

然后,下一段轮询设备的状态,将任何可用样本读入缓冲区。在缓冲区不满时,它继续这样做。

csamples.=0.csamples.<nSamples: dwf。fdwfanaloginstatus.HDWF.c_int1的)Byref.sts的)的)如果csamples.==0.sts==DwfStateConfigsts==DwfStatePrefillsts==dwfstatearmed.的)#收购尚未开始。继续#获取可用的样本数量,丢失和损坏DWF。FDwfAnalogInStatusRecordHDWF.Byref.cAvailable的)Byref.cLost的)Byref.cCorrupted的)的)cSamples +=cLost。价值#设置丢失和损坏的标志如果cLost。价值: fLost=1如果cCorrupted。价值:Fcorrupted.=1#跳过阅读样本如果没有任何如果潜力。价值==0.继续#如果缓冲区溢出,则设置可用示例上限如果cSamples + cAvailable。价值>nSamples: cAvailable=c_intnSamples-cSamples的)#读取通道1在缓冲区中的可用样本DWF。fdwfanaloginstatusdata.HDWF.c_int0.的)Byref.rgdSamples运算符c_double.的)* cSamples的)cAvailable的)#获取通道1的数据cSamples +=潜力。价值

在取样后,关闭波源和关闭设备是一个很好的做法。

#重置波容要停止它,关闭设备DWF。FDwfAnalogOutResetHDWF.c_int0.的)的)DWF。FDwfDeviceCloseAll的)

从采样数据中创建一个图形图像,图像保存在自己的缓冲区中,供web服务器使用。

#从示例中生成一个图形图像,并将其存储在字节缓冲区中PLT。阴谋numpy。rgdSamplesdtype.=numpy。浮动的)的)生物学=BytesIO的)PLT。savefig生物学格式=“PNG”的)

最后,一个web服务器被设置为在收到HTTP请求时返回图形图像。

#启动web服务器,只有当运行为主如果__姓名__==“__main__”:应用程序=__姓名__的)@应用程序。路线'/'的)defroot_handler.的)返回响应生物。GetValue.的)mimetype.=“图像/ png”的)#以响应返回图形图像应用程序。运行的)

以上代码的完整副本可以下载在这里

数字IO示例
在project目录中,创建一个名为main.py的文件,并用文本编辑器打开。在文件的顶部,像这样声明导入:
ctypes进口*dwfconstants进口*进口时间进口sys

必须加载dll,而加载方法取决于操作系统。添加下面的代码行。

如果sys平台startswith“赢”的): dwf=cdll。dwfelsys平台startswith“达尔文”的): dwf=cdll。LoadLibrary“/图书馆/框架/ dwf.framework / dwf”的)别的: dwf=cdll。LoadLibrary“libdwf.so”的)

接下来的几行代码声明了一些用于配置Test和Measurement设备的helper变量。还声明了一个样本缓冲区,该缓冲区将很快被从该设备获得的数据填充。将代码片段添加到项目代码中:

HDWF.=c_int的)dwRead=c_uint32的)

在下文中,将确定当前版本的波形版本:

版本=create_string_buffer16的)DWF。fdwfgetversion.版本的)打印“DWF版本:”+str的版本。价值的)的)

接下来,打开第一个可用的设备。的API返回将用于配置设备的设备句柄。在下面添加代码:

打印“开放第一设备”的)DWF。fdwfdeviceopen.c_int-1的)Byref.HDWF.的)的)如果HDWF。价值==hdwfnone。价值打印"无法打开设备"的)szerr=create_string_buffer512.的)DWF。FDwfGetLastErrorMsgszerr的)打印strszerr。价值的)的)辞职的)

通过屏蔽相应的位来启用某些行的输出(禁用的行只能用作输入):

#在8 LSB IO引脚上启用输出/掩码,从DIO 0到7DWF。FDwfDigitalIOOutputEnableSetHDWF.c_int0 x00ff的)的)

在循环中,计算引脚的当前值,然后在启用的行上输出此值。读取并显示数字I / O线的状态。在下一次迭代之前等待0.5秒。

试一试#以100000000开头pin_state=0 x80真正的#计算新的输出值pin_state=pin_state *2如果pin_state>0 x80:Pin_State.=0 x01设置IO引脚的值DWF。FDwfDigitalIOOutputSetHDWF.c_intpin_state的)的)#从设备获取数字IO信息DWF。fdwfditaliostatus.HDWF.的)#读取所有引脚的状态,不管输出是否使能DWF。FDwfDigitalIOInputStatusHDWF.Byref.dwRead的)的)# print(dwRead as bitfield(32位,去掉前面的0b)打印“数字IO销:”dwrave。价值的)[2]zfill16的)的)时间睡觉0.5的)

通过按Ctrl+C退出循环,然后关闭Test & Measurement设备,使其可用于其他软件(如WaveForms)。

除了KeyboardInterrupt# exit on ctrl+c经过最后#关闭打开的连接DWF。fdwfdeviceClose.HDWF.的)

可以下载上述代码的完整副本在这里


3.运行应用程序

要在上一步中创建的Python脚本并查看示例应用程序的结果,请按照以下说明进行操作。

模拟输入输出示例
此时,将测试和测量设备的Wavegen通道1和Scope通道1引脚连接在一起。把设备插到计算机上。在控制台,调用
python main.py

控制台应该有类似如下的输出:

DWF版本:b'3.10.9'打开第一个设备生成正弦波…启动示波器记录完成*服务烧瓶app "main"(惰性加载)*环境:生产警告:这是一个开发服务器。不要在生产部署中使用它。请使用生产的WSGI服务器。*运行在http://127.0.0.1:5000/(按CTRL+C退出)

打开网页浏览器,导航到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

控制台应该有类似如下的输出:

DWF版本:B'3.16.13'开放式第一设备数码IO引脚:0000000100000001数码IO引脚:00000010000000100数码IO引脚:0000100000001000数字IO引脚:0001000000010000数字IO引脚:0010000000100000 ...

可以通过按Ctrl+C退出代码。


下一步

有关如何使用DigInent Test&Measurement Device的更多指南,请返回到设备的资源中心,链接到测试和测量这个维基的页面。

在以下目录中可以找到更多不同编程语言的示例应用程序:

  • Win32:C:\Program Files\Digilent\ WaveFormsSDK \样品
  • Win64:C:\Program Files (x86)\Digilent\ WaveFormsSDK \样品
  • Linux:/usr/local/share/digilent/waveforms/samples

有关波形的更多信息,请访问波形参考手册

有关技术支持,请访问测试和测量部分Digilent论坛。