高效使用共享变量
- 更新时间2025-05-20
- 阅读时长4分钟
本章节介绍在LabVIEW Real-Time应用程序有效使用共享变量的规范。
适量使用共享变量
不要使用太多网络发布的共享变量,以尽量减少CPU占用。对于大通道数的应用程序,可将通道组合为一个数组,使用一个数组型网络发布共享变量传输数组的值。
通过启用了RT FIFO的共享变量进行确定性通信
LabVIEW提供多种在不同循环中运行的任务之间传输数据的选项。但是,大多数数据传输的方法都会影响到确定性。因此,LabVIEW Real-Time模块提供启用了RT FIFO的共享变量,用于在确定性循环和非确定性循环之间进行通信。
关于启用了RT FIFO的共享变量的使用范例,见labview\examples\Real-Time Module\RT Communication\RT FIFO Variables目录下的RT FIFO Variables - local.lvproj。
避免不必要的缓冲
缓冲会消耗CPU和内存资源。需要读取写入网络发布共享变量的每一个值时,可在“共享变量属性”对话框的“网络”页上,勾选使用缓冲复选框。缓冲可避免网络暂时拥堵造成的数据丢失,但是不能确保数据传输的过程中没有损耗。缓存区被填满时,LabVIEW会覆盖旧数据并生成警告。
在高通道数应用中使用程序访问
使用共享变量选板上的程序访问函数,在高通道数应用程序中创建整洁、可扩展的程序框图。
顺序执行共享变量
按数许执行共享变量,可提高程序运行速度,避免出现竞态。使用共享变量节点的错误输入和错误输出接线端,或共享变量程序访问函数来实现顺序化执行。顺序化执行后,可最小化调度的开销并提高速度。
例如,下列程序框图并行读取三个共享变量:
以下程序框图使用共享变量节点的错误输入和错误输出接线端来实现顺序化执行:
避免读取失效的共享变量数据
使用共享变量节点的毫秒超时输入端或读取变量(超时方式)函数,避免反复读取循环中的同一个值。如需为共享变量节点添加毫秒超时输入,可右键单击共享变量节点,从快捷菜单选择显示超时。仅可对读取数据的共享变量启用超时。无法对访问本地I/O变量的节点节点超时周期。
为了避免读取应用程序上次运行时的过期数据,应先取消部署,然后重新部署,清除共享变量的值。使用应用程序属性对话框的共享变量部署页,配置独立的实时应用程序在运行之前先部署共享变量,并且在应用程序退出之前,先取消部署变量。
初始化共享变量
运行应用程序的任务循环之前,初始化所有共享变量,有助于保证应用程序不受过期共享变量数据的影响。要初始化其他计算机上不带缓冲的网络发布共享变量,先写入默认值至共享变量,然后等待主机上的共享变量引擎通过网络将初始化值传递给RT终端。下列程序框图显示了不带缓冲的网络发布共享变量的初始化范例:
选择合适的设备作为共享变量的主机
在多数情况下,RT终端可作为共享变量的主机。有些情况下,台式机更为合适。完成应用程序之前,确保共享变量位于最合适的设备上。下表总结了RT终端作为共享变量主机的优势和劣势:
| 优点 | 缺点 |
|---|---|
| 多台计算机可访问一台RT终端上的共享变量 | 增加RT终端的CPU开销 |
| RT终端具有较高的稳定性,可保证较长的正常运行时间 | 增加RT终端的内存开销 |