网站地图
原理与结构
原理与结构
您的位置: 首页 >> 原理与结构 >> CANopen工作原理详细讲解:对象字典、SDO与PDO

CANopen工作原理详细讲解:对象字典、SDO与PDO

发布时间:2026-10-19

CANopen 的工作原理,一句话:它是跑在 CAN 总线之上的一套设备约定,用对象字典规定“数据放在哪”,用 SDO 配参数,用 PDO 搬实时数据,用 NMT 管状态。

很多人卡在第一步,是因为把 CAN 和 CANopen 当成一回事。CAN 只规定了物理层和帧格式,帧里最多 8 个字节,谁发、发什么、字节怎么排,全靠上层约定。CANopen 就是这份约定,它把工业设备常用的参数和过程数据,编成一套统一的地址表,让不同厂家的设备能互相听懂。

三样东西:对象字典、SDO、PDO

对象字典是一张表,每个条目有一个 16 位索引和一个 8 位子索引,比如设备信息在 0x1018,厂商参数在 0x2000 往后。谁想知道这个节点有什么能力,翻它的对象字典就行。

访问这张表有两条路。SDO 是慢速通道,一问一答,带确认,适合上电时配参数;PDO 是快速通道,一个报文直接把数据搬过去,没有额外的协议开销,适合周期性传位移值。

报文常用 COB-ID干什么要不要应答
NMT0x000主站管节点状态:启动、进运行、停止不应答
SYNC0x080给同步型 PDO 打节拍不应答
EMCY0x080 + 节点号节点报故障不应答
SDO 请求0x600 + 节点号读或写对象字典一问一答
SDO 响应0x580 + 节点号返回读值或写入结果—
TPDO0x180 + 节点号节点往外发过程数据不应答
RPDO0x200 + 节点号节点接收过程数据不应答
心跳0x700 + 节点号节点报“我还活着”不应答

表里的 COB-ID 是出厂默认值,可以在对象字典里改。改之前先想清楚:同一网段里两个节点撞了同一个 COB-ID,两条报文会互相冲突,现象是偶尔丢数据,很难查。

上电到能用,节点要走四个状态

CANopen 节点上电后不是立刻干活,要经过初始化、预运行、运行、停止这四个状态。初始化是内部自检和读参数,完成后自动进预运行;预运行状态下只通 SDO,可以配参数,PDO 不发;收到主站的启动命令才进运行,PDO 开始工作;停止状态下除了 NMT 和心跳,其他通信都停。

这条状态链解释了现场一个常见困惑:参数都写进去了,为什么主站收不到位移值?节点还停在预运行。发一条 NMT 启动命令让它进运行,数据就出来了。

NMT 四个状态:PDO 只在“运行”态出数据 初始化 自检、读参数 预运行 只通 SDO,可配参数 运行 SDO 与 PDO 都通 停止 只剩 NMT 与心跳 自动 启动 现场判据:SDO 能读、PDO 不来,先看节点是不是停在预运行。 停机复位后节点会退回预运行,主站要重新发启动命令。

对象字典怎么看:索引加子索引

对象字典的地址是两段式:高 8 位和低 8 位合成 16 位索引,再跟一个 8 位子索引。比如 0x1018 是设备信息,里面的子索引 1 是厂商号、2 是产品代码、3 是版本号。

位移传感器常用的是两类对象:配置类放在 0x2000 以后的厂商区或标准区,位置值放在过程数据对象里,通过 PDO 映射指过去。SDO 读的时候报文里带索引和子索引,应答里带回数据类型和值,长度通常在 4 字节以内。

调试时最省事的做法是把要读的几个对象列成一张小表:索引、子索引、含义、数据类型、期望值。拿着这张表一条条读,比在软件里翻树状菜单快得多。

磁致伸缩位移传感器测杆与电子仓,尾部出线
图 3|磁致伸缩位移传感器:测杆与电子仓一体,尾部出线。总线型与模拟量型在机械部分是同一套,差别只在电子仓内部的接口电路。

PDO 怎么搬数据:映射与传输类型

PDO 本身不带协议头,报文里就是裸数据。所以发送方和接收方必须事先约定好“第几字节到第几字节是什么”,这份约定就是 PDO 映射。

映射的做法是把对象字典里的条目按顺序填进映射表,每条占 1 到 4 个字节,最多 8 字节。一只位移传感器常见的映射是:位置值 4 字节,状态位 1 字节,剩下的留空或者放诊断。

带多个圆形接插件的位移传感器端面
图 4|端面上的多个圆形接插件:多测点结构会把几路信号分开引出,接进总线时要按路数分别规划节点号与映射。

传输类型决定什么时候发。同步型靠 SYNC 报文打节拍,收到一个 SYNC 就发一次;事件型由内部条件触发,可以配一个事件计时器,到点就发一次。位移传感器在液压缸上跟着动作走,用事件计时器更省带宽;在同步产线上,用同步型更好对齐。

事件计时器设得太短会把总线塞满。一条 TPDO 大约占一百多微秒的总线时间(500kbps 下),节点多了以后要按带宽算一遍,别让每只传感器都按 1ms 发。

心跳、EMCY 与常见误判

心跳是节点定期发的“我还活着”,主站超时没收到就可以报警。EMCY 是节点主动报故障,带一个错误码和错误寄存器。两者都不要和 PDO 混为一谈:心跳断说明节点或线路有问题,PDO 停但心跳正常,多半是状态不对或者映射错了。

现场最常见的误判是“总线断了”。实际上终端电阻少一只、波特率不一致、两个节点同 COB-ID,表现都像断线。区分办法是先只留一只节点通信,正常了再加第二只,一只只加回去,问题节点会自己暴露出来。

方形法兰安装的位移传感器,测杆伸出
图 5|方形法兰安装的位移传感器:法兰面固定、测杆伸出测量。总线型产品换的只是电气接口,安装尺寸与模拟量型可以对接同一套支架。
总线型磁致伸缩位移传感器,尾部为圆形接插件,测杆上套着磁环
图 1|总线型磁致伸缩位移传感器:尾部圆形接插件走总线,测杆上套着磁环。总线型与模拟量型的差别在接线和组态,机械安装是同一套。

位移传感器接进总线:四个高频坑

坑现象处理
波特率不一致通信时通时断,错误帧多全网上电前统一,改完必须重新上电生效
终端电阻缺失短距离正常,加长就丢帧总线两端各一只 120Ω,中间节点不装
节点号重复两只传感器读数互相串逐个上电确认节点号,再做联调
PDO 映射与主站不一致数值明显不对,像放大了几十倍按字节对齐核对映射长度与数据类型

本站 19 系列这类总线型产品,节点号、波特率、事件计时器都能通过 SDO 配置,配置项一次写不完就先写节点号和波特率,重新上电确认能通信,再配 PDO 映射。顺序反了,一旦波特率写错,后面就连不上了。

多通道位移数据采集器,金属外壳带多个接口
图 2|多通道位移采集器:多路传感器先汇到采集器,再由一路总线上传,适合测点多但主站接口有限的老设备改造。

常见问题

问:CAN 和 CANopen 到底什么关系?
答:CAN 是底层总线和帧格式,单帧最多 8 字节;CANopen 是在 CAN 之上约定的一套通信规则,规定数据怎么编址、怎么传、怎么管状态。

问:为什么参数写进去了却收不到数据?
答:节点多半还在预运行状态。预运行只通 SDO,PDO 不发;发 NMT 启动命令进运行态,数据才会周期上来。

问:PDO 和 SDO 能不能互换使用?
答:能用但不划算。SDO 一问一答有开销,适合配置;周期性位移值走 PDO 才省带宽。用 SDO 轮询位置,节点一多总线就撑不住。

问:总线长度能拉多长?
答:跟波特率直接相关,速率越低能拉得越远。具体长度按所选波特率的总线规范取值,别按“反正能通”的经验硬拉。

CANopen 位移传感器的节点号、波特率、PDO 映射与事件计时器配置,把主站型号、传感器型号和现场节点数量发过来,易测电气的工程师可以提供对应的配置范例。易测电气位移传感器工程师欢迎您的咨询。

版权所有:深圳市易测电气有限公司 备案号:粤ICP备19052563号 网安粤公网安备 44030602003587号 技术支持:星海互联