EtherCAT DC (学习笔记)

1. EtherCAT 同步模式

EtherCAT从站芯片周期性地依次执行计算数据拷贝任务,其工作周期从数微秒到数毫秒不等。通过分布时钟的参数可以精确设置每个EtherCAT从站刷新输出读取输入的时间,以确保主站接收的来自不同从站的输入信号值是在同一时刻获取的,而主站发送给不同从站的输出信号,也能在同一时刻触发所连接的输出电路。

在这里插入图片描述

Ethercat的根本目的就是主站驱动多个从站同步动作。在周期性的通讯中,要达到这个目标,一个通讯周期中的四个时间点最为关键:

  • 1、从站接收到数据包的时间点(主站数据 ←→ 从站DPRAM) SM2

误差1:因为EtherCAT的总线通讯是串行的,所以多个从站接收到数据包的时刻肯定是不一样的。

误差2:另外因为主站自己的偏差,它每次发包的时间间距也是带偏差的,但是这种偏差对所有从站来说都是一样的。

因为以上两种偏差的存在,想单纯的靠提高实时性来达到理想状态的实时性是不可能完成的。这种只能达到us精度的同步。

要实现ns精度的同步,必须依靠DC分布时钟。大家依赖DC协议把自己的本地时钟对齐。对接收数据的时刻可以容忍us级的误差,但是output和input大家在约定的本地时间点同时动作,这样就实现了ns级的同步。

  • 2、从站output的时间点(从站DPRAM → 从站实际硬件)

从站从EtherCAT数据包中获取到的数据会先放到DPRAM中暂存,多个从站在约定的DC时间点,同时输出才能做到真同步。

  • 3、从站intput的时间点(从站实际硬件 → 从站DPRAM)

在下个通讯周期来临之前,从站需要准备好DPRAM中的数据。多个从站在约定的DC时间点,同时采集数据到DPRAM才能做到真同步。

每个从站都同步到主站,意味着不同从站之间也实现了相互的同步。

  • 4、不同从站的output/input硬件性能偏差

通过DC同步以后,多个从站发起output/input的时间点可以做到ns级的同步,但是由于从站硬件性能的不同,实际上的硬件输出时刻还是有偏差。

为了补偿这部分的偏差,EtherCAT针对每个从站设计了补偿参数。

shift time(0x1C32/33:03)、
Calc and copy time(0x1C32/33:06)、
Delay time(0x1C32/33:09)。

关于从站应用相对主站循环的时间关系,EtherCAT定义了3种主要的同步模式(synchronization modes):

  • 1、Free Run (非同步): 从站的过程数据处理,由内部事件触发,与主站循环无关。

  • 2、SM-Synchronous: 从站的过程数据处理,由接收到携带过程数据的周期性数据帧时所产生的硬件中断触发.

  • 3、DC-Synchronous: 从站的过程数据处理,由基于分布时钟和系统时间的硬件中断触发。.

支持DC功能的从站,其同步模式在 TwinCAT 中的“DC” 页面进行配置 (每个从站的同步模式互相独立):

在这里插入图片描述
带有分布时钟的EtherCAT从站可以设置其工作模式:

Free Run,EtherCAT从站并不与EtherCAT主站同步。从站各自触发输入或输出,与参考时钟无关。 

synchronize with SM event,EtherCAT从站检测到数据帧经过时触发读取输入或者刷新输出的动作。如果数据帧中有本站的Output数据即触发SM2事件,如果数据帧中只Input数据就触发SM3事件。 

synchronize with SYNC event,EtherCAT从站根据本地DC时钟的同步脉冲SYNC0或者SYNC1来确定读取输入或者刷新输出的时间。

1.1 Free Run 模式

从站的过程数据处理,由内部事件触发:

不用定义周期性数据帧与从站本地应用程序之间的时间关系

各个“Free Run” 模式的从站之间,其时间偏移量不固定

