通用CAN协议标准
通用指令是所有设备都会用到的指令,包含了各项设备基础功能。
请注意使用设备CANID替换表中XX部分
请先确保阅读了CAN协议构架说明再开始以下内容
通用指令在设备失能情况下也是可以使用的,其中心跳包是任何情况下都会反馈的,是设备是否在线的标识
通用指令总表
此表展示了通用指令的所有指令内容,方便快速查询和定位
指令集 |
反馈集 |
重要性 |
说明 |
||||||||||
命令内容 |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
大类 (00~1F) |
型号 (00~FF) |
编号 (00~FF) |
功能 (00~FF) |
反馈内容 |
周期性 |
|||
设备重启 |
xx |
xx |
xx |
01 |
xx |
xx |
xx |
A1 |
准备重启 |
对命令反馈 |
必备 |
设备完全重置,相当于上电操作 |
|
软体版本查询 |
xx |
xx |
xx |
02 |
xx |
xx |
xx |
A2 |
软体版本反馈 |
对命令反馈 |
必备 |
大版本查询,不同于bin文件固件号 |
|
通用设置 |
xx |
xx |
xx |
03 |
xx |
xx |
xx |
A3 |
通用设置成功 |
对命令反馈 |
必备 |
使能和编号设置 |
|
特殊状态复位 |
xx |
xx |
xx |
04 |
xx |
xx |
xx |
A4 |
特殊复位成功 |
对命令反馈 |
必备 |
清除错误等特殊状态 |
|
运动状态复位 |
xx |
xx |
xx |
05 |
xx |
xx |
xx |
A5 |
运动复位成功 |
对命令反馈 |
选备 |
清除里程计等运动数据,非运动设备可无视指令 |
|
编号设置 |
xx |
xx |
xx |
06 |
xx |
xx |
xx |
A6 |
编号设置成功 |
对命令反馈 |
必备 |
用于设置设备编号 |
|
查找设备 |
xx |
xx |
xx |
07 |
/ |
/ |
/ |
/ |
/ |
/ |
选备 |
收到后设备利用可用的方式 (包括不限于蜂鸣器,LED,灯光等) 将自身与其他同类设备区分出来 便于人类寻找到特定设备 |
|
/ |
/ |
/ |
/ |
/ |
xx |
xx |
xx |
B0 |
设备心跳包 |
周期反馈 |
必备 |
||
进入升级模式 |
xx |
xx |
xx |
F1 |
/ |
/ |
/ |
/ |
/ |
/ |
选备 |
如果没有boot loader则无视指令 |
|
升级模式专用 |
xx |
xx |
xx |
F2~FF |
xx |
xx |
xx |
F2~FF |
升级模式专用 |
对命令反馈 |
不需要 |
主程序直接忽略,bootloader使用 |
1. 设备重启/准备重启
设备重启会导致设备对外输出关闭,有其他用电设备例如工控机时,请谨慎使用
设备重启 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 01 |
3 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
大类 |
unsigned int8 |
按设备型号分配表中大类(与ID中相同 ) |
|
byte[1] |
型号 |
unsigned int8 |
按设备型号分配表中型号(与ID中相同 ) |
|
byte[2] |
编号 |
unsigned int8 |
初始为1(与ID中相同 ) |
|
byte[3~7] |
/ |
/ |
/ |
准备重启反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A1 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
注:当系统中有多台机器同时使用时,可更改设置设备编号,设备编号默认为0x01。发送指令数据长度为8,无效位补0(后文同)。
举例:向型号0x02 编号0x03的底盘发送CANID:0x01 02 03 01 数据:01 02 03,系统重启。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 01
数据帧
扩展帧
3
01 02 03
上位机
0x01 02 03 A1
数据帧
扩展帧
0
/
2. 固件版本查询
设备重启 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 02 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
/ |
/ |
/ |
准备重启反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A2 |
8 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
硬件版本字符[0] |
unsigned int8ASCII |
用于电控的版本号,PCB修改时更新 |
|
byte[1] |
硬件版本字符[1] |
unsigned int8ASCII |
||
byte[2] |
硬件版本字符[2] |
unsigned int8ASCII |
||
byte[3] |
硬件版本字符[3] |
unsigned int8ASCII |
||
byte[4] |
软件版本字符[0] |
unsigned int8ASCII |
用于大更新的版本号,不同于bin文件的固件号 |
|
byte[5] |
软件版本字符[1] |
unsigned int8ASCII |
||
byte[6] |
软件版本字符[2] |
unsigned int8ASCII |
||
byte[7] |
软件版本字符[3] |
unsigned int8ASCII |
举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 02 数据:NULL。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 02
数据帧
扩展帧
0
/
上位机
0x01 02 03 A2
数据帧
扩展帧
8
XX XX XX XX XX XX XX XX
3. 通用设置/通用设置成功
通用设置指令用于对设备进行设备使能操作,一般是上电后第一要使用的指令
通用设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 03 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
大类 |
unsigned int8 |
按设备型号分配表中大类(与ID中相同) |
|
byte[1] |
型号 |
unsigned int8 |
按设备型号分配表中型号 (与ID中相同 ) |
|
byte[2] |
编号 |
unsigned int8 |
初始为1(与ID中相同 ) |
|
byte[3] |
使能 |
unsigned int8 |
0x00: 关闭设备 / 0x01: 使能设备 |
|
byte[4~7] |
/ |
/ |
/ |
设置成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A3 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
注:底盘默认上电是失能状态。
举例:使能设备型号0x02 编号0x03 的底盘,向系统ID:0x01 02 03 03发送指令01 02 03 01,设备使能。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 03
数据帧
扩展帧
4
01 02 03 01
上位机
0x01 02 03 A3
数据帧
扩展帧
0
/
4. 特殊状态复位 / 特殊复位成功
特殊状态复位用于系统异常(发生错误)时清错重置
特殊状态复位 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 04 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
状态复位 |
unsigned int8 |
0xCC:复位 / 其他值无操作 |
|
byte[1~7] |
/ |
/ |
/ |
复位成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A4 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 04 数据:CC 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 04
数据帧
扩展帧
1
CC
上位机
0x01 02 03 A4
数据帧
扩展帧
0
/
5. 运动状态复位 / 运动复位成功
运动状态复位用于系统重置运动数据,例如里程计数据,该指令只对有运动能力的设备有效
运动状态复位 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 05 |
1 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
状态复位 |
unsigned int8 |
0xCC:复位 / 其他值无操作 |
|
byte[1~7] |
/ |
/ |
/ |
复位成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A5 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
举例:向型号0x02 编号0x03 的底盘发送CANID:0x01 02 03 05 数据:CC 。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 05
数据帧
扩展帧
1
CC
上位机
0x01 02 03 A5
数据帧
扩展帧
0
/
6. 编号设置
编号设置指令用于对设备设置新编号。当系统只有单一设备时,编号始终默认为0x01,当系统中有多台设备时可自定义设置设备编号
编号设置 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 06 |
4 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
大类 |
unsigned int8 |
按设备型号分配表中大类(与ID中相同) |
|
byte[1] |
型号 |
unsigned int8 |
按设备型号分配表中型号 (与ID中相同 ) |
|
byte[2] |
编号 |
unsigned int8 |
初始为1(与ID中相同 ) |
|
byte[3] |
新编号 |
unsigned int8 |
如果不改变编号则与原编号相同 |
|
byte[4~7] |
/ |
/ |
/ |
设置成功反馈 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX A6 (此处反馈为原编号) |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
举例:设备型号0x02 编号0x03 的底盘更改设备编号为0x02,向系统ID:0x01 02 03 06发送指令01 02 03 02 ;设备编号由0x03切换为0x02。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x01 02 03 06
数据帧
扩展帧
4
01 02 03 02
上位机
0x01 02 03 A6
数据帧
扩展帧
0
/
7. 查找设备
当有多个设备存在无法分辨需要寻找的设备时,可以使用该功能是设备LED或蜂鸣器做出响应,方便寻找
查找设备 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
外部 |
本设备 |
0x XX XX XX 07 |
0 |
/ |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0~7] |
/ |
/ |
/ |
该条指令无反馈消息
举例:查找设备大类0x02 型号0x02 编号0x03 的设备。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
0x02 02 03 07
数据帧
扩展帧
0
/
上位机
/
/
/
/
/
8. 设备心跳包
心跳包在设备失能和使能时都能持续发出,不需要任何指令控制,是设备是否在线的标识
设备心跳 |
||||
发送方 |
接收方 |
CAN ID |
数据长度 |
周期(ms) |
本设备 |
外部 |
0x XX XX XX B0 |
1 |
500 |
数据位 |
功能 |
数据类型 |
说明 |
|
byte[0] |
使能状态 |
unsigned int8 |
0x00: 已关闭 / 0x01: 已使能 |
|
byte[1~7] |
/ |
/ |
/ |
该条反馈持续每500ms发出,不接受任何指令控制
举例: 型号0x02 编号0x03 使能的底盘反馈心跳包。
发送实例
传输目标
CAN ID
帧格式
帧类型
数据长度
数据位(L->H)
设备
/
/
/
/
/
上位机
0x01 02 03 B0
数据帧
扩展帧
1
01