使用I/O变量(Real-Time, Windows)
- 更新时间2025-08-27
- 阅读时长14分钟
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数据。
下表归纳了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变量 |
用于换算后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变量的VI运行时更新I/O变量的说明、网络发布和缩放信息。但是,不能在运行时更新I/O变量的名称和数据类型。
通过编程配置I/O变量
按照下列步骤,使用变量属性通过编程配置I/O变量:
- 在程序框图上放置一个变量属性节点。
- 右键单击引用输入端,从快捷菜单中选择创建»常量。
- 单击共享变量引用句柄常量右边的箭头按钮,选择浏览。
- 使用浏览变量对象对话框,选择要配置的I/O变量。
- 右键单击共享变量引用句柄常量,从选择变量类快捷菜单中选择要使用的属性类。
- 单击变量属性节点的白色部分,选择要使用的属性。
- (可选)使用定位工具调整变量属性节点的大小,使其同时显示一个以上属性。
下图显示了在远程终端上通过编程配置I/O变量的范例:
在该例中,变量属性节点通过配置与通道相关的I/O变量,指定CompactRIO模块通道的限制。
- 在文本编辑器中打开labview\LabVIEW.ini。
- 新起一行,输入RemoteIOVConfigurationTimeout=,后跟超时周期的秒数。例如,如要延长超时周期至10秒,输入RemoteIOVConfigurationTimeout=10。
- 保存并关闭文件。
部署I/O变量
在项目浏览器窗口中,右键单击包含I/O变量的项目项,然后从快捷菜单中选择部署。
运行包含I/O变量节点的VI时,LabVIEW自动将变量部署至其所属的I/O变量容器。该操作将部署容器中的所有变量。
缩放I/O变量值
在共享变量属性对话框的缩放页上,可启用I/O变量的线性缩放或别名。但是,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别名的个数,然后单击确定按钮创建新的I/O别名。
完成上述步骤后,LabVIEW自动打开多变量编辑器窗口,用于编辑新创建的变量。例如,编辑各个I/O别名的别名路径,将别名绑定至特定的I/O变量。
强制I/O变量值
用户可通过交互方式或编程方式强制I/O变量的值。强制I/O变量的值使相关的I/O数据保持指定的值,直到取消强制、重启终端,或将变量强制为另一个值。取消强制I/O变量即将I/O值的控制返还给NI扫描引擎。
交互式强制I/O变量值
使用NI分布式系统管理器可在调试过程中强制或取消强制I/O变量的值,或手动控制I/O通道。在LabVIEW中,选择工具»分布式系统管理器,打开NI分布式系统管理器。在项目浏览器窗口右键单击RT终端,选择Utilities»View in System Manager,打开分布式系统管理器。
通过编程强制I/O变量值
使用强制VI,通过编程强制或取消强制I/O变量。
强制I/O别名
可强制别名以及标准I/O变量。强制I/O变量时,也同时强制所有相关的别名。强制别名时,也同时强制其所属的I/O变量以及所有其他相关的别名。
同时强制和取消强制终端上所有I/O变量
可使用终端的全局强制状态,同时强制或取消强制终端上所有I/O变量。通过交互方式或编程方式启用和禁用终端上的全局强制功能。
使用NI分布式系统管理器的启用强制和禁用强制按钮,交互地启用和禁用终端上的全局强制。使用启用变量强制VI和禁用变量强制VI,通过编程启用和禁用终端上的全局强制。
按照下列步骤,同时强制终端上的所有I/O变量:
- 在终端上禁用强制,这样就可单独设置I/O变量的强制值,而不是分别强制各个I/O变量。
- 在终端上设置所有I/O变量的强制值。
- 在终端上启用强制,同时强制终端上所有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变量
LabVIEW将I/O变量添加至全局扫描引擎内存映射,同步更新所有I/O变量的值。但是,如从I/O变量所在的本地终端访问I/O变量,可配置各个节点的访问方式为扫描访问(scanned access)或直接访问(direct access)。
按照下列步骤,选择I/O变量节点的本地访问模式:
- 右键单击程序框图上的I/O变量节点。
- 从快捷菜单中选择Local Access Mode。
- 选择节点的访问模式。
选择一个本地访问模式
一般来说,扫描访问适用于更新速率相似的I/O通道组,而直接访问适用于与扫描周期异步更新的单个I/O通道。下表列出了选择各种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变量节点图标
程序框图上的每个I/O变量节点的图标不尽相同。I/O变量的访问方式有下列几种:
| 访问方式 | 节点外观 |
|---|---|
| NI-PSP |
|
| 扫描 |
|
| 直接 |
|