基于Windows的Powerlink主从站通信 下载本文

内容发布更新时间 : 2024/11/20 0:43:42星期一 下面是文章的全部内容请认真阅读。

语言实现的基于 FPGA 的 MAC,同时 POWERLINK 又提供了一个用 VHDL 语言实现的

openHUB,支持 16 个端口。如果用户的网络需要做冗余,如双网、环网等,就可以直接在 FPGA 中实现,易于实现且成本很低。此外由于基于 FPGA 的方案,从 MAC 到数据链路层 (DLL)的通信,POWERLINK 采用了 DMA,因此速度更快。

2.4 POWERLINK 的数据链路层

POWERLINK 的数据链路层:也就是 POWERLINK 的核心,主要包括如下功能:

1. 2. 3. 4.

构建/解析数据桢、对数据桢定界、网络同步、数据桢收发顺序的控制。 传输过程中的流量控制、差错检测、对物理层的原始数据进行数据封装等。 实时通信的传输控制。 网络状态机。

在 POWERLINK 网络中,至少有一个设备做为主站(MN),其他的设备做为从站(CN)。 每个从站设备都有唯一的节点号(NodeId),该节点号是用来区分网络中的设备,取值范围 为 1-239。主站设备(MN)的节点号为 240,主站的作用是为了为协调各个从站,合理分配 总线使用权,避免冲突,实现实时通信。

POWERLINK 的实时通信机制:POWERLINK 有两种通信机制,基于请求/应答模式和

基于定时主动上报模式(PRC 模式)。

2.4.1 基于请求/应答模式

该种模式主站(MN)轮询所有从站(CN)。首先主站发送 Preq 数据帧(PReqCN1)给 1 号从站,该数据帧是单播的,只有 1 号节点接收,其他节点不接收。在该数据帧中包含了

主站(MN)要发送给 1 号从站的数据。当 1 号节点收到来自主站的 Preq 数据帧,就会上报 一个 Pres 数据帧(PresCN1),该数据帧是广播的,除了主站可以接收到以外,网络中其他 任何一个从节点都能收到。主站(MN)与 1 号从节点(CN1)一来(Preq)、一往(Pres),就 完成了一次信息交互;接下来主站(MN)与 2 号从节点(CN2)的信息交互,以此类推,将 网络中所有的节点扫描一次,称为一个循环周期。假定循环周期为 200us,那么网络中的每 个设备每 200us 就有一次收取/发送数据的机会,而且不会与其他设备造成冲突。

该种模式下的性能:完成一个站的通信所需要的时间,取决于物理层的传输速度和需要

传送的数据包大小。

假定物理层为 100M 以太网,该种网络的传输速度为 12.5bytes/us,假定数据包大小为

64bytes(每个 Preq 和 Pres 数据帧最大可传输 1490bytes 的数据),那么完成一个站的通信所

需要的时间:T=Tpreq+Tgap+Tpres

Tpreq:主站发送 Preq 数据帧给从站,时间长度为 64/12.5=5.12us Tpres:从站发送 Pres 数据帧给主站,时间长度为 64/12.5=5.12us

Tgap:Preq 数据帧与 Pres 数据帧之间的时间间隙,约为 2us 因此完成一个站的通信,总时间长度为 12.24=5.12+2+5.12

2.4.2 PRC 模式

在基于请求-应答模式(PREQ-PRES)通信时,从节点什么时候上报自己的数据,取 决于主站什么时候发生请求(PREQ)给它。该种模式省掉了主站的 Preq 数据帧,取而代之

的是一个挨一个的 Pres。有人会问各个从站如何知道自己应该在什么时候上报数据?是否会 出现两个或多个从站同时上报数据?这样岂不是发生了冲突?

该种模式下,POWERLINK 主站在开始通信之前,会去配置从站的参数,告诉每个从

站应该在循环周期的哪一时刻上报。举个例子:假定我们有 3 个从站,主站可以通过配置,

