LabVIEW是NI公司的数据采集设备的标准平台,在其上调用NI-DAQmx驱动和接口函数能够高效的开发数据采集和控制程序。但作为一种图形化的开发语言,使用LabVIEW开发涉及算法和流程控制的大型应用程序还是显得力不从心。因此在C#和VB等.net开发工具中实现NI-DAQmx驱动的灵活调用,对于数据采集设备的广泛应用意义重大,常见的方法有:
1、使用NI公司为Visual Studio提供的集成式开发套件Measurement Studio,它带有的ActiveX和.NET控件,以及面向对象的数据采集硬件接口。但由于Measurement Studio属于付费软件,成本较高,且进一步造成Measurement Studio的开发资源不多见,开发难度较大。
2、LabVIEW具有创建.NET的DLL的功能,可以把LabVIEW下开发的数据采集卡驱动软件打包成可供Visual Studio .NET方便调用的动态链接库,大大降低数据采集软件开发的难度和成本。
在使用这一功能的同时,我还意外的发现在LabVIEW环境下使用MathScript RT节点,通过Matlab的M语言开发的算法也能够封装在DLL中,为.NET下的算法开发提供一种“捷径”。以下内容欢迎转载,但请注明出处: https://www.cnblogs.com/helesheng
一、在LabVIEW中开发DLL
打开LabVIEW,创建一个项目。
在弹出的项目浏览器窗口中重命名项目名称为“测试DLL项目”,右键单击项目浏览器中的“我的电脑”顺序选择“新建”->“VI”,创建一个名为“单次采集有限样本数.vi”的VI。
在该VI的程序框图界面输入以下数据采集卡采集数据的程序。实现用10KSPS的速度,从DEV1设备的通道0(ai0)连续采集指定点数的数据,并将之显示在波形图控件上。其中采集数据点数通过数值输入控件“samples per channel”在前面板输入得到。为方便实现DLL输出接口,下图的程序框图还将采样结果输出到了名为data的显示控件数组中。
右键单击前面板窗口中单击右上角的连线端子图标,在弹出菜单中选择“模式”,以及一个输入端子和一个输出端子的模式(输入和输出端子的数量可以根据需要DLL封装的函数的需要确定)。
在工具选板中选择“连线”工具将连线端子图标左侧的输入端子连接到前面板上的数值输入控件“samples per channel”,图标右侧的输出端子连接到前面板上的数字显示控件“data”。连线端子的颜色将随所连接控件的数据类型发生改变。
在项目浏览器中右键单击“程序生成规范”选择新建->.NET互操作程序集。
在弹出的互操作程序集属性页面中选择左侧类别中的“信息”,填写DLL相关信息,这些命名将在C#调用DLL时用到。
在左侧类别中选择 “源文件”,并在项目文件中选择需要封装为DLL的VI,单击下图中向右的蓝色箭头,将其搬移到右侧的“导出”窗口中。
在随即弹出的定义VI原型窗如下图所示。
将采集结果data作为returnvalue返回,同时删去左侧参数框中的data,配置后定义VI原型窗口变为下图所示的样子。
在“预览”窗口单击生成预览可以预览将要生成的DLL文件,检查路径配置正确后,单击下方的生成按钮,即可在指定目录生成可供调用的DLL库。
二、在C#中调用LabVIEW生成的DLL
在VS的C#开发环境中新建一个工程。右键单击“解决方案资源管理器”中的“引用”条目,选择“添加引用”。
添加之前在LabVIEW中创建的DLL文件。
在“解决方案资源管理器”中双击DLL,可以查看该DLL中的方法。
在窗体代码中添加之前在LabVIEW中指定的命名空间。
之后就可以在C#代码中调用DLL中的数据采集设备控制函数了。
下图是我用USB-6009采集的LED灯泡工作时的电流。其中使用了Measurement Studio中的波形显示控件WaveformGraph控件(实际使用时,不一定要安装Measurement Studio)。
三、在LabVIEW中封装带有Matlab脚本的DLL
突发奇想,LabVIEW的MathScript RT节点可以包括Matlab的M脚本算法,那是否可以通过LabVIEW将Matlab开发的算法打包到可供C#调用的DLL中呢?试了一下,还真可以!
如下图所示,在LabVIEW程序框图中插入一个MathScript RT节点,对采集到的信号计算快速傅里叶变换FFT,结果同样作为VI的输出。
更新LabVIEW项目浏览器中的互操作程序集和C#中的引用,不修改之前的代码,就看到了上面电流信号的FFT幅频特性图。