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++控制程序
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