I/O变量是共享变量的一种,用于传输I/O数据。本地访问时,I/O变量使用NI扫描引擎对扫描I/O数据进行单点访问。远程访问时,I/O变量使用NI PSP协议对扫描I/O数据进行单点或缓冲访问。I/O变量可直接与物理I/O通道通信或在同一个终端上的FPGA VI和RT VI之间传递自定义I/O数据。

注意 NI扫描引擎不缓存数据。要避免本地访问I/O变量时丢失数据,必须在下一个数据点到达之前读取数据点,写入数据的速度不要快于NI扫描引擎的周期

下表归纳了I/O变量的用途:

用途 I/O变量类型
不使用LabVIEW FPGA模块,在I/O硬件和LabVIEW VI之间传递换算后的I/O数据 用于换算后I/O数据的I/O变量
在运行于同一个硬件设备上的LabVIEW FPGA VI和LabVIEW RT VI之间传递自定义FPGA处理的I/O数据 用于自定义I/O数据的I/O变量
注: 关于NI扫描引擎支持的信息,请参考硬件随附的说明文档。

用于换算后I/O数据的I/O变量

要将I/O变量用于缩放后的I/O数据,必须线连接一个I/O设备至安装了NI扫描引擎的终端,然后将I/O设备添加至LabVIEW项目中的终端。

将I/O设备添加至项目浏览器窗口的支持终端时,LabVIEW自动为每个I/O通道添加一个I/O变量。如添加实体I/O设备至当前LabVIEW项目中所含的终端,必须将新的I/O设备添加至项目并部署相应的I/O变量,方可使用这些设备。

如从当前LabVIEW项目的终端上移出一个实体I/O设备,必须从项目中删除该I/O设备并重新部署包含该I/O设备的终端。重部署终端可确保终端的配置反映项目配置。可使用项目与系统比较对话框确保项目和终端配置相互匹配。

用于自定义FPGA I/O数据的I/O变量(FPGA模块、Real-Time模块)

如项目中有支持NI扫描引擎的FPGA终端,可创建用户定义I/O变量在运行于同一台硬件设备上的FPGA VI和RT VI之间传递自定义I/O数据。

可在运行用户定义I/O变量的机箱上的FPGA VI和RT VI的程序框图上添加用户定义I/O变量。但是,因为所有的I/O变量都是非方向性的,必须将各个I/O变量配置为FPGA至主机主机至FPGA。例如,可在FPGA VI中采集I/O数据并在数据上进行FFT运算,在RT VI中使用FPGA to Host I/O变量将处理后的数据传递至控制循环,然后使用Host to FPGA I/O变量将输出数据从RT控制循环传递回FPGA,在实体I/O通道上输出。

必须安装LabVIEW FPGA模块才可创建用户定义I/O变量。如未安装LabVIEW FPGA模块,但是有Real-Time模块,仍可通过RT VI访问用户定义I/O变量。例如,LabVIEW FPGA模块的开发人员创建用户定义I/O变量,并编译访问这些变量的FPGA位文件。然后,开发人员可将位文件和包含用户定义I/O变量的LabVIEW项目发布给没有FPGA模块的开发人员,使用项目在cRIO机箱上运行位文件。在该情况下,第二位开发人员不能创建用户定义I/O变量,但是可以使用Real-Time模块访问第一位开发人员创建的用户定义I/O变量。

(Windows)如用户定义I/O变量启用网络发布,则用户可在同一个LabVIEW项目的任何RT VI或基于Windows的VI中使用该变量。例如,可使用网络发布I/O变量创建运行在Windows上的用户界面VI。

注: 用户定义I/O变量只支持扫描访问。不能直接访问用户定义I/O变量。

配置I/O变量

可在编辑时或运行时交互式地配置I/O变量,或在运行时通过编程配置I/O变量。上述两种方法可组合使用。下表总结了两种方法的优劣:

方法 应用场景 优点 缺点
交互式 可访问项目浏览器窗口时,配置I/O变量的设置。 较少编程。
  • 查看程序框图时设置不可见。
  • 只能在变量所在的主机终端上配置I/O变量的设置。
可编程
  • 无法访问项目浏览器窗口时,配置I/O变量的设置。录入,如要创建一个使用I/O变量的独立应用程序,需在应用程序运行时改变I/O变量,可选择通过编程配置I/O变量。
  • 从计算机,而不是I/O变量所在的终端上配置设置。例如,如要从主机配置CompactRIO终端上的I/O变量,可通过编程配置该I/O变量。
  • 查看程序框图时设置可见。
  • 可远程配置I/O变量。
较多编程。

交互式配置I/O变量

使用共享变量属性对话框配置单个I/O变量或多变量编辑器窗口同时配置多个I/O变量。

用户可在包含I/O变量的VI运行时更新I/O变量的说明、网络发布和缩放信息。但是,不能在运行时更新I/O变量的名称和数据类型。

注: 添加新I/O变量或变更I/O变量的配置时,必须部署变量以激活新配置。

通过编程配置I/O变量

