EtherCAT总线通信Freerun、SM、DC三种同步模式分析

EtherCAT总线通信Freerun、SM、DC三种同步模式分析EtherCAT总线三种同步模式分析一、分布式时钟作用使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。二、名词解析1、 现场总线高速数据传递:即主站周期的向从站发送输出信息并周期地读取从站的输入信息2、 OutputValid:输出有效,指的是主站输出有效,表示的是从站将数据帧中对应数据从同步管理器通道上下载下来的一个过程。3、 InputLatch…

大家好,又见面了,我是你们的朋友全栈君。

EtherCAT总线三种同步模式分析

一、 分布式时钟作用

使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。

二、 名词解析

1、 现场总线高速数据传递:即主站周期的向从站发送输出信息并周期地读取从站的输入信息
2、 Output Valid:输出有效,指的是主站输出有效,表示的是从站将数据帧中对应数据从同步管理器通道上下载下来的一个过程。
3、 Input Latch:输入锁存,锁存信号(LATCH0/1)用于给外部信号打上时间戳(time stamp) (在DC模式下主站对时的过程中,一般指的是从站锁存主站数据帧到达的时间戳,然后将该时间戳数据写入到同步管理器通道上,让主站取走方便主站进行从站之间时间偏移补偿和漂移补偿)。
4、 (Output)Shift Time:指的是主站发送数据帧的起始时间到与从站Sync0 Event事件信号触发之间的时间间隔。
5、 (Input)Shift Time:只对输入模块有效,表示输入有效信号,指的是Sync0 Event事件信号后的一个固定延时时间或者Sync1 Event事件信号,用于设置Input Latch触发信号。
6、 SM Event:EtherCAT总线通信的机制就是Frame数据帧到达从站后会触发SM Event事件信号
7、 Sync0 Event:同步事件信号是由我们在主站TwinCAT上自定义的一个时间同步触发事件信号,SYNC0 是最常用的同步信号,由DC产生,固定周期触发
8、 Sync1 Event:指的是Input Latch输入锁存的一个事件触发信号,SYNC1信号不独立存在,通常是在SYNC0触发之后,延时一段时间触发,SYNC1触发周期可以是SYNC0的整数倍

三、 EtherCAT网络中各个站点之间时钟计数不一致的两个原因

1、时钟偏移:各个站点启动的顺序不同,初始化流程也不同,因此各个从站本地时钟开始计数的时间本身就是不一致的,这种偏差被称为时钟的偏移
2、时钟漂移:受不同温度、寿命与物理特性的影响,各个时钟的晶振源的频率并不完全一样,因此随着运行时间的增加,原本一致的时钟也会逐渐产生偏差,这种偏差被称为漂移

四、 时钟偏移和时钟漂移分别的解决思路

1、针对时钟偏移->偏移补偿(初始化)

1.  记录主站时间并广播一个锁存各从站时钟的报文。(DC下是记录第一个从站的时间)
2.  依次读取各从站被锁存的时间,计算锁存的从站时间与记录的主站的差。(计算其他从站与第一个从站的时间差)
3.  将这各个从站的时钟差值附加到从站的本地时钟上。

2、针对时钟漂移->漂移补偿(定期)

  1. 在从站中选择第一个支持分布式时钟功能的站点作为参考时钟。
  2. 在位移补偿之后,主站在每个周期中对参考时钟的时钟计数执行单读单写(RMW)指令,读取其时间并广播到其他从站中。
  3. 其他从站会将自身时间与接收到的参考时间进行比较。比参考时钟快的从站会降低计数器在每次晶振震动时的加值,而较慢的从站会增加计数器的加值。
  4. 动态补偿在系统的整个运行阶段内持续运行,保证时钟都始终维持收敛。

五、 分布式时钟的三种同步模式

1 Free Run模式

在这里插入图片描述
1、每个从站的定时周期都不一样
2、每个定时周期到的时候,每个从站去执行自己的程序,<比如检查通道上有没有合适的新的输入数据,有的话就令其输出有效(Output valid)或者检查有没有需要输入的数据,将其放到对应的同步管理器通道上(input prepare)让主站取走>
3、对于Free Run 模式而言,好比每个人都有自己的手表,但是如果没有一起对时的话。手表的本身的时间是不一样的(可能表和表之间存在时间差,一个8点一个10点),那么在这种情况下,公司如果要求9点上班,那么每个人到公司的时间都是自己手表上的9点,但是不是统一的9点,他们到达公司的时间是不一样,所以Free Run模式没有任何的同步性可言

2 SM同步机制(Sync Manager同步管理器)

在这里插入图片描述
在这里插入图片描述
1、一般而言,如果EtherCAT总线通讯时的同步模式不是DC模式,那么就是SM同步模式了,
2、SM(Sync Manager同步管理器)指的是同步管理器的同步,它的触发方式是通过SM Event,也就是我们的数据帧在到达对应的从站的时候,会触发一个叫做同步管理器事件的信号(即SM Event),当从站接受到这个信号的时候,会进入到对应的中断服务例程(即中断保存当期任务,去执行插入的中断例程,这里指线程中断处理相关数据,这也是SM Event和 Free Run的不同之处),即SM是通过中断服务例程来处理对应的数据。
3、从站检测到SM Event事件信号的时候会进入到中断服务例程去处理相应的数据(比如把输出数据有效,然后把输入数据放到同步管理器的通道上让主站取走)
4、由于SM同步模式是根据数据帧到达特定从站的时候来触发SM Event事件信号来进行同步,那么对于一个特地给的帧来说,它到达每一个从站的时间必然是不同的,当系统很庞大的时候,每个从站接收到数据帧的时间就会相差很大,越在后边的从站接收到数据帧的时间就越晚,它的同步效果就越差。
5、手表举例:10个人10个表,10个人开始对表,从0开始计时,当上一个人完成了对表计时之后,才通知到下一个人进行对表计时,依次传递,那么到最后的第10个人它开始计时的时间是最晚的。完成对时之后,如果公司要求是10点上班,每个人按照自己手表上的10点到达,那么第10个人一定是最晚的。

3 简单DC同步机制(Sync0 Event)

1、Sync0 Event和SM Event事件信号是类似的,他们都是一个中断事件信号,对于一个从站而言,如果中断信号触发了而且中断屏蔽寄存器没有屏蔽掉该中断信号,那么从站就会进入到中断服务例程
2、中断服务例程就是说从站从主循环中跳出,暂停并保留主程序状态,然后执行中断服务例程这一部分内容,比如说周期性数据的输出<周期性数据的实时性比较强,那么中断信号可以满足这种比较强的实时性需求,不会因为其他信号来耽误它的操作,其它的中断信号会进入等待状态直到前一个中断信号被恢复,即进入到恢复现场阶段>
3、不同于SM Event的地方是Sync0 Event是根据我们自己设定的延时时间触发而不是帧到达时候才触发
4、注意,虽然简单DC同步机制中没有用到SM Event事件信号,但是它依旧是存在的,因为只要当Frame帧到达从站的时候就会触发SM Event事件信号,这里只是不用到该信号来进行触发而已,(但是应该明白不管是哪一种同步机制,SM Event都是存在的,当从站接受到数据帧的时候都会产生SM Event事件信号)

4 简单DC同步机制的时序分析

在这里插入图片描述
1、除了Sync0 Event信号之外,还可以看到有一些其他的信号,包括Output Valid和Input latch信号,像这些信号都是TwinCAT主站在初期设置的时候可以设置的内容,Output Valid表输出有效,实际上是主站在Sync0 Event事件信号触发后的基础上作了一定的时间偏移
2、偏移时间(Output Delay Time)是可以在TwinCAT上看到并且可以手动调整的
3、Input Latch的偏移时间也是在TwinCAT上可以调整的,所以说以上两部分内容都是可以灵活设置的
4、手表举例:10个人10快手表,它们的时间在和参考时间对时之后,每个人的时间都是和参考时间同步,他们的时间是一样的,公司要求9点上班,那么他们按照各自的时间准时达到也是一致的。

5 DC同步机制优化

在这里插入图片描述
1、优化的DC模式同时使用了SM Event事件信号和Sync0 Event事件信号,而简单DC同步机制只是使用Sync0 Event这一种事件信号进行同步,《同样应该明确的是,无论使用哪一种同步模式,只要当数据帧Frame到达从站的时候都会触发对应的SM Event事件信号》
2、==在这种优化的DC模式中,当对应的SM Event事件信号触发后,从站会进入到中断服务例程进行数据的处理《把数据帧Frame中对应的所需数据进行计算,然后复制到管理器通道对应的用户区域,等待Sync0 Event同步信号触发之后让从站取走,然后SM Event中断完成,恢复现场》,==然后等待Sync0 Event信号的触发到来,也就是同步信号的触发,可以看到由于之前SM Event中断中已经完成了前期数据的处理,当Sync0 Event同步信号触发时,程序进入到中断服务例程,就只需要很短的一段Output Delay Time,马上就进入到Output Valid(输出有效)状态。
3、这种优化版的DC同步机制相对于之前的简单DC模式,优点就是Output Delay Time输出延时没有那么长了,主要是因为第二种优化的DC模式利用SM Event事件信号的触发完成了前期从数据帧中对应从站数据的计算和复制到管理器通道上,所以当Sync0 Event同步信号触发后,只需要从管理器通道取走已经计算并复制好了的数据,进入到输出有效Output Valid的延时时间自然就比较短了,而第一种简单的DC模式只是使用到了Sync0 Event同步信号,所以当Sync0 Event触发后,需要在Output Delay Time时间内完成数据的复制和计算,所以简单DC模式下的Output Delay Time延时时间就会比较长。

6 DC同步丢帧

