[EtherCAT]从输入从站读取数据写入输出从站的时序分析

本文假设在EtherCAT网络中有一个IO输入从站A,一个IO输出从站B,需要实现当A输入IO发生变化时,控制B输出IO同样变化的功能。本文将分析这一过程中的时序和改善延时的思路。

EtherCAT PDO数据通信说明

EtherCAT网络中对需要周期性更新的数据使用PDO通信方式,也就是主站周期性的发出读取和写入PDO数据报文的数据帧,数据帧流过每个从站时由ESC(EtherCAT slave controller)硬件实现报文和本地数据的交互,最后返回主站,主站获得通信结果。

当主站发出的数据帧达从站时,由从站ESC硬件完成报文内容与ESC本地DPRAM中的数据交换,微控制器再从ESC的DPRAM中读取或者写入数据,实现和主站的数据交换。对于PDO通信,ESC将DPRAM设置成3-buff模式使用。

EtherCAT数据帧到来的时间和从站的程序运行之间是异步的,当EtherCAT数据帧到达从站时,ESC硬件立刻完成报文和当前ESC本地DPRAM之间的数据交换。对于从站想发给主站的数据,如果在EtherCAT数据帧到来时刻前,没有被写入到ESC的DPRAM,则会错过当前的数据帧通信,只有等待下一周期的主站数据帧到来时主站才能获取到从站最新的数据。对于主站想发给从站的数据,在数据帧到来后被存放于ESC的DPRAM,然后可以产生中断通知微控制器读取数据。

时序分析

以ECAT_IO例程为例,假设使用的同步方式是SyncManger/Sync0同步模式, 实现从输入从站获取状态后控制输出从站的输出,其数据流程大致是:

A输入从站获取IO状态 -> 待主站发出的PDO报文数据帧流过A时通信输入IO状态 -> 数据帧返回主站,主站获取到A输入IO状态并用于后续控制B的输出逻辑 -> 主站在下一PDO周期时发出新的数据帧控制B的输出 -> B收到新的控制数据后控制输出IO变化。

默认配置下SyncManger2监控主站发给从站的数据通信,当收到主站发来的PDO数据时会触发SyncManger2事件,最终产生PDI中断,在PDI中断中调用PDO_OutputMapping()从ESC的DPRAM中读取output数据。

随后在Sync中断中调用ECAT_Application()和PDO_InputMapping(), 其中ECAT_Application()会使用已经获取的output信息控制IO的输出状态,然后读取输入IO的状态,之后通过调用PDO_InputMapping()将input数据写入ESC的DPRAM,等待下一次数据帧到来时由ESC硬件完成交换。

由主站控制PDO数据帧周期和从站Sync0时间起始时间和周期时间,保证SM2 Event(PDO通信)和Sync0事件在时序上错开,SM2 Event在前,Sync0在后, 这样基于Sync0同步做动作时,从站已经拿到主站发来的Output数据。

延时分析:

最大延时约3个周期时间,最小延时约2个周期时间。

延时改善思路

PDO通信周期 = Sync0(DC)周期 = TwinCAT任务周期

  1. 不使用Sync0, 只使用Syncmanger同步模式,从站在获取到output数据后立刻执行输出动作,而不是等到Sync0事件到来后再执行,可以减小约0.5 Sync0周期延时。不使用Sync0(DC同步)则各从站的输出动作会不同步,比如A从站的输入状态同时控制B和C从站输出,使用Sync0(DC)事件触发执行输出动作,由ESC的DC同步时钟功能保证各从站的Sync0事件是同步的,进而基于Sync0事件做的动作也是同步的。不使用Sync0仅使用Syncmanger(SM2事件),从站在数据帧到达从站时即刻执行输出动作,由于数据帧到达各从站存在传输延时,各从站输出动作间间自然存在不同步,不同步的时间就是从站的传输延时。使用何种同步方式由实际需求决定,比如对响应及时更在意,对从站间动作同步延时更容许。从站间的传输延时与经过的从站数目和线缆长度相关。

  2. 将IO输入状态获取改为由IO输入中断触发,原本是在ECAT_Application()中获取IO状态,每周期只调用一次,输入IO时间如果错过当前周期的ECAT_Application()读取输入IO状态的执行时刻,则只能等待下一周期ECAT_Application()再来读取,改为中断方式读取输入IO状态,可以及时响应事件,并将输入状态值写入ESC的DPRAM,等在最近一次的PDO通信后由主站读取,此方法最大可以减小约0.5 Sync0周期延时。

  3. 设置独立的输入数据帧,默认设置中主站每个周期中发出一次PDO通信的数据帧,这个数据帧中既包含读PDO数据的子报文和写PDO数据的子报文。TwinCAT支持配置独立的数据帧来读取输入过程数据(这个选项可用于减少input-output响应时间)

    该方式每个周期内主站会发出一次读PDO数据的数据帧和一次写PDO数据的数据帧。延时最小会小于1 Sync0周期(任务周期), 延时最大会略大于1 Sync0周期.

  4. 特殊的情况,在网络拓扑中保证从站A在前,从站B在后, 通过主站配置从站的SyncManger和FMMU, 最终使A的输入数据和B的输出数据共享数据帧中相同的逻辑地址,在数据帧流过A从站时读取A的输入数据到数据帧中,接着数据帧流向B从站, 从站B在数据帧流过时从相同逻辑地址取数据,就会取到A的输入数据,然后控制IO输出。该办法严格依赖从站在网络中的先后顺序,也需要主站支持灵活的逻辑地址配置,才能实现。此办法理论最小延时接近0,最大延时接近1通信周期。

延时测量

见《EtherCAT|从输入从站读取数据后写入输出从站的延时测量

0
0

订阅

发表回复 0

Your email address will not be published. Required fields are marked *

captcha
Enter the characters shown in the image:
Reload

This CAPTCHA helps ensure that you are human. Please enter the requested characters.