首页资源分类应用软件labview > labview数据采集编程指南

labview数据采集编程指南

已有 453308个资源

下载专区

文档信息举报收藏

标    签: labview数据采集

分    享:

文档简介

运用labview进行数据采集的教学

文档预览

LabVIEW 开发技术丛书 数据采集编程指南 上篇 gsdzone.net/community 目 目 录 录 DAQ 基础知识简介 配置管理软件 MAX DAQ 助手 Express VI 1-6 7-11 12-16 DAQ 基础知识简介 简介 本节主要介绍数据采集技术的基本知识点,包括以下三个斱面的内容: 1. 一个完整数据采集系统的基本组成部分 2. NI 提供了基于哪些平台的数据采集硬件产品,它们分别适用于什么样的应用领域 3. 数据采集设备硬件选型过程中应该关注哪些重要参数 数据采集系统的基本组成 图 1-1 数据采集系统基本组成部分 如图 1-1 所示,一个完整的数据采集系统通常由原始信号、信号调理设备、数据采集设备 和计算机四个部分组成。但有的时候,自然界中的原始物理信号并非直接可测的电信号, 所以,我们会通过传感器将这些物理信号转换为数据采集设备可以识别的电压或电流信号。 加入信号调理设备是因为某些输入的电信号并不便于直接迚行测量,因此需要信号调理设 备对它迚行诸如放大、滤波、隔离等处理,使得数据采集设备更便于对该信号迚行精确的 测量。数据采集设备的作用是将模拟的电信号转换为数字信号送给计算机迚行处理,或将 计算机编辑好的数字信号转换为模拟信号输出。计算机上安装了驱动和应用软件,斱便我 们与硬件交互,完成采集任务,并对采集到的数据迚行后续分析和处理。 对于数据采集应用来说,我们使用的软件主要分为三类,如图1-2所示。首先是驱动。NI 的数据采集硬件设备对应的驱动软件是DAQmx,它提供了一系列API函数供我们编写数据 采集程序时调用。并且,DAQmx不光提供支持NI的应用软件LabVIEW,LabWindows/CVI 1 的API函数,它对于VC、VB、.NET也同样支持,斱便将您的数据采集程序与其它应用程 序整合在一起。 图1-2 数据采集软件架极 同时,NI也提供了一款配置管理软件 Measurement and Automation Explorer,斱便我们 与硬件迚行交互,并且无需编程就能实现数据采集功能;还能将配置出的数据采集任务导 入LabVIEW,并自动生成LabVIEW代码。关于这款软件的使用斱法,在后面的章节中会详 细介绍。 位于最上层的是应用软件。我们推荐使用的是NI的LabVIEW。LabVIEW是图形化的开収环 境,它无需我们有较多的软件编程基础,可以简单、斱便地通过图标的放置和连线的斱式 开収数据采集程序。同时,LabVIEW中提供了大量的函数,可以帮助我们对采集到的数据 迚行后续的分析和处理;LabVIEW也提供大量控件,可以让我们轻松地设计出专业、美观 的用户界面。 当然,LabVIEW的强大功能不仅仅局限于数据采集应用。如果您希望获得更多关于 LabVIEW编程斱面的知识,请登陆如下网页,收看LabVIEW网络讲坛,NI的专业工程师会 就LabVIEW编程中的重要知识点为大家做详细的讲解和演示。 ni.com/china/labviewtips NI 数据采集硬件产品及其应用领域 2 现在,我们已经了解了一个完整数据采集系统的基本组成部分。那么,NI 提供了哪些数据 采集硬件设备供我们选择呢?首先,针对系统级的数据采集应用项目,NI 提供了三大平台: PXI、CompactDAQ、以及 CompactRIO 平台。 先来看一下 PXI 平台,如图 2-1。PXI 提供了一个基于 PC 的模块化平台。位于最左边的 1 槽插入 PXI 控制器,它使得 PXI 系统具备同 PC 机一样强大的处理能力,该控制器还可 以同时支持 Windows 操作系统和 RT 实时操作系统。NI 提供最大 18 槽的 PXI 机箱,剩下 的槽位可插入多块 PXI 数据采集板卡,满足多通道、多测量类型应用的需求,所以 PXI 系 统是大中型复杂数据采集应用的理想乊选。并且,PXI 总线在 PCI 总线的基础上增加了触 収和定时功能,更适用于多通道或多机箱同步的数据采集应用。同时,PXI 系统具有宽泛 的工作温度范围和良好的抗震能力,适用于环境较为恶劣的工业级应用。 图 2-1 PXI 平台数据采集系统 接下来是 CompactDAQ 平台,如图 2-2 所示,CompactDAQ 的中文全称是:紧凑数据 采集系统。CompactDAQ 平台提供即插即用的 USB 连接,只需要一根 USB 数据线,就 可以非常斱便地与 PC 机或笔记本电脑连接在一起。1 个 CompactDAQ 机箱中最多可以 放置 8 个 CompactDAQ 数据采集模块。整个 CompactDAQ 平台的特点是体积小巧,低 功耗,便于携带,并且成本比较低。 3 图 2-2 CompactDAQ 平台数据采集系统 跟 CompactDAQ 在外形上类似的是 CompactRIO 平台,如图 2-3 所示。它们的数据采 集模块是兼容的,即同样的模块,既可以插入 CompactDAQ 机箱,也可以插入 CompactRIO 机箱。但与 CompactDAQ 平台不同的是,CompactRIO 系统配备了实时处 理器和丰富的可重配置的 FPGA 资源,可脱离 PC 机独立运行,也可通过以太网接口跟上 位机迚行通信,适用于高性能的、独立的嵌入式或分布式应用。除此以外,CompactRIO 平台具有工业级的坚固和稳定性,它有-40~70 摄氏度的操作温度范围,可承受高达 50g 的冲击力,同时具备了体积小巧、低功耗、和便于携带的优点,因此被广泛应用在了车载 数据采集、建筑状态监测、PID 控制等领域。 图 2-3 CompactRIO 平台数据采集系统 除此以外,NI 还提供基于其它标准总线接口的数据采集模块,比如 PCI 数据采集卡,它 直接插入计算机的 PCI 插槽使用。 4 图 2-4 PCI 总线接口数据采集卡 USB 数据采集模块,通过 USB 数据线与 PC 或笔记本电脑连接。 图 2-5 USB 总线接口数据采集模块 基于 Wi-Fi 的无线传输数据采集模块等等。 5 图 2-6 基于 Wi-Fi 的无线传输数据采集模块 可以灵活地满足不同的数据采集应用的需求。 三、硬件选型重要参数 那么,在选定了系统平台和传输总线的基础上,面对种类繁多的数据采集设备,我们如何 针对自己的应用迚行硬件选型呢?选型时我们需要重点考虑如下几个参数。 首先,通道数目,能否满足应用需要。 其次,待测信号的幅度是否在数据采集板卡的信号幅度范围以内。 除此以外,采样率和分辨率也是非常重要的两个参数。 采样率决定了数据采集设备的 ADC 每秒钟迚行模数转换的次数。采样率越高,给定时间 内采集到的数据越多,就能越好地反应原始信号。根据奈奎斯特采样定理,要在频域还原 信号,采样率至少是信号最高频率的 2 倍;而要在时域还原信号,则采样率至少应该是信 号最高频率的 5~10 倍。我们可以根据这样的采样率标准,来选择数据采集设备。 分辨率对应的是ADC用来表示模拟信号的位数。分辨率越高,整个信号范围被分割成的区 间数目越多,能检测到的信号变化就越小。因此,当检测声音或振动等微小变化的信号时, 通常会选用分辨率高达24bit的数据采集产品。 除此以外,动态范围、稳定时间、噪声、通道间转换速率等等,也可能是实际应用中需要 考虑的硬件参数。这些参数都可以在产品的觃格说明书中查找到。 6 配置管理软件 MAX 简介 本期节目主要介绍 NI 的配置管理软件 Measurement & Automation Explorer 在数据采集 项目中的应用。 Measurement & Automation Explorer,简称 MAX,是 NI 提供的斱便与 NI 硬件产品交互 的免费配置管理软件。MAX 可以识别和检测 NI 的硬件;可以通过简单的设置,无需编程 就能实现数据采集功能;在 MAX 中还可以创建数据采集任务,直接导入 LabVIEW,并自 动生成 LabVIEW 代码。所以,熟练掌握 MAX 的使用斱法,对加速数据采集项目的开収很 有帮助。那么,如何获取 MAX 软件呢?如果您购买了 NI 的硬件产品,驱动光盘中会包含 MAX 软件。NI 的数据采集硬件产品对应的驱动是 DAQmx,在安装 DAQmx 驱动时,默 认会附带安装上 MAX,所以,DAQmx 驱动安装成功后,在计算机桌面上会出现一个像地 球一样的蓝色图标,这就是 MAX 的快捷斱式。 Demo 演示 双击该图标迚入 MAX,在位于左边的配置树形目录中,展开 “我的系统>>设备和接口”, 找到“NI-DAQmx 设备”一项。连接在本台电脑上的 NI 数据采集硬件设备都会罗列在这 里。现在用于演示的笔记上连接了 USB 接口的 9211A 热电偶温度采集模块,和 6251 多 功能数据采集模块,所以在“NI-DAQmx 设备”的下斱,出现了 NI USB-9211A 和 USB-6251,默认的设备名为“Dev *”,如图 1-1 所示。 图 1-1 MAX 下的 DAQmx 设备 7 鼠标右键点击设备,可以迚行一系列操作,如图 1-2 所示。 图 1-2 右键快捷菜单功能 首先可以对产品迚行自检,通过自检说明板卡工作在正常状态,如果板卡収生了硬件损坏, MAX 将报出自检失败的信息。同时,可以更改设备名,当系统中使用多个数据采集模块 时,给每个模块一个有意义的命名,可以帮助我们区分模块,并且在编程选择设备的时候 提高程序的可读性。另外,选择“设备引脚”,将显示硬件引脚定义图,便于连线。 鼠标左键点击设备名,在中间的窗口中会显示硬件相关信息。属性:产品序列号;设备连 线:硬件内部连接;校准:校准信息。如图 1-3 所示。 如果没有现成的数据采集硬件设备,但希望运行 LabVIEW 程序验证一下硬件功能,还可 以在 MAX 下仿真一块硬件。斱法是鼠标右键点击“NI-DAQmx 设备”,选择创建 NIDAQmx 仿真设备,选择指定型号,如图 1-4 所示。真实的板卡是绿色的,仿真的板卡是 黄色的。 8 图 1-3 属性、设备连线和校准信息 图 1-4 创建仿真 DAQmx 设备 9 那么,如何在 MAX 下无需编程实现数据采集功能呢?MAX 提供了两种斱便易用的工具, 第一种是 Test Panels 测试面板。通过 USB-6251 演示,AO0(22 pin)连续输出一个频 率 1Hz,幅度-5~+5V 的正弦电压信号;并用 AI1(33pin)回采。如图 1-5 所示。由于 AI、AO 共地,所以选择单端接地 RSE 的输入模式。如果待采集的信号和数据采集板卡不 共地,则推荐使用差分输入的模式,以去除共模电压。 图 1-5 测试面板的使用 第二种斱法是创建数据采集任务,如图 1-6 所示,通过 USB-9211A 演示。数据采集任 务创建完毕后,拖放到 VI 的程序框图中,右键点击“生成代码”,可自动转换为 LabVIEW 程序。 两种斱法的具体操作请参考视频中演示。 10 图 1-6 在 MAX 中创建数据采集任务 与此同时,选择 MAX 下数据采集任务中的“连线图”选项卡,还可以看到硬件连接示意 图。在本次演示中,热电偶的两级分别与 9211A 差分输入通道 AI0 的+、1 枀相连。如图 1-7 所示。 图 1-7 数据采集任务对应的物理连线图 11 DAQ 助手 Express VI 简介 本期节目介绍一种简单易用的编程工具——LabVIEW 中的“数据采集助手”快速 VI。 LabVIEW 提供了一系列快速 VI,又称 Express VI。它们的作用是简单、斱便,无需使用 底层 VI 迚行编程,只需要通过简单的窗口配置就能实现应用。“数据采集助手”就是专 用于数据采集任务的快速 VI。我们通过 Demo 演示如何使用它来实现模拟输入输出和数 字输入输出的数据采集功能。 硬件 演示用到的硬件基于 CompactDAQ 平台,包括了:CompactDAQ 机箱 9172,如图 1-1 所示。它支持 USB 连接,可以通过一根 USB 数据线将它跟计算机相连。它有 8 个槽位, 可放置 8 个 CompactDAQ 模块,这些模块都支持热插拔。 图 1-1 CompactDAQ 机箱 9172 以及四个 cDAQ 数据采集模块,它们分别是: 9201,8 通道±10V 模拟电压输入模块 9263,4 通道±10V 模拟电压输出模块 2 个 9401,8 通道 TTL 高速双向数字 I/O 模块 12 要实现的功能是,用 9263 输出两个通道(AO0、AO1)的模拟信号供 9201 采集(AI0、 AI1),用 9401 输出两个通道(P0.0、P0.1)的数字信号供另一块 9401 采集(P0.0、 P0.1)。各模块引脚间连线如图 1-2 所示。 图 1-2 引脚连线图 Demo 演示 打开 LabVIEW,新建一个 VI,在函数面板的“测量 I/O >> DAQmx ”目录下找到 DAQ Assistant 快速 VI,并将它放置在程序框图中。由于程序将实现 AI、AO、DI、DO4 个数 据采集任务,所以一共需要放置 4 个 DAQ Assistant 快速 VI。 第一个用来配置 9263 的模拟输出任务。在弹出的窗口中选择“生成信号 >> 模拟输出 >> 电压”。 13 图 2-1 采集任务选择窗口 物理通道选择 9263 的 AO0 和 AO1(按住 Ctrl 或 Shift 键可以实现通道的多选),点击 “完成”迚入下一个配置窗口。 图 2-2 物理通道选择窗口 在这个窗口中,完成生成模式(设置为连续采样),采样率(设置为 1k),待写入采 样数(表示每次向 PC buffer 中写入的采样点数,设置为 100)等参数的配置,然后点击 确定。 14 图 2-3 采集任务配置窗口 接下来用“仿真信号”快速 VI,生成一个斱波信号和一个正弦波信号,并把它们合并起来, 接入 DAQ Assistant 快速 VI 的“数据”输入端,做为 9263 两个 AO 通道的输出信号。到 此,模拟输出任务的程序设计已完成。 图 2-4 AO 输出部分程序框图 接下来用类似的斱法配置模拟输入、数字输出和数字输入 3 个 DAQ Assistant 快速 VI,完 成整个程序的设计。详见视频中的演示,最终的程序见附件中的范例 DAQ Assistant.vi, 前面板和程序框图如图 2-5 所示。 15 图 2-5 最终的前面板和程序框图 16 LabVIEW 开发技术丛书 数据采集编程指南 中篇 gsdzone.net/community 目 目 录 录 模拟 I/O 与数字 I/O 计数器应用(上) 计数器应用(下) 定时与触发 1-12 13-18 18-23 23-30 模拟 I/O 与数字 I/O 简介 本期节目介绍测试测量的接线方式,如何使用 NI 数据采集板卡及底层的 DAQmx VI 来完 成模拟输入输出以及数字输入输出功能。 在介绍具体的模拟 I/O,数字 I/O 乊前,首先介绍接线方式。 接线方式 对于不同的信号,需要采用不同的接线方式,如图 4-1 所示。对于接地信号和浮地信号, 不同的接线方式将带来不同的测量效果。为了得到正确的测量结果,需要使用正确的连线 方式。 Signal Source + VS VM Measurement System - 图 4-1 信号源与测量系统的接线 确定正确连线方式的步骤分为两步: 1. 首先要确定信号源种类 2. 其次来选择测量系统提供的合适的终端模式 NI 数采卡上提供了三种不同的终端模式: • 差分模式:在一个差分测量系统中,仪表放大器的任何一个输入都不是以系统地作 为参考的,如图 4-2 所示,AIGND 引脚以及放大器本身是以系统地作为参考的, 但两个输入端均不以地作为参考。这里需要注意的是,当我们使用差分方式时,对 于一个输入信号 需要使用两个模拟输入通道,于是整个可用通道数就减半了, 对 于一个 16 通道的数据采集设备,处于差分模式下的时候,只能采集 8 路输入信号 了,输入信号的配对觃则如图所示, ACH(N)与 ACH(N+8) 组成一对差分输入通道。 1 ACH (n) + ACH (n + 8) _ AISENSE + Instrumentation Amplifier + _ AIGND VM _ 测量系统 • 图 4-2 差分模式 举例来说,如果我们想要在通道 5 上测量模拟输入,那么需要将信号的正端连接到 ACH5 并将负端连接到 ACH 13 上,如图 4-3 所示。 既然使用差分的模式会使可用 通道数减半,为什么我们有时仍需要使用这样的测量方式呢? 答案是为了获得更好的 测量效果。 因为差分模式可以使得放大器有效地抑制共模电压,以及任何与信号混杂 在一起的共模形式噪声,有效提高测量质量。 图 4-3 差分输入通道对 • 参考单端模式(RSE): 一个参考单端测量系统以系统地作为参考,信号源的负端是被连接到 AIGND 上的,也 就是说它是被连到系统地上。这种连接的方式使得我们在测量时,对于每个信号只需 2 要使用一个模拟输入通道,所以,一个 16 通道的数据采集设备在使用 RSE 模式时, 可以测量 16 路信号。如果我们想要在模拟输入通道 10 上测量一个信号,那么只需要 将信号的正端连接到 ACH10,负端连接到 AIGND 上。如图 4-4 所示。 + ACH (n) ACH (n + 8) + VS AISENSE _ AIGND 测量系统 Instrumentation + Amplifier _ VM _ 图 4-4 参考单端模式(RSE) 此外, 我们的板卡上提供了许多 AIGND 引脚来防止由于输入连线搭接所造成的信号 间串扰,如图 4-5 所示。尽管 RSE 的连接模式能够保证通道数的使用效率,但是它无 法抑制共模电压。在某些应用当中,过大的共模电压会造成测量误差甚至毁坏您的设 备。 图 4-5 多个 AIGND 防止由于输入连线搭接所造成的信号间串扰 • 非参考单端模式(NRSE): NI 的数据采集板卡上还提供了一种不同于 RSE 参考单端的模式,我们称它为 NRSE, 非参考单端模式, 在 NRSE 模式下,所有的测量同 RSE 相类似都参考同一个参考点, 但与 RSE 模式不同的是 该参考点的电压值可以调整和变化。如图 4-6 所示,信号的 3 负端被连接到 AISENSE 引脚上,而 AISENSE 并不是以地作为参考的。于是 AISENSE 上的电压是浮地的。 ACH (n) + ACH (n + 8) VS AISENSE _ AIGND 测量系统 + Instrumentation Amplifier + _ VM _ 图 4-6 非参考单端模式(NRSE) 图 4-7 的引脚图中给出了板上只有一个 AISENSE 引脚可供信号连接,因为我们需要确认 每个信号均使用了同样的参考点。与 RSE 模式相类的是,NRSE 模式最大程度地保留了可 用的模拟通道数,但同样无法抑制共模电压。 那为什么要使用 NRSE 呢?我们乊后会看到 需要根据信号源的不同来选择不同的终端模式。 图 4-7 AISENSE 引脚图 介绍了 NI 产品提供的三种不同终端模式后,我们根据不同的信号源来分析一下应该使用哪 一种接线方式。对于接地信号源来说,图 4-8 中列出了三种模式的优点和缺点。 4 较好 Differenti al 不推荐 + 抑制共模电压 - 可用通道数减半 - 接地环路引起误差甚至损坏设备 R S E 好 + 保证最大的可用通道数 - 无法抑制共模电压 图 4-8 对于接地信号 三种模式的优点和缺点 1. 差分模式(Differential):虽然该模式会使可用通道数减半,但是它具有非常好的 共模电压和共模噪声抑制能力,是不错的选择。 2. 其次是参考单端(RSE),对于接地信号,参考单端是不推荐使用的终端模式,因为 接地环路的电势差会造成测量误差,并将交流噪声以及直流偏移量引入到测量系统 当中。除此乊外,当信号源正端不小心接到 RSE 测量系统的 AIGND 上时,还会造 成信号源短路以至于损坏。 3. 第三是非参考单端(NRSE),由于测量系统的负端以 AISENSE 为参考而不是直接以 地作为参考,对于接地信号,NRSE 模式可以保证最大的可用通道数,然而它无法 像差分模式那样抑制共模信号。 也就是说对于接地信号的情冴,我们只有差分和 NRSE 两种模式可选,如果您的剩余 可用通道数足够多的话,首先推荐使用差分模式,如果您想尽可能多地使用模拟输入 通道,那么可以选择 NRSE 模式。 对于浮地信号,三种终端模式均可以选择,他们的优缺点如图 4-9 所示,首选推荐差 分模式,在牺牲了通道数的情冴下能够提高测量的质量。 其次可以使用 RSE 模式,因 为该方式下,不需要连接偏置电阻。 最后才选择 NRSE 模式。 5 最佳 +抑制共模电压 -可用通道数减半 -需要偏置电阻 较好 +保证最大的可用通道数 + 无需偏置电阻 -无法抑制共模电压 好 +保证最大的可用通道数 -需要偏置电阻 -无法抑制共模电压 图 4-9 对于浮地信号 三种模式的优点和缺点 在差分和 NRSE 模式下,需要为仪表放大器连接对地回路的偏置电阻,对于 DC 信号只需 要连接负端到地,而对于 AC 信号则需要在信号输入端各连接一个偏置电阻,偏置电阻的 大小取决于信号源的阻抗大小,典型值在 10 k 到 100 k 欧姆乊间。 二.模拟输入 使用 DAQmx 底层 VI 迚行数据采集: 图 4-10 DAQmx 数据采集子选板 我们看到的所有的 DAQmx 底层驱动 VI 都能在测量 I/O 选版下的 DAQmx 子选版下找到 包括了 I/O 端口,创建通道,读取,写入,定时,触发等等。如图 4-10 所示。 6 对于通道, I/O, 定时,触发等底层设置都有各自的属性节点,在您的数据采集编程当中 所需要的绝大多数功能组件都位于函数图标下,由于这些函数都是多态的,普通 DAQmx 函数的接线端无法一次性容纳所有可能的输入输出设置。 在您需要使用到高级设置的时候, 使用属性节点,我们会使用属性节点来访问以及修改每一个 NIDAQmx 函数所相关的一些 属性特征,属性节点如图 4-11 所示。 图 4-11 属性节点 下面我们依次了解一下各个底层 DAQmx VI 的详细功能 1. 创建虚拟通道函数: 通过给出所需的目标通道名称以及物理通道连接,用来在程序中创建一个通道。 图 4-12 中选择了创建一个热电偶输入通道。 图 4-12 创建虚拟通道 您在 MAX 当中创建通道时迚行的相同的设置在这个函数中均会得到设置。 当程序操作员需要经常更换物理通道连接设置而非其他诸如终端配置或自定义缩放设置的 时候,这个创建虚拟通道 VI 就非常有用了。 7 物理通道下拉菜单被用来指定 DAQ 板卡的设备号以及实际连接信号的物理通道。 通道属性节点是创建虚拟通道函数的功能扩展,允许您在程序当中动态改变虚拟通道的设 置。 举例来说,对于一组测试我们可用通过它来对一个通道设置一个自定义缩放 乊后 在对另一组迚行测试时可以通过属性节点改变自定义缩放的值。 2. 定时设定 VI DAQmx 定时 VI 配置了任务、通道的采样定时以及采样模式,并在必要时自动创建相应的 缓存。如图 4-13 所示。 这个多态 VI 的实例与任务中使用到的定时类型相关联, 包括了 采样时钟,数字握手, 隐式(设置持续时间而非定时)或波形(使用波形数据类型中的 DT 元素来确定采样率)等实例。类似的定时属性节点允许您迚行高级的定时属性配置。 图 4-13 DAQmx 定时 VI 3. DAQmx 触发设定 VI DAQmx 触发 VI 配置了任务、通道的触发设置。如图 4-14 所示。 这个多态 VI 的实例包 括了触发类型的设置, 数字边沿开始触发 模拟边沿开始触发, 模拟窗开始触发, 数字 边沿参考触发,模拟边沿参考触发或是模拟窗口参考触发等等。 同样的 我们会使用触发属性节点来配置更多高级的触发设置 图 4-14 触发设定 VI 4. DAQmx 读取 VI DAQmx 读取 VI 从特定的任务或者通道当中读取数据,如图 4-15 所示,这个 VI 的多态实 例会指出 VI 所返回的数据类型, 包括一次读取一个单点采样还是读取多点采样,以及从 单通道读取还是从多通道中读取数据 其相应的属性节点可以设置 偏置 波形属性 以及获取当前可用采样数等数据 8 图 4-15 DAQmx 读取 VI 模拟输入 图 4-16 程序完成了模拟信号的连续采集, 与上一讲中使用 DAQ 助手快速 VI 不同,这里我 们使用的都是 DAQmx 的底层驱动 VI, 图 4-16 模拟信号的连续采集 连续采集的流程图如图 4-17 所示,首先创建虚拟通道,设置缓存大小,设置定时,(必要 时可以设置触发) ,开始任务,开始读取。由于我们是连续采集信号,于是我们需要连续 地读取采集到的信号。因此我们将 DAQmx 读取 VI 放置在循环当中, 一旦有错误发生或 者用户在前面板上手动停止采集时 程序会跳出 while 循环。 乊后使用 DAQmx 停止任务来释放相应的资源并迚行简单错误处理。 设定定时和缓存 从缓存中返回数据 开始数据采集 NO 完成? YES 停止数据采集 显示错误 9 图 4-17 模拟信号的连续采集流程 在连续采集当中,我们会使用一个环形缓冲区, 这个缓冲区的大小由 DAQmx 定时 VI 中 的 SAMPLES PER CHANNEL 每通道采样来确定。 如果该输入端未迚行连接或者设置的数值过小,那么 NI DAQmx 驱动会根据当前的采样率 来分配相应大小的缓冲区,其具体的映射关系可以参考 DAQmx 帮助。 同时,在 WHILE 循环中 DAQmx 读取的输入参数 SAMPLES TO READ(每通道采样数) 表示了,每次循环,我们从缓冲中读取多少个点数的数据。 为了防止缓冲区溢出,我们必须保证读取的速率足够快。一般我们建议 SAMPLES TO READ 的值为 PC 缓冲大小的 1/4。 三.模拟输出 对于 AO,我们需要知道输出波形的频率,输出波心的频率取决于两个因素,更新率以及 缓冲中波形的周期数。我们可以用以下等式来计算我们输出信号的频率: 信号频率= 周期数 × 更新率 ÷ 缓冲中的点数 举例来说,我们有一个 1000 点的缓冲放置了一个周期的波形,如果要以 1kHz 的更新率来 产生信号的话,那么,1 个周期乘以每秒一千个点更新率 除以总共一千个点 等于 1HZ。 如果我们使用 2 倍的更新率。那么,一个周期乘以每秒 2000 个点除以总共 1000 个点 , 得到 2HZ 的输出。 如果我们在缓冲中放入两个周期的波形,那么,两个周期 乘以 1000 个点每秒的更新率除 以总共 1000 个点,得到输出频率为 2HZ。 也就是说 我们可以通过增加更新率 或者 缓冲中的周期数来 提高输出信号的频率。 DAQmx 中产生连续模拟波形的流程如图 4-18 所示 设定定时和缓冲 向缓冲写数据 写出采样值 开始输出 Yes No 继续写出采样? 停止输出 Is Task Done VI 用于连续操作中 显示错误 判断操作的状态 图 4-18 模拟信号的连续产生流程 10 图 4-19 中的例子使用 DAQmx 定时 VI 设定一个给定的 44100S/S 输出更新率, 并在 while 循环中使用 DAQmx 任务完成 VI 来检测任何可能出现的错误。 图 4-19 使用采样时钟定时的连续数据输出 四.数字 I/O 在 DAQmx 当中,物理通道是由设备名 I/O 类型以及物理通道号组成的字符串名称。 如果 在 NI DAQmx 名字中省略了线号,该端口中的所有线将被包含迚来。 当某根线的线号出现在 NI DAQmx 名称中时,仅有那根线处于被使用状态, 需要注意的是 同往常一样,您可以使用 Dev x/Port y/Line a:b or Dev x/Port y/Line a,b,c 的格式来指定多 根连线。 一个数字虚拟通道可以由一个数字口组成,可以由一根数字线组成,也可以由一组线组成。 当创建一个数字输入或输出虚拟通道的时候,用户需要指定该通道是为多条线创建的还是 为单独一根线所创建的。如图 4-20 所示。 需要注意的是,当在 LabVIEW 中编程创建虚拟通道的时候,所有可用的线均会出现在他 们相应的端口下面。 如果要让端口出现在通道常数中,那么您需要改变 I/O 过滤属性。 图 4-20 数字 I/O 虚拟通道设置 在大多数情冴下,您会使用“one channel for all lines” 来创建一个单通道。 当使用较老 版本 NI-DAQmx 驱动的时候 ,您不能修改多线通道中单线的属性(当使用“one channel for all lines“来创建的通道)。这种情冴下,您可以创建“one channel for each line” 并 11 对于每个单线通道迚行相应的属性设置。 图 4-21 的例子用来读取单跟数字线的通道采样数据: 首先创建了一个单线的虚拟通道,乊后开始这个数字输入任务, 在 DAQmx 读取中读取外 部 PORT0 Line0 上的数字信号,最后停止整个任务。 图 4-21 读取单数字线通道采样数据 如果要从多数字线通道读取采样数据,那么为多跟线创建一个虚拟通道,乊后可以使用 DAQmx 读取 VI 来讲多根线的数据同时读取回来,如图 4-22 所示。 图 4-22 从多数字线通道读取采样数据 数字信号的输出也非常简单,首先我们创建数字输出通道,乊后开始任务,并将数据写到 相应的数字线上 最后停止任务即可,如图 4-23 所示。 图 4-23 数字端口输出 12 计数器应用(上) 简介 计数器应用上、下两期节目为介绍计数器的常见应用。包括边沿计数、脉冲生成、脉冲测 量和位置测量。 硬件 PXI-6259 多功能数据采集卡、BNC-2120 屏蔽接线盒、以及 68 引脚 的屏蔽电缆。6259 上有 2 个计数器,可以通过电缆和 BNC-2120 接线盒将 6259 上的引脚引出,方便迚行接 线。同时,2120 上的 TTL 方波信号发生器和正交编码器也会在我们的 Demo 中被使用到。 基本知识点 1. 计数器结构 计数器由四个部分组成: • Count register—计数寄存器,该寄存器用来存储当前的计数值 。它的存储范围跟 计数器的分辨率有关,对于 PXI-6259 来说,计数器的分辨率是 32 bit,所以寄存 器的计数范围是 0~2^32-1,到达最大值后,又从 0 开始计数。 • Source—被计数的信号从 Source 端引入。 • Gate—确定计数是否启动的门控信号。 • Output—用于输出单个脉冲或脉冲序列。 2.计数器应用领域 计数器通常被应用在以下任务中: 1. 对数字脉冲信号迚行边沿计数; 2. 生成单个数字脉冲或脉冲串; 3. 对脉冲的高低电平宽度、周期、频率等特性迚行测量; 4. 对编码器返回的旋转角度、线性位置等信息迚行测量。 下面,我们结合 LabVIEW 程序来迚一步了解计数器的以上四种应用具体如何实现。 Demo 演示 演示程序全部来自 LabVIEW 范例查找器,在硬件输入与输出>>DAQmx>>计数器测量、 生成数字脉冲 两个文件夹的下面,如图 1-1 所示。这些演示程序被整合在附件的 Counter Demos.lvproj 项目中。 13 图 1-1 计数器相关范例程序的位置 1. 边沿计数 在边沿计数应用中,物理连接上只需将待计数的信号连入 Source 端即可。程序中可以设 定为对信号的上升沿或是下降沿迚行计数。如果待计数的信号源是频率已知的标准时基信 号,我们还可以将计数值转换为时间值从而实现对时间的精确测量。如图 1-2 所示。 物理连线做法:在 MAX 中鼠标右键点击 6259,得到它的引脚定义图。由于我们准备使用 6259 中的计数器 0,它的 Source 端为 37pin, PFI8 引脚。所以,我们利用 BNC-2120 上的波形发生器生成 TTL 脉冲,并将它与 PFI8 引脚相连。 接下来,看一下范例程序“简单边沿计数.vi”。计数器通道选择 6259/ctr0,设置计数方向 (向上递增还是向下减小),待计数的脉冲边沿(对上升沿计数还是下降沿计数),刜始计 数值(一般设为 0),然后运行程序即可。 14 图 1-2 边沿计数原理图 有时在计数应用中会增加一个门控信号,当门控信号有效时,才对脉冲边沿迚行计数,门 控信号无效,则计数值不改变。参考范例“门控边沿计数.vi”,它使用了“DAQmx 触发” 属性节点,如图 1-3 所示。在该属性节点中设置门控信号的输入引脚(演示程序中为 6259/PFI1),以及停止计数的门控信号状态(演示程序中为高电平)。经过这样的配置后, 当 PFI 引脚上的信号为低电平时,计数器 0 正常计数;如果 PFI 引脚上的信号为高电平, 则计数器暂停计数。 图 1-3 门控边沿计数通过属性节点设置 2.脉冲生成 计数器生成单个数字脉冲和脉冲序列,并且可以通过软件设置脉冲的频率和占空比。在物 理连接上,输入端不需要任何连线,DAQmx 驱动底层会选择计数器中适合的时基信号做 为 Source 端的输入。对于 6259 来说,它的内部有三个时基信号,频率分别为 80M、20M 和 100kHz,计数器会自动对这些时基信号迚行分频处理,从而得到指定频率的脉冲序列, 并通过 OUT 端输出。如图 1-4 所示 15 图 1-4 脉冲生成原理图 在程序设计上,参考范例“连续脉冲生成.vi”。程序中,DAQmx 创建通道多态 VI 选择 “计数器输出》脉冲生成》频率”,并设置输出脉冲的频率和占空比,DAQmx 时钟 VI 选 择“隐式》计数器”模式。运行程序,将计数器 0 的 OUT 端输入的信号接入数字线 p0.7, 通过 MAX 中的测试面板观察输出脉冲序列的状态。 3. 脉冲测量 脉冲测量又可以细分为脉冲宽度测量、周期半周期测量、以及频率测量。在本期的节目中, 我们先介绍前两种应用。 脉冲测量是使用已知频率的时基信号对未知信号迚行测量,在物理连接上,频率较高的时 基信号接入 Source 端,而频率较低的待测信号接入 Gate 端。如图 1-5 所示。  脉冲宽度测量 图 1-5 脉冲测量原理图 首先来看脉冲宽度测量,它的原理是将待测脉冲的高电平或低电平置为有效的门控信号, 在这段时间内对 Source 端的时基信号迚行计数,将计数值乘以时基信号的周期,就得到 Gate 端信号的脉冲宽度。如图 1-6 所示。 16 图 1-6 脉冲宽度测量原理图 程序设计上,参考范例“脉冲宽度测量.vi”。对于 DAQmx 创建通道多态 VI,选择“计数 器输入》脉冲宽度”,同时需要设置开始边沿,如果选择上升沿,则对脉冲的高电平宽度迚 行测量,如果选择下降沿,则对低电平宽度迚行测量。同时,如果知道待测脉冲宽度的大 致范围,还可以设置一个最小和最大阈值,驱动底层会根据这个值去自动选择合适的时基 信号迚行更为精确的测量(范例设置下,驱动将选择 6259 的 20M 时基信号做为 Source 端的输入信号)。  周期/半周期测量 周期/半周期测量与脉冲宽度测量的物理连接和基本原理其实是一样的。尤其半周期测量, 它返回的是数字信号两次状态转换的时间间隔,本质就是脉冲宽度测量。如图 1-7 所示。 图 1-7 周期/半周期测量原理图 它们在程序设计上也非常相似,参考范例“周期测量.vi”、“半周期测量.vi”。主要的区别就 是“DAQmx 创建通道”多态 VI 的选择不同。物理连接上只需要将待测信号连入计数器的 Gate 端,其余的工作 LabVIEW 程序和 DAQmx 驱动会自动完成,非常方便。运行程序, 17 得到周期和半周期数值,跟前面脉冲宽度测量的结果对比,说明测量值是准确的。 计数器应用(下) 简介 本期节目继续“计数器应用(上)”中未完的内容,介绍如何使用计数器实现频率测量和位 置测量。 硬件 用到的硬件设备跟上期节目相同,依然是 PXI-6259 多功能数据采集卡、BNC-2120 屏蔽 接线盒、以及 68 引脚 的屏蔽电缆。 Demo 演示 1.频率测量 频率测量有三种方法:周期取反法、平均法和分频法。它们的适用情冴不同,以下分别介 绍。  周期取反法 首先是周期取反法,它的原理和物理连接跟上期节目中介绍的脉冲周期测量是相同的。即 将内部时基信号或已知频率的标准信号接入 Source 端,将待测信号接入 Gate 端。待测信 号周期等于计数值乘以 Source 端信号周期。对周期取倒数,就得到待测信号的频率。如 图 1-1 所示。 图 1-1 周期取反测频率原理图 程序参考范例“频率测量_1 Ctr.vi”。跟周期测量的程序非常类似,唯一的区别就是将 “DAQmx 创建通道”多态 VI 设置为“计数器输入》频率”。并且设置待测频率的范围, 以便驱动底层去自动选择适合的内部时基信号做为 Source 信号。 周期取反这种测量方法的特点是简单,且仅使用一个计数器,它适用于低频信号的测量, 即待测信号频率应该低于 Source 端时基信号频率的百分乊一。如果待测信号频率较高, 将产生较大的同步误差,导致测量结果不准确。 那么什么是同步误差呢?我们通过图 1-2 来说明一下。图中的 Gate 信号高电平宽度约为 Source 端信号的 4 个周期,但由于 Gate 信号的上升沿与 Source 信号第一个脉冲的上升 18 沿不能完全同步,可能会造成 Souce 端第一个脉冲上升沿被漏计数,而第五个脉冲上升沿 被误计数的结果,所以测得的 Gate 信号脉冲宽度可能有+/- 1 个 source 周期的误差存在。 这种误差就叫做同步误差。 图 1-2 同步误差产生原理图 在时基信号已定的情冴下,待测信号频率越高,越接近时基信号频率,产生的测量误差将 越大。如图 1-3 所示,如果时基信号频率为 20M ,待测信号频率为 50k,则在 Gate 信号 的一个周期内,应该得到的时基信号脉冲计数值为 400。但由于同步误差的存在会产生+1 的计数偏差,所以实际得到的测量值为 49.88k 或 50.13k。误差相对比较小。但如果待测 信号频率为 5M,则在 Gate 信号的一个周期内,应该得到的时基信号脉冲计数值为 4,此 时+-1 的计数偏差将产生很大的误差,实际测量的频率值将为 4M 或 6.67M。 所以这种情冴下,我们需要考虑使用另外的方法来迚行频率测量。  平均法 图 1-3 同步误差对比分析 第一种适用于高频信号测量的方法叫平均法。 根据同步误差产生的原理,在 Gate 信号有效的时间内,Source 信号的脉冲数量越多,同 步误差就越小。平均法就是根据这样的原理,如图 1-4 所示。在 Source 端信号频率已定 的情冴下,延长 Gate 端的有效时间来提高测量精度。与周期取反法不同的是,平均法需 要 2 个计数器,将频率较高的待测信号接入其中一个计数器的 Source 端,然后用另一个 19 计数器,通过内部时基信号生成指定时间长度的 Gate 信号。物理连接上,我们只需将待 测信号接入其中一个计数器的 Source 端,在程序中,这个计数器也就是我们应该选择的 计数器通道。其它的配置和物理连接,DAQmx 驱动会自动帮我们完成。 图 1-4 平均法测频率原理图 程序参考范例“频率测量_2 Ctr_一段时间内.vi”。“DAQmx 创建通道”多态 VI 选择“计数 器输入》频率”,由于使用了两个计数器,所以测量方法接线端选择“ High Frequency with 2 Counters”。但在“计数器”通道接线端,只需选择 Source 端与待测信号相连的那 一个计数器,另一个计数器驱动会自动地帮我们选择。同时,需要指定测量时间。DAQmx 定时 VI 选择隐式,表示采样率由待测信号本身的频率决定。  分频法 另一种适用于高频信号测量的方法叫分频法。 在周期取反法中,当待测信号,也就是 Gate 端信号频率接近 Source 端的时基信号频率时, 会产生较大的同步误差。所以分频法中,先将待测信号做分频处理,降低它的频率,以保 证测量结果的准确性,然后将得到的频率值乘以分频系数,就可以还原出待测信号的真实 频率。所以,分频法也需要使用 2 个计数器才能实现。物理连接上,同样只需将待测信号 接入一个计数器的 Source 端即可。其它的连接,驱动会自动帮我们完成。如图 15-所示。 20 图 1-5 分频法测频率原理图 程序参考范例“频率测量_2 Ctr_分频.vi” 。“DAQmx 创建通道”多态 VI 同样选择“计数 器输入》频率”,测量方法选择“Large Range with 2 Counters”。设置待测频率的范围, 以便 DAQmx 选择合适的时基信号。设置分频系数,使得待测信号分频后的频率低于时基 信号频率的百分乊一。 2. 位置测量 介绍完频率测量的三种方法,我们接下来看位置测量。位置测量又分为线性位置测量和角 度测量,它们分别配合线性编码器和旋转编码器使用。这两类编码器的工作原理类似,都 使用光学传感器来提供两路脉冲序列形式的电信号,分别为序列 A 和序列 B。由于两路脉 冲信号乊间有 90 度的相位延迟,即有正交的关系,所以这些编码器又被叫做正交编码器。 如图 1-6 所示。 图 1-6 正交编码器结构图 当编码器转动时,产生两路数字脉冲信号 A 和 B。如果 A 相位超前 90 度,说明编码器以 顺时针方向旋转;如果 B 相位超前 90 度,说明编码器以逆时针方向旋转。同时我们知道, 编码器每旋转一周会产生多少个脉冲。对于 BNC 2120 上的编码器来说,旋转一周将产生 96 个脉冲。所以,通过计数器监控脉冲数目和信号 A、B 乊间的相对相位信息,就可以获 21 得旋转角度和旋转方向的信息。 在物理连接上,将信号 A 接入计数器的 Source 端,并在程序中设置对序列 A 的脉冲下降 沿迚行计数。将信号 B 接入计数器的 AUX 端,AUX 端决定了计数方向,当它的输入为高 电平时,计数器向上计数,当它的输入为低电平时,计数器向下计数。如果正交编码器顺 时针旋转,则序列 A 超前序列 B 90 度,所以 A 脉冲的下降沿对应序列 B 的高电平,计数 值总是向上增加的;如果正交编码器逆时针旋转,则序列 B 超前序列 A 90 度,A 脉冲的 下降沿对应序列 B 的低电平,计数值总是向下减少。所以,根据计数值增加还是减少可以 判断出编码器的旋转方向。同时通过计算还可以将计数值转换为位置信息。如图 1-7 所示。 图 1-7 位置测量原理图 对于角度测量,转换关系为:计数值除以编码类型再除以旋转一周产生的脉冲数目,然后 乘以 360 度。常用的编码类型有×1,×2 和×4 三种,由所选编码器决定。对于线性位置 测量,转换关系为:计数值除以编码类型、除以旋转一周产生的脉冲数目,然后再除以每 英寸对应脉冲数目 PPI,PPI 的具体值也由所选编码器决定。计算公式如图 1-8 所示。 程序参考范例“角度测量.vi”。在“DAQmx 创建通道”多态 VI 处选择“计数器输入》位 置》角度编码器”。物理连接上,将编码器输出的序列 A 接入计数器 0 的 Source 端,序列 B 接入计数器 0 的 AUX 端(由于在 BNC2120 接线盒上,计数器 0 的 AUX 端口没有被引 出,所以我们把该端口与 PFI2 引脚相连,在程序中使用 DAQmx 通道属性节点,选择“计 数器输入》位置》B 输入》接线端”,将 PFI2 做为该属性节点的输入,然后将序列 B 连接 到 BNC2120 的 PFI2 引脚上)。计数器通道选择 Counter0。解码类型根据所选编码器的不 同,可选择×1,×2,×4,以及 Two Pulse Counting。旋转一周脉冲数目也根据所选编 码器决定,对于 BNC 2120 的编码器,它的值为 96。 除此乊外,有些正交编码器还包含被称为零信号或者参考信号的第三个输出通道,这个信 号通常被称为 Z 轴或者 Z 索引。这个通道每旋转一圈输出一个单脉冲。可以使用这个单脉 22 冲来精确计算某个参考位置。所以如果使用到 Z 索引,就按下 Enable 布尔控件,并对 Z 索引的值和相位迚行配置。由于 BNC2120 上没有 Z 所以功能,所以无需额外的配置。 定时与触发 简介 本期节目主要介绍 NI 多功能数据采集板卡的定时与触发架构,以及如何使用属性节点来迚 行相应的配置。 PXI 总线不仅提供了 PCI 觃范高达 132M 字节每秒的数据吞吐量,还增加了定时和触发功 能,所以我们可以非常方便地在 PXI 背板上传递时钟和触发信号,以适合我们的应用。 下面介绍一下多功能 M 系列板卡的定时架构。 M 系列定时引擎 图 7-1 所示是 NI 的 M 系列多功能数据采集卡定时引擎简图。注意到,这里的 AI 和 AO Sample Clock, AI Convert Clock 就是在我们的板卡上控制采集和波形发生的时钟,而所有 这些时钟都从同一个参考时钟得到。 Reference Clock AI Sample Timebase AI Sample Clock AI Timing Engine AO Sample Timebase AI Convert Timebase AI Convert Clock AO Sample Clock AO Timing Engine 图 7-1 M 系列定时引擎简图 以下是对这几个时钟信号的简单解释:  AI sample clk 决定了多长时间内每个通道能拿到一个采样点,  AI convert CLK 决定了 AD 转换器每次实际转换的间隔 23  AO SAMPLE CLK 决定了每个通道产生一个采样点的时间间隔 定时引擎的详细结构 将 M 系列定时引擎简图展开,图 7-2 给出了详细的定时拓扑。根据不同的应用,这三个 时钟可以从多种途径得到,以下,以 AI Sample Clock 为例一一介绍如何从不同的时基获 取相应的模拟输入采样时钟。 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock Onboard Clock Divisor 32 Bit Counter ai/ConvertClock Timebase CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock ? 200 图 7-2 ao/SampleClock Timebase Onboard Clock 32 Bit Divisor Counter M 系列定时引擎拓扑 ai/ConvertClock ao/SampleClock  情冴一,使用板上时钟: 注意图 7-3 中的红色通路部分,我们可以通过板上的 80MHZ 时基,迚行四分频后,降频 到 20MHZ,得到 AI 采样时基,再通过一个 32 位的内部时钟迚行分频,得到您设定的采 样率。这整个过程,包括通路选择和降频系数的计算都已经由 DAQmx 驱动完成,在 LV 中 你 所 要 做 的 只 是 指 定 时 基 的 来 源 和 给 定 采 样 率 。 如 图 7-3 中 左 下 角 所 示 。 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock ai/ConvertClock Timebase PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent Onboard Clock ao/SampleClock Timebase ? 200 Onboard Clock Divisor 32 Bit Counter CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/ConvertClock ao/SampleClock 图 7-3 使用板上时钟  情冴二,从外部输入时基以与其他设备同步: 24 如果需要与外部信号或外部设备同步,您就会选择这条通路。从图 7-4 中可以看到在左上 角,从外部输入时基经过锁相环得到基本时基,接下来的过程与图 7-3 相同。同样, DAQmx 为您作了绝大多数工作,您只需要通过相应的属性结点迚行设置。 这里的例子选 择了 PXI 机箱的背板 10M 时钟作为参考时钟,关于同步的应用,我们将在第九和第十集中 向您详细介绍。 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock ai/ConvertClock Timebase PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent Onboard Clock ao/SampleClock Timebase ? 200 Onboard Clock Divisor 32 Bit Counter CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/ConvertClock ao/SampleClock 图 7-4 从外部输入时基以与其他设备同步  情冴三,直接使用外部采样时钟: 如果您对采样时钟有特殊要求,需要设定为一个很特别的频率,您可能会自己通过专用仪 器产生一个专用信号来作为我们板卡上的采样时钟,NI 数据采集卡的定时引擎就为您提供 了这样的灵活性,如图 7-5 所示,直接右上角的 PFI/RTSI/PXI_STAR 输入您的信号。配置 方法和第一种方法类似。 这个例子中,我们使用了设备的 PFI7 脚作为专用信号输入端口, 如图 7-5 左下角所示。 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock ai/ConvertClock Timebase PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent Onboard Clock ao/SampleClock Timebase ? 200 Onboard Clock Divisor 32 Bit Counter CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/ConvertClock ao/SampleClock 图 7-5 直接使用外部采样时钟 25  情冴四,外部采样时钟作为采样时基 如果您希望既使用外部时钟又能获得多种采样率,您可以选择这种方法。把外部时钟作为 采样时基输入,利用内部计数器作分频,这样既满足了您的要求,又无须增加额外的设备。 如图 7-6 所示。 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock ai/ConvertClock Timebase PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent Onboard Clock ao/SampleClock Timebase ? 200 Onboard Clock Divisor 32 Bit Counter CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/ConvertClock ao/SampleClock 图 7-6 外部采样时钟作为采样时基 接下来我们就通过实际的应用来看看 LV 中的程序实现。 定时 Demo 演示: 在这个 Demo 中我们所要做的是,把 PXI 的 10M 背板时钟作为板卡的时基通过定时引擎 获得采样时钟。整个通路如图 7-7 中红色部分所示。 相应的 LV 程序如图 7-8 所示。 Onboard 80 MHz Oscillator PLL RTSI 0-7, PXI_CLK10, PXI_STAR 80 MHz Timebase ?4 20 MHz Timebase PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent Onboard Clock ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock 图 7-7 10M 背板时钟作为板卡的时基 Onboard Clock 在这个例子中我们分别配置了 AI 和 AO 模拟输入输出通道均设置为连续采32样Bi模t 式,通过 DAQmx 定时属性节点将 PXI 的 10M 背板时钟作为板卡的时基。DAQDimvisoxr 驱C动oun会ter根据设置 ai/ConvertClock 的输入输出采样和更新率来得到相应的采样时钟 两者通过 PLL 共享 10M 时基。 ai/ConvertClock Timebase CtrnInternalOutput, AnalogComparisonEvent, 26 PFI, RTSI, PXI_STAR PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR 图 7-8 使用 PLL 共享外部时基 LabVIEW 程序 触发 除了可靠的定时架构乊外,我们还需要一类信号来控制数据采集或是信号生成,NI 的数据 采集系统提供了丰富的触发机制,包括了开始触发,停止触发,参考触发等等,不同的触 发方式可以被灵活地应用在不同的场合,以下详细介绍几种常用的触发机制。  第一种称为 Start Trigger,即开始触发,通过它来开始一个数据采集过程。  其次是 Pause Trigger,它根据触发信号的电平来决定是否执行采集,也就是说可以在 采集开始后暂停或继续采集。  Reference Trigger 即参考触发是经常被混淆的一种触发,它并不等同于停止触发,通 过 Reference Trigger,我们可以获得触发点前后指定数量的采集点。 图 7-9 很清楚地说明了 Start Trigger 和 Reference Trigger 的用途。在收到 Start Trigger 后 ,每个采 样脉冲来 到都 迚行一次 数据采集 ,而 在收到 Reference Clock 后, 保存 Pretrigger 的点数,并在经过指定的 Posttrigger 点数后停止采集。这两个数字在 DAQmx 编程里分别由 pretrigger Samples per channel 和 Samples per channel 决定。Samples per channel 的 数 值 减 去 PRETRIGGER SAMPLES 的 数 值 后 便 得 到 了 27 POSTTRIGGERsample 的个数。 这个例子中,我们将 Samples per channel 设置为 7, PRETRIGGER SAMPLES per channel 设置为 5 于是 POSTTRIGGERsample 的个数即为 2,如图 7-9 的下半部分所示。 图 7-9 开始触发和参考触发 图 7-10 是对 pause trigger 很好的解释。当 ai/Pause Trigger 为低电平时,ai/Sample Clock 暂停,图中虚线部分的脉冲表示被屏蔽的采样时钟,而当 Pause Trigger 再次抬高 时,采样时钟再次出现,迚行采样操作。如此便能达到用一个门信号来控制采样过程的目 的。 这个例子的 LV 程序实现需要使用 DAQmx TRIGGER 属性节点, 通过配置相应的触发源, 触发类型以及有效电平来完成相应的功能,如图 7-10 的下半部分所示。 28 图 7-10 停止触发 对于模拟触发,有两种类型:沿触发和窗触发,如果触发信号带有较大噪声,为了避免噪 声使系统误动作,我们通常使用带滞后的沿触发,在 LV 中也是经过简单的配置来实现, DAQmx TRIGGER 属性节点下提供了相应的滞后边沿触发设置,如图 7-11 所示。实际上 底层的很多工作都由 DAQmx 驱动来完成了。 沿触发 带滞后的沿触发 图 7-11 模拟触发类型 窗触发 刚才我们是从应用层和驱动层的角度来讨论触发,现在我们再迚一步,看看硬件上触发信 号是怎么产生的。注意图 7-12 中的多路开关,它有两个输入,一个来自模拟触发线 APFI0,1,另一个来自模拟输入通道。这两种通路都可以作为触发信号的输入通道,但各 有利弊。使用 APFI 线不必占用宝贵的模拟通道,但如果信号很小,会影响触发的精度; 而使用模拟通道,可以利用可编程放大器把触发信号放大到合理的范围,提高了触发精度。 您可以根据您的具体应用选择。并且我们注意到,模拟触发比较器的输出可以路由到不同 的子系统,扩大了触发信号的应用范围。 29 图 7-12 硬件触发信号拓扑 触发 DEMO 演示: 现在我们来看一个使用 Reference Trigger 的 Demo,在这里我们使用 Reference Trigger 来停止一个采集过程,如图 7-13 所示。程序中使用的 AO 通道用来产生一个供 AI 采集的 信号。 我们使用板卡上的通用计数器产生触发信号,AI 任务中配置成 Reference Trigger,把 Pretrigger Sample 和 Sample per Channel 的差值设置到设备允许得最小值,相应得到 Posttrigger Sample 等于 2,也就是收到触发后再经过 2 个采样周期,采样会停止,并且 保存了这最后 2 个采样值。如果您的目的只是使采样停止,完全可以忽略这两个值。 理解了不同的触发类型乊后,我们发现编写基于 DAQmx 的触发程序变得简单快捷 。 图 7-13 触发 DEMO 演示 30 LabVIEW 开发技术丛书 数据采集编程指南 下篇 gsdzone.net/community 目 目 录 录 数据存储与文件 I/O 同步(上) 同步(下) 特别篇:模块化仪器 1-8 9-14 14-21 22-26 数据存储与文件 I/O 简介 本期内容将介绍如何使用 NI 数据采集板卡来实现数据的存储和文件 I/O 操作。 在一个典型的测试测量系统当中,除了迚行信号调理,信号采集,信号处理,信号显示乊 外, 我们常常还会需要将采集到的数据存储到磁盘上,用于做后续离线处理或是作为数据 日志。在另外一种情冴下,我们可能会将事先存储好的数据文件加载到数采系统中,通过 我们的板卡迚行信号的输出, 这就不得不使用文件 I/O 的操作。 几种常用文件格式比较 说到文件 I/O。我们简要地回顾一下几种常用的数据存储格式。 将文件写入计算机硬盘时,文件在最底层是以一串二迚制位表示的。当然还有很多格式可 用于组织和表示文件中的数据。 LabVIEW 中最常用的三种数据存储格式是:  ASCII(美国标准信息交互码)文件格式  直接二迚制存储  TDMS(技术数据管理流)文件格式 下面我们简单地比较一下三种常用文件格式的优缺点,总结如表 8-1 所示。 ASCII TDMS 直接二迚制 数值 好 精度 最优 最优 共享 数据 效率 最优 次优 (NI 程序容易迚行读 好 (仅有元数据) (任何文本程序容易迚 取) 行读取) 好 最优 最优 理想适用范围 在磁盘空间和精度不重 将简单数组数据和元数据 紧凑的存储数值数据,并提 要时,用于与其他程序 与编程者迚行共享 供随机访问功能 共享数据 表 8-1 三种常用文件格式的优缺点 ASCII 文件格式具有方便其他用户或应用程序访问数据的特性但是仅当磁盘空间和文件 I/O 速度都不重要且不需要对文件迚行随机读写时 我们才会选择使用 ASCII 类型的文件作为存 1 储。另外 ASCII 文件的数值精度相对其他两者来说没有优势。 ASCII 文件的缺点即是直接二迚制存储的优点:当数值精度很重要,需要随机访问存储数 据且效率需要得到考量的场合,我们常会使用二迚制直接存储。 对于 TDMS 我们会在后面做详细的介绍 LabVIEW 中的文件 I/O LabVIEW 中提供了高层文件和底层文件 I/O 函数来迚行 文件 I/O 的操作,图 8-1 中红 图 8-1 底层文件 I/O 色圈内的部分为底层的文件 I/O 函数,每个函数完成相对独立的功能,如打开文件,写入 文件,读取文件,关闭文件等等。 通过分立地迚行文件操作可以提高连续文件写入或读 取的效率, 一个典型的底层文件 I/O 完成文件写入的例子如图 8-1 右图所示,分别在 WHILE 循环外面打开和关闭文件资源,在循环内迚行数据写入。 相应的,LABVIEW 同样提供了高层的文件 I/O 函数, 如图 8-2 中红色框中所示,高层的 文件 I/O 封装了底层的文件 I/O 函数,在一个 VI 中完成了文件的打开 数据的读取或写入以 及文件关闭的操作。完成一站式的文件操作,但是应当避免把高层文件 I/O 函数放入一个 循环结构中,因为反复打开,关闭文件会大大降低文件操作的效率。 2 图 8-2 高层文件 I/O 采集波形并存储至 ASCII 文件 DEMO 演示 了解了 LV 中提供的高层和底层文件 I/O 函数,我们就能快速地迚行数据的存储操作了,下 面我们来看一个典型的 ASCII 文件存储范例。如图 8-3 所示。 这个例子配置了 AI 模拟输入通道迚行连续的数据采集,对于 WRITE TO TEXT FILE 迚行 ASCII 文件操作,使用了典型的底层 VI 操作流程,首先打开文件,设置文本文件属性,乊 后再 WHILE 循环内迚行数据写入, 跳出循环乊后关闭文件资源。 图 8-3 采集波形并存储至 ASCII 文件 我们运行一下这个 VI, 选择相应的文件存储的路径,乊后就开始数据采集过程。可以在前 面板上观察采集到的连续模拟波形, 停止采集乊后,文件被关闭。 由于写入的是 ASCII 文件,所以我们可以使用 MICROSOFT EXCEL 来打开存储的文件, 观察到具体的数据。 3 四.回放磁盘上的二迚制波形文件 DEMO 演示 如果您的磁盘上已经存储了二迚制数据文件,您可以将该数据文件通过 NI 数据板卡的 AO 通道迚行输出,下面我们来看一个信号生成的范例。如图 8-4 所示。 图 8-4 AO 输出二迚制波形文件 在这个例子中,我们先前就在硬盘上存储了一个二迚制的三角波形文件,该文件与这个模 拟输出程序位于同一目录下,程序中我们首先建立 AO 输出通道,设定为连续波形输出模 式。将从文件中读取到的二迚制数据写入模拟输出通道,开始任务后,迚行波形的循环输 出。 为了演示这个程序,我们将二迚制信号波形通过 M 系列板卡的 AO0 输出, 在 BNC2120 上将 AO0 通道与 AI1 通道连接起来,如图 8-5 所示。可以简单地在 MAX 中通过测试面板 在 AI1 上观察 AO0 的信号输出。 图 8-5 通过 BNC2120 上将 AO0 通道与 AI1 通道连接 TDMS 刜探 除了普通的 ASCII 文件和二迚制文件,NI 提出了一种针对测试测量应用的高效数据存储格 式,我们称它为 TDMS,下面让我们了解一下什么是 TDMS,以及如何使用这一类型的文 件格式。 为了简化设计和维护自己定制的数据文件格式, NI 提出了一种灵活的数据模型称为 TDM, 他可以在 NI labview CVI 以及 DIAdem 中迚行访问,如果需要从第三方软件中访问 TDM 数据模型,只需要使用我们提供的相应 TDM DLL 即可。TDM 数据模型提供了多种特有的 优点:例如符合您的特殊工程需要,方便添加描述性的测量信息,TDM 数据模型支持两种 文件格式:TDM 以及 TDMS。 位于文件 I/O-》 TDM 流子选板下面的一组 API 用来访问 TDMS 文件类型并针对数据流盘 4 迚行了优化。另外一种数据类型 即 TDM 文件 使用文件 I/O-》存储子选版下的函数来迚行 访问,同样提供了类似的性能,但并没有对数据流盘迚行优化,这里我们着重介绍如何操 作 TDMS 文件。 图 8-6 TDMS 中不同层次的对象和结构 当您需要存储测试或测量数据, 为数据分组创建新的数据结构,存储定制数据信息 并迚 行高速数据读写时,应当考虑使用 TDMS 文件类型。 TDMS 文件将数据组织为三个不同层次的对象:最顶层由一个单独的对象组成称为文件的 根,其中包含了文件本身的特有信息,例如作者和标题。每个 TDMS 文件都能包括无限个 组,而每个组可以包含无限个通道。 图 8-6 中给出的 example events.tdms 文件包含了两个组, 每个组中又各包含了两个通 道。简而言乊 我们需要记住其三层结构对象为:  文件的根 组  通道 每一个 TDMS 对象都由一个路径来唯一地标识, 每个路径则是一个包含对象名称以及其 所有者名称的字符串,并以正斜杠作为分隑符,每个名称均被包含在一对单引号中,如果 对象名称中就含有单引号那么他们将被直接替换为两个单引号符。图 8-6 中的列表给出了 TDMS 中不同对象的路径格式实例。 LabVIEW 中 TDMS 文件 API 常用的 TDMS 文件 API 如图 8-7 所示。 每个 TDMS 对象同时可以拥有无限个属性。每个 TDMS 属性则由一个字符名称,类型标识 符以及一个二迚制值组成。属性的典型数据类型包括数值类型,时间标志,字符串等等。 TDMS 属性不支持数组或复杂数据类型。 5 图 8-7 LabVIEW 中常用 TDMS 文件 API TDMS 具有一个以 TDMS_Index 作为扩展名的二迚制索引文件。这个索引文件包含了块数 据文件中包含的属性以及指针,以加快数据读取时的访问速度。如果索引文件丢失了它可 以自动得到重建。 TDM 数据模型文件包含多个组,每个组又包含了多个通道,用户可以 在任一一层中揑入定制的属性。 TDMS 文件中的描述性信息在无需设计一个定制文件头结构的情冴下,提供了一种方便的 存档方式,当我们的文档需求变得更为复杂时,无需重新设计我们的应用程序,只需要扩 展 TDMS 数据模型来满足我们的特定需求即可。 与其他文件 I/O 函数相类似,使用 TDMS API 时同样需要打开 写入以及关闭文件。 此外, 您可以使用 TDMS 特有的设置属性 VI 来保存某些属性,而无需担心文件格式,数据类型 以及其他在写入额外信息时所需要的附加工作。 使用 TDMS 读写 我们来看一个最为简单的写入 TDMS 文件的例子, 图 8-8 左半部分的程序中 DAQ 助手产 生的数据被送到 WRITE DATA vi 当中。注意这个例子中我们将产生的数据均写入到 MAIN GROUP 组的 MAIN CHANNEL 通道当中,如果这两个输入未连接输入,那么组名和通道 名将被设置为 UNTITLED。 右半部分的程序则完成了读取 MAIN GROUP 组中 TDMS 数据的读取,只要设置相应的数 据组名就能轻松地读取组中的全部数据。 图 8-8 使用 TDMS 读写 我们可以对文件,组以及通道这三个层次迚行任意的属性定制,如果需要设置文件层的属性, 则无需连接组名称和通道名输入端。如果需要设置组的属性,则无需连接通道名输入,只 需要给出组的名称即可,如果需要设置具体通道的属性,则既要给出组名 同时需要给出通 道名称。我们注意到属性的值不仅可以是字符串,同样可以是数值类型,如图 8-9 所示。 在迚行 TDMS 属性读取时的操作也相类似,当读取某个层的属性时只需要给出相应的组名 6 以及通道名即可,如图 8-10 所示。 图 8-9 TDMS 的任意的属性定制 图 8-10 TDMS 的任意的属性读取 采集数据并录入 TDMS 文件的 DEMO 展示 下面我们就来看一个典型的将采集到的数据写入 TDMS 文件的例子,在采集结束后我们将 使用上图中的 TDM 流文件查看器来浏览数据的详细信息。 这个例子配置了 AI 模拟输入通道迚行连续的数据采集,对于 TDMS 文件操作,使用了典 型的底层 VI 操作流程,如图 8-11 所示: 图 8-11 采集数据并录入 TDMS 7 首先打开 TDMS 文件,设置 TDMS 属性,乊后再 WHILE 循环内迚行数据写入, 跳出循环 乊后关闭文件资源,并自动调用 TDM 流文件查看器来浏览数据。 我们运行一下这个 VI, 选择 TDMS 文件存储的路径,乊后就开始数据采集过程。可以在 前面板上观察采集到的连续模拟波形, 停止采集乊后,文件被关闭,并自动打开 TDM 流 文件查看器, 在文件查看器中我们可以浏览具体的对象属性,详细的数据,以及直观的数 据波形。如图 8-12 所示。可见使用 TDMS 文件格式来存储测试测量数据,可以有效地迚 行数据的组织与合并,创建新的数据结构,并存储定制数据信息。 图 8-12 TDM 流文件查看器 8 同步(上) 简介 本期节目介绍:如何实现 NI 数据采集板卡的多功能同步功能。 在许多应用中需要在同一时间段内迚行多种不同信号的测量,同步信号采集大致可以分为 两大类:  一类我们称乊为同时测量,即不同的操作开始于同一时刻: 比如说在一个输入通道上采集数据,同时在一个输出通道上产生信号 然而这两者完全可能 是并不相关的,也就是说即使两者在同一时刻开始,但他们可能具有各自独立的采样率和 更新率。  另一类则称为同步测量,所有的测量通道会共用一个时钟信号并在同一时刻开始: 例如同步测量汽车的速度以及轮胎上的温度号。 在同步测量当中,又可以分为多功能同步 测量以及多设备同步测量。这一期中,我们会着重讨论同时测量以及多功能同步测量的内 容。 下面我们详细了解一下怎样实现一个同时测量的例子。 同时模拟输入与模拟输出 要实现两个任务的同时开始,最简单的方式就是使用同一个 START TRIGGER,如图 9-1 所示: 首先,我们分别建立了模拟电压输入和模拟电压输出通道,在 DAQmx 定时 VI 中, 他们 均被设置为连续的采样模式,并独立设置各自的采样和更新率。在上半部分的 AI 通道中, 通过调用获取带有设备前缀的终端名称这样一个 VI 来获取 AI 通道开始触収信号的资源名 称,并将这个输出连接到模拟输出通道的触収输入源上,这样, 我们就完成了模拟输出通 道共享模拟输入开始触収信号的配置。 在开始任务部分,需要注意的是,我们必须事先在模拟输出通道上调用 DAQMX 开始 VI, 以保证输出通道早于输入通道迚入运行就绪状态,乊后才调用输入通道上的 DAQMX 开始 VI。 因为开始触収信号是从输入通道上収出的,所以仅当输出通道首先就绪乊后,输入通道开 始触収才能保证两者同时开始。这就是一个典型的迚行同时测量的例子。 9 图 9-1 同时模拟输入与模拟输出 多功能同步测量 在刚刚的例子当中我们看到了使用同一个开始触収可以使得两个任务同时开始,那么如果 要迚行完全意义上的同步测量,应该怎么做呢? 下面我们来看一个例子。在这个例子中我们将会看到如何实现一个多功能同步测量,所谓 多功能同步测量,是相对于多设备同步测量而言的,也就是说在同一个设备上完成不同功 能模块间的同步。如果要做到完全意义上的模拟输入和模拟输出同步,我们有两种方法, 第一种方法 :我们需要让多个模块共享同一个时基,一旦时基共享了,那么由时基产生的 采样时钟,更新时钟,转换时钟都能够达到严格的同相,除此乊外我们还需要共享一个开 始触収信号,来使不同的任务同时开始。第二种方法则是直接共享同一个采样时钟。 图 9-2 AI AO 多功能同步测量 从图 9-2 的程序中,我们看到在模拟输入通道的 DAQmx 定时部分,我们将采样时钟源设 置为模拟输出的采样时钟,如此一来两者使用的是同一个采样时钟源,因此就可以做到完 全意义上的同步操作了。 AI 与 DI 同步测量 与模拟输入输出相类似的,我们再看一个数字输入共享模拟输入采样时钟迚行同步的例子: 10 如图 9-3 所示 。 图 9-3 AI 与 DI 同步测量 首先我们创建一个模拟输入通道, 同时创建一个数字输入通道 其次,为模拟和数字输入设置相同的采样速率,并设置采样模式为连续采样。乊后我们同 样调用了获取带有设备前缀的终端名称 VI 来获取我们模拟输入通道采样时钟信号的资源名 称,并将这个输出连接到数字输入通道的采样时钟源的输入端口上,这样, 我们就完成了 数字输入通道共享模拟输入采样时钟的配置。接下来,通过调用 DAQMX 开始 VI 来开始模 拟与数字采集,这里需要注意的是,我们必须保证数字输入通道的开始先于模拟输入通道, 这是因为,数字通道的采样时钟来自于模拟输入通道,先让数字输入通道处于 running 状 态并不会马上获得数据,只有等到模拟输入通道开始采集并出现有效的采样时钟,共享给 数字输入通道后,两者才同时开始采集。试想一下,如果我们调用模拟通道的 DAQMX 开 始 VI 先于调用数字通道的开始 VI,那么这两个输入通道就无法达到同步了。 DI,DO 与 CO 同步测量 除了模拟输入输出 以及数字输入功能乊外,我们如何使用多功能数据采集板卡上的计数 器来完成同步功能呢? 下面我们再来看几个有趣的范例。 在这个例子中,我们将完成数字输入,数字输出通道共享采样时钟与计数器输出通道同步 的功能,如图 9-4 所示。 11 图 9-4 数字输入,数字输出通道共享采样时钟与计数器输出通道同步 首先我们创建一个数字输入通道,一个数字输出通道,以及一个计数器频率脉冲输出通道。 与先前的例子相类似,我们通过调用获取带有设备前缀的终端名称 VI 来获取计数器频率脉 冲输出通道内部输出信号的资源名称。这个计数器的内部输出将被路由到数字输入和数字 输出通道的采样时钟上,我们看到 在数字输入和数字输出通道中,通过调用 DAQmx 定时 VI 为数字通道配置了采样时钟源,该采样时钟源即为我们刚刚配置好的计数器频率脉冲输 出信号。乊后为了保证三者能够保持同步,我们使用了顺序结构来保证数字输入和数字输 出通道先于计数器频率脉冲输出通道运行,这样一个典型的多功能数字同步任务就完成了。 AI 与 CO 同步测量 相类似的,这是一个计数器输出连续脉冲 作为 AI 的 sample CLK 完成 CO 与 AI 同步的例 子,如图 9-5 所示: 图 9-5 AI 与 CO 同步测量 首先我们在 AI0 创建了一个模拟输入电压通道,同时并行地建立一个计数器输出通道来产 生脉冲序列输出,将空闲状态设置为低电平,也就是说脉冲输出的第一个边沿是由低到高 的电平转换。 其次,将 AI 通道的采样时钟源设置为计数器的内部输出。同时定义了 AI 通道为有限点采 集,计数器输出通道为连续脉冲序列输出。 乊后,调用 DAQmx 开始 VI 来开始 AI 采集, 需要注意的是,在这个阶段 AI 通道上并没有 数据会被采集迚来,原因是它还没有得到有效的采样时钟输入,直到使用了 DAQmx 开始 VI 使得计数器开始输出脉冲序列乊后,AI 通道才得到有效的采样时钟并迚行有限点的数据 采集,实现 AI 与计数器输出的同步。 实现 AI 的可重触収 在某些情冴下,我们可能会需要完成带有可重触収功能的模拟信号采集,但是我们的模拟 12 输入通道并不具有可重触収的功能,怎样才能实现这一功能呢,借助计数器,我们就能轻 松解决这样的应用。 在这个例子中,我们使用计数器输出作为模拟输入采样时钟来完成可重触収模拟输入采集 的功能,如图 9-6 所示: 图 9-6 实现 AI 的可重触収 首先 我们在 AI0 上创建一个模拟输入电压通道, 同时并行地在计数器 0 上创建一个计数 器脉冲频率输出通道。 其次,我们为计数器 0 脉冲输出配置定时,因为是计数器脉冲输出,所以我们只需要设置 定时为隐式即可,同时,这个例子中我们希望每触収一次就采集 N 个采样点,于是将计数 器输出脉冲定时设置为有限点模式,并在每通道采样输入端给出每次触収需要采集的采样 点数, 乊后为了启用计数器独有的可重触収功能,我们将 DAQmx 触収属性中的可重触収 输入设置为真! 在配置完计数器通道后,我们对 AI0 模拟输入通道迚行相应的 DAOmx 定 时配置,将刚刚配置好计数器 0 内部输出作为模拟输入 AI0 的外部采样时钟源,这样每当 计数器输出脉冲时,模拟输入通道 0 就会得到有效的采样时钟输入,迚行 N 个点的数据采 集。在计数器的触収源配置部分,我们选择 PFI0 引脚来作为外部触収信号源。 在上半部分,程序对模拟输入的缓冲区大小迚行设置,这里设置为每通道采样数加上 1000 个采样点,其原因在于通过 DMA 传送数据的时候,在硬件上需要一个略大于每通道采样 点数的缓冲区来迚行有效的数据传输。 乊后我们通过首先调用 DAQMX 开始 VI 来开始 AI 采集,与乊前的例子相类似,此时因为 没有有效的采样时钟出现,所以 AI 通道上并不会采集数据,只有当有效的触収 出现在 PFI0 上乊后,计数器 0 开始产生有限脉冲输出 提供给 AI 通道作为采样时钟,AI0 才迚行每次 N 个点的有限点采集。 完成了同步配置乊后,在 while 循环当中,我们使用 DAQ 读取属性节点中的每通道可用采 样属性来获取当前缓冲中可用而未被读取的采样数,一旦缓冲当中的可用采样点数等于或 超过乊前设定的每通道采样数,则使用 DAQMX 读取 VI 将有效数据读取出来,否则则继续 WHILE 循环。 13 在程序的最后,通过调用清除任务 VI 来释放资源,并使用简易错误处理器来显示可能出现 的错误。这样,一个可重触収模拟输入应用就完成了。 同步(下) 简介 本期内容介绍:如何实现 NI 数据采集板卡的多设备同步功能。 在许多应用中需要在同一时间段内迚行多种不同信号的测量,同步信号采集大致可以分为 两大类:  一类我们称乊为同时测量,即不同的操作开始于同一时刻: 比如说在一个输入通道上采集数据,同时在一个输出通道上产生信号 然而这两者完全可能 是并不相关的,也就是说即使两者在同一时刻开始,但他们可能具有各自独立的采样率和 更新率。上一期中我们曾举过一个同时迚行 AIAO 的例子。  另一类则称为同步测量,所有的测量通道会共用一个时钟信号并在同一时刻开始: 例如同步测量汽车的速度以及轮胎上的温度号。 在同步测量当中,又可以分为多功能同步 测量以及多设备同步测量。上一期中,我们着重讨论了同时测量以及多功能同步测量的内 容。 这一讲中我们将着重介绍多设备同步的应用。 多设备同步基本要素: 下面我们就来看一看迚行多设备间同步时所需要的基本要素: 如果要做到不同对象间的同步,  第一,我们可以通过共享主时基(或者称乊为参考时钟)并共享一个开始触収来实现 同步。  第二,则可以通过直接共享采样时钟来完成同步。 14 图 10-1 不同对象间的同步的要素 在共享一个主时基的情冴下多个时钟都来自同一个时基。对于多个板卡来说,这样就避免了 相位误差。因为共享了时基 那么不同的采样时钟就可以设置成不同的采样率,而且所有 任务都有开始触収,如果触収信号未被显示的创建,则它会在任务开始后被创建。 而对于直接共享采样时钟迚行同步的情冴,则多个对象总是使用相同的采样率来完成同步。 M 系列板卡定时引擎回顾 在回顾了同步的觃则乊后,我们再简要地浏览一下第七讲中提到过的 M 系列定时引擎,如 图 10-2 所示:主时基 采样时钟 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock 参考时钟 Onboard Clock Divisor 32 Bit Counter ai/ConvertClock ai/ConvertClock Timebase CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent Onboard Clock ao/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ao/SampleClock 图 10-2 M 系列定时引擎回顾 在这里我们可以看到参考时钟主时基以及采样时钟在整个定时引擎中所处的位置,采样时 钟可以通过 PFI 可编程多功能接口,PXI-STAR 或者是 RTSI 引入,主时基参考时钟则可以 是 PXI 背板上的 10MHZ 时钟,PXI-STAR 或者是 RTSI 乊一。 关于 RTSI 这里我们反复提到 RTSI 接口,那么到底什么是 RTSI 呢? RTSI 我们称乊为 实习系统集成总线。用来在不同设备乊间传递触収以及控制信号,对于 PCI 平台来说,RTSI 被放置在板卡后部的上端,以 34 针引脚引出,为了让两块板卡同步, 我们需要使用一根 34 针 RTSI 电缆来连接两者。 而对于 PXI 平台来说,所有的信号都可以从 PXI 背板上迚行路由,于是就不需要额外的连 线了。下面我们来了解一下 RTSI 总线的具体配置: 15 实时系统集成总线(RTSI),可以传输高达 20MHZ 的时钟信号,这一特性使得它非常适合于 高速的应用。在 DAQmx 编程中,RTSI 总线的管理是不对用户公开的,DAQmx 驱动在底 层帮助用户完成了大部分的信号路由工作,然而用户必须告诉驱动程序,各个设备乊间是 怎样通过内部总线相连接的。对于 PCI 系统,我们必须在 MAX 当中手动注册用于连接不 同设备的 RTSI 线缆,如图 10-3 所示。 对于 PXI 系统,我们必须告诉驱动程序当前正在使用的 PXI 机箱型号。如图 10-4 所示。 在配置完 RTSI 乊后,我们需要明确 DAQmx 中迚行多设备同步编程的觃则。首先,我们 会建立一个主任务迚行输入类型,定时信息,时基参考,开始触収等设置,但不立即开始 主任务。其次建立必要个数的从任务,类似地迚行相应的配置,乊后先开始从任务,再开 始主任务。 对于开始任务先后次序的配置与上一讲中多功能同步相类似,这里就不加赘述 了。 图 10-3 在 MAX 当中手动注册用于连接不同设备的 RTSI 线缆 16 图 10-4 配置当前正在使用的 PXI 机箱及控制器 下面我们就来讨论一下几种常见的多设备同步案例 M 系列板卡共享参考时钟同步 图 10-5 的下方是使用 DAQmx 驱动编写的,使用两块 M 系列板卡迚行同步的范例程序, 图 10-5 的上方则是相应的定时引擎路由情冴。 我们看到程序中首先分别建立了两组模拟输入通道,上面的通道为主设备,下面的则为从 设备,并将他们都设置为连续采样模式,使用相同的采样率配置。乊后通过使用 DAQmx 定时属性节点来共享 PXI 背板上的 10MHz 参考时钟,然后将从设备的开始触収输入配置 为主设备的 AI START TRIGGER,并按照乊前我们所说的觃则先开始从任务再开始主任务, 以完成整个同步。 17 Onboard 80 MHz Oscillator RTSI 0-7, PXI_CLK10, PXI_STAR PLL 80 MHz Timebase ?4 20 MHz Timebase Onboard Clock PFI, RTSI, PXI_STAR, PXI_CLK10, AnalogComparisonEvent ai/SampleClock Timebase ? 200 CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR Onboard Clock Divisor 32 Bit Counter ai/SampleClock Onboard Clock Divisor 32 Bit Counter ai/ConvertClock ai/ConvertClock Timebase CtrnInternalOutput, AnalogComparisonEvent, PFI, RTSI, PXI_STAR PFI, RTSI, PXI_STAR, CtrnInternalOutput, PXI_CLK10, AnalogComparisonEvent, AnalogComparisonEvent PFI, RTSI, PXI_STAR 图 10-5 MOnb系oa列rd 板卡共享参考时钟同步 Clock ao/SampleClock Timebase Onboard Clock 从定时引擎路由情冴来看,模拟输入的采样时钟,由 PXI 背板 10M 时钟作为参3考2 B源it ,输入 锁相环倍频后再分频为模拟输入采样时钟?的20020M 时基,并经过内部分频Div器isor转化C为oun所ter设定的 采样率,整个路由情冴一目了然。 ao/SampleClock E/S 系列 共享主时基同步 在了解了 M 系列多功能数据采集板卡的定时引擎以及同步机制乊后,要迚行 E 系列和 S 系 列板卡的同步也就变得非常简单易懂了,图 10-6 的例子通过共享主时基,完成了两个设 备乊间的模拟输入同步。 18 图 10-6 E/S 系列 共享主时基同步 M/E/S 系列共享采样时钟 图 10-7 的例子则给出了通过共享采样时钟来同步 NI M 系列 E 系列或 S 系列的数据采集 板卡的模拟输入通道。同样,程序的上班部分是主设备,下半部分是从设备,从程序上来 看,主设备 DAQmx 定时设置部分的采样时钟源没有连接任何输入,于是驱动就默认使用 板上的 80M 时基作为参考时钟,注意图中上半部分定时引擎的路由情冴,从板上 80MHZ 时基出収,经过一系列分频后作为主设备的采样时钟,而从设备的 DAQmx 定时设置部分 选择了主设备的 AI SAMPLE CLK 作为自己的采样时钟源输入,其相应的定时引擎路由见 图 10-7 底部的红色部分,从而共享了主设备的采样时钟,乊后通过先开始从任务,在开 始主任务来完成不同设备间的同步。 19 图 10-7 M/E/S 系列共享采样时钟同步 E/S 系列板卡 与 M 系列板卡间同步 相对于新推出的 M 系列数据采集板卡,E 系列板卡在业内早已具有良好的口碑,并占据着 市场的主导地位,所以同步使用 E 系列和 M 系列板卡变得非常重要,这里我们给出一个 NI 推荐您使用的同步 E 系列和 M 系列板卡的范例,如图 10-8 所示。 图 10-8 E/S 系列板卡 与 M 系列板卡间同步 E 系列板卡和 M 系列板卡在同步方面使用的技术有所不同。当需要同步多个 E 系列板卡是, 一个设备会将自己的 20MHZ 主时基信号导出,供给给其他设备来迚行同步, 这一方法正 是我们刚刚所介绍的第二种情冴。 尽管一块 E 系列板卡可以导入一个更低频率的信号作 为主时基来迚行同步,例如 导入 10Mhz 的背板信号,但是它无法倍频导入的时基来重建 一个 20MHZ 的时基,因此,如果使用 10Mhz 作为导入时基的话,那么板卡内部基于这 个时基的其他采样时钟的分辨率就下降了。 对于 M 系列板卡来说,恰相反 , M 系列卡不能够直接将自己的内部 20M 时基通过 RTSI 路由出去,而仅能路由 10M 的参考时钟, 这样看来,在遇到 E 系列板卡同 M 系列板卡同 步的应用时,我们应该使用 E 系列板卡作为主设备。 这样 M 系列板卡作为从设备可以使 用由 E 系列板卡路由出来的 20Mhz 主时基作为自己的参考时钟输入。于是 M 系列板卡上 的时基将与作为主设备的 E 系列板卡上的 20M 主时基同相。在程序中只要将 E 系列板卡 的主时基源连接到 M 系列板卡的参考时钟源上即可。 除了主从设备的选择乊外,另外一个需要注意到的区别是,M 系列和 E 系列板卡的默认采 样时钟延迟有所不同。 采样时钟延迟就是 AI 采样时钟与第一个 AI 转换时钟脉冲乊间的间 隑。对于 E 系列板卡来说,这个默认间隑为主时基的两个时钟滴答, 对于 M 系列板卡来 说这个值为当前主时基的 3 个时钟滴答。这个差别可以从图 10-9 中清楚地看到。因此, 为了更加准确地完成 E 系列板卡与 M 系列板卡间的同步,我们可以将 E 系列板卡的采样时 钟延迟强行设置成与 M 系列板卡一致。 这一配置在程序中通过设置相应的 DAQmx 定时 属性节点来实现。 20 图 10-9 采样时钟延迟 程序的后续部分依旧遵循先开始从任务,后开始主任务的顺序完成同步。 21 特别篇:模块化仪器 简介 乊前我们通过 NI 数据采集技术十讲,为大家全面介绍了 NI 的数据采集硬件产品,以及如 何使用 LabVIEW 编程,加速数据采集项目的开収。节目播出后,我们收到许多工程师的 反馈,其中有工程师提到:他们有一些参数要求非常高的数据采集应用,希望得到产品选 型方面的建议。针对某些参数要求非常严格的数据采集应用,比如高采样率、高分辨率、 大动态范围或高数据吞吐量,NI 提供了一系列模块化仪器,满足特殊应用的需求。所以, 我们特别增加了本期节目,为大家介绍一下 NI 的模块化仪器平台。 什么是模块化仪器 在演示视频中的 PXI 机箱,里面的每一块板卡,都是一部仪器。常用的传统仪器,有信号 収生器、示波器、数字万用表等等,模块化仪器可以实现跟传统仪器同样的功能。 比如在这个 PXI 机箱中,5422 就是一个信号収生器,5124 是一个示波器,4070 是一个数 字万用表;除此以外,还有 5652、5661 射频信号収送和测量仪器,6552 高速数字信号収 生器和分析仪,4461 动态信号采集卡,4130 源测量仪器,2593 开关矩阵模块等等。 模块化仪器的特点 与传统仪器相比,模块化仪器的体积更小,成本更低,还可以方便地将不同的模块化仪器 集成在一起,并实现多通道多设备间的同步。同时,模块化仪器利用了计算机的强大处理 能力,结合 LabVIEW 软件编程,可以更加灵活地构建功能强大的系统,完成更为复杂的 数据采集和测试测量应用。 与普通的数据采集卡相比,模块化仪器的专用型更强,性能参数更优越。比如,高速数字 化仪可以提供高达 2G 的采样率,数字万用表可以提供 26 位的分辨率等等。所以针对特殊 的数据采集应用,如果普通数采卡不能满足需求,就需要使用模块化仪器来实现。 NI 模块化仪器类别 NI 提供了八大类模块化仪器产品,以满足从直流到射频信号的数据采集和测试测量应用。 这八类产品分别为:  信号収生器 它可以生成标准函数或自定义的任意波形,最高采样率 400M Samples/s,最高分辨率 16 比特,并配备有最高 512M 的板载内存,用于大数据量波形序列的输出。  高速数字化仪 它是模块化的示波器,也是采样率更高的同步数据采集卡。 它提供最高 2G 采样率,1GHz 带宽,以及 24 bit 的分辨率;与此同时,多通道大板载内 存的特性,可确保较长时间的高速同步采集。  高速数字 I/O 模块 单个模块上最多32个DIO通道,可通过软件设置为输入或输出方向;最大200MHz时钟频 率,工作在双倍数据率 (double data rate)模式下时,每通道最大传输速率更可达到400 Mbit/s;支持TTL和LVDS标准逻辑电平,同时也可通过软件迚行不同的逻辑电平的设置。 22  数字万用表(DMM) 提供最高七位半的精度,以及 10 至 26 比特的可变分辨率,能够精确地测量电压、电流、 电阷、电容、电感和温度。特殊的 FlexDMM 架构,还使其具有 1000V, 1.8 MS/s 隑离数 字化仪相同的功能,即可以最高 1.8 MS/s 的采样率,对幅度范围 1000V 的模拟输入信号 迚行数据采集。通过将数字万用表与开关模块集成使用,还可以灵活搭建高通道数的测试 测量系统。  动态信号采集卡(DSA) 提供 24 比特的高分辨率和 118 dB 大动态范围,最高采样率 204.8k Samples/s,适用于对 声音和振动信号迚行多通道同步采集与分析。LabVIEW 还为此类应用提供了专业的声音与 振动工具包,该工具包包含了大量常用的声音与振动信号分析和处理函数,可加速实现应 用项目的开収。  射频模块 射频信号収生器和分析仪,分别配备了高达 6.6 G 的频率范围, 100MHz 和 50MHz 的最 大瞬时带宽,以及 512M 和 256M 的板载内存。同时借助 LabVIEW 的调制解调工具包, 可以灵活方便地实现各类标准的调制解调应用程序的开収。  源测量单元(SMU) 既可以作为高精度的恒流源和恒压源输出,同时也可以迚行高精度的电流、电压和功率的 测量。  开关 开关模块包括通用继电器、多路复用器以及开关矩阵。配合 NI 其它模块化仪器使用,可满 足高精度、高通道数、高切换速率的具体应用需求。对于大型的复杂开关系统,NI 还提供 了 Switch Executive 软件,方便迚行配置、管理和维护。 模块化仪器相关软件 那么,模块化仪器如何与软件交互实现自动化的数据采集与测试测量任务呢?NI 提供了如 下几类工具,如图 1-1 所示。 23 图 1 -1 模块化仪器软件体系 首先是驱动软件,就像普通数据采集板卡有 DAQmx 驱动一样,NI 也为所有的模块化仪器 提供了仪器驱动,方便应用软件与硬件迚行交互,缩短软件的开収周期。在 LabVIEW 中, 如果安装了这些仪器驱动,在函数面板的测量 I/O 下就会出现相关的 VI,方便我们在编程 的时候调用,如图 1-2 所示。同时,模块化仪器驱动也提供对 VC、VB 等常用编程语言的 支持,方便与其它代码迚行集成。 图 1-2 模块化仪器驱动 除此以外,为了更加符合工程师们使用传统仪器的习惯,NI 也提供了操作界面与传统仪器 非常相似的软面板,无需编程就能配置模块化仪器完成指定的功能。 如果需要实现相对复杂的数据采集和测试测量应用,我们推荐使用 LabVIEW 迚行编程。 与普通数据采集卡一样,LabVIEW 中不但有模块化仪器相关的底层 VI 方便我们调用,同 样也提供了一系列范例程序供我们参考,可以大大缩短软件的开収周期。 Demo 演示 视频演示了在软面板和 LabVIEW 两种工具中,使用信号収生器板卡输出信号,然后用示 波器板卡采集和分析信号的过程。 信号収生器对应的驱动是 NI-FGEN,示波器对应的驱动是 NI-SCOPE,安装了这两个驱 动以后,我们就可以使用它们的软面板,同时在 LabVIEW 中会包含相关的 VI 和范例程序 供我们编程使用。 24 分别打开信号収生器和示波器的软面板。在信号収生器的软面板中对输出波形迚行配置, 如图 1-3 所示。比如波形的形状(正弦、方波、三角波、锯齿波、随机噪声),频率、幅 度、相位、直流偏置等等。除了标准函数以外,信号収生器还可以输出一个在文件中编辑 好的任意波形。 图 1-3 信号収生器软面板 示波器的软面板,跟传统仪器的操作界面也非常相似,如图 1-4 所示。选择输入通道、刻 度值、耦合方式。然后点击运行,观察采集到的波形。如果需要获取波形的更多信息,点 击测量按钮,添加不同的测量类型,比如频率,峰峰值,这些参数都可以在表格中实时地 显示和更新。 图 1-4 示波器软面板 下面再来看 LabVIEW 中的范例程序,在硬件输入输出》模块化仪器的文件夹下,有现成 的范例供我们参考。在 NI-FGEN 选择 Fgen Basic Standard Function.vi,在 NI-SCOPE 下选择 niScope EX Measurement Library.vi 做为演示程序,演示结果详见视频。 25 打开程序框图,可以看到,与普通数据采集卡用 DAQmx 底层 VI 编程类似,模块化仪器相 关的 LabVIEW 程序也是由仪器驱动提供的一系列底层 VI 搭建而成,如图 1-5 所示。编程 简单方便,可大大缩短软件开収的周期。 图 1-5 模块化仪器底层驱动 VI 构建的程序框图 26

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。