适用于处理信号变化缓慢的 I/O 设备 (比如温度信号 …)

在这里插入图片描述
在这里插入图片描述

1.2 SM-Synchronous 模式

从站的过程数据处理,在接收到周期性数据帧时触发.

同步不准的第1个原因: 所有从站接收的周期性数据帧具有同样的抖动(Jitter),该抖动值受发送此帧的主站影响。

同步不准的第2个原因: 即使没有抖动(Jitter),受实际硬件传播延时的影响,最末端的从站接受数据帧的时间必然晚于第一个从站的接收到该数据帧时间。

适用于PLC控制的 定位动作。

在这里插入图片描述

因为是受接收数据包事件驱动的,由于两个原因误差的存在,多个从站接接收到数据包的时刻肯定是不同步的。这种输出时间误差是us级的,可以用在一些慢速设备上面,例如一些PLC控制的设备。

在这里插入图片描述

1.3 DC-Synchronous 模式

从站过程数据的处理,由从站中基于DC系统时间产生的硬件同步事件(SYNC Event)触发。

基于分布时钟的系统时间(DC System Time), 在每个DC从站的内部产生硬件同步事件。

每个从站中的触发事件不受主站抖动和传播延时的影响。

适用于 NC任务控制的伺服驱动,以及超采样的IO模块

在这里插入图片描述

DC模式可以容忍主机数据更新到从机DPRAM的时间点不一致,但是从机把数据从DPRAM更新到实际硬件的数据能做到高精度的一致。多路电机的同步控制,需要这种高精度的同步。

在这里插入图片描述

1.3.1 Time Shift

在主站和从站应用程序的循环起始点之间总是需要若干偏移时间 shift, 以使所有从站都能在它的循环程序开始之前接收到数据:

在这里插入图片描述

在 DC-synchronous模式,在主站和从站应用程序的循环起始点之间总是需要若干偏移时间 shift, 以使所有从站都能在它的循环程序开始之前接收到数据:

在这里插入图片描述

  • 主站配置

通过主站的 SYNC Shift Time 设置所有DC同步模式的从站的时间偏移. 可以分别设置两个不同的 SYNC Shift Time 参数:

在这里插入图片描述

TwinCAT 自动把 SYNC Shift Time for Outputs 的默认值设置为通讯周期(communication cycle time)的30%,而 SYNC Shift Time for Inputs 的值与 TwinCAT 版本有关):
在这里插入图片描述

这个默认值是一个很好的平衡,在绝大部分实际的应用项目中可以确保实现正确的时间同步。

只有非常有挑战性的应用项目(任务周期极短,从站数量极多),或者EtherCAT网络启动后发生了同步错误,才需要更精确地评估并调整 SYNC Shift Time 的默认值。

  • CurTaskTime

在TwinCAT中,SYNC Shift Time 的参考点称为 CurTaskTime, 对应于周期性数据帧第1次到达参考时钟设备 (网络中第1个 DC从站)的时间。

在这里插入图片描述

注意:应该是TwinCAT包装出了Input SYNC0Output SYNC0两种配置。对EtherCAT协议来说应该就一个SYNC0信号,Output Valid = SYNC0 + 从站Output Shift TimeIntput Latch = SYNC0 + 从站Intput Shift Time

1.4 DC-Synchronous 模式细调

以Output为例,在上一节的DC模式中通过设置主站的SYNC Shift Time for Outputs参数设置了所有从站SYNC0事件的同步。SYNC0事件定义了CurTaskTime到从站开始执行Output动作的时间。

但是由于从站硬件间的差异,大家同时开始执行输出动作,但是到实际输出电信号到执行机构上的时间是不一样的。为了消除这个差异,需要调试从站内部时序(internal timings)。让多个从站的Outputs ValidInput Latch事件保持高度一致。

每个 DC-Synchronous 的从站给本地事件(Local Event)定义内部时序(internal timings)。本地时序的参考点就是同部事件(SYNC event), 通过SYNC Shift Time 依次设定。

