很多人第一次看 EtherCAT 寻址方式时,
最容易冒出一个疑问:
不就是访问从站吗,为什么还要搞出三套寻址?
看起来像重复设计,
其实不是。
因为 EtherCAT 要同时解决三类完全不同的问题:
• 刚上电时,主站还不知道链路上到底有谁
• 配置过程中,要能精确找到某一个从站
• 正式运行时,要高效交换整条链上的过程数据
这三类问题,
不是一套寻址能同时做好的。
所以 EtherCAT 才有了:
自动增量寻址、物理寻址、逻辑寻址。
一句话先讲明白
自动增量寻址用来沿链路找设备,物理寻址用来精确访问某个从站,逻辑寻址用来按过程映像整块交换数据。
把这句记住,
后面大部分概念都不会乱。
第一,先别急着背术语,先看三套寻址分别在解决什么问题
最稳的理解方式,
不是先背 AP、FP、LRD、LRW 这些命令名,
而是先看主站在不同阶段到底需要什么。
EtherCAT 通常有三种典型场景:
1. 扫描和枚举阶段
主站刚起来,
还不知道链路上有哪些从站、顺序是什么。
2. 配置和状态切换阶段
主站已经知道设备拓扑,
接下来要精确配置某个从站。
3. 周期运行阶段
主站不再关心“单个从站寄存器怎么访问”,
而是关心“这一整轮 PDO 数据怎么高效交换”。
对应这三类需求,
EtherCAT 才设计了三套寻址方式。
所以这不是协议故意复杂,
而是:
不同阶段,访问目标根本就不一样。
第二,自动增量寻址到底是什么?
自动增量寻址,
英文通常叫 Auto Increment Addressing。
它最适合的场景是:
主站还不知道链路上设备是谁,但想沿着链路一个一个把它们识别出来。
这套机制的关键不是“我先知道你地址,再访问你”,
而是:
报文沿链路往前走,每经过一个从站,地址计数就按规则变化,于是主站可以按链路顺序逐个定位设备。
所以自动增量寻址最该记住的不是细节位宽,
而是它的角色:
它解决的是发现设备、按拓扑顺序枚举设备。
这就是为什么它在启动扫描阶段特别有用。
因为这时候主站往往只知道:
“链路上应该有一串从站。”
但它还不知道:
• 到底有几个
• 每个是谁
• 当前顺序是什么
• 后面该给谁分配什么配置
这时靠自动增量寻址,
主站就能顺着链路一个一个把设备摸出来。
第三,为什么自动增量寻址适合扫描,不适合长期运行?
因为它本质上依赖的是:
链路顺序。
也就是说,
它更像是在说:
我找的是链路上的第几个有效从站。
这在扫描阶段很好用,
但到了正式运行阶段就不够直接了。
原因很简单:
• 它适合按顺序找
• 不适合长期做精确配置管理
• 更不适合高效做周期过程数据交换
所以自动增量寻址的定位很明确:
它是启动和枚举工具,不是运行期主力寻址方式。
工程上可以把它理解成一句话:
先靠它把人点齐。
第四,物理寻址到底是什么?
物理寻址,
更准确地说是主站已经拿到从站的固定物理地址后,
按这个地址去访问它。
它的核心意思很直接:
我已经知道要访问哪一个从站了,就直接点名找它。
这时候寻址逻辑不再是“沿链路数到你”,
而是:
我明确知道就是你,所以直接访问你。
所以物理寻址最适合的场景是:
• 从站已经被扫描识别出来
• 主站已经给它分配或确认了物理地址
• 接下来要对这个从站做精确配置或寄存器访问
比如:
• 配置 Sync Manager
• 配置 FMMU
• 读写 ESC 寄存器
• 状态切换
• 邮箱和 SDO 相关前置配置
这类操作的共同点是:
我关心的就是某一个确定的从站。
那这时候最自然的方式,
就是物理寻址。
第五,物理寻址和自动增量寻址,差别到底在哪?
两者最本质的区别只有一句话:
自动增量寻址靠链路顺序找设备,物理寻址靠明确地址找设备。
所以你可以这样记:
• 自动增量寻址:适合“我还没完全认识你”
• 物理寻址:适合“我已经知道就是你”
自动增量更像扫描手段。
物理寻址更像配置手段。
这也是为什么 EtherCAT 主站初始化时,
通常是先用自动增量把从站摸清楚,
再转到物理寻址做后续配置。
第六,逻辑寻址到底是什么?
逻辑寻址是最容易让人一开始发懵的那一种,
但它恰恰是 EtherCAT 运行期最重要的寻址方式。
它的核心思路是:
主站访问的不是“某个从站的某个物理寄存器”,而是一整块逻辑过程映像。
也就是说,
主站眼里看到的是一片连续的逻辑地址空间。
这片空间背后,
会通过 FMMU 等映射机制,
对应到多个从站各自的一小段输入输出区。
所以逻辑寻址最关键的理解是:
它不是面向单个从站,而是面向整条链的过程数据映像。
这就是它和前两种寻址最大的区别。
第七,为什么逻辑寻址特别适合 PDO 周期通信?
因为 PDO 周期通信最关心的是:
这一轮过程数据能不能高效交换完。
它不想每次都这样做:
• 先访问 1 号从站
• 再访问 2 号从站
• 再访问 3 号从站
• 一站一站单独发请求
这样效率太低。
EtherCAT 的思路更直接:
把所有从站本轮要交换的过程数据,映射到一整块连续逻辑空间里。
主站只需要对这块逻辑空间做一次读、写或读写。
报文沿链路流过时,
各从站只处理自己映射到的那一小段数据。
所以逻辑寻址真正解决的是:
多从站过程数据的一次性整块交换。
这也是 EtherCAT 周期通信效率高的核心原因之一。
第八,逻辑寻址和物理寻址的区别到底在哪?
一句话先说透:
物理寻址是在找某一个从站,逻辑寻址是在找一整块过程数据映像。
所以它们关注的对象根本不同。
物理寻址关心的是设备。
比如:
• 这个从站的 ESC 寄存器
• 那个从站的配置区
• 某个明确设备的状态
逻辑寻址关心的是数据区。
比如:
• 整条线上这一轮输出 PDO
• 整条线上这一轮输入 PDO
• 若干从站拼起来的一片过程映像
所以工程上千万不要把逻辑地址理解成:
“另一种形式的从站地址。”
这不对。
逻辑地址不是在给单个从站编号,而是在给整块过程数据编号。
第九,为什么 EtherCAT 要同时保留这三套方式?
因为三者各管一段,
缺一个都不好用。
没有自动增量寻址,
主站启动时扫描和枚举会变得很麻烦。
因为它一开始并不知道谁是谁。
没有物理寻址,
你后面就很难精确配置某一个从站。
状态切换、寄存器访问、设备初始化都会变笨。
没有逻辑寻址,
EtherCAT 周期通信就会退化成“一个从站一个访问”。
效率优势基本就没了。
所以这三者不是并列备选关系,
而是:
扫描阶段、配置阶段、运行阶段,各有最合适的访问方式。
第十,现场最容易混的点是什么?最稳的记法又是什么?
最容易混的,
就是把“逻辑地址”和“物理地址”都当成“设备地址”。
这会直接把理解带偏。
你要先记住三句:
• 自动增量地址:对应链路顺序定位
• 物理地址:对应从站本身
• 逻辑地址:对应过程数据映像
这三句一分清,
很多问题就顺了。
比如:
• 为什么扫描阶段常见 AP 类命令
• 为什么配置 ESC、FMMU、SM 时常见物理访问
• 为什么 PDO 周期交换时常见逻辑读写
因为它们压根不是在做同一件事。
如果再往下压成一句最实用的记法,
就是:
• 自动增量寻址:找设备
• 物理寻址:配设备
• 逻辑寻址:跑数据
再展开一点就是:
• 自动增量寻址解决:“主站怎么按链路顺序把从站找出来”
• 物理寻址解决:“主站怎么精确访问某个从站并完成配置”
• 逻辑寻址解决:“主站怎么高效完成整条链的过程数据交换”
你把这组边界记住,
后面再看 AP、FP、LRW 这些命令时,
基本不会乱。
第十一,现场抓包时最该怎么看?
如果你抓 EtherCAT 包,
想快速判断当前主站在干什么,
最实用的线索就是先看命令属于 AP、FP 还是 LR。
大致可以这样判断:
• AP 类:大概率在扫描、枚举、初始化早期
• FP 类:大概率在精确配置某个从站
• LRD、LWR、LRW 类:大概率已经进入过程数据交换阶段
这比一上来死啃字节图更实用。
因为它先帮你回答了最关键的问题:
当前主站是在找设备、在配设备,还是在跑过程数据。
最后怎么一句话记住?
EtherCAT 自动增量寻址负责沿链路扫设备,物理寻址负责精确配设备,逻辑寻址负责整块跑过程数据;三者分别对应扫描、配置、运行三个阶段。