在LabVIEW Real-Time中进行首次测量(数据记录)

更新 Jun 25, 2021

环境

硬件

  • CompactRIO Controller

软件

  • LabVIEW

驱动

  • NI-DAQmx

本教程提供了使用CompactRIO将数据记录到磁盘的步骤。

使用LabVIEW检测CompactRIO系统后,需要进行首次测量。

此页面是安装和配置CompactRIO硬件的演练的一部分。

在LabVIEW中启动新的CompactRIO项目

首先在LabVIEW中创建一个新项目,您将在其中管理代码和硬件资源。

  1. 通过选择文件»创建项目,在LabVIEW中创建一个新项目。
  2. 右键单击树顶部的“项目”,然后选择“新建»终端和设备...”,将CompactRIO系统添加到项目中。该对话框可让您发现网络上的系统或添加离线系统。

图1. 向您的LabVIEW项目添加新的目标和设备
  1. 展开Real-Time CompactRIO文件夹,然后选择您的系统。单击“确定”关闭对话框窗口。

注意 如果您的系统未列出,LabVIEW将无法在网络上检测到它。确保在Measurement&Automation Explorer中为系统正确配置了有效的IP地址。如果您的系统位于远程子网中,则也可以选择手动输入IP地址。


图2. 选择一个新的CompactRIO系统

选择恰当的编程模式

CompactRIO系统具有至少两个用户可选模式。某些CompactRIO型号具有附加的用户可选模式,可以在实时NI-DAQmx中进行编程。请参考本文以判断您的CompactRIO是否能够使用实时NI-DAQmx。将目标添加到项目后,将提示您选择要使用的编程模式。
注意:如果需要,您可以稍后使用CompactRIO机箱属性对话框更改编程模式。

实时(NI-DAQmx)模式–带有NI-DAQmx的CompactRIO是CompactRIO控制器系列的最新产品。通过结合使用NI-DAQmx的易用性和LabVIEW FPGA的低级功能,将两种软件体验融为一体。它还通过将最新的同步和控制技术引入CompactRIO平台来简化系统架构。要在这种模式下对C系列模块进行编程,请将其放置在LabVIEW项目的Real-Time Resources文件夹下。

实时扫描(I/O变量)模式–此选项使您可以对CompactRIO系统的实时处理器进行编程,而不能对FPGA进行编程。在这种模式下,NI为FPGA提供了预定义的特征,该特征会定期扫描I/O并将其放置在内存映射中,从而可用于LabVIEW Real-Time。对于需要以几百赫兹的速率单点访问I/O的应用程序,CompactRIO实时扫描模式已足够。要在这种模式下对C系列模块进行编程,请将其放置在LabVIEW项目的Real-Time Scan Resources文件夹下。要了解有关扫描模式的更多信息,请阅读理解NI CompactRIO扫描模式白皮书并查看 基准
注意:NI建议使用实时(NI-DAQmx)模式,而不是实时扫描(I/O变量)模式。

LabVIEW FPGA接口模式–该选项使您不仅可以对实时处理器进行编程,还可以通过自定义FPGA个性来释放CompactRIO的真正功能,从而获得通常需要自定义硬件的性能。使用LabVIEW FPGA,您可以实现自定义定时和触发,卸载信号处理和分析,创建自定义协议以及以最大速率访问I/O。要在此模式下对C系列模块进行编程,请将其放置在LabVIEW项目中的FPGA目标下。
LabVIEW现在将尝试检测系统中存在的机箱和C系列I/O模块,并将它们自动添加到LabVIEW项目中。
注意:如果未发现您的系统,并且选择离线添加,则需要手动添加机箱和C系列I/O。本文档讨论了扫描模式和FPGA模式的此过程。

下图显示了每种模式如何通过唯一路径发送I/O数据。对于实时(NI-DAQmx)模式,通过NI-DAQmx VI通过处理器读取数据。对于实时扫描(I/O变量)模式,数据通过FPGA发送,但通过将IO节点拖放到实时VI中,最终可以在处理器上访问。对于LabVIEW FPGA模式,可通过将IO节点拖放到FPGA VI直接从FPGA内部读取I/O。


如果您的开发计算机上装有LabVIEW Real-Time,LabVIEW FPGA和NI-DAQmx,则可以通过将模块放在项目中的适当标题下,来选择基于每个模块使用的编程类型。编程模式由LabVIEW项目中模块旁边的文本指示。您还可以通过从Measurement and Automation Explorer(MAX)的下拉菜单中选择要使用的编程模型。

