CANopen位移传感器改波特率、节点地址与事件计时器:SDO指令加EEPROM保存完整流程

CANopen 位移传感器接不上网,十有八九是波特率或节点地址不对。但"不对"只是现象,怎么改过来才是正事。这篇文章把三组最常用的 SDO 指令一次给全:改波特率、改节点地址、改 CAN 事件计时器,改完顺手存进 EEPROM,掉电也不丢。

CANopen 位移传感器三组 SDO 指令与 EEPROM 保存
CANopen 位移传感器三组 SDO 指令与 EEPROM 保存

先说共同的套路。所有参数修改都走 SDO,格式一致:控制器先发一条 SDO 把新值写进传感器,传感器回一条 SDO 确认;再发一条 SDO 把值存进 EEPROM,传感器再确认一次。存 EEPROM 的这条指令是固定的:索引 0x1010,子索引 0x01,数据 73 61 76 65——这串十六进制正好是 "save" 四个字母。不改完不存,掉电就回到出厂值。

改波特率。SDO 索引 0x2010,子索引 0x00,数据是新波特率。1000kbps 写 03 E8,500kbps 写 01 F4,250kbps 写 00 FA,125kbps 写 00 7D。数据低位先发,所以 1000kbps 的完整指令是 2F 10 20 00 E8 03 00 00。注意只认这四个值,表外的数值别输入,否则传感器会出故障。改完波特率,控制器这边的 CAN 设置也必须同步改成一样的值,两边不一致照样连不上。

改节点地址。SDO 索引 0x300B,子索引 0x00,数据第 5 个字节就是新地址。比如默认 0x7F 要改成 0x7E,指令是 2F 0B 30 00 7E 00 00 00。这里有个容易踩的坑:确认响应之后,存 EEPROM 那条 SDO 的 cob-id 要按新地址算,0x600 + 0x7E = 0x67E,不能用旧的 0x67F,否则存不进去。

改 CAN 事件计时器。这个参数决定异步模式下传感器多久自发一帧 PDO。SDO 索引 0x1800,子索引 0x05,数据是时间值,单位毫秒。出厂默认 1ms,改成 50ms 就写 0x32(十进制 50),指令是 2F 00 18 05 32 00 00 00。事件计时器改长,总线负载降下来;改短,位置更新更快,按现场刷新需求取舍。

再说 cob-id 怎么算。SDO 请求是 0x600 + 节点地址,传感器响应是 0x580 + 节点地址。节点地址 0x7F 时,请求就是 0x67F,响应是 0x5FE。记住这条规则,换任何节点地址都能自己推。

最后说一个实用技巧:不确定传感器当前节点地址时,把传感器断电再上电,它会发出一帧 EMCY 报文,把这帧的 cob-id 减去 0x80,就是节点地址。比如收到 0xFF,减 0x80 得 0x7F。

三组指令覆盖了现场八成以上的"接不上"问题。改完先存 EEPROM,再断电重启验证,新值生效才算闭环。

常见问题

Q:改完波特率,节点找不到了?

主站还在用旧波特率说话。先把主站切到新波特率、重新扫描总线,再去动传感器。

Q:每次改完都要存 EEPROM 吗?

要。没存进 EEPROM 的值断电就丢。正确顺序是写一个参数、存一次、断电重启、再读回确认。

← 返回行业动态