ethercat 同步方式 FreeRun/SMx/DC

本文介绍了EtherCAT系统中三种同步模式:FreeRun模式、SMx模式及DC模式,并详细解释了每种模式的工作原理及其应用场景。同时,文章还讨论了CycleTime参数的重要性,以及如何通过设置合适的参数来确保系统的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象字典 index 0x1C32:0x01 可以选择 ethercat 主站和从站的同步方式。
一共有三种:

  1. Free Run 模式
    这种模式就是说每个slave根据自己的时间中断(未同步的timer)来处理ethercat数据,跟主站的运行周期其他从站的周期以及ethercat帧的到达时间都没关系。
  2. SMx 模式
    这种模式就是slave根据SM2 或者 SM3 event 来处理ethercat帧数据的读写(也就是说slave一收到ethercat数据就会触发SM event),但是由于有些设备SM3一直是输出有效,因此有些设备的SM3不能用来作为同步信号。
  3. DC 模式
    这种模式就是高精度的时间同步模式(与第一个有 DC 的 slave 同步),该模式会将第一个有DC的slave的时间作为 system time,然后再用这个 system time 来作为所有设备的参考时间(加上传输延时,抖动等等时间误差)来生成 SYNC0 或者 SYNC1 同步信号。该模式要求主站有很强的实时性能,因为某些slave要求在该模式县时间抖动不超过 100us,否则会有 Sync Error 报警。

Free Run
这里写图片描述

SM2/3
这里写图片描述

DC
dc

每一种同步方式都有一个 Cycle Time 的参数 (index 0x1C32:0x02),该ethercat数据帧在这个时间内必须被消化(也可以理解为主站运行周期)。而一个 Cycle Time 周期又可以分为几个部分:

主要有四部分时间:其中 Copy and Prepare output 部分表示 slave 将ethercat数据从SyncManager(表示 PDO)中读出并复制到从站的 local RAM 中并经过计算输出的时间(0x1c32 0x06, 只读),外加一些硬件延时等(ox1c32 0x09 只读); Output Valid 表示将数据读入,并且经过设备内部周期,使数据生效的时间点;Input Latch 表示从传感器读入数据的时刻; Get and Copy inputs 部分表示将数据从传感器读入并插入到 ethercat帧中的时间(0x1c33 0x06 只读)。

例如,Sanyo 驱动器对各部分时间的描述:

这里写图片描述
这里写图片描述

一般ethercat从站需要设置两个时间参数: cycle_timeshift_time,其中 SYNC0 的 cycle time 表示从站运行周期周期,一般即为ethercat的主站运行周期时间(e.g. 1ms); SYNC0 的 shift_time(下图中的 Sync0 Shift) 表示的是 SYNC0信号 相对于 DC信号(DC Base) 的偏移时间(正值,表示向后推移,例如可以设置为cycle_time的一半)), 如图(见参考链接):
这里写图片描述

注意: SYNC1 的 cycle_time 和 shift_time 与 SYNC0的含义不一样,见链接:https://infosys.beckhoff.com/english.php?content=../content/1033/tcsystemmanager/reference/ethercat/html/EtherCAT_DistributedClocks.htm&id=

还有些驱动器直接将 shift_time 设置为零,有些设置为零会出现数据周期错乱导致 sync error。具体看驱动器sm是否支持 shfit_time,可以读取index 为 0x1c32 或者 0x1c33,subindex 为 0x04 的uint16的数据,如图:

这里写图片描述

如果 bit6-5 为 00 则表示不支持 ShiftTime.

### EtherCAT 自由运行同步管理器 (SM) 和分布式时钟 (DC) #### 同步管理器 (Synchronisation Manager, SM) 同步管理器负责处理过程数据交换以及控制命令帧的发送。在自由运行模式下,EtherCAT 主站可以配置多个同步管理器来实现不同的功能需求。 - **配置方式** 配置同步管理器通常通过主站软件完成,在某些情况下也可以借助硬件设置。对于大多数工业自动化控制系统而言,同步管理器的初始化是在启动阶段自动执行的[^1]。 ```python # Python伪代码展示如何配置同步管理器 def configure_sync_manager(sm_id, mode="free_run"): """ Configures the specified SyncManager with given parameters. :param sm_id: ID of the SyncManager to be configured :param mode: Operation mode ('free_run', 'cyclic' etc.) """ if mode == "free_run": set_parameter("operation_mode", "FREE_RUN") apply_configuration() ``` #### 分布式时钟 (Distributed Clocks, DC) 为了确保所有节点之间的时间一致性,EtherCAT 使用了分布式的时钟机制。这种技术允许网络内的设备共享同一个时间基准,从而实现了精确的时间同步。 - **工作原理** 当启用分布式时钟特性时,主机会向整个网络广播其本地时钟信号;各从站接收该信号并调整自身的内部计数器以保持一致。此过程中涉及到周期性的校准操作,用以补偿任何可能存在的偏差[^2]. - **配置步骤概述** 虽然具体的API调用取决于使用的编程环境或工具链,但一般流程包括激活DC选项、指定参考时钟源(通常是主机)、设定更新频率等参数。 ```bash # Bash脚本片段用于说明基本概念而非实际命令 ethercat config dc enable=true ethercat config dc master_clock=host ethercat config dc update_rate=1ms ```
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值