1、1/17 使用LabVIEW 共享变量1. 2. 3. 4. 5. 6. 7. 8. 概览LabVIEW为创 建分布式应用提供了 多种多样的技术接 口。 LabVIEW 8 中引入的共享变量为 简化编程应用向前迈 出了重大一步。本文 将介绍共享变量,并 讨论 LabVIEW 8.20和 LabVIEW8.5中它的特征和 性能。目录创建共享变量数据类型变量参考单进程共享变量网络发布的共享变量共享变量引擎性能标定创建共享变量使用共享变量,您可 以在同一个程序框图 的不同循环之间或者 网络上的不同 之间共享数据。与 中其他现有的数据共 享的方法如 队列 及 VI LabVIEW UDP/TCP, L
2、abVIEW , 实时 FIFO不同,您通常在编辑 时使用属性对话框来 配置共享变量,而不 需要在您的应用中包 括配置代码。 您可以创建三种类 型的共享变量:单进 程,网络发布,以及 时间触发的共享变 量。本文详细讨论了 单进程和网络发布共 享变量。请参考文 档: “使用时间触发网络和 LabVIEW 8来了解更多有关时间 触发共享变量的内 容。创建一个共享变 量时,需要右键点击 一个计算机设备,如 项目树中的 我的电脑 或实时目标,并选择”的实时模块完成以太 网上的确定性通信 “ “ 新建 变量来显示共享变量属性 对话框。在对话框中 可对新的变量进行具 体配置。 您必须在一个打开 的项目中创
3、建共享变 量。在项目中添加共 享变量时,需要在 右键单击一个目标, 一个项目库,或者项 目库内的一个文件 夹,在快捷菜单中选 择项目浏览窗口中 新建 变量来打开共享变量属性 对话框。配置各个选 项,之后单击确定按 钮。 如果您右键点击一 个不在项目库中的目 标或文件夹,并选择 从快捷菜单中创建一 个共享变量, 会自动创建一个新的 项目库并将共享变量 包含在其中。想要了新建 变量 LabVIEW解更多关于变量和库 的信息,请参见 部分。 共享变量有效期图 给出了一个单进程共 享变量的 对话框。 实时模块和 数据记录和监控( )模块为共享变量提 供了额外功能和可配 置特性。尽管在这个 例子中1 共
4、享变量属性 LabVIEW LabVIEW DSC LabVIEW实时模块和 的 模块都已经安装,但 是只有在网络发布共 享变量中您才可以使 用 的 模块所增加的特性。LabVIEW DSC LabVIEW DSC图 单进程共享变量属性1数据类型您可以从大量的标准 数据类型中为一个新 的共享变量选择数据 类型。除了这些标准 数据类型外,您还可 以从 下拉列表中选择“ ”来选择一个自定义 控件作为自定义的数数据类型 来自自定义控件据类型。然而,当使 用自定义数据类型 时, 不能够使用实时 或者缩放( )。另外,如果您安 装了 的 模块,则不良状况 的提示会很有限。LabVIEW FIFO Sca
5、ling LabVIEW DSC当您配置完共享变 量的属性并点击 按钮后,共享变量将 出现在您 中所选择的库或者目 标中,如图 所示。确定 项目浏览窗口 2: 文件类型 技术指南: 是 是否NI支持: 三月 23, 2011 发布日期2/17 图 项目中的共享变量2从共享变量所属的目 标 可以部署和托管该共 享变量。想要了解更 多有关部署和托管共 享变量的内容,请参 见部署和托管部分。LabVIEW变量参考当您添加共享变量到 一个 项目后,您可以将其 拖至 的程序框图中来进行 读或写操作,如图 所示。程序框图中读 和写节点被称为共享 变量节点。LabVIEW VI 3图 运用共享变量节点来 对
6、共享变量进行读和 写3您可以根据共享变量 节点连接至变量的方 式来指定一个节点是 绝对或相对目标的。 绝对共享变量节点连 接到创建共享变量的 目标上的共享变量。 相对目标的共享变量 节点连接到包含该节 点的 VI所运行的目标上的共 享变量。如果您将含有相对 目标的共享变量节点 的 移动到一个新的目 标,您也必须将共享 变量移动到新目标。 当您想移动 和变量到新的目标 时,可采用相对目标 的共享变量节点。VI VI默认的共享变量节点 都是绝对的。右键单 击一个节点,并选择 或者 ,来改变共享变量节 点连接到共享变量的 方式。 更改为相对目标 更改为绝对任何时候您都可以 在 中右键单击共享变量 来
7、编辑共享变量的属 性。 项目将自动传递新的 设置给内存中引用的 所有共享变量。当您 保存变量库,存在磁 盘上的变量定义也将项目浏览窗口 LabVIEW发生变化。单进程共享变量使用单进程变量在同 一个 中不能用连线传输的 不同位置间传递数 据,例如同一个 的并行循环之间,或 者同一应用实例中的 两个不同 之间。单进程共享变 量的底层实现与VI VI VI LabVIEW中全局变量相似。单 进程共享变量相对于 传统的全局变量的主 要优点是能够将一个 单进程共享变量转换 成一个网络发布的共 享变量,这样网络上 的任何节点都可以访 问。单进程共享变量和 实时LabVIEW为了保证确定性, 实时应用需要
8、使用一 种无阻塞,确定性的 机制来实现将数据从 代码的时间确定性部 分(如高优先级定时 环路或时间严格 )传递到非时间确定 性部分。当您安装VI LabVIEW实时模块后,您可以 配置一个使用实时 的共享变量,只需从 对话框中使能实时 即可。美国国家仪器 公司推荐采用实时 在时间严格和低优先 级的环路之间传递数FIFO 共享变量的属性 FIFO FIFO据。您可以通过使能 一个单进程共享变量 上的实时 来尽量避免使用低层 次的实时 。FIFO FIFO VI在共享变量节点首次 写入或读出一个共享 变量时创建一个实时 ,这使得首次使用共 享变量的执行时间会 比随后使用时稍长。 如果应用中要求极其
9、 精确的定时,可以在LabVIEW FIFO时间严格循环内部放 置一个初始“热身” 循环来解决接入时间 的波动,或者在在时 间严格循环外部至少 对该变量进行一次读 取。3/17 图 实时 使能的共享变量4 FIFO即使共享变量有多重 写入或者读取的对 象, 为每个单一进程共享 变量创建的实时 是单一的。因此,为 确保数据的完整性, 多重写入操作会彼此 阻塞,多重读取操作LabVIEW FIFO也同样。不过,读操 作和写操作并不会彼 此阻塞。美国国家仪 器公司建议避免对时 间严格循环中的单进 程共享变量进行多重 写入或读取操作。图 多重写入或读取操作 共享一个单一的5 FIFO使能实时 后,您可
10、以选择两种 稍有不同类型的 功能变量:单元素和 多元素缓冲。这两种 类型缓冲区的一个重 要区别是:单元素 在溢出和下溢情况下 不进行报警。第二个FIFO FIFO FIFO区别是对一个空的缓 冲区进行多重读取时 返回的值。 时将得到相同的值, 直到下次写入者写入 该变量。多重读取多 元素 时,每个读取者均得LabVIEW 多重读取单元素 FIFO FIFO到它们最后一次从缓 冲区中得到的值,如 果它们以前并没有读 过该变量,则会得到 变量所属数据类型的 默认值。如下所示。图 多元素 共享变量读取最后一 次值的特性6 FIFO如果要求每个读取者 得到写入到多元素 共享变量的每个数据 点,请为每个
11、读取者 使用各自单独的共享 变量。FIFO网络发布的共享变量利用网络发布的共享 变量,您可以在以太 网上对共享变量进行 读写操作。网络应用 的处理完全由网络发 布的变量完成。 除了使您的数据在 网络中可用,网络发 布共享变量中还增加 了许多单进程共享变 量不能提供的功能。 由于需要提供各种附 加功能,网络发布的 共享变量的内部实现 要比单进程共享变量复杂得多。接下来数 节将讨论本方面内 容,并给出利用网络 发布的共享变量来获 得最佳性能的一些建 议。 NI-PSP发布 订阅协议( )是用于传输网络 共享变量的优化网络 协议。 NI - NI-PSP中的新特性!LabVIEW 8.5的下层被重写
12、以充分 提高效率。在运行现 代操作系统内核的现 代机器中,我们发现 的性能显著优于在用 户模式中对它的一些 功能进行复制,因 此,在 中用到了这个优点。NI-PSP TCP LabVIEW 8.5下的最底层协议已经 重新设计以使用 ,并且根据桌面系统 和 的 目标的性能进行了彻 底调整(见下文的标 定比较)。 层保持不变,因此, 您可以不更改您的应NI-PSP TCP / IP NI RT NI-PSP用就能够看到性能提 升。 重要说明:仅当通信链路的两 端都已经安装了 , 才会使用这个新的 实现,也就是当且仅 当通信中的所有目标 都安装了 时。如果其中一个目 标是运行老版本LabVIEW 8
13、.5 LabVIEW NI-PSP LabVIEW8. 5的,那么两个终端都 将使用旧的协议。LabVIEW4/17 部署和托管您必须将网络发布 共享变量部署到一个 用于在网络上托管该 变量的共享变量引擎 ( )上。当您写入到一 个共享变量 , 将这个新值发送给部 署和托管这个变量的 ,SVE 节点 LabVIEW SVE SVE处理环路 这个值,从而 。图 说明了这一过程。使 用客户端 服务器术语来讲, 是共享变量的 ,所有对其的应用 (不论它们是读还是 写变量)都是 。发布 用户可以得到更新值 7 / SVE 服务器 客户端 SVE客户端是共享变量节 点实现中的一部分, 在本文中, 和 的
14、定义是可互换的。客户端 用户图 共享变量引擎和网 络共享变量值的改变7网络发布变量和 实时LabVIEW您可以实现使能一个 网络发布共享变量的 实时 ,但 使能的网络发布共享 变量与实时 使能的单进程共享变 量相比有一个重要的 行为差异。在单进程 共享变量中,所有写FIFO FIFO FIFO入和读出操作共享一 个单一的实时 ;但网络发布的共享 变量并非如此。网络 发布共享变量的每一 个读出操作,在单元 素和多元素情况下都 有各自的实时 ,如下所示。FIFO FIFO图 实时 使能的网络发布变量8 FIFO网络缓冲区对于网络发布的共 享变量,您可以使用 缓冲区。您可以在 对话框中配置缓冲 区,
15、如图 所示。共享变量属性 9图 在网络发布的共享 变量中使能缓冲区9通过缓冲区,您可以 解决对于一个变量读 写速度的临时波动问 题。读出操作偶尔比 写入慢的情况可能会 导致一些更新数据的 丢失。如果应用可以 容忍偶尔的数据丢 失,则较慢的读取速/率并不会影响应用, 此时您就不需要使能 缓冲区。但是,如果 读取操作必须获得每 个更新数据,您就需 要使能缓冲区。您可 以在 对话框中的 页设定缓冲区大小,共享变量属性 变量这样您就可以确定在 旧数据被覆盖之前, 应用中可以保存多少 更新数据。5/17 当您在上述对话框中 配置一个网络缓冲区 后,您实际上是配置 了两个不同缓冲区的 大小。 ,如 中标有
16、共享变量引擎 ( )的方框中的缓冲 区所示,是自动创建服务器端的缓冲区 图 10 SVE的,并被配置为和客 户端缓冲区同样大 小。 即您在使能共享变量 缓冲区时逻辑上认为 的缓冲区。在 (如图 右边所示)是用于保 持先前值队列的缓冲客户端的缓冲区 客户端缓冲区 10区。正是这种缓冲区 避免了您的共享变量 受到循环速度或网络 流量波动的影响。在 中,网络缓冲区经历 了一个改变。底层 协议的重新设计使的 数据传输变得大致无 损。同样如 所示,标记有共享变 量引擎( )的方框中的缓冲 区是LabVIEW 8.5 NI-PSP 图 10 SVE。这个缓冲区当且仅 当底层协议需要流量 控制时使用,即只发
17、 生在下述的两种情形 中:服务器端的缓冲区1.如果您将数据写入到 一个或多个共享变量 的速度比客户端可响 应的速度快。如果您将数据写入到 一个或多个共享变量 的速度比内核的驱动 程序可从物理层获取 数据的速度快(大多 数情况下是以太 网)。2.注意,以上两种情况 都是网络层在共享变 量通信栈下(并不受 其控制)的限制。与所有读写操作共享 同一实时 的 使能单进程变量不 同,网络发布的共享 变量每一个读用户都 有自己独立的缓冲 区,所以读用户不受 彼此影响。FIFO FIFO图 缓冲区10 仅当读 写速率有短暂的波动 时,缓冲区才发挥其 作用。如果程序运行 的时间不确定,而读 取速率总是低于写入
18、 速率,则不管你指定 多大的缓冲区最终都 会出现数据丢失。由 于缓冲技术为每一位/用户都分配了一个缓 冲区,因此,为避免 不必要的内存使用, 仅当需要时再使用缓 冲区技术。网络和实时缓冲如果您同时采用网络 缓冲和实时 ,则共享变量的执行 中将同时包含一个网 络缓冲区和一个实时 。前面讲过,如果实 时 使能时,将为每一个 读和写用户创建新的 实时FIFO FIFO FIFO FIFO,从而多重写入和读 出将不会彼此阻塞。图 网络缓冲和实时11 FIFO虽然您可以独立设置 这两缓冲区的大小, 在大多数情况下,美 国国家仪器公司建议 您让它们保持同样大 小。如果您使用实时 , 将为每一个读和写用 户
19、创建新的实时FIFO LabVIEW FIFO,从而多重写入和读 出将不会彼此阻塞。缓冲区有效期LabVIEW在初始写或读操作时 创建网络和实时 缓冲区,具体由缓冲 区的位置决定。服务 器端的缓冲区在写入 者初始写入一个共享 变量时创建。客户端 的缓冲区在一个用户FIFO初始读取一个共享变 量时创建。如果对共 享变量的写操作发生 在用户的读操作之 前,则该用户将不能 得到这些初始数据。图 缓冲区有效期126/17 缓冲区溢出 下溢/在 以上,网络发布的共 享变量将报告网络缓 冲区的溢出和下溢情 况。而任何版本的实 时 都会返回错误来指示 溢出 下溢情况。在 或 ,可以用以下两种方LabVIEW
20、 8.20 FIFO / LabVIEW 8.0 8.0.1式检查网络缓冲下 溢。由于共享变量时 间标识的分辨率为 毫秒,当您以低于 的速率更新共享变量 时,您可以将变量的 时间标识与其后读操 作的时间标识进行比 较来检测缓冲区下1 1kHz溢。或者,对于非实 时应用,读取者可以 将一个序列号与数据 绑定来通知缓冲区溢 出 下溢。您不能在时间 严格循环中针对共享 变量使用第二种方 式,因为实时 使能的共享变量不支/ FIFO持自定义控件(簇) 的数据类型。 共享变量有效期如前所述,所有共 享变量都是项目库的 一部分。 负责注册项目库和库 中包含的共享变量 (当 需要调用这些变量 时)。默认情况
21、下, 只要您运行引用任意 共享变量的 时,SVE LabVIEW VI SVE即会部署并发布共享 变量库。因为 将部署包含该共享变 量的整个库,因此无 论所运行的 是否引用库中的全部 共享变量, 都将发布库中所有的 共享变量。您也可以 在任何时候手动来部SVE VI SVE署任意的项目库,只 需要右键点击 的库即可。项目浏览窗口停止托管该变量的 或重启机器并不影响 共享变量在网上的可 用性。如果您需要删 除网络上共享变量, 您必须明确地在该 中对该变量解除部 署。您也可以选择VI 项目浏览窗口 工具 共享变量 来对共享变量或整个 变量项目库来解除部 署。 变量管理器前面板数据绑定另一个适用且仅
22、适 用于网络发布共享变 量的特性是前面板数 据绑定。从 拖拽一个共享变量到 的面板来创建一个共 享变量的控件绑定。 当您为某个控件使能 了数据绑定后,改变项目浏览窗口 VI控件的值就改变了与 其绑定的共享变量的 值。在 运行时,如果成功连 接到 ,则在 的前面板对象旁边会 出现一个绿色指示, 如图 所示 。 VI SVE VI 13图 绑定一个前面板控 件到一个共享变量13通过在属性对话框中 的 页面来获取和改变任 意输入和显示控件的 绑定。当使用 实时模块或 的 模块时,您可以选择 ,来得到数据绑定 LabVIEW LabVIEW DSC 工具 共享变量 前面板批量绑定配置对话框,来创建一个
23、 绑定多个输入和显示 控件到共享变量的用 户界面。 前面板批量绑定配置美国国家仪器公司 不建议运行在 实时的应用中使用前 面板的数据绑定,因 为前面板可能是不存 在的。LabVIEW编程访问如上所述,您可以 使用 项目交互式的创建, 配置和部署共享变 量,您还可以使用程 序框图上的共享变量 节点或前面板的数据 绑定来读取和写入共 享变量。 中还提供了对于以上LabVIEW LabVIEW功能编程访问的方 法。 在需要创建大量共 享变量的应用中,您 需要使用 服务器来编程建立项 目库和共享变量。此 外, 模块提供了一套全面 的 用来编程创建和编辑 共享变量和项目库以 及管理VI LabVIEW
24、DSC VI SVE。您只能在 系统中编程创建共享 变量库,然而,您可 以编程部署这些新的 库应用于 或 实时系统中。 Windows Windows LabVIEW当您需要动态改变 读写的共享变量时, 可使用 。您可以编程改变 链路的 以实现动态改变共享 变量。您还能够编程 控制共享变量的其他 功能,比如缓冲区大VI Datasocket API Datasocket URL小等。此外, 具有阻塞读取功能, 即仅当共享变量更新 时才进行读操作。 Datasocket API图 用 实现编程读写共享变 量14 Datasocket API此外,通过 和 引入的网络变量库, 您可以在 或者 环境
25、下读写共享变 量。NI LabWindows/CVI 8.1 NI Measurement Studio 8.1 ANSI C, Visual Basic . NET VIsual C#共享变量引擎SVE是一个使网络发布的 共享变量能够过网络 传送数据的软件框 架。在 下, 配置 为一个服务,并在系 统启动时引导 启动。对实时目标, 是一个随系统开机加Windows LabVIEW SVE SVE SVE载的可安装启动组 件。为了使用网络发布 的共享变量, 至少需要在分布系统 中的一个节点上运 行。网络上的任何节 点都可以读写 发布的共享变量。如 表 所示,只有安装 ,节点才可以引用到SVE
26、SVE 1 SVE一个变量。如果您需 要根据应用需要在不 同地点部署共享变 量,您也可以在多个 系统中同时安装多个 。SVE共享变量托管位置推 荐在一个分布式系统 中,您必须考虑一系 列因素来决定由哪计 算设备部署和托管网 络发布共享变量。计算设备是否兼容 SVE ?7/17 下表汇总了 可适用的平台,并给 出了可通过参考节点 或 使用网络发布的共享 变量的平台。美国国 家仪器需要不同平台 至少能提供 兆并推荐 兆内存供 使用。SVE Datasocket API 32 64 SVE新特性LabVIEW 8.5现在支持 和 下的 。以前,对这些平台 我们推荐了一系列复 杂的步骤来使用共享 变量
27、参考节点。我们 现在不再推荐这样 做。相反,应该更直Datasocket API Linux Macintosh NI-PSP接的在这些平台上使 用 技术简化客户端的应 用。请注意,在 和 中仍然不支持共享变 量的托管。 Datasocket Linux MacintoshWindowsPCsMacOSLinux PXIReal-TimeCompactFieldPointCompactRIO CompactVisionSystemCommercialPCs withLabVIEWReal- TimeETSRTXSVE X XReferenceNodesX XDataSocketAPI w/ P
28、SP表 网络发布的共享变 量兼容性概况1应用需要数据记录和 监控功能吗?如果您想使用 模块的功能,您必须 在 上托管共享变量。 模块对网络发布的共 享变量新增如下功 能:LabVIEW DSC Windows LabVIEW DSCNI总数据库的历史记 录。联网报警和报警记 录。缩放。基于用户的安全。初始值。创建自定义 服务器。 I/O共享变量中集合 的事件结构功能。 LabVIEW编程控制共享变量各 个方面和共享变量引 擎的 。这些 特别有利于管理大量 共享变量。 LabVIEW VI VI计算设备有足够的处 理器和内存资源吗?SVE是一项需要处理和内 存资源的额外进程。 为了在分布式系统中
29、 得到最佳的表现,请 选择具有最大内存和 最高处理能力的机器 安装 。SVE哪个系统经常在线?如果您的分布式应用 中,一些系统可能定 期离线,则请将 托管在一台一直在线 的系统上。SVE共享变量引擎的其他 功能图 列出了 的很多功能。除了管 理网络发布的共享变 量外, 还负责:15 SVE SVE收集来自 服务器的数据。I/O通过 和 的服务器为用户提供 数据。 OPC PSP为任何配置了缩放, 警告和记录服务的共 享变量提供这些服 务。这些服务仅在 模块存在下可用。 LabVIEW DSC监测报警条件并进行 相应响应。I/O服务器I/O服 务器是 的插件,程序中可以 用其使用 来发布数据。
30、中包括一个 服务器,该服务器直 接从 存储地发布数据到 。因为 是 服务器,因此 和SVE SVE NI FieldPoint 5.0 I/O FieldPoint SVE SVE OPC SVE服务器结合构成了 服务器。注意 安装中不包括 , 需要从其他软件组件 中安装,如 。FieldPoint I/O FP OPC FieldPoint SVE SVE LabVIEWNI - DAQmx 8.0中也包括一个 服务器,它可以自动 将 全局虚拟通道发布到 。这个 服务器取代了传统数 据采集的 服务器和 。 中包含 并且可以在I/O NI-DAQmx SVE I/O OPC RDA NIDAQ
31、mx SVE LabVIEW未安条件下进行安 装。使用 模块,用户可以自行 建立新的 服务器。 LabVIEWDSC I/O8/17 图 共享变量引擎( )15 SVEOPCSVE是 兼容的,并可以作为 机器上的 服务器。任何 客户端可对托管于 机器上的共享变量进 行读写操作。当您在 机器上安装 模块后,3.0 Windows OPC OPC Windows Windows LabVIEW DSC SVE也可以作为 客户端。您可以将 托管的共享变量绑定 到 的 数据项上,并对这些 变量进行读和写操 作。OPC Windows DSC OPC因为 是基于 (一个 )的技术,实时目标 并不与 直接
32、通信。如图 所示,但您仍然可以 通过将共享变量在 上托管实现从实时目 标访问 数据项。OPC COM Windows API OPC 16 Windows OPC图 绑定 数据项16 OPC性能本节为使用共享变量 创建高性能应用提供 了一般准则。由于单进程共享变量 的实现类似 全局变量和实时 ,美国国家仪器公司 没有对单进程共享变 量如何取得较好性能 给出特殊建议。以下 各节均针对网络发布 的共享变量。Windows API LabVIEW FIFO共享处理器通过隐藏许多网络 编程的实施细节,网 络发布的共享变量简 化了 的程序框图。一般来 讲应用中会包括 , 以及 客户端代码。为了获 得共享
33、变量的最佳性LabVIEW LabVIEW VI SVE SVE能,开发应用时需要 注意使其定期释放处 理器以让 线程运行。实现其的 方法之一是在处理循 环中放置等待,并确 保应用中不使用未定 义次数的循环。实际 需要等待的精确时间SVE依赖于具体应用,处 理器和网络;每种应 用都需要一定程度的 实验微调来达到最佳 的性能。SVE位置的考虑在 一节中讨论了在选择 安装 的位置时需要考虑的 一系列因素。图 中给出了另一个可大 大影响共享变量性能 的因素。在这个例子 中包含了实时目标,共享变量托管位置推 荐 SVE 17但它的基本原则也适 用于非实时系统。图 给出了一个低效运用 网络发布共享变量的
34、 例子:您在实时目标 中产生数据,并需要 将处理完的数据记录 到本地,并通过远程 机器进行监控。因为17变量的用户必须从 接收数据,在高优先 级循环中的写操作和 正常优先级循环中的 读操作之间将存在很 大的延时,而且这一 操作包含了整个网络 中的两个来回。SVE9/17 图 实时系统中低效使用 网络发布变量17图 给出了一个较好的应 用框架。应用中采用 一个单进程共享变量 在高优先级循环和低 优先级循环中传递数 据,极大地减少了等 待时间。低优先级回 路记录数据,并通过 网络发布共享变量为18主机端的用户写入数 据更新。图 在实时系统中有效 使用网络发布变量18标定本节比较了共享变量 和 中其
35、他数据共享方法 的性能,如 的全局变量,实时 , 。下表总结了以下 各节讨论的测试。 LabVIEW LabVIEW FIFO TCP / IP测试 描述 SVE位置说明T1 单进程共享变量 全局变量vs N/A 建立最大读 写速率/T2 单进程共享变量 实时w/ FIFOvs.实时 FIFO VIN/A 采用实时 时,建立最大读 写速率。FIFO /确定在定时回路中写 入并同时从正常优先 回路读回一个共享变 量或实时 FIFO数据的最高可持续速 率。T3 网络发布共享变量 实时 环实时w/ FIFO vs. 2- FIFO w/ TCP 运行 的LV RT PXI 确定单点数据流经网 络的最
36、高速率。共享变量 读 总在主机。 :类似 ,但具有 通信 网络。: VI RT-FIFO + TCP T2 TCP /IPT4 网络发布共享变量内 存 RT系列目标 建立共享变量部署后 的内存使用情况。T5 比较 网络发布共享变量 和 变量 流8.2 8.5 - RT 系列目标比较 在 中的实现和在 或更早版本中的实 现。NI-PSP 8.5 8.20本标定测试一台 将波形数据流至桌面 主机上时的吞吐量。cRIOT6 比较 网络发布共享变量 和 变量 高通道计数8.2 8.5 - RT 系列目标 比较 在 中的实现和在 或更早版本中的实 现。NI-PSP 8.5 8.20本标定测试一台 在高通
37、道计数应用中 的吞吐量。cRIO表 标定预览210/17 以下章节描述了美国 国家仪器公司为每一 个标定创建的代码, 并给出了实际的标定 结果。 节详细给出了每种标 定选择的方法和每种 标定运行的软硬件环 境的配置细节。方法和配置一单进程共享变量与 全局变量LabVIEW单进程共享变量类似 的全局变量。事实 上,单进程共享变量 的实现是在 全局变量上增加了时 间标识功能。LabVIEW LabVIEW为了比较单进程共享 变量相对 的全局变量的性能, 美国国家仪器公司编 写了标定 来衡量 每秒钟可以对一个 全局变量或一个单进 程共享变量进行读写 的次数。图LabVIEW VI VI LabVIE
38、W 19给出了单进程共享变 量的读取标定。单进 程共享变量写入标定 和 的全局变量读 写标定遵循同一模 式。LabVIEW /图 单进程共享变量读 取标定19 VI综合读 写测试中,还包括了 验证每个写入点都在 同一循环中没有数据 损失的被读回的验证 代码。/T1的测试结果图 给出了 的测试结果。研究结 果表明,单进程共享 变量的读性能低于 全局变量。写性能, 以及读 写性能来看,单进程 共享变量略低于 全局变量。单进程共20 T1 LabVIEW / LabVIEW享变量的性能会受到 是否开启时间标识功 能的影响,因此如果 没有必要的话,推荐 关掉时间标识功能。方法和配置 一节讲述了本测试具
39、 体的标定方法和配置 的细节。图 单进程共享变量与 全局变量的性能比较20单进程共享变量与实 时 FIFO美国国家仪器标定 可持续的吞吐量来比 较 使能的单进程共享变 量和传统的实时 。标定中还检查了传 送数据的大小或负载 对以上两种实时 实现的影响。FIFO FIFO VI FIFO本测试包括一个时 间严格循环( )用来生成数据,以 及一个正常优先级循 环( )用来消费数据。美 国国家仪器通过对一 系列双精度标量和数 组数据类型进行测试 来确定负载大小的影TCL NPL响。标量类型确定了 负载是一个双精度数 值是的吞吐量,数组 类型确定了其余负载 类型的吞吐量。当您 执行上述两个环路无 数据
40、丢失时的最大可 持续速度就确定了该 测试记录的最大可持续吞吐量。图 给出了实时 标定的简化程序框 图,其中略去了许多 用于创建和注销 的必要代码。需要注 意的是从 开始,引入了一个可 以替代这里的 子 的新的21 FIFO FIFO LabVIEW 8.20 FIFO VI FIFO函数。本文中的数据 图表即由该 函数得到,它比之前 中的 子 有着更好的性能。FIFO 8.0.x FIFO VI11/17 图 简化的实时 标定21 FIFO VI另一个等效的测试中 采用了单进程共享变 量。图 给出了程序框图的简 化描述。22图 简化的 使能单进程共享变量 标定22 FIFO VIT2的测试结果
41、图 和 给出了 测试的结果,并比较 了 使能的单进程共享变 量和实时 函数的性能。结果表 明,用单进程共享变 量稍微慢于使用实时 。23 24 T2 FIFO FIFO VI FIFO12/17 图 单进程共享变量与 实时 的性能比较( )23 FIFO VI PXI图 单进程共享变量与实 时 的性能比较( )24 FIFO VI cRIO 9012网络发布的共享变量 与实时 FIFO+TCP / IP 由于共享变量的灵 活性,只需几个配置 的改变,您就可以在 网络中快速发布一个 单进程共享变量。特 别对于实时应用,早 期版本的 中完成同样传输需要 引进了大量的代码来 读取LabVIEW RT
42、系列控制器上的实时 ,然后使用许多现有 的网络协议之一在网 络上传送数据。为了 比较二者性能的不 同,美国国家仪器公 司同样创建了标定 来衡量在一系列负载 条件下无数据丢失时FIFO VI的可持续吞吐量。对于预变量方式,标 定 采用了实时 和 。一个 产生数据并将其放置 在实时 中;一个 从 中读出数据并通过 发送至整个网络。 主机收取数据并验证VI FIFO TCP / IP TCL FIFO NPL FIFO TCP/IP PC没有数据丢失发生。图 给出一个实时 和 标定 的简化程序框图。与 上面相同,这个框图 大大对于实际的标定 做了大幅简化。25 FIFO TCP / IP VI VI
43、13/17 图 简化的实时 和 标定25 FIFO TCP / IP VI美国国家仪器公司给 出了一个使用网络发 布共享变量的等效测 试版本。图 给出了简化的程序框 图。26图 简化的实时 网络发布共享变量标 定26 FIFO- VIT3的测试结果本节给出了 的测试结果,比较了 实时 使能的网络发布共享 变量和基于实时 和 的等效代码的性能。 图 给出了当 的实时目标是一个 嵌入式T3 FIFO FIFO VI LabVIEW TCP/IP 27 LabVIEW PXI RT系列控制器时的结 果。图 网络发布的共享变 量与实时 和 性能比较( )27 FIFO TCP VI PXIT3的结果表
44、明,网络发 布共享变量的吞吐量 与 方法的接近,而且对 两种方法来说,从小 到大不同大小的负载 吞吐量基本都是一致 的。共享变量使您的 编程工作更容易,但TCP并不是没有代价的。 但应该看到,如果仅 使用简单的 方法,它的性能很容 易不如共享变量,特 别对于在 中新的 实现而言。TCP 8.5 NI-PSP的测试结果T4网络发布共享变量的 内存占用注意:在 LabVIEW 8.5中,没有对变 量占用内存做出明显 改变。因此,这个标 定并未重新运行。 确定共享变量的内 存占用是很难的,因 为其占用的内存依赖 于配置。例如,带有 缓冲区的网络发布共 享变量会根据需要在 程序中动态分配内 存。配置一
45、个共享变 量使用实时 FIFO也会增加内存使用, 因为除了网络缓冲区 外 也为 创建缓冲区。因此本 文的标定测试只提供 一个内存的基本测 度。 LabVIEW FIFO图 给出了在 部署了 和 个指定类别的共享变 量到 时它占用的内存。该 图表明变量的类型并 不显著影响部署的共 享变量占用的内存。 这里需要注意的是,28 LabVIEW 500 1000 SVE这些变量都是非缓冲 变量。 14/17 图 具有不同数据类型 的网络发布共享变量 的内存使用28图 给出了内存占用相对 于部署的共享变量数 目的函数关系。这项 测试只使用一种类型 的变量,一个空的布 尔数组。内存的占用 随变量数目线性增
46、 长。29图 不同大小的共享变量 的内存使用29T5的测试结果8.2网络发布的共享变量 和 变量 流比较8.5 -在 中,我们重新实现了 用于传输共享变量数 据的网络协议底层, 它能够提供更好的性 能。LabVIEW 8.5在这里我们在 上托管一个 类型的单变量。我们 生成所有数据,然后 在一个循环中将数据 传送到主机,主机尽 快的从另一个波形共 享变量节点将数据读 取出来。cRIO9012 双精度波形您可以从图 看到,在 中获得了明显的性能 改善,在这个例子中 超过 。30 LabVIEW 8.5 60015/17 图 的 和 (或更早版本)的波 形吞吐量比较30 LabVIEW 8.5 L
47、abVIEW 8.20T6的测试结果8.2网络发布的共享变量 和 变量 高信道计数8.5 -在这项测试中,我们 使用与 相同的两个目标对 象,但是与传送单变 量不同,我们将数据 类型设为双精度并使 共享变量数目在 间变化,同时测量传 送中的吞吐量。同 样,所有的变量都托T5 1 -1000管于 ,在其上生成增长的 数据并传送到主机等 待读取。cRIO9012图 再次显示出从 至 的 性能的显著提升。然 而,许多小变量的情 形与 中单一大变量的情形 相比,吞吐量显著减 少。这是因为每一个 变量都有与本身相关31 LabVIEW 8.20 LabVIEW 8.5 T5的固定空间开销。当 使用许多变
48、量时,这 种开销会乘以变量数 目,从而变得不能忽 略。图 和 (或更早版本)高通 道计数吞吐量比较31 LabVIEW 8.5 LabVIEW 8.20方法和配置本节给出了前面讲述 的标定测试的详细信 息。方法及考虑因素T1T1测试使用了一个简单 的标定模板,通过大 量的迭代后取简单平 均的方法以确定读写 速率。每次测试执行 时共 亿迭代按分钟记录执 行时间,分辨单位是 毫秒。 5.0T1 软 硬件配置/主机硬件Dell Precision 450Dual Intel Xeon2. 4GHz奔腾级处理器1 GB DRAM主机软件Windows XP SP2LabVIEW 8.20的方法及考虑因
49、素T2T2测试是通过确定不同 优先级任务之间的最 大可持续通信速率来 确定吞吐量的。一个 具有毫秒分辨率的定 时循环用于数据产 生。数据的消费者是 一个自由运行、正常 优先级的循环,它从 实时或者单进程共享变量 读取数据直到空为 止。在没有错误的条 件下重复这一过程至 一定的时间。FIFO当下列所有条件满足 时,测试结果是有效 的:没有缓冲区溢出发生数据完整性得以保 持:没有数据损失的 发生,且收到的数据 和发送的数据次序一 致定时循环在指定的热 身时间 秒后可以准确定时1单进程共享变量接收 端循环执行简单的数 据完整性检查,例如 确保预期数量的数据 点均收到,而且收到 的信息模式并不缺乏 中间值。 美国国家仪器对于 所有试验的变量和涉 及到的数据类型,均 为实时 和共享变量 缓冲器配置缓冲区大 小为 元素。FIFO FIFO 100的软 硬件配置T2 /的硬件PXINI PXI - 8196 RT系列控制器2.0GHz奔腾级处理器256MB D