首页/目录/全部文章

全部文章

八个专题的源码、算法与协议笔记都在这里。

笔记列表

时序、异常与互操作

时序、异常与互操作

现场 80% 问题:地址换算、字节序、超时、485 接线,而不是“功能码不会写”


1. 超时与重试

参数 建议
响应超时 按最慢从站 + 网关延迟留余量(常 100ms~1s+)
重试次数 2~3 次;避免雪崩
轮询周期 大于「请求+响应+间隙」总和
多从站 串行必须串行化轮询;TCP 可并行但要限流

超时:无响应(线断、地址错、波特率错、DE 脚)
异常响应:有应答但 FC|0x80(地址/功能不支持等)


2. 字节序 / 字序(Float 重灾区)

寄存器内字节:规范示例常为 大端(高字节在前)。
跨两寄存器的 float/int32,厂商可能:

俗称 含义(示意)
AB CD 大端字序
CD AB 字交换
BA DC 字节交换
DC BA 双交换

验证方法:写已知浮点或对比厂商调试软件读数,固化到点表。


3. 数量上限

  • 单次读寄存器常见 ≤125
  • 单次读线圈受字节打包与 PDU 限制
  • 超限 → 异常 03 或设备直接不理

大块数据:拆成多帧或用设备专用 FC。


4. 多主站与网关

  • 纯 RS-485 RTU:不要多个无协调主站同时轮询
  • TCP 多 Client:注意设备连接数上限
  • 网关:确认是“透传映射”还是“点表重映射”

5. 互操作 Checklist

  • 波特率/校验/停止位一致
  • 终端电阻与接地
  • 从站地址唯一
  • 0-based vs 4xxxx 已换算
  • FC 与表类型匹配
  • float 字序已验证
  • 超时与轮询不打架
  • TCP Unit ID 符合网关/直连场景

下一篇:06-开源库与工具对比.md

开源库与工具对比

开源库与工具对比

本地克隆见:../开源项目/
许可证以各仓库文件为准


1. 总览

项目 语言 角色 适合 本地目录
libmodbus C Client/Server,RTU/TCP 嵌入式 Linux、高性能、ROS 底层 libmodbus/
pymodbus Python Client/Server,功能全 脚本联调、仿真从站、测试 pymodbus/
FreeMODBUS C 嵌入式 Slave 为主 MCU 从站固件 FreeMODBUS/(若克隆成功)
go-modbus Go Client 等 Go 服务 go-modbus/
modbus_hardware_interface C++ ros2_control 插件 机器人硬件接口 modbus_hardware_interface/
ros2_modbus C++ ROS 2 节点 快速 TCP 桥接 ros2_modbus/
modbus_rtu (openvmp) C++ ROS 2 RTU 串行总线暴露给 ROS modbus_rtu/

官方/文档:


2. libmodbus 要点

  • modbus_new_rtu / modbus_new_tcp
  • modbus_read_registersmodbus_write_registers
  • 上下文 modbus_t 抽象后端
  • LGPL 许可(以仓库为准)——链入闭源需注意义务

3. pymodbus 要点

  • 同步/异步 API
  • 可轻松起 Simulator(从站) 做 CI
  • 适合先验证点表,再落到 C++/libmodbus

4. 选型建议

需求 建议
两天内读通仪表 pymodbus + 点表
产品化 Linux 主站 libmodbus
MCU 做从站 FreeMODBUS / 厂商 HAL 移植
进 ros2_control modbus_hardware_interface
只要 Topic 桥 TCP ros2_modbus
产线 RS-485 多从站 openvmp modbus_rtu 或自写轮询器

下一篇:07-ROS2与Modbus集成.md

ROS 2 与 Modbus 集成

ROS 2 与 Modbus 集成

目标:把 Modbus 设备(IO、电缸、仪表、简易驱动)纳入 ROS 2 / ros2_control
本地相关仓库:../开源项目/modbus_hardware_interfaceros2_modbusmodbus_rtu


1. 在机器人栈中的位置

1
2
3
4
5
6
7
8
9
Controller Manager (ros2_control)

Hardware Interface(读写 double state/command)

Modbus Client(libmodbus / 自研)

TCP:502 或 RTU:/dev/ttyUSB0

现场设备

Modbus 不适合替代 EtherCAT 做高动态多轴同步;适合外围与慢回路。


2. 三条常见接入路线

