本附件提供了时间敏感网络(TSN)配置的实现示例(第46条)。本附件中的例子并不是全面的,而是作为辅助理解第46章的资料背景。
TSN配置的目标之一是避免强迫用户的应用程序服从于网络的配置。用户描述它所做的事情(例如,流量规格)和它需要从网络中得到什么(例如,UserToNetworkRequirements)。用户还描述了它愿意从网络上接受的配置(例如,InterfaceCapabilities),我们的目标是将这种配置保持在最低限度, 避免改变用户应用程序的各个方面。 例如应用程序的执行时间和与物理世界的交互(例如,传感器,执行器)。
与这些目标一致,对Talker可以没有时间同步协议(如,IEEE Std 802.1AS)的情况下传输帧。也可以使用TrafficSpecification 和 InterfaceConfiguration时间感知特性,对Talker使用时间同步的感知来传输帧。然而,TSN配置避免了对时间感知传输的特定实现的假设,TSN配置避免了对应用程序定时的更改。
为了演示这些概念,考虑一个例子,在这个例子中,说话者和监听器使用IEEE Std 802.1AS以500秒的间隔执行同步的应用程序循环。应用程序的代码包括两个阶段:生成数据的250s计算阶段和在TSN帧中传输数据的250s阶段。MaxLatency需求可以跨越应用程序的一个或多个循环。
本例使用IEEE Std 802.1AS实现时间同步。应用程序在2020年9月13日,下午12:26:40 TAI开始执行,对应于1 600 000 000 000 000µs IEEE 802.1AS的时间。
应用程序循环按照IEEE 802.1AS时间开始,换句话说,在802.1AS的时间里,250µs的传输开始于250µs的基准偏移。例如,应用程序运行了6s,一系列传输阶段可以在1 600 000 006 000 750µs, 1 600 000 006 001 250 µs,1 600 000 006 001 750 µs等执行。
这个例子集中在一个单独的Talker上,它传输两个流,J和K。应用程序在计算的任意时刻为J和/或K生成一帧数据。换句话说,在一次循环中,K的数据可以跟随J,而在下一次循环中,J的数据可以跟随K,而在下一次循环中,数据只能是J。
流J的帧使用120µs。流的帧K使用80µs。这意味着需要100兆/秒局域网技术。
实现时间感知的Talker的一个选项是对计划流量的增强(8.6.84),Talker有两个队列传送:一个传送TSN帧,另一个传送非TSN帧(例如,BE流),计划的流量增强使用IEEE 802.1AS作为打开和关闭每个队列(流量类)的时间。
8.6.8.4的增强计划了每个队列的流量,而不是每个流的流量。因此,给定上述应用程序假设,流J的帧可以先于流K的帧,在下一个循环中,K可以先于J。
对于一个时间敏感的Talker,TrafficSpecification的抖动(46.2.3.5)表示单个流在时间上的差异。由于8.6.8.4的增强是针对每个队列的,因此抖动必须包括来自这个Talker的其他流引入的差异。
使用8.6.8.4的计划流量增强,时间感知的对话器需要为J和K打开一个120 + 80 = 200µs TSN窗口。网络(CNC)可以定位这个TSN窗口,从250 µs 到 450 µs 通过300 µs 到 500 µs。Talker使用接口配置中返回的TimeAwareOffset(46.2.5.3)来确定在哪里定位TSN窗口。
对于这个实现,TrafficSpecifications如下:
— Stream J
— MaxFrameSize = (120 µs in time)
— MaxFramesPerInterval = 1
— Interval = 500 µs
— Jitter = 40 µs (流K可以出现在J之前,这样J在窗口中就是80秒。流K可以发生在J之后,这样J在窗口中就是0 s。抖动表示此方差的中点。使用返回的TimeAwareOffset-Jitter作为TSN窗口的开始。)
— EarliestTransmitOffset = 250 µs + Jitter = 290 µs
— LatestTransmitOffset = 500 µs––Jitter = 340 µs
— Stream K
— MaxFrameSize = (80 µs in time)
— MaxFramesPerInterval = 1
— Interval = 500 µs
— Jitter = 60 µs (Stream J can occur before or after K)
EarliestTransmitOffset = 250 µs + Jitter = 310 µs
— LatestTransmitOffset = 500 µs––Jitter = 360 µs
假设CNC决定使用EarliestTransmitOffset,大概是因为它可以与桥上的调度保持一致。InterfaceConfigurations的结果是:
— Stream J
— TimeAwareOffset = 290 µs
— Stream K
— TimeAwareOffset = 310 µs
Talker从这些TimeAwareOffset值中减去抖动,并使用较低的结果配置AdminBaseTime和OperBaseTime为8.6.8.4。8.6.8.4计划流量增强的结果配置如图U-1和示例流量所示。
注意,对于这个例子,Talker也可以决定使用0 s的OperBaseTime并交换OperControlList元素0和1(即, 250s TSN关闭接着250s TSN开启)。从网络的角度来看,这个配置是等价的。
如果Talker没有硬件来帮助调度流量,它可以利用它的应用程序定时来配置其流的TSN。这个实现假设通话器有两个用于传输的队列,但是每个队列仅使用严格的优先级进行传输选择(8.6.8.1)。与非TSN队列相比,TSN队列使用更高优先级的流量类。
对于这个实现,假设Talker在计算阶段禁用TSN队列,但继续将J和K的帧放入TSN队列。当通话者转换到其传输阶段时(即ieee802.1 as时间中的250 s基偏移), 它启用TSN队列进行传输。
当启用TSN队列时,非TSN帧(例如,best effort)可能会干扰它,使其刚刚开始传输。对于100 Mb/s的全双工IEEE Std 802.3和最大帧大小1522,这种干扰是123.36 s。这种干扰必须合并到流量规范的抖动中,就像U.1.1中的流J和K的抖动一样。
这个实现在其TSN窗口的位置上没有灵活性,它总是以250 s偏移量开始。
对于这个实现,TrafficSpecifications如下:
— Stream J
— MaxFrameSize = (120 µs in time)
— MaxFramesPerInterval = 1
— Interval = 500 µs
— Jitter = (80 µs + 123.36 µs) / 2 = 101.68 µs
(Stream K and max non-TSN can occur before J. )
— EarliestTransmitOffset = 250 µs + Jitter = 351.68 µs
— LatestTransmitOffset = 250 µs + Jitter = 351.68 µs
(没有灵活性。TSN窗口总是从250秒开始。)
— Stream K
— MaxFrameSize = (80 µs in time)
— MaxFramesPerInterval = 1
— Interval = 500 µs
— Jitter = (120 µs + 123.36 µs) / 2 = 121.68 µs)
EarliestTransmitOffset = 250 µs + Jitter = 371.68 µs
— LatestTransmitOffset = 250 µs + Jitter = 371.68 µs
InterfaceConfigurations (或失败)的结果如下:
— Stream J
— TimeAwareOffset = 351.68 µs
— Stream K
— TimeAwareOffset = 371.68 µs
由于调度窗口的高抖动和不灵活性,与U.1.1中描述的实现相比,此实现有可能出现更多流配置失败。
一些Talker实现为时间感知的传输提供了额外的硬件支持,这样每个单独的流都有自己的定时门控(例如,per stream)。
其中一个实现类似于8.6.8.4的计划流量增强,但是每个流都有一个专用的传输队列和门控制列表。另一种实现只有一个传输队列但是每个帧都有一个相关的时间戳来指定它的传输时间。可以实现多种实现。对于本例,假设调度的传输是针对每个流的,但不假设特定的硬件实现。
假设每流调度硬件直接使用IEEE 802.1AS时间。因此,时间感知传输没有额外的变化超过IEEE Std 802.1AS提供的时间,而且流量规格的抖动为零。
根据应用要求,数控系统可以在250 µs到500µs之间在窗口的任何位置找到J流。CNC也可以在250µs到500µs之间在窗口的任何位置找到K流,但是它不能与J流重叠。
对于此实现,TrafficSpecifications如下
— Stream J
— MaxFrameSize = (120 µs in time)
— MaxFramesPerInterval = 1
— Interval = 500 µs
— Jitter = 0 µs
— EarliestTransmitOffset = 250 µs + Jitter = 250 µs
— LatestTransmitOffset = 500 µs – – Jitter = 380 µs
— Stream K
— MaxFrameSize = (80 µs in time)
— MaxFramesPerInterval = 1
— Interval = 500 µs
— Jitter = 0 µs
— EarliestTransmitOffset = 250 µs + Jitter = 250 µs
— LatestTransmitOffset = 500 µs – – Jitter = 420 µs
假设CNC可以在250s定位到J流,然后立即定位到K流, 这将导致以下InterfaceConfigurations:
— Stream J
— TimeAwareOffset = 250 µs
— Stream K
— TimeAwareOffset = 370 µs
由于调度窗口的零抖动和改进的灵活性,与U.1.1中描述的实现相比,此实现具有更大的流配置成功潜力。此外,考虑到每个流在时间上有不同的偏移量,这个实现使CNC能够配置桥上8.6.8.4计划的流量增强,这样多个流在从多个端口进入时不会重叠。反过来,延迟的总体差异也减少了。
此子句为第46条的集中式TSN配置模型提供了一个示例工作流。这个示例并不是全面的,而是为了帮助读者理解如何处理配置的各个方面(例如,TSN域检测和实施)。
该示例采用完全集中的模型(46.1.3.3),其中包含一个集中的用户配置(CUC)实体和一个集中的网络配置(CNC)实体。
存在许多用户级协议标准,用于发现和配置端站,以便设计分布式应用程序。应用程序通常是特定于一个特定的细分市场(例如,工业自动化,专业音频/视频)。一个集中的软件实体用于应用程序的设计,可能包括在终端工作站的软件编程(例如,工业可编程逻辑控制器)。集中式实体使用用户级协议与应用程序的相关端站通信。当将TSN配置应用于这些现有标准时,目标是在不进行重大更改的情况下集成TSN功能。现有的应用设计软件以CUC概念为代表,终端机以talk和Listener概念为代表。这个示例没有指定一个特定的用户级协议,但是它假设存在一个CUC。
CNC发现网络基础设施(如网桥)的功能并配置这些功能。
该示例提供了一个工作流作为框架,用于描述TSN配置过程中的每个步骤。这些步骤不一定要按顺序进行。
注:虽然这个例子假设一个CUC,但它的CNC工作流程(即,步骤4至步骤8)可应用于其他假设有多个CUCs的例子,例如:
a)使用多种应用程序设计工具(即,多个用户级协议),因此多个CUCs用于一个CNC。
b)不使用应用程序设计工具,而是每个CUC代表一个单独的对话器或侦听器,它直接与CNC通信
c)每个CUC代表一个单独的谈话者或听者,他们使用最近的网桥作为CNC的代理(即、集中式网络/分布式用户模式)
这个例子的工作流程包括以下步骤: