5.6.1 共享变量
共享变量是一种已配置的软件项,能在VI之间传递数据。当不同的VI或同一个应用程序的不同位置之间无法用连线连接时,可以利用共享变量来共享数据。共享变量既可以代表一个值,也可以代表一个I/O点。改变一个共享变量的属性时,不必修改使用该共享变量的VI的程序框图。
创建共享变量之前,首先创建一个项目。在VI中选择项目菜单中的“新建项目”。将建立一个新的项目,并出现项目管理器窗口。在项目管理器窗口中的菜单栏中选择“文件”→“新建”,弹出“新建”窗口。在该窗口中选择“新建”栏,其他文件中的共享变量,单击“确定”按钮。弹出“共享变量属性”对话框。在该对话框中可以对新建立的共性变量的属性进行配置,如图5-90所示。对共享变量配置完成后,单击“确定”按钮完成共享变量的创建。

图5-90 创建共享变量
使用共享变量进行数据共享时,仅需要在程序框图中编写少量程序,甚至不需要编写程序。缓冲和单一写入限制等共享变量的配置选项可在共享变量属性对话框中调整。在变量类型下拉列表中可以选择当前共享变量是在本地计算机上还是通过网络共享数据。选择变量类型列表中的“网络发布”选项可创建从远程计算机或同一网络上的终端读写数据的共享变量。选择变量类型列表中的“单进程”选项可以创建从单个计算机上读写数据的共享变量。配置选项因所选的变量类型而异。
共享变量创建完成后的项目管理器窗口如图5-91所示。可以看到在名称为“未命名库1”的项目库中包含了一个名称为Varible1 的共享变量。

图5-91 项目管理器窗口
共享变量总是存储于某个项目库中。LabVIEW将共享变量的配置数据存储在它所在项目库的.lvlib文件中。如果从项目库以外的终端或文件夹创建共享变量,LabVIEW会创建相应的新项目库并在项目库中包括该共享变量。
在项目中打开含有共享变量节点的VI,如该共享变量节点没有在项目浏览器中找到相关的共享变量,则该共享变量节点就会断开。所有与该共享变量相关的前面板控件的连线也会断开。
终端上的每个共享变量都有一个位置,NI-PSP协议根据位置信息唯一确定共享变量。右键单击共享变量所在的项目库,从快捷菜单中选择“部署”,可部署项目库。所在项目库连接的共享变量,必须来源于前面板对象、程序框图的共享变量节点,或其他共享变量。右键单击项目库,选择“部署全部”,将共享变量的所有项目库部署到该终端。
有两种方法使用共享变量。
第一种方法是在程序框图中使用共享变量。共享变量节点是一个程序框图对象,用于指定项目浏览器窗口中相应的共享变量。共享变量节点可用于读写共享变量的值,并读取用于该共享变量数据的时间标记。将项目浏览器窗口中的共享变量拖放至相同项目中VI的程序框图中,可创建一个共享变量节点,如图5-92所示。

图5-92 VI中引入共享变量
在程序框图的数据通信选板上,也可找到共享变量节点。该节点位于函数选板上的数据通信子选板中。要将程序框图中的共享变量节点和处于活动状态的项目中的共享变量进行绑定,可双击该共享变量节点启动选择变量对话框。也可右键单击该共享变量节点并从快捷菜单中选择“选择变量”。在选择变量对话框的共享变量列表中选中一个共享变量,然后单击“确定”按钮。(https://www.daowen.com)
在默认情况下,共享变量节点被设置为读取。要将程序框图中的共享变量节点的设置转换为写入,只需要右键单击这个共享变量节点,从快捷菜单中选择“访问模式”→“写入”。图5-93中的共享变量被设置为写入。
利用时间标识显示控件可以确定一个共享变量是否已失效,或最近一次读取之后是否被更新。要记录一个单个写入共享变量的时间标识,必须先在共享变量属性对话框的变量页勾选启用时间标识复选框。如果需要给一个共享变量节点添加一个时间标识显示控件,只需要右键单击程序框图上的共享变量节点,从快捷菜单上选中显示时间标识选项即可。如果应用程序需要读写不止一个最近更改的值,可对缓冲进行配置。

图5-93 共享变量的使用
如果需要改变一个共享变量的配置,只需要在项目浏览器中右键单击这个共享变量,从快捷菜单上选择属性选项,并显示变量属性对话框中的变量页。
第二种使用共享变量的方法是在前面板上使用共享变量的值,即通过前面板数据绑定来读取或写入前面板对象中的实时数据。
将项目浏览器窗口中的共享变量拖放至VI的前面板,可创建该共享变量的控件绑定。如果需要将控件绑定到共享变量,或绑定到NI 发布—订阅协议(NI-PSP)的数据项,可以通过该控件属性菜单中数据绑定页面上的选项进行设置。将控件绑定到共享变量的属性设置方法如图5-94所示。
启用控件的数据绑定时,通过修改控件的值可以改变与该控件绑定的共享变量的值。将数值输入控件绑定到共享变量后变为图5-95所示的图标。

图5-94 将控件绑定到共享变量的属性设置

图5-95 数值输入控件绑定共享变量
在默认情况下,多个应用程序可对同一个共享变量进行写操作。但也可以将一个网络发布的共享变量设定为每次仅接受来自一个应用程序的更改,只需要在共享变量属性对话框的变量页上,勾选单个写入复选框即可。这样就确保了共享变量每次仅允许一个写操作。在同一台计算机上,共享变量引擎仅允许对单个源进行写操作。连接到共享变量的第一个写入方可进行写操作,之后连接的写入方则无法进行写操作。当第一个写入方断开连接时,队列中的下一个写入方将获得共享变量的写权限。LabVIEW会向那些无法对共享变量进行写操作的写入方发出相应提示。
当一个共享变量的配置被改变后,既可以右键单击它所在的项目库,从快捷菜单选择“部署”选项来更新当前终端上这个共享变量的属性。也可以使用变量引用和变量属性,通过编程配置共享变量。