如应用程序要访问大量共享变量,可使用共享变量函数通过编程读写这些共享变量。该编程技术与使用共享变量节点相比更为简洁和可扩展,通过一个共享变量节点即可访问多个共享变量,但是一个共享变量节点一次只能访问一个共享变量

注: 可通过编程访问下列类型的共享变量:
  • PSP变量 - 通过NI发布订阅协议(NI-PSP)在网络上发布的数据项。常见的PSP变量有:网络发布的共享变量、启用了网络发布的I/O变量、通过NI-DAQmx I/O服务器发布的DAQ通道。
  • I/O变量 - 共享变量,使用NI扫描引擎对I/O数据进行单点访问。

下图显示的程序先读取共享变量的值,然后将值放在预分配数组中,最后处理这些值。

下列事件发生在上图中。

  1. 搜索变量容器函数在My Library下查找双精度数据类型的所有共享变量,引用句柄数组输出返回这些共享变量的引用数组。
  2. 打开共享变量连接函数通过各个变量标识符URL,打开各个共享变量。如有错误发生,For循环停止。
  3. 数组大小函数通过共享变量引用数组计算搜索变量容器函数找到的共享变量的数量。
  4. 初始化数组函数创建一个共享变量数据的数组,大小与上述数组相同。在While循环之外初始化共享变量数据数组,最优化CPU的使用率。
  5. 读取变量函数读取“打开变量连接”函数打开的每一个变量。
  6. 替换数组子集函数将共享变量数据保存至初始化数组函数创建的数组。
  7. 处理数据子VI处理数组中的共享变量数据。
  8. 读取和处理操作在While循环中连续运行,直到发生错误或用户按下停止按钮。
  9. 关闭变量连接函数关闭共享变量的连接。

该应用程序的功能与使用共享变量节点的程序相同。但是,因为该程序框图使用程序共享变量访问,所以无需对程序框图进行较大的修改即可扩展至成百上千个共享变量。例如,假设My Library包含10个变量,变量1 - 变量10。可使用批量创建变量对话框,添加变量11 - 变量500至My Library。重新部署My Library,下次运行VI时,VI将读取变量1 - 变量500,而无需添加变量11 - 变量500至程序框图。

下面介绍上例的编程技巧。

查找共享变量

使用共享变量容器函数,搜索符合特定标准的共享变量和变量容器。例如,下列程序框图中显示的VI使用该函数查找某容器中满足下列条件的所有共享变量:

  • 在本地计算机的My Library中
  • 双精度数据类型
  • 变量标识URL包含字符串foo

注:用户可使用浏览变量对象对话框在编辑状态下查找网络或当前项目中的共享变量和变量容器。单击变量控件或常量(例如,上图中的容器引用句柄输入)的下拉箭头,选择浏览,打开浏览变量对象对话框。
注意:读取和写入通过编程查找到的共享变量时,可能会出现读取和写入错误数据类型。使用“搜索变量容器”函数的数据类型输入端,避免读取或写入错误数据类型的共享变量。

也可使用下列变量容器的属性方法,通过编程查找共享变量。

下图显示的VI使用所有变量属性,查找本地网络上所有PSP变量。

下列事件发生在上图中。

  1. 本地变量对象引用常量将引用传递至远程引擎属性的本地PSP变量引擎。
  2. 远程引擎属性返回网络上计算机上PSP变量引擎的数组。VI通过For循环轮选各个PSP变量引擎。
  3. 属性是各个远程计算机上根PSP变量容器的引用。
  4. 所有变量属性返回一个数组,是每个远程计算机上所有变量的引用。
  5. VI将网络上找到的所有变量添加至所有PSP变量数组。
提示:可使用变量属性节点作为上图中生成程序框图的起点。变量属性节点已预配置为变量对象类上的属性节点。

打开和关闭共享变量连接

使用打开变量连接函数,通过编程打开至变量的连接,如下图所示。

应用程序访问共享变量完毕之后,可在For循环中使用关闭变量连接函数,关闭所有变量引用。该函数释放分配给各个变量连接的内存资源。

读取和写入共享变量

使用读取变量函数可通过编程读取变量值。对于共享变量节点,必须在编辑时绑定至某共享变量,才能读取共享变量的值。读取变量函数有一个共享变量引用句柄输入输入端,可用于在运行时指定读取哪个变量。例如,在For循环中使用读取变量函数,读取引用句柄数组指定的多个共享变量。如下列程序框图所示。

使用写入变量函数可通过编程写入变量值。例如,在For循环中使用写入变量函数,将值写入引用句柄数组指定的多个共享变量。

提示:以数组方式读取和写入I/O变量容器,可优化程序性能和精简程序框图。
注:如写入共享变量的数据少于8 KB,LabVIEW可于10毫秒内通过网络发送这些数据。要减少延迟,可使用刷新共享变量数据VI即时发送共享变量数据

数据通信方法主页