在CompactRIO上创建一个基本的日志记录应用程序

本节分为三个小节,向您展示如何创建基本的温度记录应用程序。请根据您所需的编程模式和CompactRIO控制器选择一个部分。如果不确定所需的编程模式,请参考“选择恰当的编程模式”部分。这些部分按以下顺序列出

  1. NI-DAQmx API
  2. FPGA编程模式
  3. 实时扫描模式

一,使用NI-DAQmx API

NI-DAQmx驱动程序带有各种示例VI,可帮助用户熟悉NI-DAQmx API。本节将指导您如何将NI-DAQmx示例导入CompactRIO终端。我们将导入热电偶-连续输入VI。

  1. 通过选择文件»创建项目,在LabVIEW中创建一个新项目。
  2. 要将您的CompactRIO系统添加到项目中,请右键单击树顶部的“项目”,然后选择“新建»终端和设备…”。

图3. 在LabVIEW项目中创建一个新的终端
  1. 该对话框使您可以发现网络上的系统或添加离线系统。展开Real-Time CompactRIO文件夹,选择cRIO-904x系统,然后单击OK 。注:如果未列出您的系统,LabVIEW将无法在网络上检测到该系统。确保在Measurement&Automation Explorer中为系统正确配置了有效的IP地址。如果您的系统位于远程子网中,则也可以选择手动输入IP地址。

图4. 在LabVIEW中搜索实时CompactRIO
  1. 要将“热电偶-连续输入.vi”添加到LabVIEW项目中,请右键单击cRIO-904x目标,然后选择“添加>>” 。这将打开文件资源管理器。
 
NI-DAQmx示例将默认安装到以下位置:
C:\Program Files(x86)\National Instruments\LabVIEW <xxxx>\ examples\DAQmx
(在x32 OS上,默认文件路径为C:\Program Files\National Instruments\LabVIEW <xxxx>\examples\DAQmx)。

图5. 热电偶-连续输入VI的文件位置
 
  1. 通过将模块移至“实时资源”项目下,确保已配置为在热电偶-连续输入.vi的NI-DAQmx任务中使用的模块处于实时(NI-DAQmx)模式。还要确保将编程模式的所有更改都部署到目标。

图6. LabVIEW项目的层次结构
  1. 打开VI并为相应的模块和通道配置物理通道控件/常量。注意:NI-9211要求的采样率低于本示例VI中观察到的默认值。
  2. 打开程序框图。导航至框图的“定时设置”部分。
  3. DAQmx定时属性节点条件结构之间实现DAQmx配置记录(TDMS)VI 。确保通过DAQmx配置日志记录(TDMS)VI连接任务接线和错误接线。
  4. 右键单击记录模式终端,然后选择创建>>常量。确保常量设置为记录并读取-Log and Read
  5. 右键单击文件路径终端,然后选择创建>>常量。有关如何引用文件路径的说明,请参考“使用CompactRIO实时扫描模式”部分的步骤23。
  6. 确认您的DAQmx配置记录(TDMS)VI的配置如下所示。

图7.  对示例VI的必要编辑
  1. 导航到前面板并运行该应用程序。
  2. 查看和记录数据完成后,单击“停止”按钮。您可以从本文档的“下载/附件”部分下载解决方案。
二。使用LabVIEW FPGA接口模式
LabVIEW FPGA接口模式能够利用CompactRIO的板载FPGA来提高性能和确定性。使用cRIO-9074上的NI-9205为该应用创建了一个示例项目来记录温度,该项目可在此页面的下载/附件部分中找到。该项目包含两个VI,如下所示。

图8. LabVIEW项目的示例层次
如下面的框图所示, FPGA VI使用DMA FIFO与RT VI进行通信。在实时处理器上运行的VI将需要从DMA FIFO中读取值。请参考示例项目,以帮助理解RT VI用于读取和存储从板载FPGA接收的温度值的方法。

图9FPGA VI框图

三,使用CompactRIO实时扫描模式
本节将引导您使用扫描模式在CompactRIO上创建基本的记录应用程序。现在,您应该有一个包含您的CompactRIO系统的新LabVIEW项目,包括控制器,机箱和C系列I/O模块。在本教程中,我们将使用NI 9211热电偶输入模块。但是,任何模拟输入模块均可遵循该过程。您也可以从此页面的"下载/附件”部分下载解决方案。
注意:NI建议使用实时(NI-DAQmx)模式,而不是实时扫描(I/O变量)模式。
  1. 通过选择左上角的文件»保存来保存项目。
  2. 输入名称为“使用扫描模式的基本记录”,然后单击“确定”关闭对话框窗口。

