19 系列 CANopen 位移传感器通讯范例:EMCY、PDO 与 SYNC 四类报文
把 CANopen 磁致伸缩位移传感器接到控制器上,光知道"它支持 CANopen"是不够的。上电之后谁先说话、每帧里装的是什么、控制器该回什么,都得按行规来。这篇文章把 19 系列 CANopen 传感器的通讯过程拆成四类报文,按单磁块、双磁块,同步、异步四种接法,一条一条对清楚。
下面的帧序取自 Germanjet 德敏哲 19 系列 CANopen 型(194)的实际通讯过程。同品牌同系列可以直接照搬;跨品牌要以对方的 EDS 与手册为准。
一、上电头三帧:EMCY、启动节点、PDO1
先记住整条流程。传感器一上电,会立刻发出一帧 EMCY,cob-id 是 0xFF。这一帧的意义是告诉控制器"我在这里",同时亮出它的默认节点地址:0x7F,也就是十进制的 127。接下来控制器要发"启动节点"报文,cob-id 是 0x000,数据两字节 01 00——01 表示启动,00 表示所有节点。也可以发 01 7F,只启动 0x7F 这一个节点。
传感器收到启动节点后,会回一帧 PDO1,cob-id 是 0x1FF,数据 7 字节:前 4 字节是位移,中间 2 字节是速度,最后 1 字节是保留的 00。位移和速度都是低位先发(LSB first),比如收到 03 83 00 00,实际数值是 0x00008303,十进制 33539。分辨率按 0.005mm 算,就是 33539 × 0.005 = 167.695mm。
二、EMCY 里到底报了什么
上电那一帧 EMCY 是空的,只表示"我上电了"。真正的报警在后面:设备内部错误状态一变化(错误出现,或者错误消失),都会补发一帧,8 字节,结构固定。
- 字节 0~1:标准错误码。
- 字节 2:错误寄存器,和对象 0x1001 同一个值——0x00 无错、0x11 通信错、0x05 主电压错、0x81 传感器错,复合故障按位叠加。
- 字节 3~7:厂商自定义区。
| 错误码 | 含义 | 现场通常是什么 |
|---|---|---|
| 00 00 | 无错误 | 复位后的正常帧 |
| 50 00 | 设备硬件(磁环未检测到) | 磁环掉、偏出有效量程、没装磁环 |
| 81 00 | 通信错误 | 总线干扰、终端电阻缺失 |
| 31 00 | 主电压错误 | 供电低于或高于允许范围 |
| 81 30 | 生命期错误 | 开了节点守护,主站没按时轮询 |
| 63 00 | 数据集错误 | 参数区校验失败,需重新配置 |
| 81 20 | 节点进入 CAN passive | 发送错误计数过高,总线质量差 |
现场最常撞到的是 50 00 和 81 30。前者八成不是电子故障,是磁环位置不对;后者基本是主站把守护打开了却没发远程帧,设备等不到轮询就判定链路断了,随后停发 PDO——表现成"读了几秒突然没数"。
三、同步和异步在这里分叉
同步接法:传感器进入启动状态后,会回应控制器发来的 SYNC 报文。SYNC 的 cob-id 是 0x080,没有数据。每收到一次 SYNC,传感器就回一帧 PDO。控制器只在初始化时发一次"启动节点",之后全靠 SYNC 驱动,读多少帧由你说了算,节奏完全可控。
异步接法:传感器收到"启动节点"后进入启动状态,之后会定时自发 PDO,不需要 SYNC。想让它多快发一帧,靠的是 CAN 事件计时器——那组参数怎么改,另有一篇文章讲,这里不展开。
四、磁块与 COB-ID:最多四路
双磁块时道理一样,只是多一帧。设备最多支持四个磁块,一个磁块占一个 TPDO,COB-ID 按 0x100 递增。
| 磁块 | 默认 node 0x7F 时的 COB-ID | 通用算法(node = N) | 数据长度 |
|---|---|---|---|
| 磁块 1(TPDO1) | 0x1FF | 0x180 + N | 7 字节 |
| 磁块 2(TPDO2) | 0x2FF | 0x280 + N | 7 字节 |
| 磁块 3(TPDO3) | 0x3FF | 0x380 + N | 7 字节 |
| 磁块 4(TPDO4) | 0x4FF | 0x480 + N | 7 字节 |
每帧结构相同:前 4 字节位移、中间 2 字节速度、最后 1 字节限位状态(bit0~3 对应四个限位开关)。同步接法下,一次 SYNC 会按磁块顺序把这几帧一起带出来;异步接法下,各帧按自己的事件计时器定时发。一支传感器读多个位置,靠的就是这几帧分开走。多磁块与 8 字节帧限讲的是分配 PDO 时的取舍。
位置是 32 位有符号数。零点设在行程中段、或者磁块走在负方向时,高位全是 1,按无符号解会得到四十几亿的读数——不是传感器坏了,是符号没处理。步长同样别写死:0x6501 给的是当前实际测量步长,单位 0.001 µm。
五、现场容易忽略的四个细节
- 默认节点地址是 0x7F。如果总线上挂了多支传感器,记得先给每支改独立地址,别让它们都停在 0x7F 上打架。
- 启动节点报文只在初始化时发一次。之后同步模式只用 SYNC,别每周期都补发,补了也不多余,但没必要。
- 位移换算先确认分辨率。示例按 0.005mm 算,实际以订货代码为准;同样的原始值,分辨率不同,位置就不同。
- PDO 里带的是位置和速度两样东西。只要控制器需要速度反馈,这一帧已经给了,不用另开通道。
六、帧对不上时怎么反查
具体某帧对不上时,先用 EMCY 和 PDO 的 cob-id 反查节点地址:EMCY 的 ID 减 0x80、TPDO1 的 ID 减 0x180,算出来都是 node。总线上只有一支设备时,这一招最省事。
电子头上两颗 LED 是更快的入口,不用任何工具就能判断到哪一步:
| 绿灯 | 红灯 | 含义 |
|---|---|---|
| 灭 | 灭 | 没有供电 |
| 灭 | 亮 | 启动失败 |
| 亮 | 灭 | 正常工作(磁环在有效量程内、供电正常) |
| 亮 | 亮 | 磁环未检测到或已丢失 |
| 闪 | 闪 | 供电接近上下限,仍能工作但需要纠正 |
灯亮红的同时总线上会跟一帧 50 00 的 EMCY,两边对得上就说明问题在磁环侧,不用再去翻报文。
报文认清了,接下来是改参数:三组 SDO 指令与存盘见 改波特率、节点地址与事件计时器;PDO 与 SDO 的分工在入门篇讲得更细,见 CANopen 入门;CAN 和 Profibus 常被混为一谈,物理层差别见 CANopen 和 Profibus 怎么选。用自制板子做主站的实现要点见 CANopen 主站实现。
常见问题
Q:线接好了,传感器一声不吭,先查什么?
先看有没有发 NMT 启动节点。节点上电、接线全对,但没进 Operational 状态,任何报文都不会应答。
Q:EMCY 报文一直刷屏怎么办?
先查供电稳定性和屏蔽。首次调试就刷 EMCY,多半是 24V 纹波大或屏蔽没做好,不是尺坏了。
Q:多支传感器挂在同一条总线上,怎么确认收到的是哪一支
看 COB-ID。TPDO1 是 0x180 加节点号,节点 0x7F 就是 0x1FF;同一帧不可能来自两支设备。不确定节点时,把 EMCY 的 ID 减 0x80 反算。
Q:上电就收到一帧 0xFF 的 EMCY,是故障吗
不是。那是上电通知,数据区是空的,只说明设备在线。真正的故障帧带错误码,比如 50 00 表示磁环未检测到,81 30 是节点守护超时。
这篇讲的问题,说到底都绕不开磁致伸缩位移传感器本身。磁致伸缩位移传感器产品中心按行程、安装方式与输出接口把全部系列排开,选型从这里进最省事。
← 返回行业动态