让 1 号从站在收到 PresMN 后的第 5us 上传 PresCN1 数据帧,而 2 号从站在收到 PresMN 后

的第 15us 上传 PresCN2 数据帧,而 3 号从站在收到 PresMN 后的第 22us 上传 PresCN3 数据

帧。这样就避免了冲突。因为 POWERLINK 是基于时间槽的通信,而且 POWERLINK 支持 1588 分布式时钟协议,每个 POWERLINK 节点都有一个时钟,因此 POWERLINK 很方便实 现这种通信模式。

在该种模式下的性能:完成一个站的通信所需要的时间,取决于物理层的传输速度和需

要传送的数据包大小。

假定物理层为 100M 以太网,该种网络的传输速度为 12.5bytes/us。假定数据包大小为

64bytes(每个 Preq 和 Pres 数据帧最大可传输 1490bytes 的数据)。那么完成一个站的通信所

需要的时间 T=Tgap+Tpres

Tpres:从站发送 Pres 数据帧给主站,时间长度为 64/12.5=5.12us

Tgap:Preq 数据帧与 Pres 数据帧之间的时间间隙,约为 2us 因此完成一个站的通信,总时间长度为 7.12=5.12+2 这种通信比基于请求/应答模式至少能提高 30%的效率。 PRC 模式的通信过程: 1.

主站发生广播数据帧 PresMN,主站把多个从站需要的数据在该数据帧里打包,然 后以广播的方式发送出去,各个从站根据配置信息,从该数据帧中取走相应的数据。

2.

该数据帧为标准的以太网数据帧,最大有效数据容量为 1490Bytes。

从站接受到 PresMN 以后,根据主站配置的上报时间,来决定什么时候该上报 PresCN,当定时器到了上报时间,从站就以广播的方式上报 PresCN。该数据帧包

3.

含了主站以及其他从站需要的数据信息。

主站和从站是支持 PRC 模式,还是支持请求/应答模式,是由它自身的参数决定的。 可以通过参数设置,在一个周期内,让某些从节点采用 PRC 模式,而另外一些从

节点采用请求/应答模式。这种搭配使得网络容量可以灵活搭配。

2.4.3 多路复用

在一个系统中,通常有多种不同类型的设备,如有伺服驱动器、I/O、传感器、仪表等。 不同种类的设备对通信周期和控制周期的要求往往不同。假设现在有 3 种设备:伺服驱动器、

I/O、传感器。伺服的控制周期为 200us,而 I/O 的控制周期为 1ms,传感器却不定时的上传 数据。面对如此应用,POWERLINK 如何来解决?

首先解决伺服的 200us 和 I/O 的 1ms 的配置。因为两种设备需要的循环周期不同,如果

将循环周期设为 200us,伺服没有问题,可是 I/O 却会由于通信过于频繁而反应不过来;如

果将循环周期设为 1ms,那么伺服会由于控制周期太长,而达不到精度的要求。

POWERLINK 采用多路复用来解决这个问题。在这里,可以将循环周期设置为 200us, 将伺服配置成每个循环周期都参与通信,将 I/O 配置成每 N 个循环周期参与一次通信,N 是

一个参数,可以设置为任意整数(在这里 N 的值为 5)。这样就可以达到伺服的通信周期为 200us,I/O 的通信周期为 200 x 5=1ms。

如下图所示,有 11 个节点要通信,其中 1、2、3 这三个节点每个循环周期都通信;而

4、5、6、7、8、9、10、11 这 8 个节点为复用节点,这些节点每 3 个循环周期才通信一次。

这样就可以把快速设备和慢速设备经过合理配置达到系统最优。

2.4.4 异步阶段

以上提到了三种不同设备,伺服的控制周期为 200us,而 I/O 的控制周期为 1ms,传感 器却不定时的上传数据。上一节讲述了快速设备(伺服)和慢速设备(I/O)的合理配置。

接下来讲如何配置不定时上传数据的设备(传感器),这种类型的设备称为异步设备。

