# 通用CAN协议标准
通用指令是所有设备都会用到的指令,包含了各项设备基础功能。
请注意使用设备CANID替换表中XX部分
请先确保阅读了[CAN协议构架说明](https://docs.hexmove.cn/books/hexmove/page/can-Zxd)再开始以下内容
通用指令在设备失能情况下也是可以使用的,其中心跳包是任何情况下都会反馈的,是设备是否在线的标识
---
### 通用指令总表
此表展示了通用指令的所有指令内容,方便快速查询和定位
指令集
| | 反馈集
| 重要性
| 说明
|
命令内容
| 大类
(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
>
> |