• 数据采集 DAQ

  • 全系列产品自主研发 • 核心技术自主可控

从 NI DAQmx VI 迁移到 BusDAQ DAQsc VI

发布时间:2026-09-09人气:27

问题:

我之前使用NI的数据采集卡,在LabVIEW中调用NI-DAQmx驱动编写了数据采集程序。其中除了数据采集功能以外,还有数据处理和文件操作等功能。后面如果替换其他品牌数据采集卡,是否有办法将数据采集的VI进行迁移,并且保持其它核心功能不变?

回答:

这是可能的。如果要求将数据采集代码进行迁移、而保持其他功能不受影响,主要考虑有两点:一是驱动API函数的逻辑,需要尽量和NI-DAQmx驱动保持一致;二是对外的数据接口尽量保持一致。这样在迁移时能极大减少工作量,并保持其它功能的稳定。

 

第一部分,数据采集驱动API函数的逻辑

NI-DAQmx的驱动,对数据采集任务进行抽象后,都遵循“创建、配置、开始、读/写、关闭、清除”的状态转移逻辑。


图片.png


以下面截图中模拟电压连续采集为例,

① 用户选择物理通道后,设置量程的信息即可创建任务。

②③ 生成的任务引用句柄往后传递,可以配置采样速度和外部触发信息(如果有触发的话)。

④ 然后开始任务、启动ADC转换。

⑤ 在While循环中连续读取采集到的数据、至LabVIEW前面板显示。当用户按下停止按钮后,LabVIEW不再继续读取。

⑥ 进而,需要控制采集任务、使其停止采集,避免缓存区溢出。

⑦ 最后,清除任务引用句柄。

⑧ 如果任务出现错误,会弹出错误提示信息,帮助配置信息。


图片.png


 

BusDAQ DAQsc数据采集驱动API,也是按照这个流程进行的封装。具体来说,各个功能VI对应的关系是:

任务

NI DAQmx VIs

BusDAQ DAQsc VIs

备注

创建任务


图片.png



图片.png


DAQsc支持的任务类型有限,数量更少

配置任务

定时


图片.png



图片.png



触发


图片.png



图片.png


DAQsc暂不支持某些触发类型。如模拟窗口触发

开始任务


图片.png



图片.png



/

读取


图片.png



图片.png


DAQsc没有对通道数量做区分。统一用数组来捆绑

写入


图片.png



图片.png


DAQsc没有对通道数量做区分。统一用数组来捆绑

停止任务


图片.png



图片.png



清除任务


图片.png



图片.png



任务属性节点


图片.png



图片.png


NI DAQmx按对象、封装了更多属性。

BusDAQ DAQsc按照任务类、封装属性。

快速助手Express


图片.png



图片.png



 

总体来说,BusDAQDAQsc驱动API,将数据采集任务分别抽象成AIAODIDOCICO六个类。任务的创建、配置、读/写三个操作,用多态来封装各个具体的测量实例;任务开始、停止和清除这三个操作,使用类的动态分配来自适应。

对于模拟输入(AI)来说,下面的程序截图以带缓存的连续采集为例,对比NI-DAQmx的代码截图,和BusDAQ DAQsc的代码截图,可以看到这种采集功能的VIs迁移过程。


图片.png


对于模拟输出(AO)来说,下面的程序截图以带缓存的连续输出为例(波形可重生成),对比NI-DAQmx的代码截图,和BusDAQ DAQsc的代码截图,可以看到这种连续输出功能的VIs迁移过程。


图片.png


注:1 NI-DAQmxDAQmx Write.vi,接收波形数据。如果是多个通道,则接收一维波形数组。单通道/多通道额选择,通过多态来实现;

2BusDAQ DAQscDAQsc Write.vi,接收二维数组的波形数值。如果是单通道,则需要提前将一维数组Build成二维数组再传入;

 

对于数字输入(DI)来说,下面的程序截图以软件定时的数字输入为例,对比NI-DAQmx的代码截图,和BusDAQ DAQsc的代码截图,可以看到这种数字输入功能的VIs迁移过程。


图片.png


对于数字输出(DO)来说,下面的程序截图以软件定时的数字输出为例,对比NI-DAQmx的代码截图,和BusDAQ DAQsc的代码截图,可以看到这种数字输出功能的VIs迁移过程。

 


图片.png


对于计数器输入(CI)来说,下面的程序截图以脉冲计数为例,对比NI-DAQmx的代码截图,和BusDAQ DAQsc的代码截图,可以看到这种脉冲计数功能的VIs迁移过程。


图片.png


注:1 NI-DAQmx可以通过通道的属性节点,来灵活改变当前计数器所指向的具体PFI引脚。这在硬件接线时,特别方便。

2BusDAQ DAQsc无法更改计数器和PFI引脚的对应关系。也就是说,Ctr0PFI0Ctr1PFI1,……,以此类推。关系一一对应,需要注意。

 

对于计数器输出(CO)来说,下面的程序截图以连续脉冲输出为例,对比NI-DAQmx的代码截图,和BusDAQ DAQsc的代码截图,可以看到这种脉冲输出功能的VIs迁移过程。

 


图片.png