路线 说明
A. ros2_control 插件 modbus_hardware_interface URDF/ros2_control 标签里映射 register↔interface
B. 独立节点桥 ros2_modbus YAML 配置读写,发 Topic/Service
C. RTU 总线服务 openvmp/modbus_rtu 串行总线以 ROS 接口暴露,可本地 API 或远程

3. ros2_control 映射要点

配置中通常要声明:

  • 服务器 IP/端口或串口参数
  • 每个 State/Command interface 对应的:表类型、地址、数量、缩放/转换

注意:

  • read()/write() 周期与 Modbus 超时匹配
  • 失败时硬件接口应有明确降级(保持、报错、禁用)
  • float 多寄存器转换集中在一处,写单测

4. 推荐落地步骤

  1. 用 pymodbus 或 modpoll 按点表读通
  2. 固定缩放与字序
  3. 选 A/B/C 路线接入 ROS
  4. 先只读状态,再开放写命令
  5. 加 ACL/网络隔离(尤其 TCP)

5. 安全提醒

  • 急停、安全扭矩关闭:不要只靠 Modbus 写线圈
  • 命令寄存器要防:上电默认值、Retain 式误写、连接闪断重连后的脏写

下一篇:08-调试与排障.md

调试与排障

调试与排障

口诀:先物理层 → 再链路参数 → 再地址/FC → 最后字节序与业务缩放


1. 工具

工具 用途
pymodbus / 交互脚本 快速试读
libmodbus 例程 C 层对照
Wireshark TCP:502 解码
串口监视 / 逻辑分析 RTU 帧、CRC、间隔
厂商调试软件 对照“权威读数”

2. 分层排障

物理 / 串口

现象 检查
完全无响应 线序 A/B、接地、供电、终端电阻
偶发 CRC 错 干扰、波特率、缺少终端、星型拓扑
只错第一个字节 485 DE 方向切换过慢/过快

链路参数

现象 检查
全员超时 波特率、校验位、停止位
单个从站超时 地址冲突/地址错、设备故障

协议

现象 检查
异常 01 FC 不支持
异常 02 地址/数量越界;点号换算错
异常 03 数量或数据非法
数值离谱 字序、缩放、有符号解释

TCP

现象 检查
连不上 端口 502、防火墙、IP
连上无数据 Unit ID、设备仅支持短连接
配对错乱 Transaction ID 处理错误

3. 最小 Python 试读(示意)

1
2
3
4
5
6
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('192.168.1.10', port=502)
assert client.connect()
rr = client.read_holding_registers(0, 10, slave=1) # API 随版本略有差异
print(rr.registers if not rr.isError() else rr)
client.close()

(以你克隆的 pymodbus 版本文档为准。)


4. 本地项目入口

目的 目录
C 库 ../开源项目/libmodbus
Python ../开源项目/pymodbus
ros2_control ../开源项目/modbus_hardware_interface
ROS2 TCP 节点 ../开源项目/ros2_modbus
ROS2 RTU ../开源项目/modbus_rtu

下一篇:09-规范与资料索引.md

规范与资料索引

规范与资料索引

整理日期:2026-09-03
正式规范以 Modbus Organization 为准


1. 官方规范

文档 用途 链接
Application Protocol V1.1b3 PDU、功能码、数据模型 https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
Serial Line V1.02 RTU/ASCII 串行线(新实现用此份) https://modbus.org/docs/Modbus_over_serial_line_V1_02.pdf
Messaging on TCP/IP V1.0b MBAP、Client/Server/Gateway https://modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
Modbus/TCP Security TLS 安全扩展 https://modbus.org/docs/MB-TCP-Security-v21_2018-07-24.pdf
规格总页 索引与说明 https://www.modbus.org/modbus-specifications

站点提示:极旧的 1996 Serial 规范仅用于遗留;新实现用 V1.02。


2. 与本仓库文档映射

规范主题 中文文档
总览 / PDU·ADU 00
数据模型 01
功能码 / 异常 02
RTU/ASCII 03
TCP/MBAP 04
互操作 05
开源实现 06开源项目/README.md
ROS 2 07
排障 08

3. 实现与教程

本目录为工程向整理,不替代官方 PDF 正文。

CANopen 总览与工作原理

CANopen 总览与工作原理

CANopen = 基于 CAN 的标准化嵌入式网络高层协议
CiA(CAN in Automation)维护 · 经典版 CANopen CC(CiA 301 / EN 50325-4)
演进版:CANopen FD(CiA 1301,基于 CAN FD)