在这里插入图片描述

需要特别说明的是,在从站内部循环里面最重要的两个的本地事件:

Output Valid(输出生效):从站设置现场物理输出信号的时刻,输出数据接收自主站上一个通讯周期发来的数据帧。
Input Latch(输入锁存):从站采集现场物理输入信号的时刻,输入数据将在下一个通讯周期的数据发送到主站。 

在这里插入图片描述

1.4.1 0x1C32/33 对象字

从站通过通过标准的CoE对象0x1C32和 0x1C33描述内部时序。其中0x1C32描述Output,0x1C33描述Input。
请注意0x1C32/33是一个CoE对象,而不是一个寄存器,每个对象包含0x20个寄存器:

在这里插入图片描述

EtherCAT从站的参数保存在E2PROM中,而供外部访问的参数则封装成CanOpen对象字的形式。通过参数0x1C32 和 0x1C33的不同组合,可以确定分布时钟的工作模式,组合方式如下:
在这里插入图片描述

从站能支持的同步模式定义在0x1C32/33:04的子索引Synchronization Types supported 中:
在这里插入图片描述

1.4.2 最小循环时间 (0x1C32/33:05)

每个从站为了完成所有内部任务需要的最小循环时间,包括过程数据的交换, 邮箱通讯, 状态机处理, 应用相关的功能等等, 最小循环时间取决于多个因素,比如应用的复杂程度以及要交换的过程数据量:
在这里插入图片描述

对于链接到 DC-Synchronous 从站的任务,应该确保 主站通讯周期(Communication Cycle Time )≥ (从站最小循环时间)Minimum Cycle Time,否则从站应用就可能跟不上主站通讯的节拍。

如果为了确保主站通讯周期大于所有从站的最小循环周期,不得不严重限制某些DC及非DC从站的通讯周期,以至于需要快速响应的任务不能执行,建议使用周期不同的多个任务,并把每个从站链接到适当周期的任务。

1.4.3 输入/输出偏移时间 (Output/Input Shift Time ) (0x1C32/33:03)

从站可以选择支持硬件刷新( Output Valid and/or Input Latch )的软件偏移时间(Shift Time)。如果这个SubIndex可写,主站/用户就可以在从站周期的范围内对硬件刷新事件(Output Valid and/or Input Latch)的触发时间进行微调。
在这里插入图片描述

从站通过以下界面处配置Output Shift Time/Input Shift Time

每个DC-Synchronous模式的从站都配置为使用主站的SYNC Shift Time 作为输出偏移或者输入偏移, 从来不会同时用作输出偏移和输入偏移。在ESI文件中有标明 SYNC Shift Time 是用作输入还是输出偏移,并显示在TwinCAT的从站设置页面。

如果在slave Advanced Settings 中使用默认设置的 “Based on Input Reference”标记,主站在对从站进行初始化时就会使用 SYNC Shift Time 作为输入的同步偏移时间 …

否则就使用SYNC Shift Time 作为输出的同步偏移时间

在这里插入图片描述

从站“Advanced Settings”中 “Shift Time ”的显示值是从站同步脉冲相对于主站“Advanced Settings”中的SYNC Shift Time For Output 的偏移量。
如果把参考点的差异考虑在内,绝对偏移量与主站中的 Advanced Settings设置是一致 (但是,如果从站置了自定义的偏移量):

在这里插入图片描述

与主站设置中的全局性的 SYNC Shift Time 参数不同,大部分从站 Advanced Settings 中的DC分布时钟参数是从它们的ESI(EtherCAT Slave Information)文件提取的:这些参数由从站的生产厂家决定,保证实现正确的操作,用户切勿修改。(ENI: EtherCAT Network Information)

在这里插入图片描述

1.4.4 Synchronoµs with SYNC event模式(带Shift参数)

有了上一节可配置的Output Shift Time/Input Shift Time,可以在DC模式上进一步对本从站的硬件刷新事件(Output Valid and/or Input Latch)的触发时间进行微调。

