1、想要了解更多关于变量和库的信息,请参见共享变量有效期部分。图1给出了一个单进程共享变量的共享变量属性对话框。LabVIEW实时模块和LabVIEW数据记录和监控(DSC)模块为共享变量提供了额外功能和可配置特性。尽管在这个例子中LabVIEW实时模块和LabVIEW的DSC模块都已经安装,但是只有在网络发布共享变量中您才可以使用LabVIEW的DSC模块所增加的特性。图1单进程共享变量属性数据类型 您可以从大量的标准数据类型中为一个新的共享变量选择数据类型。除了这些标准数据类型外,您还可以从数据类型下拉列表中选择“来自自定义控件”来选择一个自定义控件作为自定义的数据类型。然而,当使用自定义数据
2、类型时,LabVIEW不能够使用实时FIFO或者缩放(Scaling)。另外,如果您安装了LabVIEW的DSC 模块,则不良状况的提示会很有限。当您配置完共享变量的属性并点击确定按钮后,共享变量将出现在您项目浏览窗口中所选择的库或者目标中,如图2所示。图2项目中的共享变量从共享变量所属的目标LabVIEW可以部署和托管该共享变量。想要了解更多有关部署和托管共享变量的内容,请参见部署和托管部分。变量参考 当您添加共享变量到一个LabVIEW项目后,您可以将其拖至VI的程序框图中来进行读或写操作,如图3所示。程序框图中读和写节点被称为共享变量节点。图3运用共享变量节点来对共享变量进行读和写您可以
3、根据共享变量节点连接至变量的方式来指定一个节点是绝对或相对目标的。绝对共享变量节点连接到创建共享变量的目标上的共享变量。相对目标的共享变量节点连接到包含该节点的VI所运行的目标上的共享变量。如果您将含有相对目标的共享变量节点的VI移动到一个新的目标,您也必须将共享变量移动到新目标。当您想移动VI和变量到新的目标时,可采用相对目标的共享变量节点。默认的共享变量节点都是绝对的。右键单击一个节点,并选择更改为相对目标或者更改为绝对,来改变共享变量节点连接到共享变量的方式。任何时候您都可以在项目浏览窗口中右键单击共享变量来编辑共享变量的属性。 LabVIEW项目将自动传递新的设置给内存中引用的所有共享
4、变量。当您保存变量库,存在磁盘上的变量定义也将发生变化。单进程共享变量 使用单进程变量在同一个VI中不能用连线传输的不同位置间传递数据,例如同一个VI的并行循环之间,或者同一应用实例中的两个不同VI之间。单进程共享变量的底层实现与LabVIEW中全局变量相似。单进程共享变量相对于传统的全局变量的主要优点是能够将一个单进程共享变量转换成一个网络发布的共享变量,这样网络上的任何节点都可以访问。单进程共享变量和LabVIEW实时为了保证确定性,实时应用需要使用一种无阻塞,确定性的机制来实现将数据从代码的时间确定性部分(如高优先级定时环路或时间严格VI)传递到非时间确定性部分。当您安装LabVIEW实
5、时模块后,您可以配置一个使用实时FIFO的共享变量,只需从共享变量的属性对话框中使能实时FIFO即可。美国国家仪器公司推荐采用实时FIFO在时间严格和低优先级的环路之间传递数据。您可以通过使能一个单进程共享变量上的实时FIFO来尽量避免使用低层次的实时FIFO VI。LabVIEW在共享变量节点首次写入或读出一个共享变量时创建一个实时FIFO,这使得首次使用共享变量的执行时间会比随后使用时稍长。如果应用中要求极其精确的定时,可以在时间严格循环内部放置一个初始“热身”循环来解决接入时间的波动,或者在在时间严格循环外部至少对该变量进行一次读取。图4 实时FIFO使能的共享变量即使共享变量有多重写入
6、或者读取的对象,LabVIEW为每个单一进程共享变量创建的实时FIFO是单一的。因此,为确保数据的完整性,多重写入操作会彼此阻塞,多重读取操作也同样。不过,读操作和写操作并不会彼此阻塞。美国国家仪器公司建议避免对时间严格循环中的单进程共享变量进行多重写入或读取操作。图5多重写入或读取操作共享一个单一的FIFO使能实时FIFO后,您可以选择两种稍有不同类型的FIFO功能变量:单元素和多元素缓冲。这两种类型缓冲区的一个重要区别是:单元素FIFO在溢出和下溢情况下不进行报警。第二个区别是对一个空的缓冲区进行多重读取时LabVIEW返回的值。url=多重读取单元素/urlFIFO时将得到相同的值,直到
7、下次写入者写入该变量。多重读取多元素FIFO时,每个读取者均得到它们最后一次从缓冲区中得到的值,如果它们以前并没有读过该变量,则会得到变量所属数据类型的默认值。如下所示。图6多元素FIFO共享变量读取最后一次值的特性如果要求每个读取者得到写入到多元素FIFO共享变量的每个数据点,请为每个读取者使用各自单独的共享变量。网络发布的共享变量 利用网络发布的共享变量,您可以在以太网上对共享变量进行读写操作。网络应用的处理完全由网络发布的变量完成。除了使您的数据在网络中可用,网络发布共享变量中还增加了许多单进程共享变量不能提供的功能。由于需要提供各种附加功能,网络发布的共享变量的内部实现要比单进程共享变
8、量复杂得多。接下来数节将讨论本方面内容,并给出利用网络发布的共享变量来获得最佳性能的一些建议。NI-PSPNI发布-订阅协议(NI-PSP )是用于传输网络共享变量的优化网络协议。LabVIEW 8.5中的新特性!NI-PSP的下层被重写以充分提高效率。在运行现代操作系统内核的现代机器中,我们发现TCP的性能显著优于在用户模式中对它的一些功能进行复制,因此,在LabVIEW 8.5中用到了这个优点。NI-PSP下的最底层协议已经重新设计以使用TCP / IP,并且根据桌面系统和NI的RT目标的性能进行了彻底调整(见下文的标定比较)。NI-PSP层保持不变,因此,您可以不更改您的应用就能够看到性
9、能提升。重要说明:仅当通信链路的两端都已经安装了LabVIEW 8.5, LabVIEW才会使用这个新的NI-PSP实现,也就是当且仅当通信中的所有目标都安装了LabVIEW8.5时。如果其中一个目标是运行老版本LabVIEW的,那么两个终端都将使用旧的协议。部署和托管您必须将网络发布共享变量部署到一个用于在网络上托管该变量的共享变量引擎(SVE)上。当您写入到一个共享变量节点,LabVIEW将这个新值发送给部署和托管这个变量的SVE,SVE处理环路发布这个值,从而用户可以得到更新值。图7说明了这一过程。使用客户端/服务器术语来讲,SVE是共享变量的服务器,所有对其的应用(不论它们是读还是写变
10、量)都是客户端。SVE客户端是共享变量节点实现中的一部分,在本文中,客户端和用户的定义是可互换的。图7 共享变量引擎和网络共享变量值的改变网络发布变量和LabVIEW实时您可以实现使能一个网络发布共享变量的实时FIFO,但FIFO使能的网络发布共享变量与实时FIFO使能的单进程共享变量相比有一个重要的行为差异。在单进程共享变量中,所有写入和读出操作共享一个单一的实时FIFO;但网络发布的共享变量并非如此。网络发布共享变量的每一个读出操作,在单元素和多元素情况下都有各自的实时FIFO,如下所示。图8 实时FIFO使能的网络发布变量网络缓冲区对于网络发布的共享变量,您可以使用缓冲区。您可以在共享变
11、量属性对话框中配置缓冲区,如图9所示。/urlurl=+ 放大图片/url图9 在网络发布的共享变量中使能缓冲区通过缓冲区,您可以解决对于一个变量读/写速度的临时波动问题。读出操作偶尔比写入慢的情况可能会导致一些更新数据的丢失。如果应用可以容忍偶尔的数据丢失,则较慢的读取速率并不会影响应用,此时您就不需要使能缓冲区。但是,如果读取操作必须获得每个更新数据,您就需要使能缓冲区。您可以在共享变量属性对话框中的变量页设定缓冲区大小,这样您就可以确定在旧数据被覆盖之前,应用中可以保存多少更新数据。当您在上述对话框中配置一个网络缓冲区后,您实际上是配置了两个不同缓冲区的大小。服务器端的缓冲区,如图10中
12、标有共享变量引擎( SVE )的方框中的缓冲区所示,是自动创建的,并被配置为和客户端缓冲区同样大小。客户端的缓冲区即您在使能共享变量缓冲区时逻辑上认为的缓冲区。在客户端缓冲区 (如图10右边所示)是用于保持先前值队列的缓冲区。正是这种缓冲区避免了您的共享变量受到循环速度或网络流量波动的影响。在LabVIEW 8.5中,网络缓冲区经历了一个改变。底层NI-PSP协议的重新设计使的数据传输变得大致无损。同样如图10所示,标记有共享变量引擎( SVE )的方框中的缓冲区是服务器端的缓冲区。这个缓冲区当且仅当底层协议需要流量控制时使用,即只发生在下述的两种情形中:1.如果您将数据写入到一个或多个共享变
13、量的速度比客户端可响应的速度快。2.如果您将数据写入到一个或多个共享变量的速度比内核的驱动程序可从物理层获取数据的速度快(大多数情况下是以太网)。注意,以上两种情况都是网络层在共享变量通信栈下(并不受其控制)的限制。与所有读写操作共享同一实时FIFO的FIFO使能单进程变量不同,网络发布的共享变量每一个读用户都有自己独立的缓冲区,所以读用户不受彼此影响。图10缓冲区仅当读/写速率有短暂的波动时,缓冲区才发挥其作用。如果程序运行的时间不确定,而读取速率总是低于写入速率,则不管你指定多大的缓冲区最终都会出现数据丢失。由于缓冲技术为每一位用户都分配了一个缓冲区,因此,为避免不必要的内存使用,仅当需要
14、时再使用缓冲区技术。网络和实时缓冲如果您同时采用网络缓冲和实时FIFO,则共享变量的执行中将同时包含一个网络缓冲区和一个实时FIFO。前面讲过,如果实时FIFO使能时,将为每一个读和写用户创建新的实时FIFO,从而多重写入和读出将不会彼此阻塞。图11 网络缓冲和实时FIFO虽然您可以独立设置这两缓冲区的大小,在大多数情况下,美国国家仪器公司建议您让它们保持同样大小。如果您使用实时FIFO,LabVIEW将为每一个读和写用户创建新的实时FIFO,从而多重写入和读出将不会彼此阻塞。缓冲区有效期LabVIEW在初始写或读操作时创建网络和实时FIFO缓冲区,具体由缓冲区的位置决定。服务器端的缓冲区在写
15、入者初始写入一个共享变量时创建。客户端的缓冲区在一个用户初始读取一个共享变量时创建。如果对共享变量的写操作发生在用户的读操作之前,则该用户将不能得到这些初始数据。图12缓冲区有效期缓冲区溢出/下溢在LabVIEW 8.20以上,网络发布的共享变量将报告网络缓冲区的溢出和下溢情况。而任何版本的实时FIFO都会返回错误来指示溢出/下溢情况。在LabVIEW 8.0或8.0.1,可以用以下两种方式检查网络缓冲下溢。由于共享变量时间标识的分辨率为1毫秒,当您以低于1kHz的速率更新共享变量时,您可以将变量的时间标识与其后读操作的时间标识进行比较来检测缓冲区下溢。或者,对于非实时应用,读取者可以将一个序
16、列号与数据绑定来通知缓冲区溢出/下溢。您不能在时间严格循环中针对共享变量使用第二种方式,因为实时FIFO使能的共享变量不支持自定义控件(簇)的数据类型。共享变量有效期如前所述,所有共享变量都是项目库的一部分。SVE负责注册项目库和库中包含的共享变量(当LabVIEW需要调用这些变量时)。默认情况下,只要您运行引用任意共享变量的VI时,SVE即会部署并发布共享变量库。因为SVE将部署包含该共享变量的整个库,因此无论所运行的VI是否引用库中的全部共享变量,SVE都将发布库中所有的共享变量。您也可以在任何时候手动来部署任意的项目库,只需要右键点击项目浏览窗口的库即可。停止托管该变量的VI或重启机器并
17、不影响共享变量在网上的可用性。如果您需要删除网络上共享变量,您必须明确地在该项目浏览窗口中对该变量解除部署。您也可以选择工具共享变量变量管理器来对共享变量或整个变量项目库来解除部署。前面板数据绑定另一个适用且仅适用于网络发布共享变量的特性是前面板数据绑定。从项目浏览窗口拖拽一个共享变量到VI的面板来创建一个共享变量的控件绑定。当您为某个控件使能了数据绑定后,改变控件的值就改变了与其绑定的共享变量的值。在VI运行时,如果成功连接到SVE,则在VI的前面板对象旁边会出现一个绿色指示,如图13所示 。图13 绑定一个前面板控件到一个共享变量通过在属性对话框中的数据绑定页面来获取和改变任意输入和显示控
18、件的绑定。当使用LabVIEW实时模块或LabVIEW的DSC模块时,您可以选择工具前面板批量绑定配置,来得到前面板批量绑定配置对话框,来创建一个绑定多个输入和显示控件到共享变量的用户界面。美国国家仪器公司不建议运行在LabVIEW实时的应用中使用前面板的数据绑定,因为前面板可能是不存在的。编程访问如上所述,您可以使用LabVIEW项目交互式的创建,配置和部署共享变量,您还可以使用程序框图上的共享变量节点或前面板的数据绑定来读取和写入共享变量。 LabVIEW中还提供了对于以上功能编程访问的方法。在需要创建大量共享变量的应用中,您需要使用VI服务器来编程建立项目库和共享变量。此外, LabVI
19、EW DSC模块提供了一套全面的VI用来编程创建和编辑共享变量和项目库以及管理SVE。您只能在Windows系统中编程创建共享变量库,然而,您可以编程部署这些新的库应用于Windows或LabVIEW实时系统中。当您需要动态改变VI读写的共享变量时,可使用Datasocket API。您可以编程改变Datasocket链路的URL以实现动态改变共享变量。您还能够编程控制共享变量的其他功能,比如缓冲区大小等。此外,Datasocket API具有阻塞读取功能,即仅当共享变量更新时才进行读操作。图14 用Datasocket API实现编程读写共享变量此外,通过NI LabWindows/CVI
20、8.1 和NI Measurement Studio 8.1引入的网络变量库,您可以在ANSI C, Visual Basic .NET 或者VIsual C#环境下读写共享变量。共享变量引擎SVE是一个使网络发布的共享变量能够过网络传送数据的软件框架。在Windows下,LabVIEW配置SVE为一个服务,并在系统启动时引导SVE启动。对实时目标,SVE是一个随系统开机加载的可安装启动组件。为了使用网络发布的共享变量,SVE至少需要在分布系统中的一个节点上运行。网络上的任何节点都可以读写SVE发布的共享变量。如表1所示,只有安装SVE,节点才可以引用到一个变量。如果您需要根据应用需要在不同地
21、点部署共享变量,您也可以在多个系统中同时安装多个SVE。共享变量托管位置推荐在一个分布式系统中,您必须考虑一系列因素来决定由哪计算设备部署和托管网络发布共享变量。计算设备是否兼容SVE ?下表汇总了SVE可适用的平台,并给出了可通过参考节点或Datasocket API使用网络发布的共享变量的平台。美国国家仪器需要不同平台至少能提供32兆并推荐64 兆内存供SVE使用。LabVIEW 8.5新特性Datasocket API现在支持Linux和Macintosh下的NI-PSP。以前,对这些平台我们推荐了一系列复杂的步骤来使用共享变量参考节点。我们现在不再推荐这样做。相反,应该更直接的在这些平
22、台上使用Datasocket技术简化客户端的应用。请注意,在Linux和Macintosh中仍然不支持共享变量的托管。Windows PCsMac OSLinuxPXIReal-TimeCompact FieldPointCompactRIOCompact Vision SystemCommercial PCs withLabVIEW Real-Time ETSRTXSVEXReference NodesDataSocket API w/ PSP表1 网络发布的共享变量兼容性概况应用需要数据记录和监控功能吗?如果您想使用LabVIEW DSC模块的功能,您必须在Windows上托管共享变量。L
23、abVIEW DSC模块对网络发布的共享变量新增如下功能:NI总数据库的历史记录。联网报警和报警记录。缩放。基于用户的安全。初始值。创建自定义I/O服务器。共享变量中集合LabVIEW的事件结构功能。编程控制共享变量各个方面和共享变量引擎的LabVIEW VI。这些VI特别有利于管理大量共享变量。计算设备有足够的处理器和内存资源吗?SVE是一项需要处理和内存资源的额外进程。为了在分布式系统中得到最佳的表现,请选择具有最大内存和最高处理能力的机器安装SVE。哪个系统经常在线?如果您的分布式应用中,一些系统可能定期离线,则请将SVE托管在一台一直在线的系统上。共享变量引擎的其他功能图15列出了SV
24、E的很多功能。除了管理网络发布的共享变量外,SVE还负责:收集来自I/O服务器的数据。通过OPC和PSP的服务器为用户提供数据。为任何配置了缩放,警告和记录服务的共享变量提供这些服务。这些服务仅在LabVIEW DSC模块存在下可用。监测报警条件并进行相应响应。I/O服务器I/O服务器是SVE的插件,程序中可以用其使用SVE来发布数据。NI FieldPoint 5.0中包括一个I/O服务器,该服务器直接从FieldPoint存储地发布数据到SVE。因为SVE是OPC服务器,因此SVE和FieldPoint I/O服务器结合构成了FP OPC服务器。注意FieldPoint安装中不包括SVE,
25、SVE需要从其他软件组件中安装,如LabVIEW。NI - DAQmx 8.0中也包括一个I/O服务器,它可以自动将NI-DAQmx全局虚拟通道发布到SVE。这个I/O服务器取代了传统数据采集的OPC服务器和RDA。NIDAQmx中包含SVE并且可以在LabVIEW未安条件下进行安装。使用LabVIEWDSC模块,用户可以自行建立新的I/O服务器。图15 共享变量引擎(SVE )OPCSVE是3.0兼容的,并可以作为Windows机器上的OPC服务器。任何OPC客户端可对托管于Windows机器上的共享变量进行读写操作。当您在Windows机器上安装LabVIEW DSC模块后,SVE也可以作
26、为OPC客户端。您可以将Windows托管的共享变量绑定到DSC的OPC数据项上,并对这些变量进行读和写操作。因为OPC是基于COM(一个Windows API)的技术,实时目标并不与OPC直接通信。如图16所示,但您仍然可以通过将共享变量在Windows上托管实现从实时目标访问OPC数据项。图16 绑定OPC数据项性能 本节为使用共享变量创建高性能应用提供了一般准则。Windows API由于单进程共享变量的实现类似LabVIEW全局变量和实时FIFO,美国国家仪器公司没有对单进程共享变量如何取得较好性能给出特殊建议。以下各节均针对网络发布的共享变量。共享处理器通过隐藏许多网络编程的实施细节
27、,网络发布的共享变量简化了LabVIEW的程序框图。一般来讲应用中会包括LabVIEW VI,SVE以及SVE客户端代码。为了获得共享变量的最佳性能,开发应用时需要注意使其定期释放处理器以让SVE线程运行。实现其的方法之一是在处理循环中放置等待,并确保应用中不使用未定义次数的循环。实际需要等待的精确时间依赖于具体应用,处理器和网络;每种应用都需要一定程度的实验微调来达到最佳的性能。SVE位置的考虑在共享变量托管位置推荐一节中讨论了在选择安装SVE的位置时需要考虑的一系列因素。图17中给出了另一个可大大影响共享变量性能的因素。在这个例子中包含了实时目标,但它的基本原则也适用于非实时系统。图17给出了一个低效运用网络发布共享变量的例子:您在实时目标中产生数据,并需要将处理完的数据记录到本地,并通过远程机器进行监控。因为变量的用户必须从SVE接收数据,在高优先级循环中的写操作和正常优先级循环中的读操作之间将存在很大的延时,而且这一操作包含了整个网络中的两个来回。图17实时系统中低效使用网络发布变量图18给出了一个较好的应用框架。应用中采用一个单进程共享变量在高优先级循环和低优先级循环中传递数据,极大地减少了等待时间。低优先级回路记录数据,并通过网络发布共享变量为主机端的用户写入数据更新。图18 在实时系统中有效使用网络发布变量标定 本节比较了共享变量和LabV
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1