1. CANopen 是什么

CANopen 是一套跑在 CAN(Controller Area Network) 之上的应用层与通信行规

  • 物理层 / 数据链路层:通常按 ISO 11898-2 / ISO 11898-1
  • 应用层:对象字典、NMT、SDO、PDO、SYNC、EMCY、Heartbeat 等(CiA 301
  • 设备/应用行规:如驱动器 CiA 402、I/O CiA 401

设计目标一句话:在可靠、低成本的 CAN 总线上,用统一的对象模型与通信对象,实现可配置、可互操作的设备网络。

属性
维护组织 CAN in Automation(CiA)
经典标准 CiA 301 v4.2.0(应用层与通信行规)
国际对应 EN 50325-4(CANopen)
底层总线 CAN CC(经典)或 CAN FD(CANopen FD)
典型速率 10 kbit/s ~ 1 Mbit/s(CiA 301 位定时)
寻址 主要使用 11-bit CAN-ID(也支持 29-bit)
最大经典节点数 实践上常 ≤ 127(Node-ID 1~127)

官方概述:CiA — CANopen


2. 为什么需要 CANopen(而不只是裸 CAN)

裸 CAN 只保证:

  • 帧优先级仲裁
  • CRC / ACK
  • 多主广播

不规定

  • 节点如何上线、复位、启停
  • 参数如何读写
  • 周期过程数据如何组织
  • 错误如何上报
  • 不同厂商设备如何互换

CANopen 补齐的是应用语义

1
2
裸 CAN:能把字节送到总线上
CANopen:约定“这些字节表示什么、谁在什么状态、如何配置、如何同步”

3. 设备内部三层结构

CiA 将一个 CANopen 设备抽象为三部分:

1
2
3
4
5
6
7
8
9
┌─────────────────────────────────────────┐
│ Application │ 控制逻辑 / IO / 电机算法
├─────────────────────────────────────────┤
│ Object Dictionary │ 参数与过程数据的统一入口
├─────────────────────────────────────────┤
│ CANopen Protocol Stack │ NMT/SDO/PDO/EMCY/...
├─────────────────────────────────────────┤
│ CAN Controller │ ISO 11898
└─────────────────────────────────────────┘
层次 职责
应用 设备功能:读传感器、跑伺服环、驱动 IO
对象字典(OD) 所有可访问参数/数据的索引表;通信栈与应用的交界
协议栈 把 OD 项映射到 COB(通信对象),在 CAN 上收发

对象字典是理解 CANopen 的钥匙:主站配置从站、读诊断、映射 PDO,本质上都是在访问 OD。


4. 通信对象(COB)一览

COB 用途 实时性 典型方向
NMT 网络管理(启停/复位节点) 高优先 Master → Slave
SYNC 同步触发 通常 Master 广播
EMCY 紧急错误报告 Slave → 网络
TIMESTAMP 时间戳 可选
PDO 过程数据(周期/事件) 双向可配置
SDO 配置与诊断 低(请求-响应) Client ↔ Server
Heartbeat 节点存活与状态 Producer → Consumer
LSS 改 Node-ID / 波特率 配置阶段 Master ↔ Slave

详细见 03-SDO与PDO通信.md02-NMT与错误控制.md


5. 主站 / 从站角色

CANopen 网络通常有:

  • NMT Master:负责网络启停、监视节点(Heartbeat Consumer)
  • NMT Slave:受控设备(驱动器、IO、传感器)
  • SDO Client / Server:配置时 Client 读写 Server 的 OD
  • PDO Producer / Consumer:过程数据发布者与消费者

注意:一个节点可同时具备多种角色(例如主站既是 NMT Master,也消费从站 TPDO)。


6. 典型上电与运行时序(概念)

1
2
3
4
5
6
7
1. 上电 / 复位
2. 节点进入 Initialization → Pre-Operational
3. (可选)LSS 配置 Node-ID / 波特率
4. 主站用 SDO 配置通信参数、PDO 映射、应用参数
5. 主站发 NMT Start → Operational
6. 周期:SYNC(可选)+ PDO 交换过程数据
7. 并行:Heartbeat 监视;异常时 EMCY

7. CANopen CC vs CANopen FD vs CoE

体系 传输 标准入口 典型场景
CANopen CC 经典 CAN CiA 301 工控、车身、医疗设备、移动机器人底盘
CANopen FD CAN FD CiA 1301 更大 PDO、更高吞吐
CoE EtherCAT ETG + CiA 语义 高速多轴伺服、机器人关节

对机器人工程师:

  • CANopen 对象模型 + CiA 402,在 CAN 总线和 EtherCAT(CoE)两边都能复用。
  • 差别主要在带宽、拓扑、同步精度与主站实现,不是对象语义本身。

8. 关键规范地图(先记住这些)

文档 内容
CiA 301 应用层、通信行规、OD、NMT/SDO/PDO/SYNC/EMCY
CiA 302 额外通信框架(框架、管理等,工程上常遇子集)
CiA 305 LSS(Node-ID / 波特率配置)
CiA 306 EDS / DCF 电子描述
CiA 401 通用 I/O 模块行规
CiA 402 驱动与运动控制(伺服/变频/步进)
CiA 1301 CANopen FD 应用层

正式 PDF 多数需 CiA 会员登录下载:
CiA Technical Documents


9. 术语速查

术语 含义
Node-ID 节点地址 1~127
COB-ID 通信对象标识(映射到 CAN-ID)
OD Object Dictionary
RPDO / TPDO 接收/发送过程数据对象
EDS Electronic Data Sheet(设备能力描述)
DCF Device Configuration File(含具体参数值的配置)
FSA Finite State Automaton(如 CiA 402 驱动状态机)

下一篇:01-对象字典与预定义连接集.md

对象字典与预定义连接集

对象字典与预定义连接集

CANopen 的“统一地址空间”:一切配置、诊断、过程数据映射都围绕 Object Dictionary
通信对象默认 CAN-ID 由 预定义连接集(Pre-defined Connection Set) 决定


1. 对象字典(Object Dictionary)

每个 CANopen 设备维护一张对象字典:

  • Index:16-bit(常写为 4 位十六进制,如 0x6040
  • SubIndex:8-bit(如 0x00
  • 每个条目有:数据类型、访问属性(ro/wo/rw)、默认值、可选 PDO 映射标志等
1
2
3
4
5
访问形式: Index : SubIndex
例子:
0x1017:00 Producer Heartbeat Time
0x6040:00 Controlword(CiA 402)
0x6064:00 Position actual value

1.1 索引分区(必须背)

范围 用途
0000h 未使用 / 保留语义
0001h009Fh 数据类型定义区(通信用数据类型)
00A0h0FFFh 保留
1000h1FFFh 通信参数区(通信行为)
2000h5FFFh 厂商自定义应用参数
6000h9FFFh 标准化设备行规参数(如 CiA 401/402)
A000hFFFFh 保留 / 特殊用途

来源要点见 CiA 对内部设备架构的说明:
CiA — CANopen

1.2 通信区常见对象(1000h 起)

Index 名称 作用
1000h Device type 设备类型
1001h Error register 错误寄存器
1003h Pre-defined error field 错误历史
1005h COB-ID SYNC SYNC 的 COB-ID
1006h Communication cycle period 通信周期
1008h Manufacturer device name 设备名
1009h Manufacturer hardware version 硬件版本
100Ah Manufacturer software version 软件版本
1010h Store parameters 参数存盘
1011h Restore default parameters 恢复出厂
1014h COB-ID EMCY 紧急对象 COB-ID
1016h Consumer heartbeat time 消费者心跳监视
1017h Producer heartbeat time 生产者心跳周期
1018h Identity object Vendor-ID / Product code / Revision / Serial
1200h+ SDO server/client 参数 SDO 通道
1400h+ RPDO 通信参数 RPDO COB-ID、传输类型
1600h+ RPDO 映射参数 RPDO 映射表
1800h+ TPDO 通信参数 TPDO COB-ID、传输类型
1A00h+ TPDO 映射参数 TPDO 映射表

2. EDS 与 DCF(CiA 306)

文件 含义
EDS(Electronic Data Sheet) 描述设备“能提供哪些对象、默认值、类型”
DCF(Device Configuration File) 在 EDS 基础上写入本网络实例的具体参数值(含 Node-ID 等)

用途:

  • 配置工具导入 EDS,生成网络工程
  • 主站/协议栈用 DCF/EDS 生成对象字典代码或运行时配置
  • 测试与诊断工具读取设备描述

官方系列说明:
CiA 306 — Electronic Device Description

现代也常见 XML/XDD 等描述格式(工具链相关);经典工程仍大量使用 EDS/DCF。


3. 预定义连接集(Pre-defined Connection Set)

为降低“从零配置”成本,CiA 301 定义了基于 Node-ID 的默认 COB-ID:

公式形态(概念):COB-ID = 功能码基址 + Node-ID

3.1 常用默认 COB-ID(11-bit)

功能 默认 COB-ID(示意) 说明
NMT 0x000 网络管理(广播命令)
SYNC 0x080 同步(可改)
EMCY 0x080 + Node-ID 紧急
TPDO1 0x180 + Node-ID 发送 PDO1
RPDO1 0x200 + Node-ID 接收 PDO1
TPDO2 0x280 + Node-ID
RPDO2 0x300 + Node-ID
TPDO3 0x380 + Node-ID
RPDO3 0x400 + Node-ID
TPDO4 0x480 + Node-ID
RPDO4 0x500 + Node-ID
SDO TX(Server→Client) 0x580 + Node-ID
SDO RX(Client→Server) 0x600 + Node-ID
Heartbeat / Node Guard 0x700 + Node-ID
LSS 请求/响应 0x7E5 / 0x7E4 CiA 305

具体数值以设备 EDS / CiA 301 为准;上表用于快速心算与抓包对照。

3.2 为什么要改默认 COB-ID?

  • 多主站/复杂拓扑避免冲突
  • 多轴优化 PDO 布局
  • 与网关、桥接设备对接
  • 安全相关对象(如 SRDO)另有规则

改法:通过 SDO 写对应通信参数对象(如 1800h 的 COB-ID 子索引)。


4. 位速率与线缆(工程要点)

CiA 301 允许约 10 kbit/s ~ 1 Mbit/s。经验关系:

波特率 典型总线长度上限(经验)
1 Mbit/s ~25 m
500 kbit/s ~100 m
250 kbit/s ~250 m
125 kbit/s ~500 m
50 kbit/s ~1000 m

实践注意:

  • 两端 120Ω 终端电阻
  • 双绞屏蔽、单点接地策略
  • 所有节点波特率必须一致(可用 LSS 统一切换)
  • 高波特 + 长线 = 最先出问题的组合

5. Identity Object(1018h)为何重要

1018h 通常包含:

  • Vendor-ID
  • Product code
  • Revision number
  • Serial number

用途:

  • LSS 选择性切换(按身份定位未配置节点)
  • 资产盘点与固件匹配
  • 主站启动时校验“接的是不是预期设备”

6. 与应用行规的衔接

通信区(1xxxh)回答:“怎么通信
行规区(6xxxh)回答:“通信的是什么应用量

例如 CiA 402:

Index 含义
6040h Controlword
6041h Statusword
6060h Modes of operation
607Ah Target position
6064h Position actual value

详情见 04-CiA402伺服控制.md

下一篇:02-NMT与错误控制.md

NMT 与错误控制

NMT 与错误控制

NMT(Network Management)决定节点能否收发过程数据
Heartbeat / Node Guarding / EMCY 决定“节点还活着吗、出了什么错”


1. NMT 状态机(从站视角)

经典状态:

1
2
3
4
5
6
7
8
9
10
11
    上电/复位


Initialization


Pre-Operational ◀── NMT Enter Pre-Operational
│ │
│ └──▶ Stopped ◀── NMT Stop
│ │
└── NMT Start ──▶ Operational
状态 SDO PDO 典型用途
Initialization 上电初始化
Pre-Operational 配置 OD、映射 PDO
Operational 正常周期运行
Stopped 暂停应用通信

主站常用 NMT 命令(概念):

  • Start Remote Node
  • Stop Remote Node
  • Enter Pre-Operational
  • Reset Node
  • Reset Communication

NMT 帧优先级高(默认 COB-ID 0x000),可针对单节点或全网广播。

NMT / SYNC / EMCY / Heartbeat 的字节级格式见:
10-NMT-SYNC-TIME-EMCY-Heartbeat报文格式.md


2. 推荐启动顺序(工程模板)

1
2
3
4
5
6
7
8
1. 总线通、波特率一致、终端电阻正确
2. 节点上电 → Pre-Operational(或先 LSS 配 Node-ID)
3. 主站确认节点在线(Heartbeat / 主动探测)
4. SDO 写通信参数、PDO 映射、应用参数
5. (可选)存盘 1010h
6. NMT Start → Operational
7. 开始 SYNC + PDO 周期任务
8. 持续监视 Heartbeat / EMCY / 应用状态字

常见错误:未配置完就 Start,导致 PDO 映射不对、控制字无效、驱动拒动。


3. Heartbeat(推荐)

3.1 Producer Heartbeat

节点周期性发送自身 NMT 状态(默认 COB-ID 0x700 + Node-ID)。

关键对象:

  • 1017h Producer Heartbeat Time(单位通常为 ms;0 表示关闭)

3.2 Consumer Heartbeat

监视者配置要监视的 Node-ID 与超时:

  • 1016h Consumer Heartbeat Time(数组:Node-ID + 超时)

超时动作由应用决定:停轴、切安全态、告警、尝试复位等。

现代工程优先 Heartbeat,弱化 Node Guarding。


4. Node Guarding(遗留)

主站轮询从站,从站应答并翻转 toggle bit。
缺点:增加总线负载、实现复杂、易与 Heartbeat 混用出错。
新设计尽量只用 Heartbeat。


5. EMCY(Emergency)

设备检测到内部错误时发送紧急对象:

  • 默认 COB-ID:0x080 + Node-ID
  • 内容通常含:错误码、错误寄存器(1001h)相关信息、厂商特定字段

主站应:

  1. 记录 EMCY
  2. 结合 1001h / 1003h 与厂商手册解读
  3. 决定是否 Stop / Reset / 切安全扭矩关闭

EMCY 不是可靠的“安全通道”;功能安全需 SRDO / 安全协议(如相关 Safety 规范)。


6. SYNC 与 TIME(特殊功能对象)

对象 作用
SYNC 广播同步事件;同步传输类型的 PDO 在 SYNC 后发送/接收生效
TIME 时间戳分发(可选)

同步相关对象示例:

  • 1005h COB-ID SYNC
  • 1006h Communication cycle period
  • 1007h Synchronous window length(若支持)

多轴运动控制里,SYNC 常与 CiA 402 的插补/周期模式配合;精度受 CAN 抖动限制,高要求场景常转向 EtherCAT DC。


7. LSS(CiA 305)简述

当设备出厂 Node-ID=0xFF(未配置)或需现场改波特率时,用 LSS:

  • 请求帧:0x7E5
  • 响应帧:0x7E4
  • 可按 Identity(1018h)选择性配置单个从站

官方说明:
CiA 305 — Layer Setting Services


8. 故障模式速查

现象 优先检查
能 SDO 不能 PDO 是否仍在 Pre-Operational;PDO 映射/COB-ID
节点偶发掉线 Heartbeat 超时、线缆、供电、终端电阻
上电后无响应 波特率、Node-ID、LSS、硬件 CAN 收发器
突然停轴 EMCY、402 状态字故障位、急停输入
多节点冲突 COB-ID 重复、Node-ID 冲突

下一篇:03-SDO与PDO通信.md

SDO 与 PDO 通信

SDO 与 PDO 通信

SDO = 配置/诊断通道(准可靠、请求-响应、非实时)
PDO = 过程数据通道(实时、可映射、可同步)

这是 CANopen 最核心的一对概念,也是 CoE(EtherCAT)里同名机制的来源。

字节级报文 / 抓包解码请直接读:


1. 为什么要分 SDO 和 PDO

SDO PDO
目的 读/写任意 OD 项 周期交换少量关键过程量
时延 较高(确认握手)
带宽效率 差(协议开销大) 好(净荷直接是映射数据)
典型时机 启动配置、调试、参数整定 Operational 运行时
类比 HTTP GET/PUT 共享内存/周期帧字段

原则:

  • 能放 PDO 的周期量,不要每周期用 SDO 扫
  • 非周期配置用 SDO

2. SDO(Service Data Object)

2.1 角色

  • SDO Server:拥有对象字典的设备(通常是从站)
  • SDO Client:发起读写的一方(通常是主站/配置工具)

默认通道(预定义连接集):

  • Client → Server:0x600 + Node-ID
  • Server → Client:0x580 + Node-ID

2.2 传输类型(概念)

类型 适用
Expedited 很小的数据(常见 ≤4 字节)一次完成
Segmented 较长数据分段传输
Block(若支持) 大块数据更高吞吐(固件/大批参数)

2.3 工程用法

1
2
主站 SDO Upload   = 读从站 OD
主站 SDO Download = 写从站 OD

典型配置序列:

  1. 1018h 确认设备身份
  2. 1400h/1600h/1800h/1A00h 配置 PDO
  3. 写应用参数(如 6060h 模式、6081h 速度)
  4. (可选)1010h 存盘
  5. NMT Start

2.4 超时与重试

SDO 必须设超时。现场常见问题:

  • 从站忙/未上线 → Client 超时
  • 写只读对象 → Abort
  • 长度/类型不匹配 → Abort

Abort 码需对照厂商手册与 CiA 301。


3. PDO(Process Data Object)

3.1 RPDO / TPDO

名称 方向(相对节点) 含义
RPDO 节点接收 主站→从站命令(控制字、目标位置…)
TPDO 节点发送 从站→主站反馈(状态字、实际位置…)

一个节点通常支持多路 PDO(常 4 路默认,可扩展)。

3.2 通信参数 vs 映射参数

以 TPDO1 为例:

对象 作用
1800h 通信参数:COB-ID、传输类型、禁止时间、事件定时器等
1A00h 映射参数:本 PDO 净荷由哪些 OD 项按什么长度拼接

RPDO1 对应:

  • 通信:1400h
  • 映射:1600h

3.3 映射本质

PDO 净荷 = 若干 OD 条目的位串拼接(按映射表顺序)。

1
2
3
4
示例 TPDO1 映射:
6041h:00 Statusword 16 bit
6064h:00 Position actual 32 bit
→ 净荷 6 字节

约束:

  • 经典 CAN 单帧数据场最多 8 字节 → 单 PDO 映射总长通常 ≤ 8 字节
  • CANopen FD 可更大(见 CiA 402-6 等)

3.4 传输类型(Transmission Type)

常见分类:

类型 行为
同步(1~240) 每收到 n 次 SYNC 触发一次
异步/事件 数据变化或事件定时器触发
厂商特定 依实现

运动控制常用:同步 PDO + 周期 SYNC,让多轴在同一节拍采样/更新。


4. 同步 PDO 时序(概念)

1
2
3
4
5
主站: 发 SYNC

从站: 锁存实际值 → 发 TPDO(实际位置/状态)
主站: 计算下一拍命令 → 发 RPDO(控制字/目标)
从站: 在约定窗口应用命令

细节因驱动实现而异;402 周期模式(CSP/CSV)对此更敏感。
CAN 抖动较大时,同步质量不如 EtherCAT DC。


5. 配置 PDO 的安全步骤(实操)

很多设备要求:

  1. 先让节点处于 Pre-Operational
  2. 禁用 PDO(清 COB-ID 有效位)再改映射
  3. 写映射条目数与各映射项
  4. 重新使能 COB-ID
  5. 再 NMT Start

直接在 Operational 热改映射,容易导致协议栈拒绝或行为未定义。


6. SDO 与 PDO 协作的完整图景

1
2
3
4
5
6
7
[配置阶段 Pre-Op]
SDO ──配置──▶ OD(通信参数 + 映射 + 应用参数)

[运行阶段 Op]
RPDO ──写入──▶ OD 映射项(如 6040/607A)──▶ 应用
应用 ──更新──▶ OD 映射项(如 6041/6064)──▶ TPDO
SDO 仍可用于在线诊断(勿滥用占用总线)

7. 抓包时如何辨认

假设 Node-ID = 3:

CAN-ID 可能含义
0x000 NMT
0x080 SYNC
0x083 EMCY(3)
0x183 TPDO1(3)
0x203 RPDO1(3)
0x583 SDO TX(3)
0x603 SDO RX(3)
0x703 Heartbeat(3)

candump / Wireshark(SocketCAN)对照 EDS 映射表,即可解码净荷。

下一篇:04-CiA402伺服控制.md

CiA 402 伺服控制

CiA 402 伺服控制

CiA 402:驱动与运动控制设备行规(伺服 / 变频 / 步进)
部分内容对应 IEC 61800-7-201 / IEC 61800-7-301
官方介绍:CiA 402 series

在 EtherCAT 上它叫同一套语义(常经 CoE);本篇以 CANopen 语境说明。


1. 402 解决什么问题

统一约定:

  • 驱动内部 FSA(有限状态自动机)
  • Controlword / Statusword 位定义
  • 运行模式(位置/速度/力矩及其周期同步变体)
  • 默认 PDO 映射建议
  • 常用对象索引(60xxh

目标:不同厂商驱动在“使能、点动、CSP 跟踪”等流程上可按同一状态机集成。

现实提醒(CiA 也承认):可选功能太多,宣称 402 兼容 ≠ 完全可互换,必须按厂商手册核对强制项与厂商扩展。


2. 关键对象(先记住)

Index 名称 作用
6040h Controlword 主站命令字
6041h Statusword 驱动状态字
6060h Modes of operation 设置模式
6061h Modes of operation display 当前模式反馈
607Ah Target position 目标位置
6064h Position actual value 实际位置
60FFh Target velocity 目标速度(视模式)
606Ch Velocity actual value 实际速度
6071h Target torque 目标力矩
6077h Torque actual value 实际力矩
6081h Profile velocity 轮廓速度
6083h/6084h Profile accel/decel 加减速
6098h Homing method 回零方法
60C1h Interpolation data 插补数据(若用)

单位与缩放看厂商:常涉及 608Fh(位置编码器分辨率)等。


3. 驱动状态机(FSA)核心路径

简化(名字以常见实现为准):

1
2
3
4
5
6
7
8
9
10
11
Not ready to switch on

Switch on disabled
│ shutdown
Ready to switch on
│ switch on
Switched on
│ enable operation
Operation enabled ◀══ 正常运行

Quick stop / Fault 等分支

主站通过写 Controlword 触发转换;读 Statusword 确认到达。

3.1 常用使能序列(口述版)

1
2
3
4
5
1) 故障则先 Fault reset
2) Shutdown → Ready to switch on
3) Switch on → Switched on
4) Enable operation → Operation enabled
5) 再下发目标位置/速度

