第3章 LabVIEW数据采集技术 主要内容: 数据采集基本概念、数据采集系统一般组成,典型信号的物理连线方法,以及数据采集系统主要技术指标; 模拟量/数字量数据采集系统的组成结构,LabVIEW中数据采集相关的主要函数节点,对应的数据采集与文件存储程序设计方法; 声音采集系统的组成结构,LabVIEW中声音采集相关的主要函数节点,对应的声音采集、播放与文件存储程序设计方法; 图像采集系统的一般组成,LabVIEW图像采集相关的主要函数节点,对应的图像采集、显示与文件存储程序设计方法。 微课视频 3.1数据采集技术概论 本节主要介绍数据采集的基本概念及采集信号的分类方法,数值类型数据采集的几种典型接线方式,数据采集系统的一般组成,以及数据采集系统主要关注的技术指标。 3.1.1基本概念 数据采集是指将检测对象的参量通过各类传感器件转换为电信号后,再经过调理、采集、编码、传输等步骤,送至计算机/控制器进行数据显示、处理或存储记录的过程。数据采集技术是计算机与外部世界联通的桥梁,是自动化、信息化的逻辑起点,在实践中具有十分重要的地位和作用。 现代数据采集已经不再仅仅局限于传感器数据的获取,而是数据采集与数据处理日益深度融合,在采集的同时进行数据处理,使得软件技术在数据采集系统中的作用日益突出。虚拟仪器技术恰恰是实现数据采集和数据处理深度融合的最佳开发平台之一,系统应用的灵活性和通用性皆可借助虚拟仪器开发中软件的作用轻松实现。 3.1.2信号分类 在电子信息领域中,信号传递了一些现象的行为或属性。信号是信息的载体,通常表现为某种状态量。实际信号的种类繁多,数不胜数,因而催生出多种不同的信号分类方法。 (1) 按照幅值是否连续,信号可分为模拟信号、数字信号。 (2) 按照传输介质类型,信号可分为有线信号和无线信号。 (3) 按照实际用途区分,信号可分为电视信号、广播信号、雷达信号、通信信号等。 (4) 按照所具有的时间特性区分,信号可分为确定性信号和随机性信号等。 (5) 按信号载体的物理特性区分,信号可分为电信号、光信号、声信号、磁信号、机械信号、热信号。 (6) 按信号自变量的数目区分,信号可分为一维信号、二维信号、多维信号等。 本书在编写的过程中,将数据采集领域的信号分为数值信号(含模拟和数字两种类型)、声音信号、图像信号(视频信号实际上是时序化的图像信号)三种类型。 3.1.3接线方式 在三大类信号采集中,由于声音信号、图像信号多采用内置或USB接口数据采集板卡连接麦克风或者摄像头,采集系统设计时,硬件连线极为简单。但是数值类型采集时,特别是模拟信号采集时,信号与数据采集板卡的连接方式是一个必须注意的问题——无论是接地方式还是信号与采集板卡连线方式都将影响到测量结果的准确性。 模拟信号与数据采集板卡连接时,根据信号源接地连线方式,分为浮地连接和接地连接两种类型。 1. 浮地连接 浮地连接是指信号源未连接至绝对参考或者公用接地,如图31所示。电池、热电偶、变压器、隔离放大器都属于浮地连接的信号源。 浮地连接信号源的接线端子与系统接地独立,一般可通过差分测量系统、参考单端测量系统进行浮地信号源测量。 其中在差分测量系统连线方式下,信号源“+”和“-”输出端子分别连接数据采集板卡的两个输入端子,两个导线之间的差分电压就是所需要的信号。测量系统电路的差分方式的浮地连接如图32所示(图中AIGND为测量系统接地)。 图31浮地连接 图32差分方式的浮地连接 参考单端测量系统则是直接将信号源“-”输出接线端子与测量系统AIGND连接,测量系统电路的参考单端方式的浮地连接如图33所示。 信号地与测量系统地连接,此时,AIGND是参考单端通道的公共参考,可以保证同一类型信号源参考点的一致性。 2. 接地连接 接地连接是指信号源连接至绝对参考或者公用接地,如图34所示。 图33参考单端方式的浮地连接 图34接地连接 由于连接至系统接地端,因此信号与测量设备使用相同的公共地。最常见的接地信号源为连接至建筑物墙体中电源插座的设备(信号发生器或者电源)。 差分测量系统和非参考单端测量系统是测量接地信号的最佳方式,有时也用伪差分连接方式构建测量系统(参考单端测量方式由于测量数据不可避免地会包含电源线50Hz工频成分,而且形成的接地环路还可能引入AC、DC噪声,导致测量结果存在偏置误差,另外接地间的电势差也会导致相互连接的电路之间存在接地环路电流,因而一般不予采用)。 接地连接的信号源的差分测量系统连接方式如图35所示。 非参考单端测量系统连接方式如图36所示。 图35差分测量系统连接方式 图36非参考单端测量系统连接方式 伪差分测量系统连接方式如图37所示。 图37伪差分测量系统连接方式 伪差分测量系统兼具差分测量系统和参考单端测量系统的某些特点。伪差分测量系统的通道中包含正极和负极,分别连接待测单元的输出。负极输入端子通过相对较小的阻抗(包含阻性和容性组件)与系统地连接。这种配置通常用于同步采样设备。 3.1.4系统组成 一个完整的数据采集系统一般由传感器、信号调理设备、数据采集板卡、计算机、应用开发软件等五个部分组成,如图38所示。 图38数据采集系统基本组成 数据采集系统的各个组成部分基本功能如下。 (1) 传感器。实际上是一种变换装置,能够将物理量、化学量、生物量等非电信号转换为电信号,作为后续处理的信号源。 (2) 信号调理设备。所谓调理就是对传感器输出的信号进行放大、滤波、补偿、隔离等操作,保证调理后的信号能够按照对应的电气接入标准与采集设备可靠连接。 (3) 数据采集板卡。又称DAQ(Data Acquisition)设备,是计算机与外部信号之间的接口,一般既可以获取外部电信号,又可以向外部设备输出电信号,包括模拟信号、数字信号。 (4) 计算机。指的是对从数据采集板卡获取的信号进行分析、处理、显示、存储、查阅等工作的平台,并根据需要向采集板卡发出指令,输出信号。这里的计算机既可以是个人计算机,也可以是专用的工控计算机,还可以是各类MCU、嵌入式设备、DSP等平台。 (5) 应用开发软件。一般指的是专用的数据采集软件系统,能够借助其预设的数据采集、信号分析、数据处理、可视化界面等相关功能,快速完成功能强大的数据采集应用软件开发。 随着智能传感器技术的不断发展,目前常用的传感器绝大部分已经高度集成化,传感器输出信号也逐渐标准化,数据采集系统组成可以省略信号调理部分,出现了简化版数据采集系统,如图39所示。 图39简化版数据采集系统 3.1.5常用技术指标 数据采集系统设计开发时经常关注以下7个技术指标。 (1) 分辨率。数据采集装置可以分辨的输入信号最小变化量。该指标由数据采集装置的ADC位数决定。分辨率越高,整个信号范围被分割成的区间数目越多,能检测到的信号变化就越小。比如16位的ADC,如果输入通道满量程为0~20V,则最小电压分辨率为20/216=0.000305V。因此,当检测声音或振动等微小变化的信号时,通常会选用分辨率高达24bit的数据采集产品。 (2) 精度。产生各种输出代码所需模拟量的实际值和理论值之差的最大值。精度由零位误差、积分线性误差、微分线性误差、温度漂移等综合因素引起的总误差决定。 (3) 量程。数据采集系统所能采集的模拟输入信号的范围,主要由ADC的输入范围决定。 (4) 输入限制。换算后要测量的最大值和最小值,与设备的测量范围是完全不同的两个概念。比如,DAQ设备的测量范围为0~10V,假设传感器为温度传感器,1℃对应传感器100mV的电压输出,此时假设输入限制为0~100℃,则检测结果中0V对应0℃,10V对应100℃。 (5) 采集速率。在满足系统精度前提下,系统对模拟输入信号在单位时间内所完成的数据采集次数。采集速率越高,给定时间内采集到的数据越多,就能越好地反映原始信号。根据奈奎斯特采样定理,要在频域还原信号,采集速率至少是信号最高频率的2倍; 而要在时域还原信号,则采样率至少应该是信号最高频率的5~10倍。可以根据这样的采集速率标准选择数据采集设备。 (6) 采样数。每次采样时采集数据的数目。与采样率概念不同。采样率1Hz表示每秒采样一次,采样数为N则是每次采样采集N个数据。 (7) 非线性失真。当给系统输入一个频率为f的正弦波时,其输出中出现很多频率为kf(k为整数)的频率分量现象,亦称谐波失真。一般使用谐波失真系数来衡量系统产生非线性失真的程度,计算公式如下: H=A22+A23+A24+…+A2nA21×100% 式中,A1表示基波振幅,An表示n次谐波振幅。 微课视频 3.2数值数据采集 本节主要介绍数值类型数据采集系统的一般组成、程序设计中常用的函数节点及采集程序的基本结构,并通过完整应用实例展示基于NI myDAQ的数值类型数据采集系统开发中的硬件连接及模拟量数据读取、数据显示、文件存储等功能的实现方法。 3.2.1数值采集 1. 采集系统一般组成 基于NI LabVIEW的数值采集系统一般组成如图310所示。 图310基于NI LabVIEW的数值采集系统一般组成 其中,传感器根据采集需要选配,数据采集板卡需选择NI支持的类型,除LabVIEW外计算机还必须安装DAQmx驱动。 图311NI myDAQ设备外观 本书使用的数据采集板卡为NI公司出品、素有“面向学生创新应用的口袋实验室”美称的myDAQ(USB接口),这是一种使用LabVIEW进行软件开发的低成本便携式数据采集设备。NI myDAQ设备外观如图311所示。 myDAQ适用于电子设备和传感器测量相关应用系统开发。myDAQ提供了模拟输入(AI)、模拟输出(AO)、数字输入和输出(DIO)、音频输入输出和数字万用表等接口,myDAQ主要技术指标如表31所示。 表31myDAQ主要技术指标 模拟输入 通道数量2个差分或1个立体声输入 ADC分辨率16位 最大采样率200KS/s(每秒200k个采样点) 定时精度100ppm 量程 模拟输入+10V、+2V、DC耦合 音频输入+2V、AC耦合 输入FIFO容量4095个采样,供所有通道使用 模拟输出 通道2个接地参考或1个立体声输出 DAC分辨率16位 最大更新频率200KS/s 量程 模拟输出 +10V、+2V、DC耦合 音频输出 +2V、AC耦合 最大输出电流2mA 输出阻抗 模拟输出 1Ω 音频输出 120Ω 输出FIFO容量8191个采样(所有使用通道中) 续表 数字I/O 数字线数量8; DIO<0~7> 方向控制每个端子可通过编程独立配置为输入或输出 更新模式软件定时 下拉电阻75kΩ 逻辑电平5V兼容LVTTL输入 3.3VLVTTL输出 通用计数器/ 定时器 通道数量1 精度32位 内部时基时钟100MHz 时基精度100ppm 最大计数和脉冲发生更新速率1MS/s 数据传输编程I/O 更新模式软件定时 数值类型数据采集程序编写之前,必须首先安装NI DAQmx驱动,并进行必要的配置。NI DAQmx驱动版本众多,一般必须与计算机安装的LabVIEW版本保持一致。本书使用LabVIEW 2018,因此可在NI网站下载NI DAQmx驱动18.0版本,NI DAQmx下载页面如图312所示。 图312NI DAQmx下载页面 安装完成后,该驱动会在计算机上自动安装一个名为“Measurement & Automation Explorer”的软件,即测试与自动化资源管理器,简称NI MAX,用于管理和配置DAQ硬件设备。NI MAX运行界面如图313所示。 图313NI MAX运行界面 NI MAX中既可以检查安装的DAQ设备是否正常,又能配置DAQ设备工作模式进行测试,还可以创建仿真设备。仿真设备能够使得开发者在没有物理设备的情况下创建、运行数据采集程序,测试系统的功能、性能。 2. 数值采集常用函数节点 NI DAQmx驱动安装完成后,LabVIEW函数选板中会出现NI DAQmx函数子选板,如图314所示。 图314NI DAQmx函数子选板 基于DAQmx的数据采集程序设计常用函数节点及其功能如表32所示。 表32NI DAQmx的数据采集程序设计常用函数节点及其功能 选 板 对 象说明 DAQ助手Express VI通过NI DAQmx创建、编辑和运行任务 DAQmx创建虚拟通道 创建单个或一组虚拟通道,并将其添加至任务。该多态VI的实例分别对应通道的I/O类型(如模拟输入、数字输出或计数器输出)、测量或生成操作(如温度测量、电压测量或事件计数)或在某些情况下使用的传感器(如用于温度测量的热电偶或RTD) DAQmx开始任务使任务处于运行状态,开始测量或生成。该VI适用于某些应用程序 DAQmx读取从用户指定的任务或虚拟通道中读取采样。该多态VI的实例分别对应返回采样的不同格式、同时读取单个/多个采样或读取单个/多个通道 DAQmx写入 向用户指定的任务或虚拟通道中写入采样数据。该多态VI的实例分别用于写入不同格式的采样,写入单个/多个采样,以及对单个/多个通道进行写入 DAQmx停止任务停止任务,使其返回DAQmx开始任务VI运行之前或自动开始输入端为TRUE时DAQmx写入VI运行之前的状态 DAQmx清除任务 清除任务。在清除之前,VI将中止该任务,并在必要情况下释放任务保留的资源。清除任务后,将无法使用任务的资源,必须重新创建任务 图315查看函数支持的 虚拟通道类型 DAQmx函数子选板中提供的数据采集相关函数节点大部分为多态函数,可以根据需要灵活配置(模拟输入、模拟输出、数字输入、数字输出、计数器输入、计数器输出),以适应数据采集系统丰富多彩的应用。 (1) DAQmx创建虚拟通道。“DAQmx虚拟通道”可配置为模拟量I/O通道、数字量I/O通道、计数器I/O通道模式。单击函数节点“多态VI选择器”可查看函数支持的虚拟通道类型,如图315所示。 (2) DAQmx读取。“DAQmx读取”可配置为模拟量读取、数字量读取、计数器读取及原生态读取模式。单击函数节点“多态VI选择器”可查看函数支持的读取类型,如图316所示。 (3) DAQmx写入。“DAQmx写入”可配置为模拟量写入、数字量写入、计数器写入及原生态写入模式。单击函数节点“多态VI选择器”可查看函数支持的写入类型,如图317所示。 3. 数值采集程序基本结构 数据采集时,如果仅以设备测试或者简单测量为目的,一般可在NI MAX中进行数据采集测试,也可以借助DAQmx函数子选板中提供的DAQ助手快速完成数据采集。但是对于复杂的数据采集任务,特别是需要精确控制数据采集细节时,则必须采取DAQmx编程方式完成数据采集任务。 基于DAQmx的数据采集程序一般由选择物理通道、创建虚拟通道、读取或写入数据、清除任务等函数节点组成,基于DAQmx的数据采集程序的基本结构如图318所示。 图316查看函数支持的读取类型 图317查看函数支持的写入类型 图318基于DAQmx的数据采集程序的基本结构 如需定时采集数据,且精度要求不高,可采取指定物理通道、软件定时状态下的定时采样,软件定时的数据采集程序基本结构如图319所示。 图319软件定时的数据采集程序基本结构 如需高精度定时输出数据,可采取指定物理通道、硬件定时状态下的定时输出,对应的硬件定时的数据采集程序基本结构如图320所示。 图320硬件定时的数据采集程序基本结构 3.2.2应用开发实例 1. 设计目标 借助便携式数据采集装置myDAQ,设计一款数据采集系统,具备以下功能。 (1) 能够根据程序界面提供的控件产生指定范围的模拟量输出参数。 (2) 能够将产生的模拟量数据写入myDAQ 模拟量输出端口。 (3) 通过硬件连接,能够采集输出模拟量的数据,并通过myDAQ 模拟量输入端口读取采集的数值。 (4) 能够对采集的数据进行波形图显示、数值显示、仪表盘图形化显示。 (5) 能够借助csv格式的电子表格文件存储每次采集的数据及采集时间。 2. 实现思路 为了快速实现设计目标,硬件设计将myDAQ模拟量采集端口ai1+、ai1-分别与模拟量输出端口ao0、地线端口AGND连接,实现程序采集myDAQ模块输出信号的功能,其中myDAQ输出模拟信号(电压值)通过程序界面进行控制。对应的myDAQ模拟量输出与采集硬件连线如图321所示。 图321myDAQ 模拟量输出与采集硬件连线 程序整体结构设计为顺序结构,顺序结构分为两帧,第一帧为初始化帧,第二帧为主程序帧。初始化帧中完成程序运行过程中各类数据的初始赋值; 主程序帧设计为两个并行线程——信号输出线程和数据采集线程,以提高程序执行的效率。 信号输出线程采取事件驱动的程序设计方法,监听用户界面操作事件,当开启输出控制且程序界面中设置的输出电压值改变时,程序向myDAQ模拟量输出端口AO0接线端子写出最新电压值,实现程序控制模拟量输出功能的技术验证。 数据采集线程采取轮询模式的程序设计方法,以1000ms的时间间隔,采集myDAQ指定端口的电压值,并通过仪表盘、波形图表显示采集数据,用以检验输出电压和检测电压是否一致; 每次数据采集,都将采集的数据写入当前VI所在目录下的TestData.csv文件中,以备后用。 对应的数据采集程序结构方案设计如图322所示。 图322数据采集程序结构方案设计 为了进一步提升程序运行界面人机交互效果,将程序界面设计划分为操作控制区、数据显示区两个区域。 操作控制区——完成输出控制、数据采集物理通道设置、输出电压数值设置、任务开始开关及程序结束控制按钮设置。 数据显示区——完成输出控制参数显示、实际采集数据显示、实时曲线显示、仪表盘图形化显示等功能。 同时,还提供myDAQ模拟量输出控制与数据采集实验连线示意图,使得用户可以在无须外围电路设计的情况,仅通过简单连线和程序设计即可快速完成模拟量的输出控制与数据采集技术验证。 3. 程序实现 根据前述设计思路,按照LabVIEW程序设计一般流程和模块设计思想,程序设计可分解为前面板设计、初始化模块、电压输出、程序停止、采集电压、文件存储等设计步骤。 1) 前面板设计 按照数值数据采集部分功能需求,设计模拟量输出与数据采集程序前面板如图323所示。 图323模拟量输出与数据采集程序前面板 2) 初始化模块 添加具有两帧的顺序结构,第一帧设置子程序框图标签为“初始化”,第二帧设置子程序框图标签为“主程序”。初始化部分主要完成程序界面有关控件显示内容的初始设置。 在第一帧“初始化”程序框图中,创建波形图表的属性节点(历史数据),设置属性节点为写入类型,初始赋值为数值型一维数组常量,完成波形图表的初始化; 使用局部变量设置按钮“停止”“采集”为逻辑假; 使用局部变量设置控件“输出电压设置”“模拟量1采集数据值”“实际产生数据值”“采集数据值”等初始值为0。 3) 电压输出 电压输出控制指的是程序监测用户界面操作,若数值型控件“输出电压设置”参数发生改变,则通过myDAQ输出对应的电压值。这一功能通过以下步骤实现。 (1) 创建虚拟通道。调用节点“DAQmx创建虚拟通道”(函数→测量I/O→DAQmx→数据采集→DAQmx创建虚拟通道),并设置多态调用模式为“模拟输出→电压”。 (2) 开启采集任务。调用节点“DAQmx开始任务”(函数→测量I/O→DAQmx→数据采集→DAQmx开始任务)启动任务。 (3) 添加事件结构。添加While循环结构,并内嵌事件结构。在事件结构中添加“输出电压设置: 值改变”事件处理子程序框图。 (4) 输出模拟信号。事件处理子程序框图内调用节点“DAQmx写入”(函数→测量I/O→DAQmx→数据采集→DAQmx写入),并设置多态调用模式为“模拟→单通道→单采样→DBL”,设置节点写出数据为前面板控件“输出电压设置”当前数值,实现水平滑动杆控件“输出电压设置”一次操作,myDAQ 输出一次对应电压值的功能。 (5) 清除采集任务。循环结构右侧调用节点“DAQmx停止任务”(函数→测量I/O→DAQmx→数据采集→DAQmx停止任务)结束工作任务,调用节点“DAQmx清除任务”(函数→测量I/O→DAQmx→数据采集→DAQmx清除任务)释放程序占用资源。 基于DAQmx的事件模式下模拟信号输出完整程序实现如图324所示。 图324基于DAQmx的事件模式下模拟信号输出完整程序实现 4) 程序停止 编辑事件结构,右击事件结构“选择器标签”,选择“添加事件分支...”,在弹出窗口中“事件源”一栏选择“停止按钮”,生成“停止按钮: 值改变”事件处理子程序框图。 在“停止按钮: 值改变”事件处理子程序框图中,完成当前事件中DAQmx引用的传递,拖曳进“停止按钮”控件图标,并通过While循环右边框数据通道连接While循环条件端子,用以结束While循环。 “停止按钮: 值改变”事件处理子程序实现如图325所示。 图325“停止按钮: 值改变”事件处理子程序实现 5) 采集电压 采集电压是指在本节搭建的数据采集系统中,myDAQ模拟量输入端子AI1读取myDAQ模拟量输出端子AO0电压值的功能。 作为程序的核心功能,电压数据采集工作应该具有相对独立性,因此这里采取多线程程序设计技术——新建一个While循环结构,作为单独线程,专门解决基于myDAQ设备AI1端口采集数据的问题。 根据程序设计目标要求,数据采集每秒执行一次,为了简化程序设计,这里采取软件定时的方式实现1s时间间隔采样一次程序预设功能。电压采集部分具体实现过程如下所示。 (1) 创建虚拟通道。调用节点“DAQmx创建虚拟通道”(函数→测量I/O→DAQmx→数据采集→DAQmx创建虚拟通道),并设置多态调用模式为“模拟输入→电压”。 (2) 开启采集任务。调用节点“DAQmx开始任务”(函数→测量I/O→DAQmx→数据采集→DAQmx开始任务)启动任务。 (3) 创建定时循环。创建While循环结构,内嵌条件结构,判断按钮开关“采集”状态,如果开关打开,则调用节点“DAQmx读取”(函数→测量I/O→DAQmx→数据采集→DAQmx读取),并设置多态调用模式为“模拟→单通道→单采样→DBL”,完成AI1端口数据采集; 同时,采集的数据利用数值显示控件、仪表盘、波形图表控件进行显示; 并且调用节点“延时”(函数→编程→定时→延时),设置等待时间为1000ms,实现1s采集一次的软件定时功能。 (4) 清除采集任务。循环结构右侧调用节点“DAQmx停止任务”(函数→测量I/O→DAQmx→数据采集→DAQmx停止任务)结束工作任务,调用节点“DAQmx清除任务”(函数→测量I/O→DAQmx→数据采集→DAQmx清除任务)释放程序占用资源。 (5) 确定停止策略。在前面板中右击【停止】按钮,选择“机械动作→单击时转换”,将默认的按钮动作模式(释放时触发)修改为单击时状态取值转换,不再恢复; 创建“停止按钮”局部变量,该局部变量连接数据采集子程序,实现一个停止按钮控制两个循环结构同步结束运行的功能。 模拟信号事件触发输出与定时连续采集程序的多线程实现如图326所示。 图326模拟信号事件触发输出与定时连续采集程序的多线程实现 6) 文件存储 文件存储功能是指在电压采集的基础上,将采集的数据与采集的时间这两个参数以csv格式文件进行存储。后缀为csv的电子表格文件是大部分第三方数据分析处理平台使用的文件格式,本书中使用的百度AI开放平台模型训练需要的数据就是要求以csv格式存储的。所以采集数据的csv文件存储是系统的另一核心功能。csv格式文件的读写,核心在于“写入带分隔符电子表格”“读取带分隔符电子表格”两个函数节点的运用。 (1) 写入带分隔符电子表格。位于“函数→编程→文件I/O→写入带分隔符电子表格”,用于存储数组数据,可以使用Excel查看这些数据,其本质上还是文本数据,只不过数据之间自动添加了分隔符。该函数的主要端口如图327所示。 图327函数节点“写入带分隔符电子表格”主要端口 (2) 读取带分隔符的电子表格。位于“函数→编程→文件I/O→读取带分隔符电子表格”,用于 读取文件数据,可以使用Excel查看这些数据。该函数的主要端口如图328所示。 图328函数节点“读取带分隔符电子表格”主要端口 综合上述信息,在数据采集程序基础上,对于采集的每个数据,只需要调用函数节点“写入带分隔符的电子表格”,并设置相关参数,即可实现这一目标。采集数据写入csv文件的实现过程如下。 (1) 创建文件存储路径。第二帧While循环之前,调用节点“当前VI路径”(函数→编程→文件I/O→文件常量→当前VI路径)、节点“拆分路径”(函数→编程→文件I/O→拆分路径)、节点“创建路径”(输入参数“名称或相对路径”连接字符串常量“TestData.csv”),实现csv文件存储路径的创建。 (2) 转换采集数据。调用节点“数值至小数字符串转换”(函数→编程→字符串→数值/字符串转换→数值至小数字符串转换),将采集的电压值转化为字符串类型数据。 (3) 获取时间数据。调用节点“获取日期/时间字符串”(函数→编程→定时→获取日期/时间字符串),实现每次数据采集时获取日期、时间字符串。 (4) 创建数组。调用节点“创建数组”,将完成类型转换的采集数据和最终拼接后的时间字符串通过数组进行暂存。 (5) 写入文件。调用节点“写入带分隔符的电子表格”(函数→编程→文件I/O→写入带分隔符的电子表格),将每次采集数据、采集时间两个参数创建的数组元素以追加模式写入文件“TestData.csv”。 最终完成的模拟信号输出、采集与文件存储完整程序框图如图329所示。 图329模拟信号输出、采集与文件存储完整程序框图 4. 结果分析 程序运行前,需要确认当前VI连接DAQ设备信息。打开NI MAX,查看当前联机myDAQ,如图330所示。 图330查看当前联机myDAQ 图330中左侧导航栏中“设备和接口”下可以查看本机连接全部硬件设备。例如,图330中显示本机连接6个COM端口,1个系统集成的摄像头,3个myDAQ,1个USB6003数据采集设备。本机当前DAQ设备唯一在线处于联机状态的设备就是myDAQ3。 程序界面中设置基于myDAQ3的模拟量输出物理通道,设置基于myDAQ 3的模拟量采集物理通道,单击LabVIEW工具栏中运行按钮,模拟信号输出、采集与文件存储程序运行界面如图331所示。 图331模拟信号输出、采集与文件存储程序运行界面 程序运行过程中,操作水平滑动杆【输出电压设置】,可以改变联机myDAQ设备输出电压值; 单击【开关】按钮,可以启动/中止数据采集,并可通过波形图表观测数据采集序列; 单击【停止】按钮,则结束程序运行。 打开本机资源管理器,在当前VI所在目录下,可以查看名为“TestData.csv”的数据采集程序生成的数据存储文件,如图332所示。 图332数据采集程序生成的数据存储文件 双击文件TestData.csv,打开文件,文件中记录数据内容如图333所示。 图333文件中记录数据内容 对比可见,文件存储数据与程序实际产生、采集的数据完全一致。进一步地,在数据采集及文件存储的基础上既可以结合常规信号分析处理方法,对采集的数值数据进行时域、频域的各种分析处理,也可以结合飞桨EasyDL开放平台,对采集数据文件进行收集、归类、训练、识别及其他处理,可形成更加复杂的技术应用。 微课视频 3.3声音数据采集 本节主要介绍声音数据采集系统的一般组成、声音采集程序设计中常用的函数节点及声音采集程序的基本结构,并通过完整应用实例展示声音数据采集系统开发中基于计算机声卡的声音采集、文件存储、声音播放等功能的实现方法。 3.3.1声音采集 1. 采集系统一般组成 从数据采集的角度看,声音属于特定频率范围内的模拟信号,一般借助麦克风+数据采集卡的方式,将模拟声音信号转换为计算机可读取的数字信号。由于声音信号频率范围一般为20~20kHz,按照奈奎斯特定理,采集声音数据时,采样频率应至少为40kHz。这一技术指标导致可采集声音的商用数据采集卡一般比较昂贵。不过现代计算机系统均有自带的集成声卡,具有声音捕获(A/D)和声音输出(D/A)功能,而且兼容性好、性能稳定、通用性强,驱动升级极为方便,可以作为一款免费的、优秀的数据采集板卡。 如果测试对象信号频率范围在音频范围内且其他指标要求不高(信号调理受制于声卡自身性能,无法控制,只能采集20~20kHz的信号,频率不在此范围的信号无法采集),则完全可以借助计算机集成声卡快速构建音频范围的数据采集系统。基于声卡的数据采集系统组成结构如图334所示。 图334基于声卡的数据采集系统组成结构 基于声卡的数据采集系统设计一般关注以下几个技术指标。 (1) 采样频率。人耳的听力范围一般为20Hz~20kHz,因此采样频率40kHz即可满足需要。目前一般的声卡最高采样频率为44.1kHz,而且采样频率一般可设置为44.1kHz、22.05kHz、16kHz、8kHz四档取值。其中,22.05kHz即可达到FM广播级的声音品质,而对于语音识别、声音分类算法,一般16kHz或8kHz的采样频率即可满足要求。 (2) 采样精度。采样精度指的是采样的位数,一般声卡采样位数有8位、16位、32位三档可以选择。采样位数越高,精度就越高,录制的声音质量越好,产生的数据量就越大,随之带来的信号分析处理计算量就越大。目前主流声卡多为16位的采样精度。 (3) 声道数。声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。早期声卡普遍采用单声道,目前绝大多数声卡为立体声,即提供两个独立的声道。 (4) 信噪比。信噪比是诊断声卡抑制噪声能力的重要指标,通常使用信号与噪声的功率比值表示,单位为分贝。信噪比越大,声卡的滤波能力越强,声卡作为电脑的主要输出音源,对信噪比要求是相对较高的。但是由于声音通过声卡输出,需要通过一系列复杂的处理,影响信噪比大小的因素也有很多,比如计算机内部的电磁辐射干扰很严重,导致集成声卡的信噪比很难做到很高,一般为80dB左右。 由于无须添加额外的硬件配置即可完成声音信号采集,且部分性能指标还要优于一般商用数据采集卡,基于计算机集成声卡搭建数据采集系统无疑是学习声音数据采集技术、验证相关信号处理算法的最佳平台。 2. 声音采集常用的函数节点 右击程序框图空白处,选择“函数→编程→图形与声音→声音”,可以查看LabVIEW提供的声音函数子选板,如图335所示。 图335LabVIEW提供的声音函数子选板 LabVIEW将声音类函数节点分为输出(播放声音)、输入(采集声音)、文件(声音文件存取)三大类。其中,声音输入子函数选板提供的函数节点如图336所示。 图336声音输入子函数选板提供的函数节点 声音输入子函数选板中主要函数节点功能如表33所示。 表33声音输入子函数选板中主要函数节点功能 选 板 对 象说明 读取声音输入从声音输入设备读取数据,必须使用声音输入VI配置设备,必须手动选择所需多态实例 配置声音输入配置声音输入设备,采集数据并发送数据至缓存,使用读取声音输入VI读取数据 启动声音输入采集 开始从设备上采集数据。只有已调用停止声音输入采集时,才需使用该VI 声音采集从声音设备采集数据。该Express VI自动配置输入任务,在采集数据完毕后清除任务 声音输入清零停止采集数据、清除缓存、任务返回至默认状态,并清除与任务相关的资源,任务变为无效 停止声音输入采集停止从设备采集数据。使用声音输入清零VI,清除缓存中的数据。使用启动声音输入采集VI,在调用“停止声音输入”VI后重新开始采集 声音函数子选板中还提供了声音文件函数子选板,文件函数子选板提供的函数节点如图337所示。 图337文件函数子选板提供的函数节点 文件函数子选板中主要函数节点功能如表34所示。 表34文件函数子选板中主要函数节点功能 选 板 对 象说明 打开声音文件打开用于读取的.wav文件,或创建待写入的新.wav文件。必须手动选择所需多态实例 读取声音文件使.wav文件的数据以波形数组形式读出。必须手动选择多态实例 关闭声音文件关闭.wav文件 简易读取声音文件使.wav文件的数据以波形数组形式读出。该VI自动打开、读取和关闭.wav文件 简易写入声音文件使波形数组的数据写入.wav文件。该VI自动打开和关闭.wav文件 声音文件信息获取关于.wav文件的数据。该VI接收路径或引用句柄 写入声音文件使波形或波形数组的数据写入.wav文件 LabVIEW中声音输出子选板提供的函数节点如图338所示。 图338声音输出子选板提供的函数节点 声音输出子选板中主要函数节点功能如表35所示。 表35声音输出子选板中主要函数节点功能 选 板 对 象说明 播放波形在声音输出设备中播放通过有限采样采集到的数据。该Express VI自动配置输出任务并在输出结束后清除任务 播放声音文件打开文件立即开始播放 配置声音输出配置生成数据的声音输出设备。使用写入声音输出VI使数据写入设备 启动声音输出播放在设备上开始重放声音。只有停止声音输出播放VI已调用时,才需使用该VI 设置声音输出音量设置声音输出设备的播放音量 声音输出等待等待直至所有声音在输出设备上播放完毕 声音输出清零使设备停止播放声音,清空缓存,任务返回至默认状态,并清除与任务相关的资源。任务变为无效 声音输出信息返回声音输出任务的当前状态信息 停止声音输出播放停止设备从缓存播放声音。使用声音输出清零VI,清除缓存中的数据。使用启动声音输出播放VI,重新开始输出 写入声音输出使数据写入声音输出设备。如需连续写入,必须使用配置声音输出VI配置设备。必须手动选择所需多态实例 3. 声音采集程序基本结构 利用声音输入子选板提供的6个函数节点即可完成声音信号采集应用程序设计,声音信号采集程序的基本结构如图339所示。 图339声音信号采集程序的基本结构 在图339所示的声音信号采集程序结构中,循环结构之前调用函数节点完成采集参数配置、任务启动等工作。循环结构中调用读取声音数据函数节点,实现声音信号的连续采集,循环结构内亦可添加数据显示、数据处理等功能,实现声音波形的实时观测、实时分析处理功能。循环结构之后,调用相关函数节点停止采集任务,释放采集任务占用的资源。 声音文件函数子选板中的函数节点往往和声音输入子选板相关函数节点配合使用,形成相互关联的两条数据流——声音采集数据流和声音文件写入数据流,实现声音数据采集的同时,将采集数据写入声音文件。声音采集与文件存储程序的一般结构如图340所示。 图340声音采集与文件存储程序的一般结构 声音输出子选板相关函数节点往往和文件操作子选板函数节点配合使用,形成相互关联的两条数据流——声音文件读取数据流和声音输出数据流,实现打开声音文件的同时,读取声音文件数据,并通过声卡输出声音数据,实现声音的播放功能。播放声音文件的程序一般结构如图341所示。 图341播放声音文件的程序一般结构 3.3.2应用开发实例 1. 设计目标 基于计算机声卡设计音采集、存储与文件播放程序,实现以下功能。 (1) 响应程序界面有关按钮命令,启动声音录制,录制指定时长(单位为s)后自动结束录制。 (2) 采集的声音数据以文件形式自动存储,存储路径为当前VI所在目录,文件名称为当前时间格式(时间格式中字符“: ”不能作为文件名,可替换为“”),文件后缀为默认的“wav”。 (3) 程序界面有关按钮命令,播放录制声音,并显示声音数据波形。 2. 实现思路 声音采集结果如果用于后续识别、分类,一般多以较短时间采集数据存储的文件为操作对象,这一过程既有可能因为录制效果不满意而反复采集,也有可能需要持续采集和存储。所以设计事件响应模式声音数据采集程序结构,满足程序执行过程中反复操作需要,如图342所示。 图342事件响应模式声音数据采集程序结构 其中事件结构处理3种事件。 (1) 用户单击【采集声音】按钮事件。当该事件发生时,开启指定时长的声音录制,录制过程中可实时观测采集声音的波形,录制完成后以当前时间信息为文件名称,完成录制声音的文件存储。 (2) 用户单击【播放声音】按钮事件。当该事件发生时,调用文件对话框,打开最近一次录制的声音文件,调用声音播放函数节点播放声音,并可观测录制声音的波形。 (3) 用户单击【停止程序】按钮事件。当该事件发生时,结束程序运行。 3. 程序实现 根据前述设计思路,按照LabVIEW程序设计一般流程和模块设计思想,程序设计可分解为前面板设计、指定时长声音采集、声音文件存储、声音文件播放等设计步骤。 1) 前面板设计 按照声音采集部分功能需求,设计声音采集程序前面板如图343所示。 图343声音采集程序前面板 前面板设计按照功能划分界面布局区域,分为3部分。 一是声音采集参数设置区域,由5个数值输入控件组成,提供录制时长、每通道采样数、采样率、通道数、采样位数等参数设置。 二是采集声音信息显示区域,借助波形图控件实时显示采集数据波形,借助数值显示控件显示声音录制秒数。 三是功能控制区,由布尔类型按钮组成,用以触发声音采集、结束程序等事件。 2) 指定时长声音采集 声音采集功能就是启动指定时长的声音数据采集。作为声音采集程序的子功能,按照总体实现思路,该部分程序实现应该在按钮【采集声音】事件处理子框图中实现。具体实现过程如下。 (1) 配置输入参数。调用函数节点“配置声音输入”(函数→编程→图形与声音→声音→输入→配置声音输入),设置采用模式为“连续采集”,设置“设备ID”为默认第一声音输入通道(取值为0),采样率、通道数、采样位数3个控件捆绑成簇,作为“声音格式”输入参数,设置“每通道采样数”为用户界面输入数据。 (2) 启动采集任务。调用函数节点“启动声音输入采集”(函数→编程→图形与声音→声音→输入→启动声音输入采集),并连线节点“配置声音输入”。 (3) 处理采集事件。事件处理程序子框图中创建内嵌While循环结构,用以实现指定时长的声音采集。该内嵌的While循环结构内调用Express VI“已用时间”(函数→编程→定时→已用时间),设置其输入端口“重置”连接布尔常量逻辑真,设置其“目标时间”连线数值输入控件“录制时长(s)”,其输出端口“结束”作为While循环结构结束条件。 (4) 显示采集数据。内嵌While循环结构中,调用函数节点“读取声音输入”(函数→编程→图形与声音→声音→输入→读取声音输入),完成声音数据采集,节点输出端口“数据”连线波形图控件,实现采集数据的波形显示功能。 (5) 停止采集任务。内嵌的While循环结构之外,调用函数节点“停止声音输入采集”(函数→编程→图形与声音→声音→输入→停止声音输入采集)、“声音输入清零”(函数→编程→图形与声音→声音→输入→停止声音输入采集),释放声音采集任务占有的资源。 对应的指定时长声音采集完整程序实现如图344所示。 图344指定时长声音采集完整程序实现 3) 声音文件存储 LabVIEW中仅能以.wav格式文件存储声音数据,这一功能可通过声音数据采集数据流和文件操作数据流协同工作实现。 声音数据采集数据流由配置采集参数、启动声音采集、循环读取采集数据、采集结束后停止采集、清零输入等环节组成,实现声音的连续采集,直至满足指定条件才结束采集工作。 文件操作数据流由写入模式的文件打开、写入声音文件(循环操作,采集到一部分数据就将其写入文件)、文件关闭等节点组成。 可按照如下步骤实现采集声音数据并将采集的数据写入文件。 (1) 创建文件路径。为了实现将采集的声音文件以当前时间(年月日时分秒)构造.wav格式声音文件名称,并将文件存储在当前VI所在文件夹,调用节点“当前VI路径”(函数→编程→文件I/O→文件常量→当前VI路径)、节点“拆分路径”(函数→编程→文件I/O→拆分路径)、节点“创建路径”(函数→编程→文件I/O→创建路径)及节点“获取日期/时间字符串”(函数→编程→定时→获取日期/时间字符串)和其他字符串节点,完成文件路径的创建。 (2) 打开声音文件。调用节点“打开声音文件”(函数→编程→图形与声音→声音→文件→打开声音文件),并节点设置为“写入”模式,配置其端口“声音格式”与声音采集格式设置相同,配置其端口“路径”连线上一步创建的文件路径。 (3) 写入声音数据。While循环结构内调用函数节点“写入声音文件”(函数→编程→图形与声音→声音→文件→写入声音文件),其输入端口“数据”连线数据采集流程中函数节点“读取声音输入”输出的数据。 (4) 关闭声音文件。While循环结构外,调用节点“关闭声音文件”(函数→编程→图形与声音→声音→文件→关闭声音文件),用以实现文件操作完毕后释放相关资源。为了进一步增强程序的健壮性,调用节点“合并错误”“清除错误”强制消除程序运行过程中出现的错误。 完整的指定时长采集声音加文件存储的程序实现如图345所示。 图345指定时长采集声音加文件存储的程序实现 4) 声音文件播放 LabVIEW中播放的声音既可以是音频范围内的波形数据也可以是声音文件中的读出数据。限于篇幅,这里仅以声音文件的播放为例进行程序设计方法说明。声音文件的播放可通过文件读取数据流和声音数据输出数据流协同工作实现。 文件读取数据流由读取模式的文件打开、读取声音文件、文件关闭等节点组成。文件中读取的数据通过函数节点“写入声音输出”建立文件操作数据流与声音输出数据流之间的关联关系,进而实现声音文件的播放功能。 声音数据输出数据流由配置声音输出参数、启动声音输出、写入声音输出、停止声音输出、清零输出等环节组成。 为了使得播放声音功能能够满足用户多次操作的需要,程序前面板中添加按钮【播放声音】,程序框图中添加对应的事件处理子框图,具体实现过程如下。 (1) 设置文件路径。调用ExpressVI“文件对话框”(函数→编程→文件I/O→高级文件函数→文件对话框),并设置其参数“开始路径”为“当前VI路径”(函数→编程→文件I/O→文件常量→当前VI路径),参数“类型”为字符串常量“*.wav”,实现文件对话框文件类型的过滤。 (2) 启动声音输出。当用户操作文件对话框选择文件并单击【确定】按钮时,对应的条件分支内,调用函数节点“配置声音输出”(函数→编程→图形与声音→声音→输出→配置声音输出),设置采样模式为“连续采样”,并创建“每通道采样数”“采样率”“通道数”“采样位数”等控件局部变量,配置声音输出参数,调用函数节点“启动声音输出”(函数→编程→图形与声音→声音→输出→启动声音输出)启动声音播放工作任务。 (3) 打开声音文件。调用节点“打开声音文件”(函数→编程→图形与声音→声音→文件→打开声音文件),节点设置为“读取”模式。 (4) 输出声音数据。添加While循环结构,实现对文件读取数据的连续播放。While循环结构内,存在以下两条程序执行路径。 一是声音播放执行路径。调用函数节点“设置声音输出音量”(函数→编程→图形与声音→声音→输出→设置声音输出音量),设置音量参数取值为数值常量100,完成播放音量的控制; 调用函数节点“写入声音输出”(函数→编程→图形与声音→声音→输出→写入声音输出),实现声音数据的播放功能; 调用函数节点“声音输出信息”(函数→编程→图形与声音→声音→输出→声音输出信息),实现声音播放状态参数获取功能。 二是声音文件读取执行路径。调用函数节点“读取声音文件”(函数→编程→图形与声音→声音→文件→读取声音文件),节点输出数据作为节点“写入声音输出”输入参数。 (5) 设置循环条件。设置While循环结构条件端子为“真时继续”,条件端子连接节点“声音输出信息”输出“正在播放?”,实现播放完毕结束While循环的功能。 (6) 清除输出任务。循环结构外调用函数节点“停止声音输出播放”(函数→编程→图形与声音→声音→输出→停止声音输出播放)结束声音信号输出。调用函数节点“声音输出清零”(函数→编程→图形与声音→声音→输出→声音输出清零)复位声音输出。调用函数节点“关闭声音文件”(函数→编程→图形与声音→声音→文件→关闭声音文件),实现文件操作完毕后释放相关资源的功能。 对应的声音文件播放及波形显示功能的完整程序实现如图346所示。 图346声音文件播放及波形显示功能的完整程序实现 4. 结果分析 单击LabVIEW工具栏中运行按钮,声音采集、文件存储及播放程序运行结果如图347所示。 图347声音采集、文件存储及播放程序运行结果 单击【采集声音】按钮,启动声音信号采集录制和文件存储功能。录制完成后,对应的资源管理器中可以查看程序最近录制的声音文件,如图348所示。 图348程序最近录制的声音文件 单击【播放声音】按钮,弹出文件对话框,选择录制的声音文件,播放选择的声音文件并显示信号波形,如图349所示。 图349播放选择的声音文件并显示信号波形 进一步地,在声音采集及文件存储的基础上,既可以结合常规信号分析处理方法,对采集的声音数据进行分析处理,也可以结合飞桨EasyDL开放平台,对采集声音文件进行收集、归类、训练、识别及其他处理,则可形成更加复杂的技术应用。 微课视频 3.4图像数据采集 本节主要介绍图像类型数据采集系统的一般组成,以及程序设计中常用的函数节点和图像采集程序的基本结构,并通过完整应用实例展示图像类型数据采集系统开发中图像采集、文件存储、定时控制等功能的实现方法。 3.4.1图像采集 1. 采集系统一般组成 图像信息是人类获取的最重要的信息之一,图像采集是数字图像处理、图像识别等热门技术的逻辑起点,其应用十分广泛。图像信号采集对应的摄像头接口类型繁多,目前的主流是USB接口,可以直接连接计算机系统,也有部分采用其他形式接口,需要专用的图像采集卡与计算机系统连接。典型的图像采集系统软硬件组成结构如图350所示。 图350图像采集系统软硬件组成结构 其中,基于USB接口的摄像头构建图像采集系统,相对比较简单,在图像采集驱动程序、视觉开发包等工具支持下,即可开展系统开发工作。其他接口的摄像头则还需要提供图像采集卡驱动。一般笔记本电脑都带有集成摄像头,可以在无须额外费用支出前提下,仅关注软件设计方法,快速构建图像采集系统,完成应用系统开发中的关键技术验证。 进行图像采集系统开发,首先必须保证以下工具包的安装。 (1) Vision Acquisition Software(VAS)。该软件的作用主要是提供硬件驱动,不安装则无法识别摄像头硬件设备。 (2) Vision Development Module(VDM)。该软件的作用主要是提供机器视觉相关的函数,包括IMAQ Vision函数库和NI Vision Asistant。 (3) Vision Builder AI(VBA)。该软件为自动检测视觉生成器,用于快速创建基于机器视觉的自动监测系统。 (4) Measurement & automation Explore(NI MAX)。该软件主要用于管理计算机系统安装的LabVIEW软件系统与硬件设备,一般安装数据采集驱动后会自动安装。在该软件中查看计算机集成摄像头信息。 安装完毕图像采集相关工具包,可利用NI MAX进行图像采集功能测试,如图351所示。 NI MAX中可以改变摄像头工作模式相关参数配置,且配置结果可在LabVIEW程序设计中继续有效发挥作用。 2. 图像采集常用函数节点 安装完毕VAS、VDM等工具包,重启LabVIEW,新建VI。右击程序框图空白处,可以查看“视觉与运动”函数子选板,如图352所示。 “视觉与运动”函数子选板中包含7组函数子选板,图像采集常用的是NIIMAQdx、Vision Utilities函数子选板。 (1) NIIMAQdx为图像采集函数子选板,主要针对非NI的USB、1394、GIGE Vision接口相机,如果使用NI出品的相机,则使用IMAQ函数子选板。NIIMAQdx函数子选板提供的主要函数节点如图353所示。 (2) Vision Utilities函数子选板提供图像处理极为有用的若干类别的函数包,如图像内存管理、文件操作、叠加、校准等,Vision Utilities函数子选板中的函数节点如图354所示。 图351利用NI MAX进行图像采集功能测试 图352“视觉与运动”函数子选板 图353NIIMAQdx函数子选板提供的主要函数节点 图354Vision Utilities函数子选板中的函数节点 3. 图像采集程序基本结构 NIIMAQdx中提供了“Snap”“Sequence”“Grab”“Ring”4种图像采集模式。一般应用场合下的连续图像采集多采用Grab模式,基于Grab的连续采集图像程序结构如图355所示。 图355基于Grab的连续采集图像程序结构 3.4.2应用开发实例 1. 设计目标 基于计算机集成摄像头或连接的USB接口摄像头,设计开发图像采集应用程序,具备以下功能。 (1) 程序界面提供【采集图像】【停止程序】按钮及图像显示控件。 (2) 程序响应【停止程序】按钮命令,用户单击【停止程序】按钮,结束程序运行。 (3) 程序响应【采集图像】按钮命令,捕获摄像头当前图像并显示,同时在采集图像中叠加采集时间信息。用户未单击【采集图像】按钮时,图像显示框实时显示监视图像,当单击【采集图像】按钮时,图像显示框停止实时监视刷新,显示采集图像指定时间间隔后恢复实时监视状态。 (4) 保存最近n次采集的图片,文件名称依次为1.JPG,2.JPG,…,n.JPG,保存至第n张图片时,再次保存则以1.JPG命名,以此类推。 2. 实现思路 程序采取轮询工作模式,即While循环中,实时采集指定摄像头感知的图像信息,在图像中叠加当前时间文本信息,并完成实时显示。同时在While循环中检测按钮【采集图像】、【停止程序】状态,执行相应的程序模块。对应地,图像采集与文件存储程序结构如图356所示。 图356图像采集与文件存储程序结构 3. 程序实现 根据前述实现思路,按照LabVIEW程序设计一般流程和模块设计思想,程序设计可分解为前面板设计、图像采集、图像文件存储等设计步骤。 1) 前面板设计 按照图像采集部分功能需求,设计图像采集程序前面板如图357所示。 图357图像采集程序前面板 前面板中使用IMAQdx Session控件(控件→新式→I/O→IMAQdx Session),用以选择采集图像所需的摄像头; 使用Image Display控件(控件→Vision→Image Display),用以显示摄像头采集的图像。 2) 图像采集 图像采集就是当【采集图像】按钮按下时,采集当前摄像头捕捉的图片,并在图片中添加采集图像的时间。采集完毕一帧图像后,能短暂保持指定时间,然后恢复实时图像采集结果显示。 本案例中基于USB接口的Web摄像头(或者笔记本电脑集成摄像头)进行图像采集,分为“实时图像捕获”“图像内存管理”“叠加信息显示”“定时控制”等4部分,具体实现过程如下。 (1) 实时图像捕获。调用节点“IMAQ Open Camera”(函数→视觉与运动→NIIMAQdx→Open),连线IMAQ Session控件图标“选择摄像头”,打开指定的摄像头; 调用节点“IMAQ Configure Grab”(函数→视觉与运动→NIIMAQdx→Configure Grab),进行图像采集配置; While循环结构内调用节点“IMAQdx Grab2”(函数→视觉与运动→NIIMAQdx→Grab),实现摄像头实时画面的捕获功能。 (2) 图像内存管理。图像作为一种特殊的数据类型,占用内存较大,所以图像采集任务启动之前,首先需要调用函数节点“IMAQ Create”(函数→视觉与运动→Vision Utilities→Image Management→IMAQ Create),实现采集图像存储缓冲区的创建; 图像采集任务结束之后调用函数节点“IMAQ Dispose”(函数→视觉与运动→Vision Utilities→Image Management→IMAQ Dispose),实现图像存储缓冲区的释放。 (3) 叠加信息显示。调用节点“获取日期/时间字符串”(函数→编程→定时→获取日期/时间字符串)及节点“连接字符串”(函数→编程→字符串→连接字符串)生成插入图像中的文本; 调用函数节点“IMAQ Draw Text”(函数→视觉与运动→Vision Utilities→Pixel Manipulation→IMAQ Draw Text),实现采集图像中添加文本信息功能。 (4) 定时控制。在实时捕获图像的过程中,如果检测到【采集图像】按钮按下,调用节点“已用时间”(函数→编程→定时→已用时间)实现5s暂停功能,实现采集一帧图像后,图像显示静止5s功能。对应地,实现图像采集并短暂保持功能的完整程序框图如图358所示。 图358图像采集并短暂保持功能的完整程序框图 如果未检测到【采集图像】按钮按下,则直接显示摄像头实时抓取的图像,如图359所示。 图359直接显示摄像头实时抓取的图像 至此,已经实现了程序运行后实时采集指定摄像头图像,单击【采集图像】按钮则捕获当前采集图像,在图像中叠加采集时间的文本信息,且在图像显示框中保持5s,然后恢复图像显示框显示摄像头实时画面的功能。 3) 图像文件存储 图像采集阶段仅完成了图像获取功能,更多时候,当满足某种特殊的触发条件时需要保存图像,并记录拍摄时的时间信息,这就需要在采集图像的同时,进一步完成图像文件存储功能。 为了使得图像采集程序更进一步贴近实际需求,采集图像的文件存储进一步拓展为按照指定时间间隔采样图像,并保存最近若干次采集图像文件,以备后查的功能需求。针对图像采集基础上扩充的功能需求,其前面板中需要添加两个数值输入控件,分别设置标签为“保存采样点数”“采样间隔(s)”,修改后的图像连续采集与文件存储前面板如图360所示。 图360图像连续采集与文件存储前面板 这里对图像采集程序进行了进一步改造。用户单击【采集图像】按钮,启动图像实时采集,程序按照指定的时间间隔捕获摄像头采集的图像,并以JPG文件格式保存最近采集的图像,而且保存最近采集图像文件个数与设定的保存采样点数一致。 由于选择摄像头、打开摄像头、配置采集、关闭摄像头及图像缓冲区创建与释放和采集与上一步中的实现方法完全一致,这里不再赘述,仅介绍图像采集工作的启动、文件存储功能的实现。 在While循环结构中,如果未检测到【采集图像】按钮按下,则不进行任何处理,仅借助移位寄存器传递图像采集有关资源的引用,未触发图像采集任务时的程序框图如图361所示。 图361未触发图像采集任务时的程序框图 如果检测到【采集图像】按钮按下,在实时图像捕获、内存管理、时间信息叠加显示功能实现的基础上,调用函数节点“已用时间”(函数→编程→定时→已用时间)实现程序按照指定时间间隔连续采集并存储采集图像的程序框架。 【采集图像】按钮按下,且函数节点“已用时间”设定的目标时间到达,则对应的条件结构内调用函数节点“当前VI路径”(函数→编程→文件I/O→当前VI路径)、“拆分路径”(函数→编程→文件I/O→拆分路径)、“创建路径”(函数→编程→文件I/O→创建路径)等生成采集图像存储的文件名称和路径。 调用节点“IMAQ Write File2”(函数→视觉与运动→Vision Utilities→FilesIMAQ Write File2),设置节点多态模式为“JPEG”,节点输入参数“Image”连线节点“IMAQ Draw Text”输出参数“Image Dsc Out”; 输入参数“File Path”连线节点“创建路径”输出端口,输入参数“Image Quality”连线数值常量750; 借助移位寄存器实现连续采集中每次采集的图像按照采集序号生成JPG格式的文件名称。 对应地,连续采集并存储最近n张图像的程序实现如图362所示。 图362连续采集并存储最近n张图像 如果【采集图像】按钮按下,且节点“已用时间”设定的目标时间未到达,则移位寄存器数值不改变、不存储采集图像。连续图像采集并实时显示的程序实现如图363所示。 图363连续图像采集并实时显示 4. 结果分析 单击LabVIEW工具栏中运行按钮,图像采集与文件存储程序运行初始界面如图364所示。 图364图像采集与文件存储程序运行初始界面 设置保存采样点数为2,设置采样间隔为1s,单击【采集图像】按钮,开启图像数据采集任务,图像采集运行结果如图365所示。 打开计算机资源管理器,进入当前VI所在目录,可以查看程序运行生成的图像文件,如图366所示。 图366中可见最近保存的名称为1.JPG、2.JPG的图像文件,打开文件查看创建时间及图像左上角显示的采集时间文本,即可看到恰好是按照指定时间间隔采集的最近两个时间点的图像采样结果。 在图像采集和文件存储的基础上既可以结合常规信号分析处理方法,对采集的图像数据进行分析处理,也可以结合飞桨EasyDL开放平台,对采集图像文件进行收集、归类、训练、识别及其他处理,则可形成更加复杂的技术应用。 图365图像采集运行结果 图366程序运行生成的图像文件