图10. 保存"使用扫描模式的基本记录"LabVIEW项目
  1. 通过右键单击项目中的CompactRIO控制器并选择新建»VI来创建VI 。将VI另存为RT.vi。该项目将仅包含一个VI,即在CompactRIO控制器上运行的LabVIEW Real-Time应用程序。

图11. 在最近添加的CompactRIO控制器下创建一个新的VI
  1. 如下图所示,在RT.vi框图上放置带有三个帧的平铺式顺序结构。该应用程序的基本操作将包括三个步骤:启动,运行和关闭。平铺式顺序结构是强制执行此操作顺序的简便方法。

图12.  LabVIEW中的平铺式顺序结构
  1. 将定时循环添加到序列结构的“运行”帧中。定时循环提供了以不同时间为基础同步代码的能力,包括读取和写入扫描模式I/O的NI扫描引擎。

图13.  LabVIEW中带定时循环的平铺式顺序结构
  1. 双击左侧输入节点上的时钟图标以配置定时循环。

图14. 双击左上角打开定时循环配置
 
  1. 选择“同步到扫描引擎”作为循环时钟源。
  2. 单击确定。这将导致定时循环中的代码在每次I/O扫描后立即执行一次,确保此定时循环中使用的任何I/O值都是最新的值。

图15 .使用扫描引擎作为定时源配置定时循环
 
  1. 右键单击LabVIEW项目中的CompactRIO控制器,然后选择属性
  2. 从左侧的类别中选择“扫描引擎” ,然后输入100ms作为“扫描周期”。这将导致CompactRIO系统中的所有I/O每100毫秒(10Hz)更新一次。也可以从此页面设置网络发布时间,该页面控制将I/O值发布到网络以进行远程监视和调试的频率。单击确定

图16. 调整扫描周期以控制刷新率
  1. 通过单击并使用Shift键选择模块下面的所有通道,然后将它们拖放到RT.vi图上的定时循环中,如下所示。使用CompactRIO扫描模式时,您只需将I/O变量从LabVIEW项目拖放到程序框图中。展开要记录的CompactRIO控制器,机箱和I/O模块。

图17. 将C系列I/O拖放到定时循环中
提示:使用LabVIEW工具栏上的对齐对象»左边缘 and 分布对象»垂直压缩项在图表上组织I/O变量。

图18. 使用左边缘和垂直压缩对齐对象
  1. 在定时循环下的“运行”帧中放置一个普通的while循环,该循环将用于文件I/O任务。由于文件I/O占用时间并减少了时间,因此必须将I/O采集任务和文件I/O任务分开。忽略此要求可能导致数据丢失,因为文件I/O可能比I/O扫描花费更长的时间,从而导致样本丢失。
为了在常规while循环中将数据写入磁盘,您需要使用实时FIFO从定时循环中传输I/O值。这将在两个循环之间提供一个缓冲区。定时循环将运行,同步I/O扫描,并每次将新的I/O值写入缓冲区。然后,常规的while循环将从缓冲区中读取数据并将其写入磁盘。通过这种方式将I/O任务和磁盘访问分开,可以使定时循环以“实时”性能运行,这意味着它将始终按时完成。

图19. 使用循环确保日志记录数据不会减慢I/O采样率


图20. 实时任务访问I/O与低优先级任务记录数据
  1. 在LabVIEW项目中,右键单击CompactRIO控制器,然后选择新建»变量

图21. 在LabVIEW项目中添加新变量
  1. 将变量命名为Data buffer,选择单进程-Single Process作为变量类型。
  2. 选择双精度数组作为数据类型。这将创建一个局部范围的变量(无网络发布),该变量包含双精度浮点数和数组。

图22. 使用变量属性定义变量和数据类型
  1. 然后从左侧菜单中选择RT FIFO
  2. 选中“ RT FIFO”类别后,选中“启用RT FIFO”复选框,为“ FIFO类型”选择“多元素”。
  3. 输入50作为数组的数量,并输入4作为元素的数量(如果记录的通道数不是4,则输入该数字。)这会将变量配置为作为实时安全FIFO运行,可以用作实时和低优先级任务之间的数据缓冲区。 FIFO将容纳五十一个一维数组,每个数组包含四个双精度数字。单击确定