每步都要等 Statusword 对应位满足,再发下一步——这是面试/联调最高频考点。

3.2 Statusword 关注点

  • 状态机状态位(低位组合)
  • Voltage enabled / Warning / Fault
  • Target reached / Set-point acknowledge(模式相关)
  • Following error(跟随误差)

具体位图以 厂商手册 + CiA 402 为准。


4. 运行模式(Modes of operation)

模式码(常见) 名称 说明
1 PP Profile Position 轮廓位置:给目标点,驱动内部规划
3 PV Profile Velocity 轮廓速度
4 PT Profile Torque 轮廓力矩
6 HM Homing 回零
7 IP Interpolated Position 插补位置(经典)
8 CSP Cyclic Sync Position 周期同步位置(主站每周期给位置)
9 CSV Cyclic Sync Velocity 周期同步速度
10 CST Cyclic Sync Torque 周期同步力矩

机器人关节控制最常见:CSP(或 EtherCAT 下同等 CSP)。
CANopen 总线抖动大时,CSP 周期不宜过激进;多轴高动态优先 EtherCAT。


5. PDO 映射示例(教学用)

RPDO1(主站→驱动)

映射 内容
6040h Controlword
607Ah Target position

TPDO1(驱动→主站)

映射 内容
6041h Statusword
6064h Position actual value

