LabVIEW通道线简介

概览

通道线简化了并行循环之间数据传输所涉及的编程,例如常见的生产者/消费者模式。本文档介绍了通道线,并着重讲解了特定的用户案例。

内容

什么通道线?

连线是程序中数据流的图形化表示。普通的连线在节点执行完毕后,将数据从输出端同步传输到输入端。通道线表示的是异步数据流:数据自源循环中流出,且源循环在数据传递的过程中仍然保持执行,目标循环在接收到所需的数据后开始执行。通道线将复杂的数据传输模式进行抽象,有助于开发运行良好的应用程序,无需多次单击鼠标,也无需调试众多个例。通道线可有效传输任意LabVIEW数据,包括从简单的标量值到复杂的数组、簇或对象。

通道线有助于减少局部变量、全局变量、队列和通知器等现有数据传输机制的使用。从长远来看,通道线还有助于减少过度使用引用句柄和变量编程。

建议将之前的异步数据传输替换为通道线,原因如下:

  • 通道线上的图形化数据流便于直接查看数据连接
  • 与引用句柄和变量相比,通道线所需的节点更少
  • 通道线还支持停止、超时等元数据信令,否则需要编写非常复杂的代码。


早期数据通信选项仍在LabVIEW中可用;通道线可替换许多用例,但是不能替换所有用例。如果应用程序已经使用了队列、变量或其他异步传输数据的方法,则不必修改代码以使用通道线。因为LabVIEW仍然支持这些异步传输数据方法。但是,如果新建一个应用程序,包含两个或两个以上的并行循环,建议考虑使用通道线。本白皮书稍后将比较通道线和其他数据传输方法(例如,队列、变量),并详述其区别。

创建通道线

每一条通道线必须具有至少两个端点:一个写入方和一个读取方。 右键单击接线端或连线并选择创建»通道写入方创建»通道读取方,可创建通道写入方端点或通道读取方端点。然后通过选择模板和端点类型来配置通道。 每种模板表示不同的通信协议;通道模板部分提供了模板类型的概述。

通道模板

可使用LabVIEW提供的通道模板创建应用程序。每种模板表示不同的通信协议。如果您正在编写实时或FPGA程序,可用的串流将略有不同(有关RT或FPGA程序可用的特定模板,请参见LabVIEW帮助中的通道线。)

流 

串流通道线类似于队列:一组无损缓冲的值串流只能有一个读取方与一个写入方,而且串流通道线不允许分叉。缓冲区中的数据传输使用“先进先出”(FIFO)的数据结构。元素保存在缓冲区中,且数据进入缓冲区的顺序和从缓冲区读取数据的顺序一致。串流通道线的示例如图1所示。


图1: 串流通道线

注意:本图为一段LabVIEW程序,其中包含可在项目中复用的LabVIEW代码。要使用该代码段,请右键单击图像,将其保存到计算机,然后将文件拖拽至LabVIEW程序框图上。  

消息器

消息器是支持“多对多”通信的缓冲通道线,适用于应用程序内发送“类似命令”消息。 消息器通道有多个写入方和读取方,可按重要的方式交织消息供读取方端点进行解析。 图3表示为消息器通道,其中多个写入器交织消息后发送给读取方。


图2: 消息器通道

Tag

Tag通道类似于变量:代码可读取或写入的单个值。Tag是一个单元素的有损缓冲区,供多个读取方或写入方访问最近写入该缓冲区的数据值。

应用程序如只需要将最新的数据值提供给等待的并行循环(即之前的数据是否丢失不重要),则考虑使用Tag通道。Tag通道线的示例如3所示。


图3: Tag通道

Tag通道不会消除变量编程中固有的所有编程风险。您仍然可以使用Tag创建“读取-修改-写入”竞争状态。为了避免这种情况,请始终使用Tag通道将数据从一个循环传输到另一个循环,且始终避免使用同一个循环读取和写入值。这种类似变量的编程方法看起来容易,但是测试较为困难,程序可能会发生随机错误。 

其他通道模板

串流消息器Tag囊括了大部分数据传输需求。但LabVIEW可提供下列专门的通道:

  • 累加器Tag一个变量,可跟踪多个写入方写入值的总和,然后发送给多个读取方。
  • 高速串流一种串流通道线,支持更高吞吐量,但是不具备一般串流通道的某些功能。
  • 有损串流一种串流通道线,在缓冲区已满时允许丢弃部分数据。
  • 单元素串流一种串流通道线,为缓冲区大小为1的情况而优化;当缓冲区已满时,写入方端点将等待。
  • 事件消息器 从多个写入方传输消息的通道线,每次写入都会触发一个事件。

根据应用程序的需要选择最为合适的数据传输协议。更多详细信息,请参考位于labview\examples\Channels中不同通道模板的范例。

通道线用途

通道线为程序中异步传输数据的程序提供了最直接的图形化表示。通道线不会完全替代LabVIEW中的队列、变量等工具。但是与以前可用的方法相比,通道线能更直观显示数据的实际流向。

例如,串流通道可清晰显示数据如何从写入方端点传输至读取方端点。所有写入方和读取方都通过通道线连接,甚至通过子VI的连线板连接,只需要观察通道线即可了解程序中串流数据的走向。

串流通道线可用于使用队列的多种实例中。图4表示最基础的队列和串流通道线的复杂性比较。在程序框图的前两个While循环中,显示了最基础的队列结构;在程序框图的后两个While循环中,显示了串流通道线读取方和写入方节点之间的数据传输。


图4:队列和串流通道线的使用比较

通过通道连接,通道写入方和通道读取方之间的关系非常清晰。与之前的方法比,两个节点间的关系更加明确。在代码中使用队列引用和函数时,并行循环之间的数据流较为隐晦,难以理解程序框图上的实时发生的数据流。串流通道在表示数据流方面更为直观,数据从写入方节点传输至读取方节点。在通道进入和离开数据结构时缺少隧道,更明确地表示了通道可以实现的异步数据流。与通道相比,队列需要更多的节点,从而增加了开发时间和代码的维护难度。

LabVIEW Real-Time使用通道线

唯一适用于LabVIEW Real-Time的通道线模板是实时串流通道。该类串流通道专门用于传输定时循环的数据。 实时(RT)串流通道线基于实时FIFO构建,在确保代码确定性的同时,可减少使用队列、变量等复杂机制。支持将实时串流通道构建到已部署至实时终端的启动可执行文件中。 图5显示了两个实时串流通道的实现。


图5:从FPGA读取数据的实时串流

在该程序中,使用FPGA读取/写入控件,从实时终端的FPGA中读取数据,然后写入两个RT串流通道。两个串流通道从较高优先级、确定性的定时循环将数据传输至较低优先级的While循环。连接端点的蓝色RT串流通道传输整数数据,然后将整数数据作为RT终端上的文本文件记录至磁盘。绿色的RT串流通道从RT程序前面板上的停止按钮传输布尔数据。因为定时循环运行的速度高于While循环,串流通道线传输的数据被存入缓存,直到While循环赶上。

通道线调试

当程序运行时,可在通道线上添加探针,以监视流经通道线的数据。放置探针后,可打开一个额外窗口监控各种参数。这些窗口显示每一种通道的自定义信息。请参考图6,了解通道探针窗口的外观。


图6:通道探针窗口

下面列出了上述通道线探针窗口的重要信息:

  1. 监视队列中的元素
  2. 查看串流当前状态的详细信息
  3. 查看是否已写入最后一个元素

Was this information helpful?

Yes

No