CANopen (机械设备 / 运动控制)
CANopen 是构建在 CAN 总线之上的上层协议 (CiA 301),常用于运动控制器、伺服、机器人关节、计量仪表、车辆辅助系统等需要精密 / 确定性通信的场合。
本网关通过通用集成引擎支持 CANopen 读取。
PlantPulse 无法直接接入 CAN 总线
PlantPulse Edge 的硬件不带 CAN 控制器。要与 CANopen 从站通信,必须使用 CAN ↔ Ethernet 网关。
| 推荐硬件 | 备注 |
|---|---|
| Anybus Communicator CAN | 可转换为 EtherNet/IP、Modbus TCP、PROFINET 等 |
| Ixxat CAN@net NT | 基于 TCP socket 的 raw / CANopen 路由 |
| HMS Networks Ewon Cosy / Flexy + CAN extension | 远程站点集成 |
| Kvaser Ethercan | 开发 / 调试用 |
相当多的集成现场会将 CAN 转换为 Modbus TCP / EtherNet/IP 映射,然后在 PlantPulse 中按 Modbus TCP / EtherNet/IP 注册,这样更为简单。本页面适用于网关直接以 CANopen 形式暴露数据的情况。
注册表单输入项
| 输入栏 | 填写内容 | 示例 |
|---|---|---|
| IP 地址 | CAN ↔ Ethernet 网关的 IP | 192.168.30.40 |
| 端口 | 网关暴露的 TCP 端口 | (因厂商而异,例 19227) |
| Node ID (node-id) | CANopen 节点号 (1~127) | 5 |
| 响应超时 | 响应等待时间 (ms) | 2000 |
Node ID 是关键
CANopen 在同一总线上挂接多个从站,各自以 Node ID 区分。请为每个从站分别注册独立连接。
CANopen 基本概念 (简要梳理)
| 术语 | 含义 |
|---|---|
| Object Dictionary (OD) | 以树形结构整理设备全部数据项的表格。通过索引 (16-bit) + 子索引 (8-bit) 访问 |
| SDO (Service Data Object) | 点对点读写。PlantPulse 使用的模式。速度慢但可访问任意项 |
| PDO (Process Data Object) | 周期性 / 事件触发的 push。多数情况下由网关接收并缓存 |
| NMT (Network Management) | 节点状态机 (Boot-up → Pre-operational → Operational → Stopped) |
| EDS / DCF | 定义 OD 的文本文件,由厂商提供 |
OD 索引分为标准区 (0x1000~0x1FFF)、厂商自定义区 (0x2000~) 和标准设备profile 区 (0x6000~)。
标签的 PLC 地址表示法
按 <index>:<subindex> 格式输入 OD 坐标。十六进制或十进制均可。
| 表示 | 含义 |
|---|---|
0x1000:0 | Device Type |
0x1018:1 | Identity → Vendor ID |
0x1018:2 | Identity → Product Code |
0x6000:01 | (DS-401 数字量输入 profile) Digital Input 1 |
0x6041:0 | (DS-402 运动控制 profile) Statusword |
0x6064:0 | (DS-402) Position Actual Value |
0x6077:0 | (DS-402) Torque Actual Value |
坐标可在设备的 EDS 文件或手册的 OD 表中确认。也可以使用免费工具 CANopen Magic / CANeds / CANopenNode 直接扫描从站。
数据类型匹配
| OD 中的值 | 数据类型 | 类型辅助项 |
|---|---|---|
| BOOLEAN | Boolean | (留空) |
| INTEGER8 / UNSIGNED8 | Integer | B |
| INTEGER16 / UNSIGNED16 | Integer | (留空) |
| INTEGER32 / UNSIGNED32 | Integer | DW |
| REAL32 | Float | REAL |
| VISIBLE_STRING | String | STR[N] |
直接参照 EDS 文件的 DataType 列进行匹配即可。
常见问题与解决
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| “No reply / SDO timeout” | 节点处于 Pre-operational 或 Stopped 状态 | 通过 NMT 切换到 Operational (网关 / 主站设置) |
| 仅部分节点无响应 | Node ID 冲突、缺少终端电阻 | CAN 线两端接 120Ω 终端电阻,排查 ID 重复 |
| 数值波动不稳 | bit-rate 不一致 | 使从站与网关的波特率一致 (125k / 250k / 500k / 1M) |
| 通信正常但含义不明 | 使用了厂商自定义 OD 区 (0x2000~) | 查阅厂商手册 / EDS 中的项目说明 |
| “Heartbeat lost” | 未配置主站 | 将网关设为主站,或启用 sync producer |
后续步骤
- 高级 — REST API 中的 CANopen 示例
- 大型现场迁移到 PROFINET / EtherCAT 的案例很多 — 若为新建项目,值得评估。