使用正确网络协议

概览

控制和监测应用通常涉及各种需要交换信息的系统,且往往通过以太网进行交换。嵌入式控制器可以从外围仪器读取数据、从HMI(人机界面)接收操作人员输入,或将测试结果传输至中央数据管理系统。要完成这些任务,有几种网络协议可供选择;本教程将为您详细解析如何为应用选择正确的协议。本文介绍了控制和监测应用中最常见的通信模型,并针对每种情况推荐最适合的网络协议。我们将着重介绍三种通信模型:
  • 基于命令或消息的通信
  • 过程数据通信
  • 串流/缓冲通信
然后,我们将讨论以下哪种网络协议最适合这些任务:
  • TCP和UDP
  • 网络发布共享变量
  • 网络流
  • Web服务

内容

命令、监测串流

每种类型的通信都会涉及终端(通常是数据采集系统或控制器)和主机(通常用于显示HMI),通常有以下几种可能的配置:单个终端和单个主机之间进行通信(1:1);多个终端和单个主机(N:1)之间进行通信,或者单个终端和多个主机(1:N)之间进行通信。以下部分描述了机器控制应用中使用的每种通信类型及其常见系统配置以及网络和数据传输要求。

基于命令消息通信

基于命令或消息的通信是由特定事件触发的信息传输,发生频率较低。事件可以是按下按钮或发出警报,然后触发特定的响应。在基于命令的架构中,涉及到两种系统类型:命令系统(主机)和工作系统(终端)。命令系统发出指令,工作系统必须执行。命令必须以无损的方式交付,并且延迟应尽可能小。例如,当操作人员按下按钮时,他们希望相关的操作能够快速得到执行,而不需要再次按下按钮。他们还希望系统能在合理的时间范围内做出响应。最常见的配置是1:1,但N:1和1:N也是可以的。

过程数据通信

过程数据通信包括定期传递过程变量的最新值。这种类型的通信是最常见的通信,对于控制应用和用于显示当前系统状态的HMI非常实用。  其中一个例子是一个或多个嵌入式控制器定期发送更新至HMI,以便HMI监测机器的状态。  操作人员需要看到的是机器的当前状态,因此无损传输并不是必需的,因为实时控制器或HMI仅根据最新值做出响应。

这种类型的数据传输适用于嵌入式控制器之间的通信,并且可能需要高速运行。  但是,过程数据通信最常见的用途是更新HMI。  由于数据是人工查看的,这类通信的更新速率较慢。1到30 Hz的更新速率通常就足够了;速率太快不仅会消耗CPU和内存资源,而且信息过多会导致操作人员目不暇接,来不及处理。一个好的经验法则是,数字显示的更新速率不应超过1-2 Hz,而对于图形显示,30 Hz的速率较为适宜,可提供平稳的更新。

流/缓冲通信

在串流数据时,会有大量的信息连续发送出去,但不一定是实时的。如果需要发送大量数据并捕获每个数据点,这类通信就非常适合。串流通常(虽然并不一定)是单向的,并且采用1:1配置。它会连续缓冲数据,因此不会丢失数据。串流通信的一个常见应用是终端进行高速数据采集时,必须将数据传输到主机进行日志记录或后期处理。

通信类型

常规配置

特性

需求

基于消息

1:N

事件驱动,命令

低延迟,交付可以保证

处理数据

N:1

单点,当前值

最新值,但交付无法保证

串流/缓冲

1:1

连续数据传输

高吞吐量,交付可以保证

表1.1.机器控制通信类型总结

 

网络协议

在为应用选择网络协议时,需要评估一些因素,包括:

  • 通信类型
  • 系统配置
  • 性能
  • 易用性
  • 是否支持第三方API

在为应用选择网络协议时,上述通信类型和系统配置是最主要的决定因素。性能和易用性要求因具体应用和工程师的编程经验而异。最后,如果开发的应用程序要与第三方应用程序(例如用C或VB开发的应用程序)通信,则需要使用可以与第三方API连接的网络协议。综合考虑这些因素,您就能够为应用做出正确的决定。表1.2基于上述因素对每种网络协议进行了总结。

 

API

类型

性能

易用性

支持的配置

是否支持第三方API?

共享变量

LabVIEW功能

