简历技术栈全面复习——EtherCAT / IgH Master / CiA402
EtherCAT → IgH Master → CiA402 → CSP。
⑥ EtherCAT:机器人电机控制的通信骨架
先看整体:
你的控制程序
↓
EtherCAT Master
↓
PDO
↓
EtherCAT Slave
↓
电机驱动器
↓
电机
如果使用 IgH:
机器人控制程序
↓
IgH EtherCAT Master
↓
EtherCAT
↓
Drive
↓
Motor
而 CiA402 解决的是:
“这个电机驱动器应该怎么进入使能状态?”
“目标位置放在哪里?”
“当前位置从哪里读?”
“CSP 怎么运行?”
所以一定先记住:
EtherCAT 是通信技术;CiA402 是驱动器对象模型/状态与运动控制规范。
1. EtherCAT 是什么?
简单理解:
EtherCAT 是一种面向工业实时控制的以太网通信技术。
典型结构:
Master
│
├── Slave 1
│
├── Slave 2
│
├── Slave 3
│
└── Slave 4
比如机器人有 7 个关节:
Master
↓
Joint1 Drive
↓
Joint2 Drive
↓
Joint3 Drive
↓
...
↓
Joint7 Drive
控制器周期性地和这些驱动器交换数据。
2. Master 和 Slave
这个非常基础,但一定不能混。
Master
通常就是:
机器人主控制器
负责:
发现设备
配置设备
周期通信
发送控制数据
读取反馈
Slave
就是:
电机驱动器
IO模块
编码器设备
其他EtherCAT设备
它们连接到 Master。
所以:
Master
↓
发送目标
↓
Slave
↓
执行
↓
反馈状态
3.IgH Master是什么?
IgH EtherCAT Master
就是 Linux 下常见的一套 EtherCAT Master 软件。
所以:
EtherCAT
是协议/技术体系。
而:
IgH
可以理解成:
Linux上的EtherCAT Master实现。
关系:
你的C++程序
↓
IgH EtherCAT Master
↓
EtherCAT
↓
驱动器
4. ESI 是什么?
你以后接一个新的 EtherCAT 驱动器,经常会遇到:
ESI
可以简单理解成:
EtherCAT 设备的描述/配置文件。
里面会描述设备的一些信息,例如:
设备身份
Vendor
Product Code
PDO
对象信息
所以当你拿到一个新驱动器:
新驱动器
↓
厂家提供 ESI
↓
了解这个设备怎么配置
你不要把 ESI 理解成实时通信本身。
它更接近:
“这个设备是什么、有哪些对象、怎么描述”
5、Domain是什么?
这个名字特别容易让新人懵。
你可以简单理解成:
一组需要周期交换的数据。
例如:
Domain
├── 电机1目标位置
├── 电机1状态字
├── 电机2目标位置
├── 电机2状态字
├── 电机3目标位置
└── 电机3状态字
然后每一个控制周期:
Domain
↓
发送
↓
EtherCAT
↓
驱动器
再:
驱动器
↓
反馈
↓
Domain
↓
控制程序
6. PDO 和 SDO
这是 EtherCAT 必须掌握的两个核心概念。
可以先简单记:
PDO
↓
周期性、实时数据
SDO
↓
参数配置、对象访问
PDO
例如你的电机每 1 ms 都需要:
目标位置
目标速度
控制字
同时读取:
实际位置
实际速度
状态字
这些就非常适合 PDO。
控制器
│
│ PDO
↓
驱动器
周期:
1ms
↓
1ms
↓
1ms
↓
1ms
这就是实时控制的数据通道。
PDO是 EtherCAT 实时周期数据的核心。
你可以把它理解成:
每个控制周期真正反复交换的数据。
SDO
更像:
配置
参数读取
参数修改
设备初始化
例如:
读取某个参数
修改某个参数
查询设备信息
SDO 更像:
“我要访问/配置这个设备里的某个对象。”
PDO
=
高速公路上的周期性数据
SDO
=
访问设备内部对象/参数
不要把 SDO 当成实时控制主通道。
7. Distributed Clock(DC)
这是 EtherCAT 里你需要理解的另一个核心概念。
问题来了:
假设:
Joint1
Joint2
Joint3
...
Joint7
如果每个设备自己的时间都不一样:
J1:10.000 ms
J2:10.003 ms
J3:9.997 ms
多轴同步就会受到影响。
EtherCAT 提供:
Distributed Clocks
简单理解:
多个 EtherCAT Slave
↓
尽量使用统一的时间基准
↓
同步进行周期动作
所以:
EtherCAT
+
DC
对于多轴运动控制非常重要。
程序启动
↓
初始化 Master
↓
获取 Slave
↓
检查设备身份
↓
配置 PDO
↓
配置 Domain
↓
激活 Master
↓
进入周期循环
8.CiA402
它负责定义标准化的驱动器控制方式。
它规定:
驱动器怎么启动?
怎么进入运行状态?
发生故障怎么办?
目标位置放哪里?
实际位置从哪里读?
所以:
EtherCAT
负责:
通信。
而:
CiA402
负责:
驱动器怎么被控制。
整体:
EtherCAT
↓
驱动器通信
↓
CiA402
↓
状态机
↓
Operation Mode
↓
CSP
↓
目标位置
驱动器不是一上电就可以直接运动。
它需要经过状态转换。
简化成:
Shutdown
↓
Switch On
↓
Enable Operation
↓
正常运行
如果发生故障:
正常运行
↓
Fault
↓
Fault Reset
↓
重新进入正常状态
所以你以后看到:
controlword
statusword
就应该想到:
CiA402 状态机。
1. Control Word / Status Word
这是电机控制非常关键的一对东西。
控制器
│
│ Control Word
↓
驱动器
│
│ Status Word
↓
控制器
简单理解:
Control Word
控制器告诉驱动器:
你进入什么状态?
是否使能?
是否复位故障?
控制器通过:
Control Word
告诉驱动器:
“我要你进入哪个状态”
所以控制流程不是:
target_position
↓
motor
而是:
Control Word
↓
状态机
↓
Enable Operation
↓
Target Position
这就是为什么你以后看到类似:
control_word = ...
不能简单理解成:
“给电机一个控制值”。
它实际上是在控制 CiA402 状态机。
Status Word
驱动器告诉控制器:
我现在是什么状态?
是否已经使能?
有没有故障?
驱动器通过:
Status Word
告诉控制器:
“我现在到底处于什么状态”
所以形成闭环:
Control Word
控制器 ─────────────→ 驱动器
←─────────────
Status Word
控制器不能只“发命令”。
还必须:
发送
↓
读取状态
↓
确认状态
↓
继续下一步
这就是工程上的状态机控制。
所以:
Control Word
=
我想让你怎样
Status Word
=
我现在是什么状态
9. CSP 是什么?
CSP:
Cyclic Synchronous Position
你先把它理解成:
周期同步位置控制。
它本质上就是:
控制器周期性地告诉驱动器:“你下一时刻应该到这个位置。”
例如控制周期:
1 ms
控制器不断发送:
t0 → target position = 0.10
t1 → target position = 0.11
t2 → target position = 0.12
t3 → target position = 0.13
...
驱动器不断反馈:
actual position
actual velocity
status
形成:
Controller
↓
Target Position
↓
EtherCAT
↓
Drive
↓
Motor
↓
Encoder
↓
Actual Position
↓
EtherCAT
↓
Controller
这就是你以后真正理解:
“机器人控制器如何让真实电机动起来”
Shutdown
可以理解成:
驱动器还没有进入可正常运行状态。
Switch On
开始向正常运行状态过渡。
Enable Operation
最重要:
驱动器已经允许执行运动命令。
所以:
Enable Operation
可以理解成:
“现在可以真正控制电机了”
CSP 的核心数据
你现在主要认识这几个:
Target Position
Actual Position
Control Word
Status Word
关系:
Control Word
↓
状态/使能控制
↓
Target Position → Drive → Motor
↓
Actual Position
↓
Controller
这就是一个非常典型的:
命令 → 执行 → 反馈
闭环。放进 EtherCAT PDO,现在就能理解为什么 PDO 非常重要。例如周期 PDO:
控制器 → Drive
Control Word
Target Position
同时:
Drive → 控制器
Status Word
Actual Position
Actual Velocity
于是:
┌──────────────────────────────┐
│ EtherCAT PDO │
│ │
│ Controller → Drive │
│ Control Word │
│ Target Position │
│ │
│ Drive → Controller │
│ Status Word │
│ Actual Position │
│ Actual Velocity │
└──────────────────────────────┘
这就是实际电机控制的数据通道。再把 IgH 放进来,整个底层链路已经变成:
┌───────────────────────────┐
│ Robot Controller │
└─────────────┬─────────────┘
↓
EthercatDriver
↓
IgH Master
↓
Domain
↓
EtherCAT PDO
↓
CiA402 Drive
↓
Motor
周期循环:
id="d9a7xq"
Receive EtherCAT
↓
读取 Status / Actual Position
↓
Controller
↓
计算 Target Position
↓
写入 Control Word / Target Position
↓
Send EtherCAT
↓
下一周期
这就是 IgH + CiA402 + CSP 真正组合起来后的样子。
CiA402
↓
状态机
↓
Enable Operation
↓
CSP
↓
目标位置
↓
电机运动
C++控制程序
↓
IgH EtherCAT Master
↓
Domain
↓
PDO周期数据
↓
EtherCAT网络
↓
┌──────┴──────┐
↓ ↓
Drive 1 Drive 2
↓ ↓
Motor 1 Motor 2
↓ ↓
Encoder Encoder
└──────┬──────┘
↓
实际位置反馈
↓
PDO
↓
EtherCAT Master
↓
C++控制程序
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)