按照下列步骤,使用变量属性通过编程配置I/O变量:

  1. 在程序框图上放置一个变量属性节点
  2. 右键单击引用输入端,从快捷菜单中选择创建»常量
  3. 单击共享变量引用句柄常量右边的箭头按钮,选择浏览
  4. 使用浏览变量对象对话框,选择要配置的I/O变量。
  5. 右键单击共享变量引用句柄常量,从选择变量类快捷菜单中选择要使用的属性类。
  6. 单击变量属性节点的白色部分,选择要使用的属性。
  7. (可选)使用定位工具调整变量属性节点的大小,使其同时显示一个以上属性。

下图显示了在远程终端上通过编程配置I/O变量的范例:

在该例中,变量属性节点通过配置与通道相关的I/O变量,指定CompactRIO模块通道的限制。

注: 如5秒钟之后,变量属性节点无法连接至远程I/O变量,配置调用超时。按照下列步骤,修改超时周期:
  1. 在文本编辑器中打开labview\LabVIEW.ini
  2. 新起一行,输入RemoteIOVConfigurationTimeout=,后跟超时周期的秒数。例如,如要延长超时周期至10秒,输入RemoteIOVConfigurationTimeout=10
  3. 保存并关闭文件。

部署I/O变量

项目浏览器窗口中,右键单击包含I/O变量的项目项,然后从快捷菜单中选择部署

运行包含I/O变量节点的VI时,LabVIEW自动将变量部署至其所属的I/O变量容器。该操作将部署容器中的所有变量。

注: 如I/O驱动初始化失败,LabVIEW将中止加载项目中的所有I/O变量。在该情况下,I/O变量可能仍会出现在项目中。但是,如应用程序试图访问变量,将会发生运行时错误。关于调试I/O驱动错误的详细信息,请参考特定终端的I/O驱动说明文档。

缩放I/O变量值

共享变量属性对话框的缩放页上,可启用I/O变量的线性缩放或别名。但是,I/O变量不支持非线性缩放。

注: 部分I/O总线使用硬件缩放。在该情况下,LabVIEW I/O变量的缩放提供了额外的缩放选项。LabVIEW不覆盖硬件缩放。计算软件缩放值时,LabVIEW使用I/O总线的硬件缩放值作为原始值。

创建I/O别名

为I/O变量创建别名,在不同的情形下对I/O数据进行不同的缩放。例如,如I/O变量连接的是热电偶输入,可创建别名Celsius(摄氏度)和Fahrenheit(华氏度)。然后进行缩放,以摄氏和华氏两种单位显示温度测量结果。

I/O别名的值双向链接至其父类的值。更新父类的值,I/O别名的值也会随之更新;更新I/O别名的值,同样也会更新父类的值。此外,更新一系列I/O别名中的任何链接,这一系列I/O别名的其他链接也会随之更新。

创建一个I/O别名

如要创建一个I/O别名,在项目浏览器窗口中,右键单击包含I/O变量的终端,从快捷菜单中选择新建»变量,打开共享变量属性对话框。输入I/O别名,然后从变量类型下拉菜单中选择I/O别名。然后单击浏览按钮,选择现有的I/O变量或I/O别名,用于捆绑新I/O别名。

注: 将别名捆绑至I/O变量后,确保别名的数据类型与I/O变量的数据类型相匹配。

使用项目浏览器窗口编辑I/O别名的名称、说明、缩放和网络发布等设置。也可使用多变量编辑器窗口同时编辑多个I/O别名。

注: 不能部署既包含I/O别名又包含其他类型共享变量的库。必须在独立的库中部署I/O别名。

同时创建多个I/O别名

可使用批量创建变量对话框同时创建多个I/O别名。按照下列步骤,批量创建I/O别名:

  1. 创建一个I/O别名,作为批量创建的模板。
  2. 右键单击包含I/O别名的变量库,从快捷菜单中选择创建变量,打开批量创建变量对话框。
  3. 选择属性复制位置,单击浏览按钮,选择要用作模板的现有I/O别名。
  4. 创建个数栏中输入要创建I/O别名的个数,然后单击确定按钮创建新的I/O别名。

完成上述步骤后,LabVIEW自动打开多变量编辑器窗口,用于编辑新创建的变量。例如,编辑各个I/O别名的别名路径,将别名绑定至特定的I/O变量。

强制I/O变量值

用户可通过交互方式或编程方式强制I/O变量的值。强制I/O变量的值使相关的I/O数据保持指定的值,直到取消强制、重启终端,或将变量强制为另一个值。取消强制I/O变量即将I/O值的控制返还给NI扫描引擎。

注: 强制I/O变量后,每次访问I/O变量消耗的时间比未强制变量前稍长。如循环周期的长度不足以容纳强制造成的时滞,循环可能会延迟运行。

交互式强制I/O变量值

使用NI分布式系统管理器可在调试过程中强制或取消强制I/O变量的值,或手动控制I/O通道。在LabVIEW中,选择工具»分布式系统管理器,打开NI分布式系统管理器。在项目浏览器窗口右键单击RT终端,选择Utilities»View in System Manager,打开分布式系统管理器。

