使用波形SDK

介绍

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

通常测试和测量设备是通过个人计算机的WaveForms应用程序控制和配置的。在给定的环境中,这样的设置可能是不可能的,或者在WaveForms的脚本环境之外,可能需要大量的自动信号测量。wavforms SDK提供了必要的工具来帮助为任何问题制定完美的解决方案。

示例应用程序

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


库存


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上找到。

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)\Digilent\ WaveFormsSDK \ \ py样品
  • Linux:/usr/local/share/digilent/waveforms/samples/py

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

PIP安装matplotlib numpy烧瓶mpld3

2.2脚本实现

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

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

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

如果sys平台startswith“赢”: dwfcdll。dwfelifsys平台startswith“达尔文”: dwfcdll。LoadLibrary“/图书馆/框架/ dwf.framework / dwf”其他的: dwfcdll。LoadLibrary“libdwf.so”

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

#声明ctype变量hdwfc_intstsc_bytehzAcqc_double100000# 100千赫nSamples200000rgdSamplesc_double * nSamplescAvailablec_intcLostc_intcCorruptedc_intfLost0fCorrupted0

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

#打开设备dwf。FDwfDeviceOpenc_int-1byrefhdwf如果hdwf。价值==hdwfNone。价值: szerrcreate_string_buffer512dwf。FDwfGetLastErrorMsgszerr打印strszerr。价值打印"无法打开设备"辞职

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

#启用wavegen通道1,设置波形为正弦,设置频率为1hz,振幅为2v,并启动wavegendwf。FDwfAnalogOutNodeEnableSethdwfc_int0AnalogOutNodeCarrierc_bool真正的dwf。FDwfAnalogOutNodeFunctionSethdwfc_int0AnalogOutNodeCarrierfuncSinedwf。FDwfAnalogOutNodeFrequencySethdwfc_int0AnalogOutNodeCarrierc_double1dwf。FDwfAnalogOutNodeAmplitudeSethdwfc_int0AnalogOutNodeCarrierc_double2dwf。FDwfAnalogOutConfigurehdwfc_int0c_bool真正的

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

#使能scope channel 1,设置输入范围为5v,设置采集模式为记录,设置采样频率为100kHz,设置记录长度为2秒dwf。FDwfAnalogInChannelEnableSethdwfc_int0c_bool真正的dwf。FDwfAnalogInChannelRangeSethdwfc_int0c_double5dwf。FDwfAnalogInAcquisitionModeSethdwfacqmodeRecorddwf。FDwfAnalogInFrequencySethdwfhzAcqdwf。FDwfAnalogInRecordLengthSethdwfc_doublenSamples / hzAcq。价值# -1无限记录长度#等待偏移量稳定至少2秒时间睡眠2打印“从示波器”dwf。FDwfAnalogInConfigurehdwfc_int0c_int1

然后,下一个代码片段将轮询设备的状态,将所有可用示例读入缓冲区。当缓冲区未满时,它将继续这样做。

cSamples0cSamples<nSamples: dwf。FDwfAnalogInStatushdwfc_int1byrefsts如果cSamples==0sts==DwfStateConfigsts==DwfStatePrefillsts==DwfStateArmed#收购尚未开始。继续#获取可用的样品数量,丢失的和损坏的dwf。FDwfAnalogInStatusRecordhdwfbyrefcAvailablebyrefcLostbyrefcCorruptedcSamples +cLost。价值#设置丢失和损坏的标志如果cLost。价值: fLost1如果cCorrupted。价值: fCorrupted1#如果没有阅读样本,跳过如果cAvailable。价值==0继续#如果缓冲区溢出,则设置可用示例上限如果cSamples + cAvailable。价值>nSamples: cAvailablec_intnSamples-cSamples#读取通道1的可用样本到缓冲区dwf。FDwfAnalogInStatusDatahdwfc_int0byrefrgdSamples运算符c_double* cSamplescAvailable#获取通道1的数据cSamples +cAvailable。价值

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

# reset wavegen停止,关闭设备dwf。FDwfAnalogOutResethdwfc_int0dwf。FDwfDeviceCloseAll

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

#从示例中生成一个图形图像,并将其存储在字节缓冲区中plt。情节numpy。fromiterrgdSamplesdtypenumpy。浮动生物BytesIOplt。savefig生物格式“png”

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

#启动web服务器,只有当运行为主如果__name__==“__main__”:应用程序__name__应用程序。路线' / 'defroot_handler返回响应生物。getvaluemimetype“图像/ png”#返回图形图像作为响应应用程序。运行

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

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

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

如果sys平台startswith“赢”: dwfcdll。dwfelifsys平台startswith“达尔文”: dwfcdll。LoadLibrary“/图书馆/框架/ dwf.framework / dwf”其他的: dwfcdll。LoadLibrary“libdwf.so”

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

hdwfc_intdwReadc_uint32

下面,将确定WaveForms的当前版本:

版本create_string_buffer16dwf。FDwfGetVersion版本打印“DWF版本:“+str的版本。价值

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

打印“先打开设备”dwf。FDwfDeviceOpenc_int-1byrefhdwf如果hdwf。价值==hdwfNone。价值打印"无法打开设备"szerrcreate_string_buffer512dwf。FDwfGetLastErrorMsgszerr打印strszerr。价值辞职

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

#启用8个LSB IO引脚的输出/掩码,从dio0到7dwf。FDwfDigitalIOOutputEnableSethdwfc_int0 x00ff

在一个循环中,计算引脚的电流值,然后在使能线上输出这个值。读回并显示数字I/O线的状态。在下一个迭代之前等待0.5秒。

试一试#以100000000开头pin_state0 x80真正的#计算新的输出值pin_statepin_state *2如果pin_state>0 x80: pin_state0 x01设置IO引脚的值dwf。FDwfDigitalIOOutputSethdwfc_intpin_state#从设备获取数字IO信息dwf。FDwfDigitalIOStatushdwf#读取所有引脚的状态,不管输出是否使能dwf。FDwfDigitalIOInputStatushdwfbyrefdwRead# print(dwRead as bitfield(32位,去掉前面的0b)打印“数字IO引脚:”箱子dwRead。价值2zfill16时间睡眠0.5

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

除了KeyboardInterrupt# exit on ctrl+c通过最后#关闭打开的连接dwf。FDwfDeviceClosehdwf

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


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

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

数字IO引脚:0000000100000001数字IO引脚:0000001000000010数字IO引脚:0000010000000100数字IO引脚:0000100000001000数字IO引脚:0001000000010000数字IO引脚:0010000000100000…

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


下一个步骤

有关如何使用Digilent测试和测量设备的更多指南,请返回设备的资源中心,从测试和测量这个维基的页面。

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

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

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

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