一个完整的 POWERLINK 周期分为两个阶段:同步阶段和异步阶段。

同步阶段用来传输周期性通信的数据;异步阶段用来传输那些非周期性的通信数据。非 周期通信数据包括:1.异步设备的通信数据,如这里所说的传感器;2.一些设备偶尔需要传

送的参数,例如在某些应用场合伺服周期性传输位置数据,但可能偶尔传输一下扭矩或者温 度数据,这些非周期性传输的数据, 就叫异步数据。这些异步数据会在通信周期的异步阶 段来传送。

从 SoC 数据帧开始到 SoA 数据帧的时间段为同步阶段,SoA 和 AsyncData 为异步阶段。

SoA 数据帧包含了请求哪个从站上报数据,而 AsyncData 数据帧为该从站上报的数据。在每

个循环周期,只能有一个从节点上报异步数据,如果有多个从节点需要异步通信,那么需要 在多个周期内完。

2.5 POWERLINK 的同步机制

POWERLINK 支持 1588 分布式时钟协议,每个循环周期的开始,主站都会广播一个 SoC 数据帧到网络上,该数据帧包含了两个重要信息:网络的绝对时间和相对时间。

绝对时间信息:年、月、日、时、分、秒、毫秒、微秒、纳秒。如下所示:

相对时间信息:从网络开始工作,到现在一共运行了多少 us。

SoC 数据帧有两个功能:时钟同步和动作同步。 时钟同步:网络中的节点需要有一个统一的网络时间

利用网络时间来同步网络中所有设备的分布式时钟,让网络中所有节点的时钟有一 个共同的基准。POWERLINK 主站(MN)在每个循环周期的开始将 SoC 数据帧广播到

网络上,该数据帧包含了网络时间信息,网上的各个从节点可以将这个时间作为统一的 网络时间。

动作同步:网络中的节点需要同时去做一件事情

在 POWERLINK 协议中有两种方法去触发一个同步的事件:1.通过从节点自己的时 钟触发;2.通过 SoC 数据帧触发。这里主要讲通过 SoC 数据帧触发同步事件的原理。

在 POWERLINK 数据链路层里,每当收到了 SoC 数据帧,会触发一个同步的回调

函数,用户可以将同步执行的程序写在该函数里,这样就可以执行同步动作。举例来说,

假设有一个运动控制器,要控制 10 台伺服做同步运动,例如需要 10 台伺服同时启动。 每个循环周期,运动控制器(作为 POWERLINK 的主站)将 10 台伺服所需要的新的位 置信息依次传给各个伺服。每个伺服收到新数据的时间是不同的,第一个和最后一个得 到位置数据的时间可能会差 100 多 us。如果收到新数据,伺服就开始启动,那么就会 出现这种情况:第一个伺服已经开始运转,而最后一个伺服还没有收到数据,这显然不 是我们想要的结果。因此我们需要一个同步信号,使所有的伺服都得到新数据以后,同 时启动。这个同步信号就是 SoC。

主站在上一个循环周期结束(即下一个循环周期开始)时广播一个 SoC 数据帧,基本 上所有的从站会同时收到这个数据帧。该信号触发一个同步回调函数或者硬件中断,来处理

同步事件。因为在 SoC 数据帧之前,每个从站都已经从主站(控制器)那里得到了新的位

置信息,因此 SoC 信号触发的同步事件中可以同时启动,运行到设定位置。

如果是星形拓扑,各个从站收到该信号的时间差取决于线缆的长度,电信号可以认为是

以光速在导线中传播,因此用户可以计算出该时间差。可近似为 1 米为 3.3ns。这个级别的

时间差基本上可以忽略。

如果你采用的是菊花链连接,那么没经过一级 hub 会有 40ns 的延迟,再加上线缆的延

迟,第一个从站和最后一个从站在接受到 SoC 信号的时间差可能会达到几百纳秒甚至微秒,