从站时钟触发的Sync0事件决定了各种任务的开始时间,Sync0后立即运算和复制内存,但并不驱动硬件,而是延迟一段时间再驱动硬件。

  • 对于输出信号,延时的时间就是在Sync0之后延时Output Shift Time(0x1C32:03)减去硬件状态切换需要的时间Delay Time(0x1C32:09),触发输出(Start Driving Outputs)动作。

Shift Time取值应该大于硬件输出转换速度最慢的那个从站的值,每个从站在自己的Delay Time的补偿下,通过不同时刻来启动Start Driving Outputs,达到从站间Outputs Valid动作一致。

  • 对于输入信号,则是在Sync0之后延时Input Shift Time(0x1C33:03)减去硬件状态获取需要的时间Delay Time(0x1C33:09),再触发状态获取(Start Latch)动作。

Shift Time取值应该大于硬件输入转换速度最慢的那个从站的值,每个从站在自己的Delay Time的补偿下,通过不同时刻来启动Start Latch,达到从站间Input Latch动作一致。

如图所示:
在这里插入图片描述

需要注意的是:这张图里描述的ouputCalc + Copy Time的位置有些不合理,正确的做法应该是上上节图中的画法,在SM2信号以后。

与不带Shift参数的Synchronoµs with SYNC event模式相比,这种方式可以通过调整Shift Time来补偿由于硬件型号不同导致的 1C32:09(Hardware Delay Time)的差异,实现目标DC从站的最终输出电路刷新的时间严格一致。当然设置的1C32:03(Shift Time)必须大于硬件所需的 1C32:09(Hardware Delay Time)之和。同样道理,输入延时时间的设置,也必须考虑到硬件所需要的输入转换时间。

1.4.5 Sync1信号配置

有的EtherCAT从站带两个分布时钟,可以触发两个事件:Sync0和Sync1。

Sync1用来继续保持与其它DC从站同步,Sync0用于从站的内部采样。

有的EtherCAT从站带两个分布时钟,可以触发两个事件Sync0和Sync1。设置细分倍数n,Sync0的周期就是Sync1的周期平均细分成n等份的值。Sync0的时钟就称为子时钟,在一个Sync1周期内,重复n次触发输出和输入动作,这就叫Over Sampling。 每一次动作的原则与Synchronoµs with SYNC event模式(带Shift参数)相同。

如图所示:
在这里插入图片描述

应用实例:有一些从站(e.g. 大部分伺服驱动器),两个同步信号(SYCN0 和 SYNC1)都启用了,其中SYNC1与通讯周期同步,而SYNC0以更高的频率用于触发内部电流环。
在这里插入图片描述

1.5 I/O at Task End 及 I/O at Task Begin

CurTaskTime 通常是所有DC时间的参考点。

TwinCAT主站调整软件任务 (PLC, NC, …) 的开始时间,以保持 CurTaskTime 为恒定的时间间隔 (该间隔对应于软件配置的任务周期):
在这里插入图片描述

对于执行时间波动较大的任务,连接到“I/O at Task End” 操作, 要维持 CurTaskTime 稳定可能会非常困难甚至是不可能的,可能会导致EtherCAT网络报告同步错误。可能的解决方案是:

增加 SYNC Shift Time 的值
把 “I/O at Task End” 改成 “I/O at Task Begin” 

TwinCAT 主站发送 EtherCAT 数据帧的时间与任务循环的时间可以有两种关系:I/O at Task End 及 I/O at Task Begin。
在这里插入图片描述

在 TwinCAT 3 中, PLC 任务和 C++ Modules 都不提供 “I/O at Task Begin”的标记。此时可以使用属性 TcCallAfterOutputUpdate 实现同样的功能。

1.6 独立的输入刷新