注: 可使用NI分布式系统管理器的安全设置,防止用户从NI分布式系统管理器中强制I/O变量的值。

通过编程强制I/O变量值

使用强制VI,通过编程强制或取消强制I/O变量。

强制I/O别名

可强制别名以及标准I/O变量。强制I/O变量时,也同时强制所有相关的别名。强制别名时,也同时强制其所属的I/O变量以及所有其他相关的别名。

注: LabVIEW将强制值作为I/O通道的实际值,在强制值上使用缩放。在一组变量中强制一个链接时,所有链接均会相应地缩放。

同时强制和取消强制终端上所有I/O变量

可使用终端的全局强制状态,同时强制或取消强制终端上所有I/O变量。通过交互方式或编程方式启用和禁用终端上的全局强制功能。

使用NI分布式系统管理器的启用强制禁用强制按钮,交互地启用和禁用终端上的全局强制。使用启用变量强制VI和禁用变量强制VI,通过编程启用和禁用终端上的全局强制。

按照下列步骤,同时强制终端上的所有I/O变量:

  1. 在终端上禁用强制,这样就可单独设置I/O变量的强制值,而不是分别强制各个I/O变量。
  2. 在终端上设置所有I/O变量的强制值。
  3. 在终端上启用强制,同时强制终端上所有I/O变量。

远程访问I/O变量

如某I/O变量启用了网络发布,可从I/O变量终端所在网络的远程计算机访问I/O变量。通过NI分布式系统管理器中的I/O变量探针视图,可交互地访问远程I/O变量。也可通过编程VI访问远程I/O变量。

使用共享变量属性对话框启用和禁用I/O变量的网络发布。如需在主机上监测I/O变量的值或从远程计算机访问I/O变量的值,则启用网络发布。使用扫描引擎,设置终端上所有I/O变量的全局网络发布速率。

注: 如不需远程访问I/O变量,禁用网络发布可降低CPU开销。在I/O变量或I/O别名上禁用网络发布后,不能从其他运行VI计算机上访问变量。但是,仍可从NI分布式系统管理器强制变量。使用系统管理器的安全设置,防止用户强制I/O变量。

本地访问I/O变量

LabVIEW将I/O变量添加至全局扫描引擎内存映射,同步更新所有I/O变量的值。但是,如从I/O变量所在的本地终端访问I/O变量,可配置各个节点的访问方式为扫描访问(scanned access)或直接访问(direct access)。

按照下列步骤,选择I/O变量节点的本地访问模式:

  1. 右键单击程序框图上的I/O变量节点。
  2. 从快捷菜单中选择Local Access Mode
  3. 选择节点的访问模式。
注: 无论变量选择了何种访问模式,LabVIEW将把所有I/O变量添加至全局扫描引擎内存映射。

选择一个本地访问模式

一般来说,扫描访问适用于更新速率相似的I/O通道组,而直接访问适用于与扫描周期异步更新的单个I/O通道。下表列出了选择各种I/O访问方式的情况:

一般用途 访问方式
单点访问更新率相同的多个I/O通道 扫描
单点访问与NI扫描引擎周期异步的本地I/O通道,例如用于紧急停止输出的单次写入(不支持用户定义的I/O变量) 直接
注: 对于更新率比NI扫描引擎周期低的I/O通道,可使用直接访问。但是,在该情形下,扫描访问通常也能执行相同的I/O任务,而且执行效率比直接访问更高。

扫描访问

默认情况下,LabVIEW将I/O变量节点配置为使用扫描访问。对于使用相同更新率的一组I/O通道和扩展I/O通道,使用直接访问。扫描访问使用扫描引擎内存映射进行不间断的I/O读取和写入操作,如下图所示:

每次通过扫描访问从I/O变量读取数据时,NI扫描引擎马上返回存储在内存映射中的最新值,没有任何等待时间。在每次扫描中,LabVIEW读取最新的I/O值,并将该值写入NI扫描引擎的内存映射。

每次使用扫描访问写入I/O变量时,都会覆盖保存在扫描引擎内存映射中的上一个值。每次扫描,LabVIEW都会将保存在内存映射中的值推入物理I/O通道。必须将所有I/O变量的写操作与扫描周期同步,以避免数据丢失。

直接访问

使用直接访问,读取或写入与扫描周期异步的单点本地I/O通道。当应用程序需要尽快写入值时,可使用直接访问。直接访问绕开了扫描引擎内存映射,直接与I/O设备通信进行无间隔的I/O读取和写入,如下图所示:

注: 用户定义I/O变量不支持直接访问。

注: 如果将NI扫描引擎与RIO扫描接口结合使用,则硬件扫描信号控制对I/O的更新。如果在硬件扫描信号的空闲状态下通过直接访问写入值,则该值在硬件扫描信号的空闲状态结束后传递至硬件。
注: 直接访问的速度因控制器、I/O模块和通信协议而异。关于I/O访问速度的详细信息,见具体硬件的说明文档。

解析I/O变量节点图标

程序框图上的每个I/O变量节点的图标不尽相同。I/O变量的访问方式有下列几种:

访问方式 节点外观
NI-PSP

扫描

直接

数据通信方法主页