共享变量简介
LabVIEW为创建分布式应用使用共享变量可以简化此类应用的编程。
借助共享变量,您可以在同一个程序框图的不同循环之间或者网络上的不同VI之间共享数据。与LabVIEW中的许多其他数据共享方法(如UDP/TCP、LabVIEW队列及实时FIFO)不同,共享变量通常可在编辑时使用属性对话框进行配置,而无需在应用中添加配置代码。
创建共享变量
在我的电脑或其他终端设备上新建变量。
共享变量配置窗口
共享变量新建完成后会自动生成一个lib文件将该变量包含,用户可以继续在当前库内继续新建共享变量。S_pos为单进程共享变量,其余为网络共享变量。
共享变量可以在工具➡分布式系统管理器中进行查看。PS:如果未能找到所创建的变量则需将所创建的Lib文件→右键→部署。然后在分布式管理系统节目刷新后进行查看。单进程共享变量不会在分布管理系统中显示。
共享变量切换读写
可以右键共享变量→访问模式,进行读写切换。
单进程共享变量
单进程共享变量可以替代同一个vi内无法直接通过连线连接的赋值操作或者不同vi之间的赋值操作。单进程共享变量与全局变量类似,最大的区别是可以通过配置将单进程共享变量替换为网络共享变量。
需要注意的是单进程共享变量与Labview全局变量类似均存在读取写入时不会出现互斥的情况(同时读取或者同时写入时会出现互斥),故需要避免出现读取与写入同时进行的情况。
网络共享变量
利用网络发布共享变量,您可以在以太网网络上读写共享变量。网络应用的处理完全通过网络发布变量完成。
网络发布共享变量必须部署到网络上托管该变量值的共享变量引擎(SVE)中。当写入一个共享变量节点时,LabVIEW会将这个新值发送给部署和托管该变量的SVE。SVE处理循环将发布该值,使得订阅者可以得到更新值。下图显示的就是这一过程。从客户端/服务器的角度来看,SVE是共享变量的服务器,所有对其的引用(不论是对变量进行写入还是读取操作)都是客户端。SVE客户端是每个共享变量节点实现中的一部分,在本文中,客户端和订阅者这两个术语是可互换的。
网络共享变量网络缓冲
缓冲功能可以解决对于变量读取/写入速度的临时波动问题。读取线程偶尔比写入线程慢的情况可能会导致一些更新数据的丢失。如果应用可以容忍偶尔的数据丢失,则较慢的读取速率并不会影响应用,此时就不需要启用缓冲功能。但是,如果读取线程必须获得每个更新数据,请启用缓冲功能。您可以在共享变量属性(Shared Variable Properties)对话框中的变量(Variable)页面设定缓冲区大小,这样就可以确定在旧数据被覆盖之前,应用可以保存多少更新数据。
由于缓冲功能会为每个订阅者分配一个缓冲区,为避免不必要的内存占用,请仅在必要时使用缓冲功能。
RT FIFO
共享变量可以选择开启实时FIFO功能,此部分不理解。。。
共享变量使用
- 使用共享变量节点进行读取和写入。
可右键单击节点并选择访问模式 > 读取或访问模式 > 读取/写入。
- 前面板绑定
如需配置前面板共享变量绑定,可右键单击输入控件或显示控件并选择属性。在属性对话框的数据绑定页,选择共享变量引擎(NI-PSP)。浏览正确的变量路径。如选择了有效变量,VI运行时,控件右上角关联的三角形PSP LED将变成绿色。
如对服务器变量名称(或自身的库名称)进行了修改,则还需手动修改该前面板绑定。
- 其他变量绑定已有变量
新建变量时,勾选启用别名后选择绑定至PSP URL并浏览到需要绑定的变量。
- 使用共享变量API的形式
使用共享变量API的形式进行通讯
变量URL的组织结构如下所示:
ni.var.psp://[服务器机器名称]/[服务器变量库]/[服务器变量名称] - 使用DataSocketAPI进行交互
打开DataSocket函数打开服务器变量的DataSocket连接。While循环中,读取DataSocket函数读取当前变量值。循环停止后,关闭DataSocket函数关闭连接。
如对服务器变量名称(或自身的库名称)进行了修改,则还需手动修改下面的URL。
变量URL的组织结构如下所示:
psp:\[服务器机器名称][服务器变量库][服务器变量名称]
参考文档
https://www.ni.com/zh-cn/support/documentation/supplemental/06/using-the-labview-shared-variable.html
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA03q000000YHvgCAG&l=zh-CN