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


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

 

 

 

文章出处:https://www.cnblogs.com/helesheng/p/15795427.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:使用.NET 6开发TodoList应用(27)——实现API的Swagger文档化
下一篇:记一次 .NET 某消防物联网 后台服务 内存泄漏分析
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

LabVIEW生成.NETDLL——C#下调NI数据采集设备功能方法 [www.cnblogs.com/helesheng]
.NET DLL反编译 JustDecompile
网站分享
)WinForm中莫名其妙小BUG——RichTextBox自动选择字词问题
API接口主从表数据(Master-Detail),从表数据处理方式
C# 编写一个小而快 Windows 动态桌面()之桌面交互功能
JS合并两个数组3方法详解
.NET C#教程初级篇 1-1 基本数据类型及其存储方式
生成等长随机数值方法
Visual Studio(VS)发布自动使用Net Reactor给生成DLL加壳
.NET DLL加密代码混淆 Eziriz .NET Reactor
.NET Core生成后没有Nugetdll文件
C# winform无边框窗体移动方法
iNeuOS工业互联网操作系统,增加设备驱动自定义参数模板,适配行业个性化设备应用场景
C# winform选择dll文件
ASP.NET+MVC入门踩坑笔记 () 创建项目 项目配置运行 以及简单Api搭建
简单制作一个NPM包并发布到www.npmjs.com
C# Abp框架入门系列文章(
次.Net Core程序启动失败排查过程
C#使用Thrift作为RPC框架入门()

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码