这一页给出德敏哲 19 系列 CANopen 磁致伸缩位移传感器在单磁块、异步模式下的完整通讯过程。所谓异步,是指传感器进入启动状态后不需要控制器再发同步讯号,自己按固定周期把位移和速度数据发上总线。对做 PLC 程序的人来说,需要盯的只有三件事:上电后读到什么、要发哪一条启动指令、收上来的 7 个字节怎么拆。

总线上的报文流程
| 序号 | 发送者 | cob-id | dlc | data | 说明 |
|---|---|---|---|---|---|
| 0 | 传感器 | 0xFF | 0 | n/a | EMCY 讯息(电源启动) |
| 1 | 控制器 | 0x000 | 2 | 0x01 0x00 | 启动所有节点 |
| 2 | 传感器 | 0x1FF | 7 | 位移(4 字节) + 速度(2 字节) | 磁块一 |
| 3 | 传感器 | 0x1FF | 7 | 位移(4 字节) + 速度(2 字节) | 磁块一 |
| 4 | 传感器 | 0x1FF | 7 | 位移(4 字节) + 速度(2 字节) | 磁块一 |
四条报文分别是什么意思
- 第 0 条是传感器主动报的:上电瞬间它先发一条 EMCY 讯息,cob-id 为
0xFF。这条讯息同时也暴露了它的 node-id ——0x7F,换成十进制是 127,这是出厂默认值。多台传感器挂同一条总线时,这个默认值必须改掉,否则地址冲突。 - 第 1 条是控制器发的启动指令:cob-id
0x000,数据长度 2 字节,内容是0x01 0x00。前一个字节0x01表示“启动节点”,后一个字节0x00表示“所有节点”。如果只想启动某一台,把后一个字节换成它的 node-id 即可,例如0x01 0x7F。 - 第 2 条往后是传感器周期上报的数据:cob-id 固定
0x1FF,长度 7 字节。前 4 字节是位移,其后 2 字节是速度,最后 1 字节填0x00。 - 启动指令只需要发一次:传感器收到一条启动讯息就进入工作状态,之后一直按自己的周期发数据。因此 PLC 的初始化程序里发一次就够,不需要循环发。
7 个字节怎么拆成位移值
位移和速度都是低位先发(LSB first),也就是收到字节后要倒过来拼。举例:位移字段收到 0x02 0x83 0x00 0x00,倒过来拼成 0x00008302,换算成十进制是 33538。如果这台传感器的分辨率设定为 0.005mm,那么实际位移就是 33538 × 0.005mm = 167.69mm。
| 分辨率设定 | 每个计数代表 | 33538 个计数对应位移 |
|---|---|---|
| 0.005mm | 0.005mm | 167.69mm |
| 0.002mm | 0.002mm | 67.08mm |
| 0.01mm | 0.01mm | 335.38mm |
这张表想说明一件事:同一串位移数据,在分辨率设定不同的传感器上代表的位移并不相同。PLC 侧的换算系数必须按实际配置来写,不能照抄别人的程序。
调试时容易踩的几个点
- 波特率全总线必须一致:传感器、PLC、其他从站要对齐,改一处的波特率就要全改。
- 总线两端各接一个 120Ω 终端电阻:组网图里末端那台带内置终端电阻的型号(D60)就是为这个准备的,接错位置会造成反射、丢帧。
- 屏蔽层单端接地:电缆屏蔽要焊在插头外壳上,并且只在控制器一侧接地,两端都接地会形成地环流,反而把干扰引进来。
- 速度字段别丢:很多程序只取位移,但速度字段对判断机构是否卡滞很有用,拆包时顺手一起取出来。
相关问题另按安装、信号、干扰、通讯四类做了归类,可对照排查:位移传感器常见问题解答。
常见问题
CANopen 单磁块异步模式的报文是什么?
传感器上电主动发一帧 EMCY,cob-id 0xFF,同时也暴露了它的 node-id;控制器发一条启动指令,cob-id 0x000、长度 2 字节、内容 0x01 0x00,前一个字节 0x01 表示启动节点,后一个字节 0x00 表示所有节点;之后传感器周期上报,cob-id 固定 0x1FF、长度 7 字节,前 4 字节是位移,其后 2 字节是速度,最后 1 字节填 0x00。
CANopen 只启动某一台传感器怎么做?
把启动指令的后一个字节换成它的 node-id 即可,例如 0x01 0x7F。多台传感器挂同一条总线时,出厂默认的 node-id 0x7F 必须改掉,否则地址冲突。
CANopen 的 7 个字节怎么拆成位移值?
位移和速度都是低位先发(LSB first),收到字节后要倒过来拼。例如位移字段收到 0x02 0x83 0x00 0x00,拼成 0x00008302,换算成十进制是 33538;若这台传感器的分辨率设定为 0.005mm,实际位移就是 167.69mm。同样 33538 个计数,在 0.002mm 分辨率下对应 67.08mm、在 0.01mm 下对应 335.38mm,PLC 侧的换算系数必须按实际配置来写。
CANopen 组网要注意什么?
波特率全总线必须一致,传感器、PLC、其他从站要对齐;总线两端各接一个 120Ω 终端电阻,末端那台带内置终端电阻的型号就是为这个准备的;屏蔽层只在控制器一侧接地,两端都接地会形成地环流,反而把干扰引进来。
CANopen 的速度字段有什么用?
单磁块异步报文里前 4 字节是位移,其后 2 字节就是速度,最后 1 字节固定填 0x00。很多程序只取位移,但速度字段对判断机构是否卡滞很有用,拆包时顺手一起取出来即可,它与位移一样是低位先发、按实际分辨率换算。