1:1,N:1,1:N

Measurement Studio和CVI

网络流

LabVIEW功能

1:1

目前不支持

TCP/UDP

互联网协议

1:1,N:1,1:N

Web服务

互联网协议

*

 

1:1,N:1,1:N

表1.2.网络协议总结 ( = 最好, = 较好, = 好,* = 取决于Web服务正在完成的操作)

TCPUDP

TCP和UDP互联网协议是本文档讨论的所有网络协议所使用的底层构建块。所有其他协议都在这些协议之上进行了抽象,以便于使用;因此,TCP和UDP不仅提供了出色的性能,而且还提供了底层控制,可实现更大灵活性。TCP和UDP可用于构建自定义协议,如STM

TCP

TCP是一种可靠的点对点通信协议;数据以有序、无损的方式交付。它是一种基于连接的协议,这意味着在传输数据之前必须先建立客户端与服务器之间的连接。为了保证数据的交付,TCP会重新传输数据,直至收到确认为止。TCP客户端和服务器端通过指定端口进行通信。

UDP

UDP与TCP的不同之处在于,它将数据发布到指定的端口,但在发送数据之前不需要与客户端建立连接。如果终点由于未连接而无法接收数据,则将直接丢弃数据;该协议不会检查数据是否成功交付。因此,UDP不适用于注重无损数据传输的应用。

UDP函数可以用于与单个客户端的通信,也可以将数据传送到多个客户端。UDP多点传送模式可实现网络上单个发送方与多个客户端之间的高效通信,无须发送方维护一组客户端。本文讨论的所有协议中,UDP具有最高的传输速率,但它不能确保无损数据传输。

TCP和UDP是高吞吐量的网络协议,但其代价是不易于实现。网络连接需要人工手动管理,且每个连接占用一个端口。TCP和UDP要求所有数据以字符串格式发送。这意味着发送方必须将所有数据压缩成字符串,而接收方必须将字符串还原为数据。对于非字符串数据传输,这无疑增加了额外的复杂性。

TCP和UDP非常适用于基于消息的通信和自定义串流应用。它们支持所有类型的配置,并且由于它们是行业标准的协议,因此可以与第三方应用一起使用。

网络发布共享变量

网络发布共享变量是LabVIEW中一个简单易用的数据共享工具。这类变量很容易实现,并支持大多数LabVIEW数据类型和自定义类型定义。

LabVIEW中的网络变量由三部分组成:网络变量节点、共享变量引擎和NI发布-订阅协议(NI-PSP)。网络变量节点放置在程序框图上,用于执行变量的读写操作。共享变量引擎是承载已发布数据的软件组件。它可以部署到实时终端或Windows PC上,但必须至少在一台联网机器上运行。 NI-PSP是一种专有的网络协议,用于优化网络共享变量的传输。该协议基于TCP/IP协议,能够通过网络高效、可靠地传输数据。

如果需要一种简单的方法来实现伪无损N:1和1:N通信,可以在网络发布共享变量上启用缓冲。共享变量缓冲有助于避免由于临时网络延迟而导致的数据丢失,但它不能保证数据传输的无损性。如果一个客户端写入数据的速度比另一个客户端读取数据的速度快,最终会发生溢出,数据将丢失;数据流无法防止数据溢出。即使所有客户端都以足够快的速度读取数据,但当底层TCP连接由于网络中断而断开时,此时如果正在传输数据,数据仍然可能丢失。如果需要点对点无损数据传输,建议使用网络流。网络发布共享变量最适用于注重过程变量最新值的过程数据通信。

网络流

网络流是LabVIEW 2010中发布的一个LabVIEW特性,旨在提供高效的数据流。  它们提供了易于使用的高级抽象来处理连接、断开连接和数据流控制,同时保持着与原始TCP/UDP类似的吞吐量。网络流是单向的一对一无损通信通道,由写入和读取端点构成。由于它们的无损特性,它们还可以用作基于消息的通信的基础。

网络流可以通过网络传输大多数LabVIEW数据类型,包括簇和数组,但网络流最适用于以下数据类型:

  • 数值标量
  • 布尔值
  • 一维数值标量数组
  • 一维布尔值数组

