德敏哲 Germanjet 19 系列 CANopen 磁致伸缩位移传感器在「两个磁块 + 异步」组合下的报文顺序。
两个磁块管的是「一次测两个位置」,异步管的是「不发 SYNC、传感器自己定时上报」。两件事叠在一起,最直接的后果是:每个定时周期会连着吐出两帧 PDO,控制器接收侧要按两帧的量留缓冲。
报文列的含义、EMCY 与启动帧的来路,单磁块-同步通讯范例 里写过,这里只讲这个组合特有的地方。

报文先后顺序
序号 | 发送者 | 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 | 传感器 | 0x1FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块一 |
5 | 传感器 | 0x2FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块二 |
6 | 传感器 | 0x1FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块一 |
7 | 传感器 | 0x2FF | 7 | 位移(4 字节), 速度(2 字节) | 磁块二 |
两个 PDO 是连着到的
启动之后,传感器每个定时周期发两帧:PDO1(cob-id 0x1FF)带磁块一,PDO2(cob-id 0x2FF)带磁块二。帧格式还是 7 字节——前 4 字节位移、接着 2 字节速度、最后 1 字节 0x00,低字节先发。
换算举例:位移原始值 0x02 0x83 0x00 0x00 即 0x00008302=33538,0.005mm 分辨率下为 167.69mm。
这个组合最容易出问题的地方
一是带宽。异步本身不带节拍,但两磁块意味着每秒帧数翻倍;总线已经跑到 500k 以上、节点又多的时候,先把定时周期放宽,别一上来就设到最短。
二是对时。两帧不是同一时刻采到的,中间隔着一帧的传输时间。要算两路差值、算倾角的场合,异步版会把传输抖动带进结果里,这种需求应该走同步版,让两帧落在同一个 SYNC 节拍上。
三是缓存。控制器写成「一次中断只读一帧」的,双 PDO 下必然长期丢一路;接收要用环形缓冲,再按 cob-id 分发到两路变量。

