跳转到主要内容

通用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