TwinCAT 主站提供一特别的选项,为输入信号发送一个独立的数据帧来收集输入信号。如果选中了 “Separate input update” 选项,EtherCAT主站就会配置一个独立的数据帧来读取输入过程数据 (这个选项可用于减少 input-output 响应时间):
在这里插入图片描述
需要设置这个独立的读取Input数据包的发送时间。Pre ticks 参数是 TwinCAT Base Time 的整数倍,它代表 发送输入数据帧的时间 相比于软件任务开始时间 的提前量。
在这里插入图片描述

1.7 “SYNC Shift for Outputs” 的估算

当需要对 “SYNC Shift for Outputs” 进行优化时,可以通过以下分量的代数累加估算其最小时间

分量1、从站内部电路引起的硬件延时 ( 从参考时钟 Reference Clock 开始):

1 µs * MII 端口的从站数量 + 0.3 µs * EBUS 接口的从站数量

分量2、电缆引起的硬件延时(从参考时钟 Reference Clock 开始):

5.3 ns/m * 网络中的铜缆长度 [单位 m]

分量3、主站的Jitter 最大值 (正偏差):
在这里插入图片描述

分量4、最高优先级的软件任务的执行时间的波动幅值 jitter (仅当设置为 “I/O at Task End”).
在这里插入图片描述

分量5、多任务配置时, Σ 各个任务的执行时间求和,连接到DC同步从站的第2个到最后一个任务的执行时间求和。 (第1个任务的循环周期也应当包含在总和中,除非第1个任务配置为 “I/O at Task Begin”)
在这里插入图片描述

分量6、一定的公差余量…

1.8 “SYNC Shift for Inputs” 的估算

必要时,可以通过以下分量的代数累加估算“SYNC Shift for Inputs” 的最小时间:

分量1、主站通讯的最大 jitter (负偏差):
在这里插入图片描述
分量2、对于工作在 “Based on Input Reference” 模式下的那些从站,它们的 minimum cycle times (0x1C33:05) 的最大值

分量3、Pre ticks 对应的时间 (仅当激活了 “Separate input update” 模式).

分量4、最高优先级的软件任务的执行时间的波动幅值 jitter (仅当设置为 “I/O at Task End”).
在这里插入图片描述

分量5、一定公差余量…

1.9 时序示例

  • 时序示例 1

本例 基于以下设置:

任务设置为 “I/O at Task End”
读取数据和写入数据到 同一个Input and Output 从站

在这里插入图片描述

  • 时序示例 2

本例 基于以下设置:

任务设置为 “I/O at Task End” 以及 “Separate Input Update”
读取数据和写入数据到 同一个Input and Output 从站

在这里插入图片描述

  • 时序示例 3

本例 基于以下设置:

任务设置为 “I/O at Task Begin”
读取数据和写入数据到 同一个Input and Output 从站

在这里插入图片描述

  • 时序示例 4

本例 基于以下设置:

任务配置为 “I/O at Task End”
从 Input 从站读取数据,写入数据到 Output从站

在这里插入图片描述

  • 时序示例 5

本例 基于以下设置:

任务配置为 “I/O at Task End” 以及 “Separate Input Update”
从 Input 从站读取数据,写入数据到 Output从站

在这里插入图片描述

2. EtherCAT DC

在这里插入图片描述

Distributed Clocks 分布时钟模式可以实现EtherCAT网络上所有本地时钟的同步包括主站和所有DC从站最大偏差 ≤ 100 ns。

  • System Time: 系统时间,即所有DC同步设备共同使用的时间
从2000年1月1日零点开始。
单位是 ns 
长度 64-bit (足可表达超过500年的时间)
低 32-bits 可以表达 4.2 秒 (通常可满足时钟同步和时间戮应用)
  • Reference Clock: 参考时钟,即决定系统时间 System Time 的从站设备, 默认为EtherCAT网络中首个配置为DC同步模式的从站 (此设置不可更改):
