OSI 是一个用于开放信息处理系统标准化的通信模型。这个模型将数据传输的任务分为 7 层,每层(除了最底层)建立在另一层的基础之上。本人在OSI中添加了一些注释,以便于读者掌握一个大体的框架。
POWERLINK 的物理层采用标准的以太网,遵循 IEEE802.3 快速以太网标准。本次实验我们使用的是一台PC和一块FPGA,所以主讲与FPGA相关的知识。
POWERLINK 提供开放源码的 openMAC。这是一个用 VHDL 语言实现的基于 FPGA 的 MAC(以太网控制芯片),同时 POWERLINK 又提供了一个用 VHDL 语言实现的 openHUB。如果用户的网络需要做冗余,如双网、环网等,就可以直接在 FPGA 中实现,易于实现且成本很低。此外由于基于 FPGA 的方案,从 MAC 到数据链路层(DLL)的通信POWERLINK 采用了 DMA,因此速度更快。
POWERLINK基于标准以太网CSMA/CD技术(IEEE802.3),因此可工作在所有传统以太网硬件上。但是POWERLINK不使用IEEE 802.3定义的用于解决冲突的报文重传机制,该机制引起传统以太网的不确定性行为。
解决方法:POWERLINK的从节点通过获得POWERLINK MN的允许来发送自己的帧,所以不会发生冲突,因为管理节点会统一规划每个节点收发数据的确定时序。
定义:负责管理总线使用权的节点被称为POWERLINK管理节点(MN)。只有MN可以独立发送报文——即不是对接收报文的响应。受控节点只能当MN请求时才被允许发送报文。
MN应周期性访问受控节点。单播数据应从MN发送到每个已配置的CN(PReq帧),然后各已配置的CN应通过多播方式向所有其他节点发布它的数据(PRes帧)。
网络上的所有可用节点都由MN配置。
一个POWERLINK网络中只允许有一个活动的MN。
定义:仅在MN分配的通信时隙内发送报文的所有其他节点被称为受控节点 ,之所以叫受控节点,是因为该节点的数据收发,完全由管理节点控制。
CN节点只在MN请求时才发送数据。
POWERLINK提供三种服务:
——等时同步数据传输
每个节点的一对报文在每个周期,或在复用类CN的情况下每n个周期,被传送(复用类时隙)。另外,每个周期可能有从MN发出的一个多播PRes报文。等时同步数据传输通常用于对时间有严格要求的数据(实时数据)的交换;(有两种同步数据传输方式)
——异步数据传输
每个周期可能有一个异步报文。MN通过SoA报文向请求节点分配发送的权限。异步数据传输用于对时间无严格要求的数据的交换。(定义优先级)
——所有节点的同步
在每个等时同步阶段的开始,MN非常精确地发送多播SoC报文来同步网络中的所有节点。(两种同步的方式)
POWERLINK周期应由MN控制。节点之间的同步数据交换周期性发生,并以固定的时间间隔重复发生,该间隔被称为POWERLINK周期。
保持POWERLINK周期的启动时间尽可能的精确(无抖动)是很重要的。在POWERLINK周期的预设阶段内单个阶段的长度可以改变,例如某个循环周期的异步阶段可能比上一个循环周期的异步阶段时间长了一些,相应的空闲阶段就会短一些。但是整个循环周期的总时间长度是精确且固定的。
网络配置不能超出预设周期时间。应由MN监视周期时间的一致性。
所有数据传输应是非证实的,即不证实发送的数据已被接收。因为同步数据会被周期性发送和接收,即使本周期内某个数据没有被接收,下个循环周期会被再次发送过来,这相当于重传。
等时同步阶段从SoC的起点开始算起,直到SoA的起点结束。同步阶段可以有两种工作模式:Preq/Pres模式和PollResponse Chaining模式。
在POWERLINK周期开始时,MN应通过以太网多播发送一个SoC帧给所有节点。此帧的发送和接收的时刻,应该成为所有节点共同的定时基准。
只有SoC帧是周期性产生的。其他所有帧的产生都是由事件控制的。
在SoC帧发送完毕后,MN开始进行等时同步数据交换。PReq帧发送到每个已配置的且活动的节点。被访问的节点应以PRes帧进行响应。
PReq帧是以太网单播帧,只由目标节点接收。PRes帧作为以太网多播帧形式进行发送。
PReq帧和PRes帧都可以传输应用数据。MN用一个独立的数据帧给一个CN发送PReq数据。
PReq帧传输仅专用于被寻址CN的相关数据,PRes帧可以由所有节点接收。 对于每个已配置的且活动的等时同步CN,应重复进行PReq帧/PRes帧过程。当所有已配置的且活动的等时同步CN都已被处理,同步通信阶段结束。
上图是我对于Preq/Pres模式的一个图形总结,其中橘色线代表Preq的单波帧,蓝色代表Pres的多播帧,该图是MN与第一个CN交换数据的过程
POWERLINK周期的大小主要受等时同步阶段的大小影响。当配置POWERLINK周期时,应考虑访问每个配置CN的PReq帧和PRes帧所要求的时间的总和,即必须说明在一个周期中访问所有配置节点所需的时间。使用复用类访问技术可以减少时间的长度。(复用类访问技术将在下文讲解)
当处理等时同步阶段时,该阶段的长度会根据活动CN的数量发生变化,当某个被配置了等时同步的节点从网络中脱离,同步阶段中就没有了该节点的Preq/Pres,同步阶段的长度减小。
当主站发送Preq数据帧给某个从节点时,恰好该节点出现了问题(如网络断线),在这种情况下,主站不会收到来自该从节点的Pres数据帧,此时,主站的处理方法是,对于每一个等时同步节点,都有一个Pres数据帧的超时参数。主站发送了Preq数据帧给某个从节点时,如果在规定的时间内收到了该节点的Pres数据帧,主站紧接着与第二个等时同步节点通信;如果如果在规定的时间内没有收到了该节点的Pres数据帧,主站会认为该节点丢失了一次Pres, 这是一个错误,主站将该错误的计数器的值累加8,然后继续与第二个等时同步节点通信。如果一个节点连续丢失Pres数据桢,那么主站中该错误的计数器的值会不断累加8,直到错误计数器的值超过上限,主站中对该从站处理的状态机会发生变化。
在基于请求-应答模式(Preq/Pres)通信时,从节点什么时候上报自己的数据,取决于主站什么时候发生请求(Preq)给它。PRC 模式省掉了主站的 Preq 数据帧,取而代之的是一个挨一个的 Pres。每个节点发送数据的行为,是通过时间来触发。
MN 配置 PRC 模式的 CN ,使得 CN 在特定的时间点发送数据。这个时间点由主站根据网络的配置情况,网路延迟等计算出来,并配置给 CN。如上图所示,每个循环周期依然以 SOC 数据桢作为开始,紧接着是一个 PresMN 数据桢,该数据桢是由主站发出,并广播到网络上, 该数据桢包含主站周期性上报的 PDO 数据,同时该数据桢也是一个时间参考点。支持 PRC 模式的 CN 的发送数据的时间参考点是接收完主站的 PresMN 数据桢。而且 POWERLINK 支持 1588 分布式时钟协议,每个 POWERLINK 节点都有一个时钟,因此 POWERLINK 很方便实现这种通信模式。
在一个循环周期里,可以既存在 Preq/Pres 的从节点,也可以存在 PRC 节点。 一个节点要么被配置为 Preq/Pres 从节点,要么配置为 PRC 节点,只能二选其一。 在一个循环周期中,PRC 节点先通信,然后主站才会轮询 Preq/Pres 从节点。
上图是我对于PRC模式的一个图形总结,其中蓝色线代表MN的多波帧,橘色代表CN的多播帧,该图是MN与CN交换数据的过程,其中#10代表该从站等待10个时间单位,然后发送多播帧(pres)。
从站是支持PRC模式,还是支持请求/应答模式,是由参数决定的。可以通过参数设置, 在一个周期内,让某些从节点采用PRC模式,而另外一些从节点采用请求/应答模式。这种搭配使得网络容量可以灵活搭配。
数据在每个POWERLINK周期内被交换的节点称为连续节点
数据在每n个POWERLINK周期内被交换的节点称为复用节点。
复用类CN的访问降低了对特定CN的轮询频率。
图中,绿色123代表连续节点,蓝色其他数字代表复用节点
通过合理配置连续节点和复用节点,就可以把快速设备和慢速设备经过合理配置达到系统最优。
虽然复用类节点并不是在每个周期内都被处理,但因为所有的PRes帧都以多播帧的形式来传送,所以可以监视连续类节点整个数据的传输。
异步阶段用来传输那些非周期性的通信数据。从SoA 和 AsyncData 为异步阶段。
在周期的异步阶段,对POWERLINK网络的访问可赋予一个CN或MN,来传送一个异步报文。每个循环周期,目前只能有一个节点发送异步报文,如果有多个节点要发送异步报文,就需要排队。在MN中存在一个队列,负责调度异步数据的发送权,异步调度如图所示。
MN处理所有异步数据传输的调度。
如果CN要发送一个异步帧,则应通过PRes帧或StatusResponse帧通知MN。MN的异步调度器决定异步帧发送的权限应在哪个周期被准许。这保证了即使在网络负荷高的情况下,发送请求不会被延迟不确定的时间长度。
MN从所有排队的发送请求中选择一个节点(包含MN本身)。MN发送一个SoA帧,该SoA帧中的RequestedServiceTarget用来识别被允许发送异步帧的节点。
MN使用不同的队列来管理异步阶段的调度:
——来自 MN 的通用 transmitrequest;
——来自 MN 的用来识别 CN 的 IdentRequest 帧;
——用来轮询 CN 的 StatusRequest 帧;
——来自 CN 的 transmitrequest。
异步阶段的分布通过PRes、IdentResponse或StatusResponse的RS标志,CN说明在其队列内的发送就绪包的数目。
RS值为0(000b)说明队列是空的,而RS值为7(111b)说明队列中有7个或更多的包。异步阶段的分配减少了被各个CN请求的、由MN管理的帧的数量。如果MN队列的长度达到0,则不再分配更多的异步阶段。异步传输优先级异步传输请求可由PRes帧,IdentResponse帧以StatusResponse帧中的三个PR比特来划分优先级。
POWERLINK支持八个优先级,其中两个用于POWERLINK目的:
——PRIO_NMT_REQUEST
在CN请求一个由MN发出的NMT命令时,这是专用于此的最高优先级;
——PRIO_GENERIC_REQUEST
用于非NMT命令请求的标准优先级,即中等优先级。通过异步通信请求的SDO应采用此优先级。应用请求可采用PRIO_GENERIC_REQUEST。
其余的高于和低于PRIO_GENERIC_REQUEST的优先级都可用于应用目的。相对于具有低优先级数值的请求,MN应优先分配具有高优先级的请求。不同优先级的请求应由CN的独立的优先级特定队列进行处理。
PRes的PR标志应说明包含挂起请求的最高优先级。RS标志应说明在已报告的优先级中挂起请求的数目。直到所有高优先级请求被分配完毕之前,应暂缓处理低优先级请求的指示。
下图示出了优先级相关的异步请求处理的示例。
图4 异步传输优先级处理(优先级 PR:7 = PRIO_NMT_REQUEST,3=PRIO_GENERIC_REQUEST)
空闲阶段是在异步阶段终点和下一周期的起点之间剩余的时间间隔,从SoA或ASnd 的终点开始计算,直到SoC的起点结束。
在空闲阶段中,所有的网络部件“等待”下一周期的开始。空闲阶段的持续时间可以为0,即周期的完成不应取决于存在的或固定的空闲阶段。
在系统启动期间(NMT状态NMT_MS_PRE_OPERATION_1),当系统通过SDO通信进行配置时,用POWERLINK短周期来减低网络的负载。
POWERLINK短周期仅由一串异步阶段组成。异步阶段的持续时间会有变化,因此,POWERLINK短周期的持续时间从一个周期到下一个周期也会发生变化。
如果要求CN发送而MN中又没有相关预期的AsyncSend帧长度的信息,则下一个POWERLINK 短 周 期 至 少 要 等 待 一 个 超 时 后 再 开 始 。 该 超 时 是 由 最 大 容 量 的 以 太 网 帧
(NMT_CycleTiming_REC.AsyncMTU_U16)的长度加上CN所要求的对SoA授权(invite)报文的最大响应时间(NMT_CycleTiming_REC.ASndMaxLatency_U32)来决定的。
如果MN有AsyncSend长度的信息,即如果MN为自己分配了异步时隙,或MN就是异步报文的目标节点,则POWERLINK短周期的长度会缩短,如下图。
如果未对任何节点(包括MN)进行分配,则下一个POWERLINK短周期就会不等待任何超时而开始。
用于等时同步POWERLINK周期中的异步阶段的分配机制也应适用于POWERLINK短周期。
POWERLINK 的数据链路层:也就是 POWERLINK 的核心,主要包括如下功能:
构建/解析数据桢、对数据桢定界、网络同步、数据桢收发顺序的控制。
传输过程中的流量控制、差错检测、对物理层的原始数据进行数据封装等。
实时通信的传输控制。
网络状态机。
在 POWERLINK 网络中,至少有一个设备做为主站(MN),其他的设备做为从站(CN)。每个从站设备都有唯一的节点号(NodeId),该节点号是用来区分网络中的设备,取值范围为 1-239。主站设备(MN)的节点号为 240,主站的作用是为了为协调各个从站,合理分配总线使用权,避免冲突,实现实时通信。
POWERLINK 的实时通信机制:POWERLINK 有两种通信机制,基于请求/应答模式和基于定时主动上报模式(PRC 模式)。
POWERLINK 可以有支持多种同步机制,这里介绍两种典型的机制:
1.主站通过广播同步桢来同步网络上所有设备
2.分布式同步
POWERLINK 支持 1588 分布式时钟协议,每个循环周期的开始,主站都会广播一个 SoC数据帧到网络上,该数据帧包含了两个重要信息:网络的绝对时间和相对时间。
网络的绝对时间:这个时间是以 1970 年 1 月 1 日 00 点 00 分为基准的时间间隔。这个信息由两部分,一共 8 个字节组成:6-9 这 4 个字节为秒的信息,即网络时间与 1970 年 1 月 1 日 00 点 00 分间隔多少秒;
10-13 这 4 个字节为纳秒信息,即网络时间中与 1970 年 1 月 1 日 00 点 00 分间隔多少秒 又多少纳秒;
相对时间:这个时间在主站的 NMT_GS_INITIALISING 状态下清零,然后每产生一个 SOC,该数值就累加一个循环周期,其单位为微秒。
SoC 数据帧有两个功能:时钟同步和动作同步。
时钟同步:网络中的节点需要有一个统一的网络时间,利用网络时间来同步网络中所有设备的分布式时钟,让网络中所有节点的时钟有一个共同的基准。POWERLINK 主站(MN)在每个循环周期的开始将 SoC 数据帧广播到网络上,该数据帧包含了网络时间信息,网上的各个从节点可以将这个时间作为统一的网络时间。
动作同步:网络中的节点需要同时去做一件事情
在 POWERLINK 协议中有两种方法去触发一个同步的事件:
1.通过从节点自己的时钟触发;
2.通过 SoC 数据帧触发。
这里主要讲通过 SoC 数据帧触发同步事件的原理。
在 POWERLINK 数据链路层里,每当收到了 SoC 数据帧,会触发一个同步的回调函数, 用户可以将同步执行的程序写在该函数里,这样就可以执行同步动作。举例来说,假设有一个运动控制器,要控制 10 台伺服做同步运动,例如需要 10 台伺服同时启动。每个循环周期,运动控制器(作为 POWERLINK 的主站)将 10 台伺服所需要的新的位置信息依次传给各个伺服。每个伺服收到新数据的时间是不同的,第一个和最后一个得到位置数据的时间可能会差 100 多 us。如果收到新数据,伺服就开始启动,那么就会出现这种情况:第一个伺服已经开始运转,而最后一个伺服还没有收到数据,这显然不是我们想要的结果。(主站数据发出,但是不会被从站同时收到)因此我们需要一个同步信号,使所有的伺服都得到新数据以后,同时启动。这个同步信号就是 SoC。
主站在上一个循环周期结束(即下一个循环周期开始)时广播一个 SoC 数据帧,基本上所有的从站会同时收到这个数据帧。该信号触发一个同步回调函数或者硬件中断,来处理同步事件。因为在 SoC 数据帧之前,每个从站都已经从主站(控制器)那里得到了新的位置信息,因此 SoC 信号触发的同步事件中可以同时启动,运行到设定位置。
如果你采用的是菊花链连接,那么没经过一级 hub 会有 1 us 左右的延迟,再加上线缆的延迟,第一个从站和最后一个从站在接受到 SoC 信号的时间差可能会达到几个微秒,用户需要根据应用场合的需要来决定该延迟是否可以忽略,如果不可以忽略,POWERLINK 提供了测量机制,可以测出来相邻两个节点的传输延迟。用户根据这些延迟时间给各个节点做一个补偿,从而达到各个节点在同一时刻做同步事件。
除了通过网络广播桢来产生同步信号以外,也可以在 POWERLINK 的节点里做一个定时器,定时产生同步信号,这样的话,从站的同步信号就由自身的定时器产生。
这种方式的好处是,当同步信号桢丢失时,网络系统的同步性不受影响,但这种方式也有弊端。由于网络中每个节点的同步信号由自己产生,所以每个节点产生同步信号的时刻各不相同,有可能偏差很大。解决这个问题的方法是通过网络同步桢来启动各个节点的定时器,使各个节点在同一时刻启动定时器,如下图所示:
由网络上广播的同步桢触发第一次定时器的启动,这样 CN1, CN2, CN3 同时启动本地的定时器,同时产生同步信号。如果这些从站长时间工作后,可能会产生时钟偏差,即产生如下结果:
也就是经过长时间运行以后,CN1, CN2, CN3 的本地时钟出现了一些偏差,从而导致各个节点产生的同步信号在时间上有一些偏差,解决这个问题的一个方法就是,每隔一段时间,就使用网络上广播的同步信号同步一下网络上节点的 Timer, 如下图所示:
POWERLINK 通信一共有 5 中数据帧:SoC、Preq、Pres、SoA、AsyncData。
图中,颜色较深的为PowerLink的数据帧
POWERLINK 的数据桢嵌在标准的以太网数据桢的数据段中。因此 POWERLINK 数据包具有标准的以太网数据帧的帧头和帧尾。如上图从第 14 字节到第 n 字节为 POWERLINK 数据帧信息,而 0 至 13 字节是标准以太网的帧头。POWERLINK 有五种不同的数据帧。
1.SoC 数据帧格式
2.Preq 数据帧格式
下图为对上图缩写单词的解释
3.Pres 数据帧格式
下图为对上图缩写单词的解释
4.SoA 数据帧格式
5.Asynd 数据帧格式
下图为对上图缩写单词的解释
通过我对Power Link的学习,我了解到PowerLink在许多地方都有较大的优势,比如拥有许多的开源代码,并且支持热插拔。