使用波形SDK.
介绍
WaveForms SDK是一组提供的波形安装工具,用于开发使用Digent测试和测量设备的自定义软件解决方案。波形SDK.API可以在多种编程语言中使用,使其易于在许多不同的平台上使用。
通常通过具有个人计算机的波形应用来控制和配置测试和测量设备。在给定的上下文中可能是不可能的,或者可以在波形的脚本环境之外寻求自动信号测量量。WaveForms SDK提供了必要的工具,以帮助为任何问题进行完美的解决方案。
示例应用程序
本指南介绍了两个示例应用程序的实现,以演示波形SDK的用例以及适当的工作流程。在Python中实现的一个示例应用程序将配置Digent测试和测量设备以填充具有样本的数据缓冲区。然后使用这些样本来生成在本地托管的网页上共享的图形图像。另一个例子将介绍如何使用测试和测量设备的数字I / O线作为输入和输出。
库存
-
一种智能化测试测量装置
-
数字发现-不支持模拟IO示例
-
MTE电缆,BNC示波器探头和/或BNC到Minigrabber剪辑电缆,具体取决于您使用的设备以及您要运行的示例。
-
装有波形的计算机
-
可以通过以下方式安装波形应用程序和波形SDK波形入门指南。
-
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作为plt那mpld3进口sys进口numpy从IO.进口BytesIO那StringIO从瓶进口瓶那响应
必须加载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_buffer(512.的)DWF。FDwfGetLastErrorMsg(szerr的)打印(str(szerr。价值的)的)打印("无法打开设备"的)辞职(的)
被测量的信号将来自设备本身。它被配置为在设备的波源通道1上输出正弦波。添加以下代码:
#启用wavegen通道1,设置波形为正弦,设置频率为1hz,振幅为2v,并启动wavegenDWF。FDWFANALOGOUTNODEEEEENAbles(HDWF.那c_int(0.的)那AnalogOutNodeCarrier那c_bool(真正的的)的)DWF。FDwfAnalogOutNodeFunctionSet(HDWF.那c_int(0.的)那AnalogOutNodeCarrier那粘虫油的)DWF。fdwfanalogoutnodefrequencequencyset.(HDWF.那c_int(0.的)那AnalogOutNodeCarrier那c_double.(1的)的)DWF。FDwfAnalogOutNodeAmplitudeSet(HDWF.那c_int(0.的)那AnalogOutNodeCarrier那c_double.(2的)的)DWF。FDwfAnalogOutConfigure(HDWF.那c_int(0.的)那c_bool(真正的的)的)
然后,设备的示波器通道被配置为取样,并启动,并添加以下代码:
#使能范围通道1将输入范围设置为5V,设置采集模式记录,将样本频率设置为100kHz并将记录长度设置为2秒钟DWF。FDWFANALOGINCHANNELENABLENET.(HDWF.那c_int(0.的)那c_bool(真正的的)的)DWF。fdwfanaloginchannelrangeset.(HDWF.那c_int(0.的)那c_double.(5.的)的)DWF。fdwfanaloginacquisitionmineset.(HDWF.那acqmodeRecord的)DWF。FDwfAnalogInFrequencySet(HDWF.那hzAcq的)DWF。FDwfAnalogInRecordLengthSet(HDWF.那c_double.(nSamples / hzAcq。价值的)的)# -1无限记录长度#wait至少2秒才能稳定时间。睡觉(2的)打印(“从示波器”的)DWF。FDwfAnalogInConfigure(HDWF.那c_int(0.的)那c_int(1的)的)
然后,下一段轮询设备的状态,将任何可用样本读入缓冲区。在缓冲区不满时,它继续这样做。
csamples.=0.而csamples.<nSamples: dwf。fdwfanaloginstatus.(HDWF.那c_int(1的)那Byref.(sts的)的)如果csamples.==0.和(sts==DwfStateConfig或sts==DwfStatePrefill或sts==dwfstatearmed.的):#收购尚未开始。继续#获取可用的样本数量,丢失和损坏DWF。FDwfAnalogInStatusRecord(HDWF.那Byref.(cAvailable的)那Byref.(cLost的)那Byref.(cCorrupted的)的)cSamples +=cLost。价值#设置丢失和损坏的标志如果cLost。价值: fLost=1如果cCorrupted。价值:Fcorrupted.=1#跳过阅读样本如果没有任何如果潜力。价值==0.:继续#如果缓冲区溢出,则设置可用示例上限如果cSamples + cAvailable。价值>nSamples: cAvailable=c_int(nSamples-cSamples的)#读取通道1在缓冲区中的可用样本DWF。fdwfanaloginstatusdata.(HDWF.那c_int(0.的)那Byref.(rgdSamples那运算符(c_double.的)* cSamples的)那cAvailable的)#获取通道1的数据cSamples +=潜力。价值
在取样后,关闭波源和关闭设备是一个很好的做法。
#重置波容要停止它,关闭设备DWF。FDwfAnalogOutReset(HDWF.那c_int(0.的)的)DWF。FDwfDeviceCloseAll(的)
从采样数据中创建一个图形图像,图像保存在自己的缓冲区中,供web服务器使用。
#从示例中生成一个图形图像,并将其存储在字节缓冲区中PLT。阴谋(numpy。义(rgdSamples那dtype.=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_buffer(16的)DWF。fdwfgetversion.(版本的)打印(“DWF版本:”+str(的版本。价值的)的)
接下来,打开第一个可用的设备。的API返回将用于配置设备的设备句柄。在下面添加代码:
打印(“开放第一设备”的)DWF。fdwfdeviceopen.(c_int(-1的)那Byref.(HDWF.的)的)如果HDWF。价值==hdwfnone。价值:打印("无法打开设备"的)szerr=create_string_buffer(512.的)DWF。FDwfGetLastErrorMsg(szerr的)打印(str(szerr。价值的)的)辞职(的)
通过屏蔽相应的位来启用某些行的输出(禁用的行只能用作输入):
#在8 LSB IO引脚上启用输出/掩码,从DIO 0到7DWF。FDwfDigitalIOOutputEnableSet(HDWF.那c_int(0 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。FDwfDigitalIOOutputSet(HDWF.那c_int(pin_state的)的)#从设备获取数字IO信息DWF。fdwfditaliostatus.(HDWF.的)#读取所有引脚的状态,不管输出是否使能DWF。FDwfDigitalIOInputStatus(HDWF.那Byref.(dwRead的)的)# print(dwRead as bitfield(32位,去掉前面的0b)打印(“数字IO销:”那箱(dwrave。价值的)[2:]。zfill(16的)的)时间。睡觉(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论坛。