“从站”,这是为了获得完全基于硬件的高精度的参考时钟,
“首个”, 这是为了在一个通讯周期内向所有其它DC同步模式的网络设备(包括主站和所有DC从站)发布系统时间 System Time
  • 因此,把EtherCAT网络中的 DC-Synchronous 设备归为两类:
Reference Clock: 首个 DC-Synchronous 从站
Slave Clocks: 所有其它 DC-Synchronous 从站+ (默认) 主站

在这里插入图片描述

  • Potential Reference Clock 潜在的参考时钟?

Reference Clock 参考时钟不是必须要求用网络中的正正第1个DC从站,但建议也不要离主站太远。
考虑到在有的情况下参考时钟的时间基准有可能出现偏差 (e.g. 由于多个DC同步的从站报告了同步错误),建议启用网络拓朴中离主站最近的DC从站作为参考时钟。

2.1 同步的过程

本地时钟的硬件同步分为两个环节: 2 phases:

1.Initial synchronization(初始同步): 主站对齐所有的DC从站时钟到最大容许误差以内。   (典型误差 < 100 ns).

2.Drift compensation(漂移补偿): 连续保持本地时钟与参考时钟同步,以抵消时钟漂移的影响 。(时钟漂移来自不同的晶振频率、热效应或者老化程度上的细微差别)

在这里插入图片描述

1.1 Initial Synchronization (Step 1): 初始同步阶段的第1步,主站发送一个广播的写命令到地址0x0900,强制所有从站锁存其每个端口的本地时间,然后从返回的数据帧中读取所有获取到的时间戮。
在这里插入图片描述

1.2 Initial Synchronization (Step 2):初始同步阶段的第2步,基于这些收集回来的时间戮,the 主站计算每个DC同步的从站的偏移和延时,并把这些值写入DC从站各自的专用内存地址。 (从站会在本地时间控制器中使用这些参数)

Offset:偏移,从站本地时间“0”和绝对系统时间(TwinCAT从TC Time中提取的)的差值。
Delay:延时,参考时钟和从站之间的传播时间。

在这里插入图片描述

需要特别注意:在step1、step2计算offsetdelay的时候,因为ethercat闭环传输的特点,主站包到从站的路径从站包到主站的路径长度是不一样的。和通用的IEEE1588协议不一样,需要注意ethercat的计算方法。

1.3 Initial Synchronization (Step 3):初始同步阶段的第3步,为了让参考时钟Reference Clock 和所有DC从站时钟都共享系统时间System Time,主站发送许多个ARMW 命令到从站的内存地址 0x0910,触发每个从站的本地时间控制器微调本地时钟,以尽量缩小和系统时钟的差值, (把 偏移Offeset 和 延时Delay 计算在内)
在这里插入图片描述

经过step1、step2以后,所有的slave clockreference clock已经保持一致。但是reference clock本身可能会产生漂移,为了保持同步,step3让所有的slave clockreference clock同步漂移。

1.4 Initial Synchronization (Step 4):初始同步阶段的第3步, 主站读取每个从站的内存地址0x092C,以检查所有分布时钟与系统时钟的差值都在最大容许误差以内 (e.g. < 100 ns) :
在这里插入图片描述

如果没有达到要求的同步精度,则重复第3步和第4步。

2.Drift Compensation : 漂移补偿,为了使各个从站的本地时钟在运行过程中保持对齐,主站在周期性数据帧中增加一个 ARMW(对时)命令,和初始同步阶段发送的ARMW命令一样:
在这里插入图片描述

每次接受到ARMW(对时)命令,从站就会调整它的本地时钟的速度,所以这个命令应当以足够高的频率发送,才能保证良好的漂移补偿。由于ARMW命令是和周期性数据帧一起发送的,所以它的发送频率取决于任务周期。链接到所有DC同步从站的一个或者多个任务中,最高优先级的那个任务周期,不应当超过2-4ms。

2.2 同步监视