注:1 NI-DAQmxBusDAQ DAQscwhile循环中,调用Write.vi(选择对应的多态),来写入新的脉冲频率和占空比,以实时更新脉冲输出的参数。

 

第二部分,对外的数据接口部分

在上一部分中,我们重点关注了驱动API的逻辑。这里我们再来看看API的数据接口。

还是以模拟输入连续采集为例,分拆来看各个任务API的数据接口。


图片.png


在上面的程序截图中,两者都有共同的数据流,即任务引用和错误簇。分任务来看:

共同数据流:任务数据流和错误簇流

任务

NI DAQmx VIs

BusDAQ DAQsc VIs

创建任务

图片.png

1) 物理通道:NI-DAQmx数据类型。

2) 最大、最小值:DBL标量。

3) 接线端配置:I32标量。

4) 其它参数,使用默认值。

1) 物理通道:字符串。

2) 量程:簇数组,对应多通道。每个簇分别包含最大、最小值。

3) 耦合方式:枚举自定义(U8)数组,对应多通道。

4) 其它参数,使用默认值。

任务配置:定时

图片.png

1) 采样模式:枚举(I32

2) 采样率:DBL标量

3) 采样时钟源:NI-DAQmx数据类型

4) 待读取点数:I32标量

5) 实际采样率:DBL标量

1) 采样模式:枚举自定义类型

2) 采样率:DBL标量

3) 实际采样率:DBL标量

4) 采样时钟源和缓存区大小,使用默认值

任务配置:触发

图片.png

1) 触发源:NI-DAQmx数据类型

2) 触发边沿:枚举(I32

1) 触发源:枚举自定义类型(U8

2) 触发边沿:枚举自定义类型

开始任务

图片.png

1) 通用的任务流和错误簇流

1) 通用的任务流和错误簇流

任务读取

图片.png

1) 待读取点数:I32标量。

2) 返回的波形数据:一维波形数组。

1)  待读取点数:I32标量

2) 返回的波形数据:一维波形数组

任务停止和清除

图片.png

1) 通用的任务流和错误簇流

1) 通用的任务流和错误簇流

其它AO等数据采集任务,也基本有类似的数据接口。基于这个对比,可以更完整的实现VIs的迁移。


 

实现多VIs迁移的方法

根据待迁移的VI数量的多少,有下面几种方法,可以参考使用:

1)手动替换。

如果当前数据采集程序较为简单,也就使用了一个任务,大概7-8个左右的API。并且这些API还很容易定位,那么可以直接在API上右键,选择替换(Replace),找到测量IO选板(Measurement IO)下的DAQsc中的对应API


图片.png


替换完成后,可能会有部分API函数的参数类型不匹配,比如量程(最大、最小值)等。可以断开原来的参数接口,直接在新的DAQsc API接线端,右键,选择创建常量或输入/输出控件。完成整个代码的迁移。

 

2)LabVIEW自带查找(Find)和替换(Replace)功能

如果数据采集程序中,包括的任务较多,比如既有AI任务,还有AODO等任务,并且API函数还嵌套得比较深,不太容易定位。那么可以使用LabVIEW自带的查找(Find)和替换(Replace)功能。

 

在打开的VI界面,按下Crl+F快捷键。在界面的查找(Search for):选择“对象(Objects)”。


图片.png


在下面,依次选择待搜索的VI,搜索的范围,以及是否要忽略vi.lib中的VI等参数,点击查找(Find)。

图片.png


窗口中,会罗列出搜索到的所有副本(如果只找到一个副本,则直接定位副本的位置,而不会弹开这个窗口)。在窗口左边Replace with区域,选择DAQsc Timing.vi,点击替换全部(Replace All)。会将搜索到的所有NI DAQmx Timing.vi替换为DAQsc Timing.vi

其它API,可继续重复这些步骤。

替换完成后,可能会有部分API函数的参数类型不匹配,比如量程(最大、最小值)等。可以断开原来的参数接口,直接在新的DAQsc API接线端,右键,选择创建常量或输入/输出控件。完成整个代码的迁移。

3)通过VI Scripting技术,完全自动化替换

这是利用LabVIEW的高级编程工具,即VI脚本(VI Scripting)技术,来批量搜索所有的VI副本,并进行自动替换。

在使用VI Script技术编程之前,需要先确认打开它。在LabVIEW的工具菜单,选择Option。在VI Server选项卡,勾选VI Script,然后点击确定。


图片.png


然后关闭LabVIEW,再重启可以生效。

使用VI Script脚本技术,可以查找特定对象(比如某个硬盘路径中,或是某个特定的项目,或是VI中)中是否包含有DAQmx Timing.vi,并可以调用对应的方法节点,进行替换。

感兴趣的用户,可以打开范例查找器,搜索scripting的相关范例,比如Navigation Overview.vi,来进行探索。


图片.png


如果编程实现有困难,也可以从busdaq.cn网站入口联系我们,获得详细代码。




标签:

上海屹莘
联系地址
地址:上海市崇明区港沿公路1700号3幢7039室
联系方式
  • 联系电话:13524998912
  • 联系邮箱:info@busdaq.cn

Copyright © 2025-2026 上海屹莘贸易有限公司 沪ICP备2026037228号-1