您可以使用网络流将数据从一台计算机传输到另一台计算机上,从计算机传输到实时终端,或者从一个实时终端传输到另一个实时终端。由于网络流是单向的,如果要在端点之间双向传递数据,则需要启用两个网络流。类似地,如果需要将数据传递给多个终端,则需要启用多个网络流。

Web服务

Web服务可让您创建Web应用程序,并通过网络与任何支持HTTP的Web客户端(包括标准Web浏览器)进行通信。LabVIEW允许您将VI作为服务器端Web服务进行发布;该VI称为Web方法VI。该Web服务将部署到可执行程序自有的Web服务器或应用程序Web服务器上,并且可以托管在Windows PC和NI实时计算平台上。这一LabVIEW功能的优势是能够与众多支持HTTP的设备和应用程序(不仅限于NI产品)连接。多个用户可以通过多个不同的平台和位置监测一个或多个应用程序。该特性的易用性和效率取决于Web客户端和您对Web应用程序编程的熟悉程度。

数据可以使用URL和标准HTTP方法与Web方法VI进行交换。例如,您可以在Web客户端上使用标准HTTP方法(如POST)为Web方法VI中的输入控件提供输入数据。数据通过VI的输出端或Web服务器的数据流返回到HTTP客户端。 如果通过VI的输出端,则Web服务器在接收到请求后,会将连接到输出端的任何数据作为可扩展标记语言(XML)字符串返回至Web客户端。Web服务还可以配置为以超文本标记语言(HTML)、JavaScript对象表示法(JSON)或文本格式返回数据。Web方法VI也可以配置为使用串流输出模式。这种输出模式允许您以自定义格式返回数据;您可以部署缓冲机制,也可以使用自定义的HTML标头。基于这两种可用的输出模式,Web服务就非常适用于监测或串流应用。

推荐网络协议

下面总结了哪种网络协议最适合机器控制应用中的各种通信类型。

基于命令消息通信

基于消息的通信要求可靠的传输和高传输速率。表1.3列出了基于消息的通信的所有选项。该应用最适合采用网络流;因为网络流具有可靠、易用且传输速率快等优点。但是,如果需要1:N或N:1的系统配置,或者需要与第三方应用程序传输数据,则TCP/UDP更合适。为了方便使用,如果N很小,仍然可以使用多个网络流。Web服务的性能与经过解析的TCP类似,但更易于使用。

API

类型

性能

易用性

支持的配置

是否支持第三方API?

详细说明

网络流

LabVIEW功能

1:1

目前不支持

推荐的协议

TCP/UDP

基元

1:1,N:1,1:N

适用于N:1或1:N配置或与第三方应用程序通信

 

Web服务

LabVIEW功能

1:1,N:1,1:N

表1.3 适用于基于消息的通信的网络协议

过程-数据通信

过程-数据通信仅关注最新值。因此,数据交付能否得到保证以及数据传输的快慢并不太重要。表1.4列出了过程-数据通信的所有选项。对于此类应用,推荐使用LabVIEW的共享变量功能。这类变量易于使用,允许多种系统配置,而且还可自动管理网络连接。如果计算机没有安装LabVIEW且需要通过多个位置监控数据时,应使用Web服务。同样,如果数据将由第三方应用程序监控,则应使用TCP/UDP。

API

类型

性能

易用性

支持的配置

是否支持第三方API?

详细说明

共享变量

LabVIEW功能

1:1,N:1,1:N

Measurement Studio和CVI

推荐的协议

Web服务

LabVIEW功能

1:1,N:1,1:N

适用于1:N配置

TCP/UDP

基元

1:1,N:1,1:N

适用于与第三方应用程序的通信

表1.4 适用于过程-数据通信的网络协议

流/缓冲通信

串流通信要求高传输速率和可靠的传输。表1.5列出了串流/缓冲通信的所有选项。该应用推荐使用网络流。TCP/UDP适用于N:1或1:N配置以及需要将数据传输到第三方应用程序的情况。

API

类型

性能

易用性

支持的配置

是否支持第三方API?

详细说明

网络流

LabVIEW功能

1:1

目前不支持

推荐的协议

TCP/UDP

基元

1:1,N:1,1:N

适用于N:1和1:N配置,以及与第三方应用程序的通信

表1.5 适用于串流/缓冲通信的网络协议