两磁块的场合,德敏哲 Germanjet 194 系列 CANopen 磁致伸缩位移传感器一根测杆上装两个磁环,同时测两个位置:比如液压缸的活塞位置再加一个联动件的位置,或者一台设备上的两个行程端点。
硬件上是「一根杆、两个磁块」,软件上是「一个节点、两路 PDO」——PDO1 送磁块一,PDO2 送磁块二。其余流程跟单磁块同步版一模一样,所以这一篇只讲两个磁块带来的差别。
第一次看这套报文,建议先翻 单磁块-同步通讯范例 ,那里把每一列、每一帧都拆开讲过。

报文先后顺序
序号 | 发送者 | cob-id | dlc | data | 注 |
|---|---|---|---|---|---|
0 | 传感器 | 0xFF | 0 | n/a | EMCY 讯息 (电源启动) |
1 | 控制器 | 0x000 | 2 | 0x01 0x00 | 启动所有节点 |
2 | 传感器 | 0x1FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块一 |
3 | 传感器 | 0x2FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块二 |
4 | 控制器 | 0x080 | 0 | n/a | SYNC 讯息 |
5 | 传感器 | 0x1FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块一 |
6 | 传感器 | 0x2FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块二 |
7 | 控制器 | 0x080 | 0 | n/a | SYNC 讯息 |
8 | 传感器 | 0x1FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块一 |
9 | 传感器 | 0x2FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块二 |
两个磁块和单磁块差在哪
只差三处:启动后返回的是两帧 PDO 而不是一帧;PDO2 的 cob-id 是 0x2FF(=0x200 加 node-id 0x7F);两路数据区各自独立,互不覆盖。
每一帧的格式没变:长度 7 字节,前 4 字节位移、接着 2 字节速度、最后 1 字节 0x00,位移和速度仍然低字节先发。
两路读数各自怎么算
换算方法完全一样。例如收到位移数据 0x0B 0x83 0x00 0x00,拼起来是 0x0000830B=33547,分辨率 0.005mm 时为 33547×0.005=167.735mm;另一路同法换算,只是取自 PDO2。
装第二个磁块要盯的三件事
第一是间距。两个磁块靠得太近会互相干扰,量程标定也会打架,安装前先跟厂家确认这一款允许的最小间距。
第二是零位。零位是相对杆端定义的,两个磁块共用同一根杆,换杆等于两路零位一起变——现场换尺必须把两路重新标定,只标一路的话另一路的读数会整体偏移。
第三是别只解 PDO1。控制器侧只挂了一个 TPDO 回调、只认 0x1FF 的时候,第二路数据一直在总线上跑,只是没人收。排查「第二个位置读不到」先看这里,不要一上来就怀疑传感器。