在EtherCAT主站的Advanced Settings 中的Distribut Clock选项里勾选 “Sync Window Monitoring” 标记后,激活配置。如果网络中DC从站的本地时钟的最大偏差超过了配置的阀值,主站的周期性变量DevState的 Bit 12 就会变成 1.
在这里插入图片描述

2.3 SYNC 和 LATCH 信号

本地时钟同步到系统时间后,每个DC同步的从站就可以同步处理“数字事件” digital events:

SYNC signals: 同步信号,这是供EthrCAT芯片使用的数字输出信号,只在指定的系统时间触发。 (前面已经介绍了把同步信号作为硬件中断, 用于同步 DC同步 模式下的从站应用)

LATCH signals: 锁存信号,这是供EtherCAT芯片使用的数字输入信号,用于锁存该信号触发瞬间的系统时间值 ( 该值可以通过周期性数据或者非周期性访问发送给主站)

在这里插入图片描述

2.4

3. IEEE1588

3.1 IEEE1588 (PTP) 协议简介

IEEE1588 协议,又称 PTP (precise time protocol,精确时间协议),可以达到亚微秒级别时间同步精度,于 2002 年发布 version 1,2008 年发布 version 2。

IEEE1588 协议的同步原理,所提出的 Delay Request-Response Mechanism(延时响应机制)如图所示。
在这里插入图片描述

  • 图中所描述的 PTP 报文为以下几种:
(1)sync 同步报文
(2)Follow_up 跟随报文
(3)Delay_req 延迟请求报文
(4)Delay_resp 延迟请求响应报文
  • 延迟响应同步机制的报文收发流程:
1. 主时钟周期性的发出 sync 报文,并记录下 sync 报文离开主时钟的精确发送时间 t1;
(此处 sync 报文是周期性发出,可以携带或者不携带发送时间信息,因为就算携带也只能是预估发送时间戳 originTimeStamp)

2. 主时钟将精确发送时间 t1 封装到 Follow_up 报文中,发送给从时钟;
(由于sync 报文不可能携带精确的报文离开时间,所以我们在之后的 Follow_up 报文中,将 sync 报文精确的发送时间戳  t1 封装起来,发给从时钟)

3. 从时钟记录 sync 报文到达从时钟的精确时到达时间 t2;

4. 从时钟发出 delay_req 报文并且记录下精确发送时间 t3;

5. 主时钟记录下 delay_req 报文到达主时钟的精确到达时间 t4;

6. 主时钟发出携带精确时间戳信息 t4 的 delay_resp 报文给从时钟;

这样 从时钟处 就得到了 t1,t2,t3,t4 四个精确报文收发时间。

  • 时钟偏差 & 网络延时

offset : 时钟间偏差(主从时钟之间存在时间偏差,偏离值就是 offset,图1 中主从时钟之间虚线连接时刻,就是两时钟时间一致点)

delay : 网络延时(报文在网络中传输带来的延时)

从时钟可以通过 t1,t2,t3,t4 四个精确时间戳信息,得到主从时钟偏差 offset 和传输延时 delay:

在这里插入图片描述

从时钟得到 offset 和 delay 之后就可以通过修正本地时钟进行时间同步。

  • PTP报文分类

IEEE1588 把所涉及到的报文分为 事件报文通用报文,分类依据是:是否在收发报文时需要记录精确时间戳,根据上文中所描述的几种报文,可以进行如下分类:

事件报文 < 收发时候需要记录精确时间戳 > :sync 报文,delay_req 报文

通用报文 < 收发时候不需要记录精确时间戳 > :follow_up 报文,delay_resp 报文

Note:

1. 因为需要高同步精度,选取的时间都是精确时间戳
2. sync 同步报文是周期性从主时钟向从时钟以广播的形式发出
3. 时钟偏差延时的计算在从时钟中进行,所以需要把 t1,t2,t3,t4 四个时间戳信息都发往从时钟,所以需要  follow_up 报文和  delay_resp 报文的存在