1、问题描述:在使用DC模式的时候会出现一种同步丢帧的情况,就是说数据帧在到达尾端从站之前,所有从站的Sync0 Event同步事件信号就已经触发了,也就是说数据帧传输的太慢,可能还来不及到达尾端从站,但是它的同步事件信号已经触发了,而此时从站却从管理器通道上获取不到数据帧中对应的数据,从站就会判断数据帧丢失了,这就是同步丢帧的问题。
这种问题一般在考前的从站中发生较少,当一个系统较大时,尾端的从站接收到数据帧的时间也比较晚,因为存在物理传输时间,所以越后面的从站接收到的数据帧时间就越晚,==(虽然Sync0 Event事件信号在完成DC对时之后是同步触发的,但是数据帧的传递时间是依次递增的),==如果我们刚开始留出的偏移时间(shift time)不够大的话就有可能在尾端从站发生同步丢帧的情况
2、解决方案:把第一个从站和主站之间的偏移时间调大,可以在TwinCAT中对Shift Time进行调整。(由于Sync0 Event是同步触发的,只需要设置好第一个从站和主站之间的Shift time,后面的从站和主站的Shift Time也都是这个值)。

7 优化DC模式的时序分析

在这里插入图片描述
1、当数据帧Frame依次到达每一个从站的时候,EtherCAT的机制会触发SM Event事件信号,(数据帧依次发送到各个从站的时间是一个慢慢变长的延时时间,这是硬件上必然发生无法改善的事情)。
2、然后从站会把数据帧上从站需要的数据进行计算并复制到同步管理器通道上,然后会进行中断事件恢复,
3、主程序等待一个DC Sync Signal同步事件中断信号(也就是Sync0 Event),这个Sync0 Event同步事件信号是所以从站同时触发的,就像规定的9点上班一样<这里的前提是主站已经通过发送帧对各个从站完成了对表计时步骤,各个从站的时间是同步一致的>。
4、当Sync0 Event事件信号同步触发时候,由于之前已经完成了数据的计算和复制,那么此时的输出抖动会非常小,约为15ns,(输出抖动jitter和主站有关,在SM Event事件之前由主站触发),同时同步性能也会非常好(Output Delay time会很短,Output Valid输出有效很快触发)。
5、在Output Valid输出有效触发之后,从站会等待一个Input Latch信号,它可以是Sync1 Event事件信号,也可以是Sync0 Event事件信号触发后一段固定的延时时间,这取决于我们在TwinCAT上的设置情况。

六、 总结

总体的DC分布式时钟模式汇总如下流程所示:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143929.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 大话项目管理工具之Confluence篇

    大话项目管理工具之Confluence篇

  • Java 最长递增子序列_最长递增子序列问题 Java

    Java 最长递增子序列_最长递增子序列问题 Java最长递增子序列问题LIS(longestincreasingsubsequence)例如给定一个数列,长度为N,求这个数列的最长上升(递增)子数列(LIS)的长度.以1,7,2,8,3,4为例。这个数列的最长递增子数列是1234,长度为4;次长的长度为3,包括178;123等.设数组为:arr设foo(k)为:以数列中第k项(为了与java数组逻辑…

  • Java BigDecimal的使用[通俗易懂]

    Java BigDecimal的使用[通俗易懂]BigDecimal加减乘除BigDecimalbignum1=newBigDecimal(“10”);BigDecimalbignum2=newBigDecimal(“5”);BigDecimalbignum3=null;//加法bignum3=bignum1.add(bignum2);System.out.pr…

  • Keil(MDK-ARM)介绍、下载、安装与注册[通俗易懂]

    Keil(MDK-ARM)介绍、下载、安装与注册[通俗易懂]推荐分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang推荐在我的公众号「strongerHuang」或网站(www.strongerhuang.com)阅读以下教程:Keil系列教程01_Keil介绍、下载、安装与注册Keil系列教程02_新建基础软件…

  • 将oracle端口1521共享_oracle如何开放1521端口

    将oracle端口1521共享_oracle如何开放1521端口如何设置SharedSocket?在注册表:HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0上新建一个字符串值:USE_SHARED_SOCKET=true.如果安装了多个目录,则每个类似的目录都要设置:HKEY_LOCAL_MACHINESOFTWAREORACLEHOMEx(x目录编号)设置后要求重新启动实例(只重启listener发现没有效果)Oracle客户端…

  • js获取现在时间_js中如何动态显示日期时间

    js获取现在时间_js中如何动态显示日期时间js可以通过Date对象获取当前日期和时间,使用Date()获取系统当前时间,在使用getFullYear()、getMonth()、getDate()、getHours()等方法获取特定格式的时间,在使用innerHTM方法显示。首先我们来了解一下js获取当前时间所需的一些方法:获取当前时间:vard=newDate();//获取系统当前时间获取特定格式的时间:1、获取当前年份getYear()方法:可以获取年份(2位或4位),其返回值是表示当前Date对象的年份字

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号