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. NepCTF pwn writeup

    上周抽时间打了nepnep举办的CTF比赛,pwn题目出的挺不错的,适合我这种只会一点点选手做,都可以学到新东西. [签到] 送你一朵小红花 64位程序,保护全开. 程序会在buf[2]处留下一个da ...

  2. odoo views中html的奇怪问题

    在我创建了字段类型为 fields.Html 以后,确出现了两种不同的情况 下图中,content是此类型的,可以正常显示不需要加widget(小部件)="html" <fo ...

  3. PSpice基本仿真分析例程

    一.瞬态分析 二.直流分析 2.1.直流分析电路 2.2.直流分析配置 2.3.直流分析输出波形 受供电电源的限制,输出最大值为±15V. 三.交流分析 3.1.1.交流分析电路1 3.1.1.交流分 ...

  4. 痞子衡嵌入式:揭秘i.MXRT1170上用J-Link连接复位后PC总是停在0x223104的原因

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上安全调试策略实现对JLink调试的影响. 痞子衡之前写过一篇旧文 <i.MXRT600的ISP模式下用J-L ...

  5. centos使用docker安装mysql5.7

    搜索镜像 docker search mysql 拉取镜像 docker pull mysql:5.7 启动mysql镜像 docker run -p 3306:3306 --name mysql - ...

  6. springboot等javaweb项目将jar包安装(打包)到本地Maven仓库

    在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包 1.打开jar所在文件夹,假设我们要将 taobao-sdk-java-auto_1479188381469-20200121. ...

  7. nim_duilib(15)之duilib属性列表.xml

    Note 为了更加方便查看duilib的属性(github有时候打不开),特此记录. 阅读本文,可以知道控件有哪些属性,可以写在xml文件中.个别需要结合源码一起看 from here 原文 < ...

  8. LeetCode118. Pascal's Triangle 杨辉三角

    题目 给定行数,生成对应的杨辉三角 思考 同一行是对称的,最大的下标为(行数+1)/2;1,1,2,3,6;下标从0开始,则对应分别为0.0.1.1.2.2 对于第偶数行,个数也是偶数,对于奇数行,个 ...

  9. Codeforces 1073D:Berland Fair(模拟)

    time limit per test: 2 secondsmemory limit per test: 256 megabytesinput: standard inputoutput: stand ...

  10. 洛谷1052——过河(DP+状态压缩)

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...