图23. 使用变量属性启用RT FIFO
  1. 数据缓冲区RT FIFO拖放到定时循环中,并使用Build Array函数从I / O变量构建数组,然后将其传递到RT FIFO。

图24. 拖放数据缓冲区并将其放入定时循环中
  1. 数据缓冲区RT FIFO的其他副本拖放到常规while循环中,您将在其中读取数据并将其记录到磁盘。
  2. 右键单击RT FIFO,然后选择Show Timeout并设置超时100 。这将导致RT FIFO最多等待100毫秒,等待新数据在超时之前到达缓冲区。如果缓冲区中存在数据,则RT FIFO将立即返回缓冲区中最早的数据。

图25. 拖放数据缓冲区的其他副本
  1. TDMS Open VI放置在序列结构的启动帧中。
  2. 文件路径操作输入创建常量。在文件路径中键入c:\tempdata.tdms,然后选择创建或替换操作。如果您的CompactRIO控制器正在运行其他实时操作系统,请选择以下所示的适当文件路径。请参阅实时控制器和实时操作系统兼容性以获取更多信息。

图26. 根据所使用的CompactRIO控制器使用正确的文件路径
  1. 在此处下载该文件,或将以下VI片段从Web浏览器拖放到图表中以执行文件I/O。
  2. 将此代码放置在常规的while循环中,并按如下所示进行接线。仅当RT FIFO不超时时才使用条件结构执行此部分代码,这表明已从缓冲区返回新数据。然后,将数据格式化以写入TDMS文件并显示在波形图上。除了检查错误作为停止条件之外,还提供了while循环的停止按钮。

将此VI代码段拖至VI的程序框图


图27. 不关闭的情况下记录代码
  1. 在LabVIEW项目中,右键单击自动创建的现有库,其中包含数据缓冲区变量,然后选择新建»变量,以创建另一个共享变量
  2. 将变量命名为stop,选择单进程,然后选择布尔-Boolean 。选择左侧的RT FIFO类别。

图28. 选择“单进程”并将布尔值用作数据类型
  1. 选择启用RT FIFO ,保留单个元素的选择,然后单击确定。这将创建一个可以在需要实时性能的任务中安全读取的变量。
  2. stop变量的副本放置在定时循环中,并将其连接到stop条件
  3. 如图所示,将stop变量的另一个副本放入常规while循环中,然后将OR函数的结果写入其中。当常规while循环停止时,这将导致定时循环停止。
  4. TDMS关闭功能放在关机框架中,并将文件引用和错误簇连接到该框架。另外,从TDMS关闭错误输出终端创建并指示。完成的应用程序应如下图所示:

图29. 完成的LabVIEW程序框图
  1. 单击在RT.vi上运行”,单击“保存”保存所有未保存的项目,然后在任何有关将更改应用于CompactRIO系统的对话框或警告中单击“确定”。 LabVIEW现在将通过以太网部署您的VI,以在CompactRIO系统上嵌入式运行。
  2. VI部署并开始运行后,查看VI的前面板以查看当前I/O值在波形图上的绘制。

图30. 完成的LabVIEW前面板显示了记录的数据
  1. 查看和记录数据完成后,请单击“停止”
恭喜你!您已经使用LabVIEW和CompactRIO成功创建了嵌入式数据记录应用程序。要继续学习,请查看“使用LabVIEW和CompactRIO嵌入式编程”页面上的其他资源。
 

访问记录的数据

完成这些步骤以检索和查看CompactRIO系统上记录的数据。如果您的系统上未安装FTP服务器,则CompactRIO也支持WebDAV(Web分布式编写和版本控制)。这是使用标准Web浏览器交换文件的安全选择。有关更多信息,请参见使用WebDAV将文件传输到实时RT目标
  1. 使用Windows资源管理器或Web浏览器,导航到ftp://<ip地址>,其中<ip地址>是CompactRIO系统的IP地址。
  2. 下载tempdata.tdms(或您命名的TDMS文件)
  3. 如果您具有Microsoft Excel,则可以通过选择“加载项Add-Ins”标签并单击“ TDM导入器来查看TDMS文件。工作簿的第一页包含文件信息,其余工作表包含通道数据。默认情况下,TDM Importer随LabVIEW一起安装。但是,如果不存在TDM Importer,则可以从此处安装它。

图31. 安装TDM Importer以便直接在Excel中打开tdms文件
  1. 如果没有Excel,则可以在LabVIEW中使用TDMS File Viewer VI查看TDMS文件