实际产品常提供多套默认 PDO(CiA 402-3/402-5);以 EDS 为准。


6. 回零(Homing)要点

  1. 6060h = 6(HM)
  2. 配置 6098h 方法与开关逻辑
  3. Controlword 触发 homing bit
  4. 等 Statusword 指示完成
  5. 切回 PP/CSP 等作业模式

方法编号含义因厂商略有差异,必须对照手册。


7. 与 EtherCAT CiA402 文档对照

本仓库 EtherCAT 侧有更细的 402 实战说明:

  • ../../EtherCAT/协议/04-CiA402伺服控制.md

两边状态机与对象索引高度一致;差异在:

  • 过程数据载体(CAN PDO vs EtherCAT 逻辑过程数据)
  • 同步源(CAN SYNC vs DC SYNC0)
  • 带宽与周期上限

8. 联调 Checklist

  • Node-ID / 波特率正确,Heartbeat 正常
  • Pre-Op 下用 SDO 读 1018h6041h
  • 6060h 设为目标模式,6061h 回读一致
  • PDO 映射与手册默认一致(或已按步骤改完)
  • NMT Start 后 Controlword 序列逐步使能
  • 限位点、急停、跟随误差阈值合理
  • 异常时能看到 EMCY + Fault 位,并能 Fault reset

下一篇:05-开源协议栈对比.md