灵动上下位机通讯协议
-
本协议中的所有数值统一采用十进制或十六进制表示,其中以0x标识的数据为十六进制数,未有标识的数据一律为十进制数;
-
本协议适用于所有购买玄雅·灵动系列产品的用户。
上一次修改时间:2026年3月6日
1. 协议构成
灵系列产品的通讯协议由帧头、指令、功能码、数据长度、数据、校验、帧尾构成,通信波特率为 1000000。
| 字段 | 说明 | 示例/固定值 |
|---|---|---|
| 帧头 | 数据帧的起始位置 | 0xAA(固定) |
| 指令 | 控制指令ID,对应特定控制逻辑或数据格式,便于接收时动态匹配处理流程 | 指令ID |
| 功能码 | 每个指令下的细分功能,各功能对应不同参数 | function |
| 数据长度 | 后续“数据”字段的长度 | length |
| 数据 | 关节的位置、速度、加速度或力矩数据 | data1 ~ dataN |
| 校验 | CRC32校验(取低八位),计算规则:Check = 指令ID + function + length + data1 ~ datan | Check |
| 帧尾 | 数据帧的结束位置 | 0xFF(固定) |
1.1 指令ID与对应功能说明
| 指令ID | 指令功能 |
|---|---|
| 0x01 | 查询机器类型、固件版本、硬件版本及唯一标识码 |
| 0x03 | 机器零点位置设置 |
| 0x04 | 夹爪行程设置 |
| 0x05 | 机器扭矩开关控制 |
| 0x06 | 关节及夹爪控制及获取 |
| 0XFE | 机器自检指令 |
2. 指令功能
2.1 查询机器信息指令
指令ID为 0x01,用于查询机器的序列号、硬件版本号和固件版本号。
| 字段 | 取值 |
|---|---|
| 指令 | 0x01 |
| 功能码 | 0x00 |
| 数据长度 | 0x01 |
| 数据 | 0xFE |
| 校验 | 0x23 |
发送帧示例
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x00 | 0x01 | 0xFE | 0x23 | 0xFF |
返回帧示例
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x00 | 0x18 | 0x41 0x44 0x4C 0x53 0x32 0x35 0x31 0x32 0x30 0x35 0x31 0x32 0x33 0x34 0x35 0x36 0x6E 0x00 0x00 0x00 0x62 0x02 0x00 0x00 | 0x92 | 0xFF |
返回帧数据解析
返回帧的数据字段共 24字节(0x18),按顺序分为三部分:
| 颜色 | 字段 | 长度 | 对应字节 |
|---|---|---|---|
| 蓝色 | 序列号 | 16字节 | 0x41 0x44 ... 0x35 0x36 |
| 橙色 | 硬件版本 | 4字节 | 0x6E 0x00 0x00 0x00 |
| 绿色 | 固件版本 | 4字节 | 0x62 0x02 0x00 0x00 |
序列号(16字节)
每个字节为字符的 ASCII 码。以上示例转换为字符串即:ADLS251205123456。
其含义为:产品标识 + 出厂日期 + 序列号尾码,每台机器唯一。
硬件版本(4字节,小端序)
4字节组成一个小端序整数。以上示例:0x6E 0x00 0x00 0x00 → 十进制 110,表示硬件版本 v1.10。
换算方式:
0x6E= 110(十进制),高3字节均为0,故整数值为 110。版本号 = 110 ÷ 100 = 1.10。
固件版本(4字节,小端序)
同理,以上示例:0x62 0x02 0x00 0x00 → 十进制 610,表示固件版本 v6.10。
换算方式:
0x02× 256 +0x62= 512 + 98 = 610(小端序:低字节在前)。版本号 = 610 ÷ 100 = 6.10。
返回帧的校验值因每台机器的序列号不同而不同,属于正常现象。
2.2 机器零点位置设置指令
机器零点位置设置指令ID为0x03,该指令用于设置机器零点位置。该指令会关闭扭矩。
| 字段 | 取值 |
|---|---|
| 指令 | 0x03 |
| 功能码 | 0x00 |
| 数据长度 | 0x01 |
| 数据 | 0xFE |
| 校验 | 0xA8(功能码0x00时) |
功能码说明
| 功能码 | 功能含义 |
|---|---|
| 0x00 | 灵动系列:设置零点位置 |
示例:设置灵动零点位置
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x00 | 0x01 | 0xFE | 0xA8 | 0xFF |
2.3 夹爪行程设置指令
夹爪行程设置指令ID为0x04,该指令用于设置机器夹爪的行程,同时支持查询夹爪行程配置。
| 字段 | 取值 |
|---|---|
| 指令 | 0x04 |
| 功能码 | 0x00、0x01、0x02、0x0E |
| 数据长度 | 0x01 |
| 数据 | 0xFE(指令发送时);行程类型值(查询返回时) |
| 校验 | 0x7F |
功能码说明
| 功能码 | 功能含义 |
|---|---|
| 0x00 | 设置夹爪为50mm行程 |
| 0x01 | 设置夹爪为75mm行程 |
| 0x02 | 设置夹爪为100mm行程 |
| 0x0E | 查询夹爪行程配置 |
示例1:设置夹爪行程为100mm
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x04 | 0x02 | 0x01 | 0xFE | 0x7F | 0xFF |
示例2:查询夹爪行程配置
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x04 | 0x0E | 0x01 | 0xFE | 0x7F | 0xFF |
返回数据说明
查询夹爪行程配置后,返回的数据字段为夹爪的行程类型,对应关系如下:
- 0x00:50mm行程夹爪
- 0x01:75mm行程夹爪
- 0x02:100mm行程夹爪
返回帧示例(以75mm行程为例)
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x04 | 0x0E | 0x01 | 0x01 | 0x7F | 0xFF |
2.4 机器扭矩开关指令
机器扭矩开关指令ID为0x05,该指令用于设置机器的扭矩开关。
| 字段 | 取值 |
|---|---|
| 指令 | 0x05 |
| 功能码 | 0x00 |
| 数据长度 | 0x01 |
| 数据 | 0x00、0x01 |
| 校验 | 0x6F |
数据字段说明
| 数据值 | 含义 |
|---|---|
| 0x00 | 关闭力矩 |
| 0x01 | 开启力矩 |
指令帧示例
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x05 | 0x00 | 0x01 | 0x00 | 0x6F | 0xFF |
2.5 关节及夹爪控制指令
关节及夹爪控制帧的指令ID为 0x06,该指令包含多个功能,下面分别说明。
获取位置和运动状态
- 功能码:
0x00 - 数据:
0xFE - 数据长度:
0x01
发送帧示例:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x00 | 0x01 | 0xFE | 0x9A | 0xFF |
返回帧示例:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x00 | 0x0F | 0x02 0x08 0xFB 0x07 0xFB 0x07 0x02 0x08 0xFA 0x07 0x01 0x08 0x03 0x08 0x00 | 0xA9 | 0xFF |
数据格式:关节角度(每个关节2字节) + 夹爪位置(2字节) + 运行状态(1字节),数据低位在前高位在后。
灵动系列:6关节角度 + 夹爪位置 + 运行状态。
运行状态(最后一字节):
| 状态值 | 含义 |
|---|---|
| 0x00 | 空闲 |
| 0x01 | 锁定 |
| 0x10 | 同步 |
| 0x11 | 同步锁定 |
| 0xE1 | 过热状态 |
| 0xE2 | 过热保护 |
获取温度数据
- 功能码:
0x01 - 数据:
0xFE
发送帧示例(灵动示教臂6个舵机,操作臂10个):
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x01 | 0x01 | 0xFE | 0xAD | 0xFF |
返回帧示例(灵动示教返回6个,操作返回10个):
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x01 | 0x0A | 0x23 0x24 0x23 0x26 0x23 0x26 0x23 0x25 0x24 0x24 | 0x4B | 0xFF |
在温度功能码下,如果数据不为 0xFE,则为设置温度保护最大阈值。示例:设置最大阈值为 100(0x64),默认值为 85:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x01 | 0x01 | 0x64 | 0xF7 | 0xFF |
获取速度数据
- 功能码:
0x02 - 数据:
0xFE
发送帧示例(灵动示教臂6个舵机,操作臂10个):
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x02 | 0x01 | 0xFE | 0xF4 | 0xFF |
返回帧示例(灵动示教返回6个,操作返回10个):
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x02 | 0x14 | 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 | 0xE9 | 0xFF |
关节、夹爪及状态控制
- 功能码:
0x03 - 数据长度:
0x1C - 数据格式:关节角度 + 速度(每个关节4字节),数据低位在前高位在后
- 灵动系列:6关节角度 + 夹爪位置
示例:控制各关节角度为0度、速度1000,夹爪闭合到一半(0x3E8)。运动速度最高可设为5000,数据先位置角度再速度。夹爪映射范围为 0~1000,1000 为张开到最大量程。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x03 | 0x1C | 0x00 0x08 0xE8 0x03 0x00 0x08 0xE8 0x03 0x00 0x08 0xE8 0x03 0x00 0x08 0xE8 0x03 0x00 0x08 0xE8 0x03 0x00 0x08 0xE8 0x03 0xF4 0x01 0xE8 0x03 | 0x6A | 0xFF |
2.6 机器自检指令
指令ID为 0xFE,用于检测舵机是否正常。返回2个字节数据,从低到高每个 bit 位代表舵机ID从低到高的状态,1 为正常,0 为异常。灵动操作臂10个 bit,示教臂6个 bit。
| 字段 | 取值 |
|---|---|
| 指令 | 0xFE |
| 功能码 | 0x00 |
| 数据长度 | 0x03 |
发送帧示例
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFE | 0x00 | 0x00 | 0xFE | 0x93 | 0xFF |
返回帧示例(操作臂所有舵机正常)
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFE | 0x00 | 0x02 | 0xFF 0x03 | 0x87 | 0xFF |