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幅频特性图。

LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]的更多相关文章

  1. WPF编程,指定窗口图标、窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法。

    原文:WPF编程,指定窗口图标.窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330793 ...

  2. Shell脚本中引用、调用另一个脚本文件的2种方法

    Shell脚本中引用.调用另一个脚本文件的2种方法 http://www.jb51.net/article/67903.htm

  3. 痞子衡嵌入式:MCUXpresso IDE下设置代码编译优化等级的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下设置代码编译优化等级的几种方法. 最近公司芯片设计团队正在开发一款全新的基于 Cortex-M33 内核的 ...

  4. Qt下存储读写应用程序设置的三种方法

    一.简介 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小.位置和密码等等.有三种方法可以实现: 使用注册表: 使用配置文件(.ini): 使用自定义文件(例如.txt) ...

  5. Linux系统下修改环境变量PATH路径的三种方法

    这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...

  6. wordpress调用置顶文章sticky_posts的三种方法

    有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah ...

  7. 查找linux系统下的端口被占用进程的两种方法 【转】

    在linux下开发时,你的软件可能要使用某一个端口,或者想查找某一个端口是否被占用.需要怎么做呢??这的确是一个比较烦恼的问题,我也此为这个苦恼过.但是通过查找man手册,还是同事的交流.总结出来两种 ...

  8. C#写好的类库dll在别人调用的时候也能看到注释的方法

    1.用///的方法添加注释 2.项目的属性里面,要选上"生成XML注释文档" 菜单 Project -> 'xxxx' Properties -> Build -> ...

  9. 在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard

    欢迎大家加入我的社区:http://t.csdn.cn/Q52km 社区中不定时发红包 文章目录 1.UML类图 2.源码 3.优缺点 1.UML类图 2.源码 package com.zheng; ...

随机推荐

  1. Linux 01 计算机硬件之冯诺依曼体系

    1. 计算机硬件软件体系 1.1 冯诺依曼体系结构 (1) 计算机处理的数据和指令用二进制表示 (2) 按顺序执行指令 (3) 计算机硬件:运算器.控制器.储存器.输入设备和输出设备. 1.2 计算机 ...

  2. CF1473B String LCM 题解

    Content 如果一个字符串 \(s\) 由若干个字符串 \(t\) 拼接而成,则我们说 \(s\) 能被 \(t\) 整除.定义 \(s_1,s_2\) 的最短公倍串为可以同时被 \(s_1,s_ ...

  3. JAVA实现根据图片生成缩略图、裁剪、压缩图片

    依赖(用来复制文件,可以根据自己的来) <dependency> <groupId>commons-io</groupId> <artifactId>c ...

  4. nim_duilib(18)之xml控件关联优化

    方法1 直接调用函数FindControl函数,返回Control*类型,对返回的类型强制转换 ui::CheckBox* pcheckbox = (ui::CheckBox*)(FindContro ...

  5. c++之Linux获取可用串口

    1.关于 这份代码来自: stackoverflow 2. 测试 2.1 测试环境: vmware + ubuntu, vmware添加串口(虚拟机关机后再添加) 2.2 测试输出 3. 源码 #in ...

  6. anaconda 如何更换镜像源

    今天需要对anaconda更换其镜像源. 故而做一个小记: 一 查看anaconda的本源方法 电脑路径:C:\Users\14269,找到  .condarc 文件. 打开.condarc文件,可看 ...

  7. MacOS使用Docker创建MySQL主主数据库

    主从同步配置可以参考上一篇MacOS使用Docker创建MySQL主从数据库 一.创建MySQL数据库容器配置文件对应目录 我们在当前用户下创建一组目录,用来存放MySQL容器配置文件,(Linux下 ...

  8. Netty 中的心跳机制

    在TCP长连接或者WebSocket长连接中一般我们都会使用心跳机制–即发送特殊的数据包来通告对方自己的业务还没有办完,不要关闭链接. 网络的传输是不可靠的,当我们发起一个链接请求的过程之中会发生什么 ...

  9. 【汇编语言】李忠《x86汇编语言——从实模式到保护模式》

    该书配套资料网址已经失效 配套资料和章节答案下载 查看最新作者网址:http://www.lizhongc.com/ 勘误表:https://wenku.baidu.com/view/9213288b ...

  10. HDFS源码解析:教你用HDFS客户端写数据

    摘要:终于开始了这个很感兴趣但是一直觉得困难重重的源码解析工作,也算是一个好的开端. 本文分享自华为云社区<hdfs源码解析之客户端写数据>,作者: dayu_dls. 在我们客户端写数据 ...