一个常被问错的问题
“我们买六自由度平台,控制器选 EtherCAT 还是 UDP?CANopen 行不行?Modbus 不便宜吗?”
这是几乎所有客户在选型阶段都会问的一组问题。
但这个问题本身有歧义 — 因为它把两层不同的协议混在了一起。这就像问”我家装修选海底光缆还是 Wi-Fi 路由器”——前者是骨干网,后者才是你能用的接入方式。
下面拆开讲。
运动平台的两层协议
┌─────────────────────────────┐
│ 你的上位机 / 仿真 / Web │
└────────────┬────────────────┘
│
【第 1 层 · 客户接入层 · 应用层协议】
TCP / UDP / WebSocket / HTTP
│
┌────────────▼────────────────┐
│ 彦控控制器 │
└────────────┬────────────────┘
│
【第 2 层 · 内部伺服层 · 现场总线】
EtherCAT / CANopen / Modbus(工程实现)
│
┌────────────▼────────────────┐
│ 6 支伺服电缸 │
└─────────────────────────────┘
| 层 | 协议 | 谁用 | 客户能选吗 |
|---|---|---|---|
| 第 1 层 · 客户接入层 | TCP / UDP / WebSocket / HTTP | 客户上位机、仿真平台、Web 工具 | ✅ 可选 |
| 第 2 层 · 内部伺服层 | EtherCAT / CANopen / Modbus | 控制器与伺服电缸之间(厂商工程师) | ❌ 不可选(也无需选) |
关键点:客户写代码时永远只接触第 1 层。下层走什么总线是厂商工程实现选择,客户不可见也不需要管。
第 1 层 · 客户接入层(这才是你要选的)
| 协议 | 适合场景 | 客户感知差异 |
|---|---|---|
| UDP | PC 上位机 / 仿真 / Unity / ROS / VR / HIL | 实时低延迟,丢一包下一包覆盖;适合高频位姿流 |
| TCP | 命令响应式集成 / 文件传输 | 可靠送达,一问一答 |
| WebSocket | 浏览器上位机 / Web 调试工具 | 双向实时,零安装即用 |
| HTTP | SCADA / MES / 脚本自动化 | RESTful 风格,与企业系统天然兼容 |
怎么选:
- 运动控制连续推流 → UDP(首选)
- 命令-响应一来一回 → TCP
- 浏览器现场调试 → WebSocket
- 接 MES / 自动化脚本 → HTTP
90% 客户场景一个 UDP 就够了。复杂集成会混用多个。
重点:以上 4 个协议全部支持任意语言任意平台 — Windows / macOS / Linux / 嵌入式 RTOS,C++ / Python / Matlab / LabVIEW / JS / Go / Rust … 都能集成。
第 2 层 · 内部伺服层(彦控替你做的选择)
控制器需要驱动 6 支伺服电缸做亚毫米级同步运动,对总线的要求是确定性的硬实时。这一层彦控选择了工业事实标准:
| 总线 | 用途 | 工程意义 |
|---|---|---|
| EtherCAT | 主流方案 — 微秒级同步、几十节点轻松扩展 | 6 轴同步精度的硬保障 |
| CANopen | 兼容老款 CAN 总线伺服 | 兼容性 |
| Modbus | 兼容部分国产伺服 | 兼容性 |
为什么客户不需要管:
- 上位机发的命令是”位姿 (x, y, z, α, β, γ)” — 6 个数字
- 控制器内部把位姿翻译成 6 支缸的目标长度
- 然后用 EtherCAT 把 6 路目标推给伺服
整个过程客户看不到 EtherCAT 的存在。你的代码里永远只有 UDP / TCP / WebSocket / HTTP。
那为什么客户会问 EtherCAT?
通常是这两种情况:
- 过去用过其他厂商,对方把 EtherCAT 暴露给客户做”运动指令直接下发” — 这是个反模式(让客户处理实时总线相当于让客户做工程师的活)
- 听说 EtherCAT 实时性好 — 但实时性好的是控制器与伺服之间的链路,与客户 UDP / TCP 链路无关
彦控的设计:复杂留在内部,简单交给客户。
实际选型决策树
按以下顺序判断:
- 接入对象是 PC / 仿真软件 / ROS 节点? → UDP
- 要在浏览器里调试? → WebSocket
- 要做命令响应式自动化? → TCP / HTTP
- 要接厂内 MES / SCADA? → HTTP / Modbus(看现有系统支持哪个)
不需要在 EtherCAT 和 UDP 之间选。它们不在同一层。
进一步阅读
- 开放通信协议产品页 → /platforms/sw-protocol
- 下载 UDP 通信使用手册 PDF → 完整命令字段 + 错误码 + 示例代码
- SDK & 二次开发 → /platforms/sw-sdk — C / Python / Matlab / LabVIEW