3.2 IEEE1588 verision 2 报文介绍

  • PTP 报文

PTP verision 2 报文是由 报头 / header,主体 / body 和 报尾 / suffix 组成,报尾长度可能为 0 ;

PTP verision 2 报文在 verision 1 的 五种报文(sync 同步报文、follow_up 跟随报文、delay_req 延迟请求报文、delay_resp 延迟响应报文 和 management 管理报文)的基础上,

增加了点延迟机制( peer-delay mechanism )中的 三种报文( Pdelay_req 报文、Pdelay_resp 报文 和 Pdelay_resp_Follow_up 报文 ),signaling 信号报文,announce 声明报文 这五种新报文;

根据报文收发过程中,是否需要记录精确时间戳 分为 事件报文 / 通用报文。

  • PTP 报头结构

在这里插入图片描述

介绍 PTP 报文报头中一些域:

(1)messageType,【报文类型】( 0.5 个 octet = 4 bits),不同的值代表不同的PTP报文

(2)versionPTP,【PTP版本】,(0.5 个 octet = 4bits ),PTP version1的话此处值为1,PTP version 2 的话此处值为 2
“The value of the versionPTP field shall be the value of the portDS.versionNumber member of the data set of the originating node."

(3)domainNumber,【PTP域序列号】,(1 个 octet = 8 bits ),对于普通时钟和边界时钟,此处值为数据集中 defaultDS domainNumber 这个变量
"For ordinary or boundary clocks, the value of domainNumber shall be the value of the defaultDS.domainNumber member of the data set of the originating ordinary or boundary clock."

(4)flagField,【标志域】,( 2 个 octets = 16 bits ),典型的如二步标志域(twoStepFlag)为 1 表示是二步模式,即同步报文之后有跟随报文     

(5)correctionField,【修正域】,( 8 个 octets = 64 bits ),传送透明时钟的驻留时间、点对点透明时钟的链路延时以及非对称补偿
"The correctionField is the value of the correction measured in nanoseconds and multiplied by 216. For example, 2.5 ns is represented as 000000000002800016"

(6)sourcePortIdentity,【源端口号】,( 10 个 octets = 80 bits ),发送端口的相关属性     
“The value of the sourcePortIdentity field shall be the value of the portDS.portIdentity member of the dataset of the port that originated this message.”

(7)sequenceID,【序列号】,( 2 个 octets = 16 bits ),为了区分多条发送端口相同的同一类型的报文 

(8)controlField,【控制域】,( 1 个 octet = 8 bits ),此处的值由报文类型域的值决定,即根据报文类型不同取值不同

(9)logMessageInterval,【对数报文时间间隔】,( 1 个 octet = 8 bits ),包括发送声明报文的对数时间间隔,发送同步报文的对数时间间隔,发送延迟请求响应报文的对数时间间隔,它们的值是以2为底取的对数
  • PTP报文介绍

主要介绍 sync 同步报文、delay_req 延迟请求报文、follow_up 跟随报文 和 delay_resp 延迟响应报文 四种报文的报文主体 body 部分。

主要介绍 sync 同步报文、delay_req 延迟请求报文、follow_up 跟随报文 和 delay_resp 延迟响应报文 四种报文的报文主体 body 部分。

1.sync 同步报文 & delay_req 延迟请求报文

两种报文具有相同的报文主体,originTimeStamp 时间戳都是由历元,秒数和纳秒数构成的 80bits 时间戳信息
在这里插入图片描述

2.follow_up 跟随报文
在这里插入图片描述

3.delay_resp 延迟响应报文
在这里插入图片描述

参考文档

  1. EtherCAT分布时钟技术及其工业应用

  2. 1_EtherCAT Functional Principle_cn.ppt

  3. 2_EtherCAT Diagnostics - cn.ppt

  4. 3_EtherCAT Synchronization -cn.ppt

posted @ 2021-03-03 19:14  pwl999  阅读(2654)  评论(0编辑  收藏  举报