2. 数据通信基础:周期性数据(过程数据)与非周期性数据(邮箱数据)的区别

做 EtherCAT 开发这些年,我经常被问到同一个问题:

「这周期性数据和非周期性数据,到底有啥不一样?」

说实话,我刚接触 EtherCAT 时也迷糊过一阵子。那时候看协议栈源码,看到两个完全不同的数据通道,心里直犯嘀咕——为什么不能用一个通道搞定所有事?

后来踩了几个坑才明白,这两种数据的设计,恰恰是 EtherCAT 能同时做到「快」和「灵活」的关键

2.1 先说说周期性数据(过程数据)

周期性数据,也叫过程数据(Process Data)。

说白了,就是那些每个周期都要交换一次的数据。

比如:

  • 伺服驱动器的位置、速度、转矩
  • 数字量输入输出的开关状态
  • 模拟量采集的电压、电流值

这些数据的特点是:实时性要求极高,数据量不大,但必须准时到达

我记得有一次调试一个六轴机器人项目,周期时间设成了 1ms。结果因为某个从站的过程数据映射配错了,导致整个网络抖动。机器人走直线都走不直,跟喝醉了似的。后来排查了半天,才发现是过程数据长度不对,导致帧结构错位。

周期性数据的核心特征:

  • 每个通信周期固定交换一次
  • 数据长度通常较小(几个字节到几十个字节)
  • 使用 FMMU(现场总线内存管理单元)直接映射到从站内存
  • 不依赖邮箱通信机制,走的是「快速通道」

2.2 再说说非周期性数据(邮箱数据)

非周期性数据,也叫邮箱数据(Mailbox Data)。

它处理的是那些不需要每个周期都传的信息。

比如:

  • 从站的配置参数(比如伺服驱动器的 PID 参数)
  • SDO 上传下载(对象字典的读写)
  • 诊断信息和错误日志
  • 固件升级的二进制数据

你想想看,如果每次改个参数都要等一个周期,那配置过程得多慢?反过来,如果每个周期都传这些大块数据,那实时性肯定受影响。

所以 EtherCAT 的设计者想了个办法:给非周期性数据单独开一条「慢车道」

我个人习惯这样理解:

周期性数据就像高速公路上的小轿车,跑得快、不停站。

非周期性数据就像货运火车,装得多、但需要进站装卸。

两条线路互不干扰,各司其职。

2.3 两者的核心区别

我整理了一个表格,方便你对照着看:

对比项 周期性数据(过程数据) 非周期性数据(邮箱数据)
通信时机 每个周期固定传输 按需触发,不固定
数据大小 小(通常 ≤ 64 字节) 大(可达几千字节)
实时性 极高(微秒级确定性) 较低(毫秒级,取决于总线负载)
传输机制 FMMU 直接映射 邮箱协议(Mailbox Protocol)
典型应用 控制指令、状态反馈 参数配置、诊断、固件升级
数据通道 逻辑寻址/物理寻址 邮箱通道(独立缓冲区)

2.4 它们是怎么共存的?

嗯,这里要注意一个关键点:两种数据是在同一个 EtherCAT 帧里传输的

EtherCAT 主站会在每个周期构造一个数据帧。这个帧里既有过程数据区域,也有邮箱数据区域。从站收到帧后,根据数据头部的标识来判断:

  • 如果是过程数据,直接通过 FMMU 映射到对应的输出/输入缓存
  • 如果是邮箱数据,则交给邮箱协议栈处理

我曾经在调试一个 32 轴的运动控制项目时,遇到过邮箱数据阻塞导致过程数据抖动的情况。排查下来发现,是因为某个从站的邮箱数据量太大,占用了过多的帧空间,导致过程数据不得不拆分到多个帧里传输。

避坑指南:

我曾经在一个项目中,把固件升级的邮箱数据包设得太大,结果导致过程数据的周期时间从 1ms 跳到了 3ms。后来我学乖了:邮箱数据一定要做分片传输,并且要监控邮箱数据对总线负载的影响

2.5 知识体系结构图

下面这张图,是我自己画的数据通信分类逻辑,你看一眼就能明白整体框架:

EtherCAT 数据通信分类 EtherCAT 数据通信 周期性数据 (过程数据 / Process Data) 非周期性数据 (邮箱数据 / Mailbox Data) 每个周期固定传输 FMMU 直接映射 数据量小、实时性高 按需触发、不固定 邮箱协议传输 数据量大、灵活性高 两者在同一 EtherCAT 帧中共存,互不干扰 过程数据走「快车道」,邮箱数据走「慢车道」

2.6 实际项目中的选择建议

做项目时,怎么判断该用哪种数据?我一般按这个原则来:

  1. 控制类数据(位置指令、使能信号)→ 必须用周期性数据
  2. 配置类数据(参数修改、模式切换)→ 用非周期性数据
  3. 诊断类数据(温度、电压、错误码)→ 如果每个周期都要看,用周期性数据;偶尔查看用非周期性数据
  4. 大块数据(固件、日志文件)→ 只能用非周期性数据

其实说白了,就是一句话:高频、小量、实时要求高的走过程数据;低频、大量、实时要求低的走邮箱数据

这个原则我用了好多年,基本没出过问题。


好了,这一章的内容就到这儿。两种数据的区别搞清楚了,后面讲具体协议实现时,你就能理解为什么 EtherCAT 要设计两套完全不同的通信机制了。

公众号:蓝海资料掘金营,微信deep3321