云擎通讯协议 v1.0.6
阅读指南
- 本文中的所有数值统一采用十进制或十六进制表示,其中以 0x 开头的数据为十六进制数,未标识的数据为十进制数。
- 多字节数据均采用低字节在前、高字节在后的顺序。示例帧已经包含校验字节,可以直接用于串口调试。
云擎按键功能:
- 单击:切换电机模式,mit mode ↔ pv mode(掉电保存)
- 双击:按键灯快速闪烁,回放记录的动作(期间任意键停止回放)
- 长按:1~2s 内切换重力补偿模式(仅 mit 模式有效)
- 超长按:2s 以上按键灯慢闪烁,记录按键灯闪烁期间的动作(期间任意键停止记录)
串口通信参数:
- 有重力补偿帧率:830 Hz
- 无重力补偿帧率:1000 Hz
- 极限帧率:1630 Hz(适用于 C/C++)
上一次修改时间:2026年5月21日
注:该通讯协议文档及其相关功能的最终解释权由 玄雅科技有限公司 所有。
一、云擎通讯协议基本构成
云擎通讯协议由帧头、指令、功能码、数据长度、数据、校验、帧尾构成,用户串口默认波特率为 1000000。
| 字段 | 长度 | 说明 | 固定值或示例 |
|---|---|---|---|
| 帧头 | 1字节 | 数据帧起始标记 | 0xAA |
| 指令 | 1字节 | 本帧要执行的大类功能 | 0x01、0x06 |
| 功能码 | 1字节 | 读写方向、机械臂选择或子功能 | 0x02、0x82 |
| 数据长度 | 1字节 | 后续“数据”字段的字节数 | 0x00、0x10 |
| 数据 | 可变 | 关节、夹爪、参数或状态数据 | 按各指令说明 |
| 校验 | 1字节 | CRC32 校验结果低 8 位 | 示例中已给出 |
| 帧尾 | 1字节 | 数据帧结束标记 | 0xFF |
校验计算范围为:指令 + 功能码 + 数据长度 + 数据。帧头和帧尾不参与计算。
例如查询设备信息:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x7E | 0x00 | 空 | 0x5D | 0xFF |
完整帧:
AA 01 7E 00 5D FF
其中 0x5D 就是对 01 7E 00 计算得到的校验字节。
二、常用约定
1. 机械臂选择
多数指令使用功能码低两位选择机械臂:
| 功能码位 | 含义 |
|---|---|
| 第0位 | 示教臂 |
| 第1位 | 操作臂 |
常见取值:
| 功能码 | 含义 |
|---|---|
| 0x01 | 选择示教臂 |
| 0x02 | 选择操作臂 |
| 0x03 | 同时选择示教臂和操作臂 |
| 0x81 | 写入示教臂 |
| 0x82 | 写入操作臂 |
推荐按“单帧只操作一条机械臂”的方式对接,尤其是关节数据读写和电机参数设置。
2. 关节编号
| 使用场景 | 编号方式 |
|---|---|
| 调零、机械锁 | 从 0 开始编号 |
| 电机参数设置 | 从 1 开始编号 |
| 关节数据读写 | 不带起始关节字段,默认从第 0 个关节开始 |
云擎单臂常规物理关节数量为 7 个。公开对接时,第 7 个关节为夹爪相关关节;0x11 写控制模式时会跳过它,加速度、减速度、速度环和位置环等其它已开放电机参数仍按请求范围处理。
3. 反馈功能码
大多数反馈帧会把请求功能码的最高位置 1。例如:
| 请求功能码 | 反馈功能码 |
|---|---|
| 0x02 | 0x82 |
| 0x03 | 0x83 |
| 0x7E | 0xFE |
如果请求功能码本身已经大于等于 0x80,反馈功能码通常保持相同。
三、指令ID总览
| 指令 | 功能 | 公开说明 |
|---|---|---|
| 0x01 | 设备信息读取 | 开放 |
| 0x02 | 用户个性化设置 | 开放 |
| 0x03 | 协议层调零 | 开放 |
| 0x05 | 机械锁和刚度切换 | 开放 |
| 0x06 | 关节数据读写 | 开放 |
| 0x09 | 使能和失能 | 开放 |
| 0x11 | 电机参数设置 | 开放控制模式、加速度、减速度、速度环和位置环参数 |
| 0x15 | 清除电机错误 | 开放 |
| 0x16 | 控制锁定 | 开放 |
| 0x17 | 夹爪夹持参数 | 开放 |
| 0xFB | 串口帧率统计 | 开放,用于调试 |
| 0xEE | 错误反馈 | 由下位机返回 |
四、指令功能
1. 指令ID 0x01:查询设备信息
指令 0x01 用于读取云擎的产品型号、序列号、硬件版本和固件版本。
| 字段 | 取值 |
|---|---|
| 指令 | 0x01 |
| 请求功能码 | 0x7E |
| 请求数据长度 | 0x00 |
| 反馈功能码 | 0xFE |
| 反馈数据长度 | 0x18 |
示例:查询设备信息
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x7E | 0x00 | 空 | 0x5D | 0xFF |
完整帧:
AA 01 7E 00 5D FF
示例:设备信息反馈
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x01 | 0xFE | 0x18 | 0x41 0x4D 0x58 0x53 0x32 0x35 0x30 0x31 0x30 0x31 0x30 0x31 0x41 0x30 0x30 0x31 0x64 0x00 0x00 0x00 0x6E 0x00 0x00 0x00 | 0x05 | 0xFF |
完整帧:
AA 01 FE 18 41 4D 58 53 32 35 30 31 30 31 30 31 41 30 30 31 64 00 00 00 6E 00 00 00 05 FF
反馈数据共 24 字节:
| 偏移 | 长度 | 含义 | 示例 |
|---|---|---|---|
| 0 | 4字节 | 产品型号 | 41 4D 58 53 |
| 4 | 12字节 | 序列号 | 32 35 30 31 30 31 30 31 41 30 30 31 |
| 16 | 4字节 | 硬件版本 | 64 00 00 00 |
| 20 | 4字节 | 固件版本 | 6E 00 00 00 |
上例中,硬件版本原始值为 100,可显示为 1.0.0;固件版本原始值为 110,可显示为 1.1.0。
2. 指令ID 0x02:用户个性化设置
指令 0x02 用于读取或写入用户配置。写入后会掉电保存。
功能码说明:
| 功能码位 | 含义 |
|---|---|
最高位为 0 | 读取 |
最高位为 1 | 写入 |
| 第0位 | 开机动作配置 |
| 第1位 | 夹爪类型配置 |
| 第2位 | 定时上传开关 |
每个配置项占 4 字节,均为低字节在前。
| 配置项 | 功能码位 | 数据长度 | 取值范围或有效规则 | 说明 |
|---|---|---|---|---|
| 开机动作配置 | 第0位 | 4字节 | 预留字段,建议保持默认值 | 预留配置 |
| 夹爪类型配置 | 第1位 | 4字节 | 当前按 bit1 判断:bit1=0 为小夹爪配置,bit1=1 为大夹爪配置;推荐写 0 或 2 | 配置标志值,不是直接写入型号数字 |
| 定时上传开关 | 第2位 | 4字节 | 0 关闭,1 开启;其它值保留 | 开启后约每 5ms 主动上传操作臂位置数据 |
夹爪类型配置不是直接写入型号数字,当前按 bit1 解析:
| 配置值 | 字节序 | 含义 |
|---|---|---|
0 | 00 00 00 00 | bit1=0,选择小夹爪配置 |
2 | 02 00 00 00 | bit1=1,选择大夹爪配置 |
开启定时上传后,下位机会约每 5ms 主动上传一次操作臂位置数据。该主动上传帧使用 0x06 指令,功能码为 0x04。
示例1:读取全部用户配置
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x07 | 0x00 | 空 | 0xBB | 0xFF |
完整帧:
AA 02 07 00 BB FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 07 | 读取第0、1、2位对应的三个配置项 |
| 数据长度 | 00 | 读取请求不需要数据 |
| 校验 | BB | 本帧校验 |
示例反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x07 | 0x0C | 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00 | 0x55 | 0xFF |
完整帧:
AA 02 07 0C 00 00 00 00 02 00 00 00 01 00 00 00 55 FF
反馈解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 07 | 返回第0、1、2位对应的三个配置项 |
| 数据长度 | 0C | 数据区 12 字节,每个配置项 4 字节 |
| 数据1 | 00 00 00 00 | 开机动作配置值为 0 |
| 数据2 | 02 00 00 00 | 夹爪类型配置值为 2,bit1=1,表示大夹爪 |
| 数据3 | 01 00 00 00 | 定时上传已开启 |
示例2:修改夹爪类型配置
本例把夹爪类型配置写成 2,表示选择大夹爪配置。当前固件中,该值的第1位用于选择夹爪类型。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x82 | 0x04 | 0x02 0x00 0x00 0x00 | 0xCF | 0xFF |
完整帧:
AA 02 82 04 02 00 00 00 CF FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 82 | 写入第1位对应的夹爪类型配置 |
| 数据长度 | 04 | 写入 1 个配置项,共 4 字节 |
| 数据 | 02 00 00 00 | 目标配置值为 2,bit1=1,选择大夹爪配置 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x82 | 0x01 | 0x81 | 0x8E | 0xFF |
完整帧:
AA 02 82 01 81 8E FF
反馈解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 82 | 对应本次写入请求 |
| 数据长度 | 01 | 反馈 1 字节状态 |
| 数据 | 81 | 写入请求已接收 |
示例3:开启定时上传
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x84 | 0x04 | 0x01 0x00 0x00 0x00 | 0x3C | 0xFF |
完整帧:
AA 02 84 04 01 00 00 00 3C FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 84 | 写入第2位对应的定时上传开关 |
| 数据长度 | 04 | 写入 1 个配置项,共 4 字节 |
| 数据 | 01 00 00 00 | 开启定时上传 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x84 | 0x01 | 0x81 | 0x3C | 0xFF |
完整帧:
AA 02 84 01 81 3C FF
反馈解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 84 | 对应本次写入请求 |
| 数据长度 | 01 | 反馈 1 字节状态 |
| 数据 | 81 | 写入请求已接收 |
示例4:写入开机动作配置
本例把开机动作配置写为 0。该项当前作为预留配置,工具侧可用于确认写入链路是否正常。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x81 | 0x04 | 0x00 0x00 0x00 0x00 | 0xEA | 0xFF |
完整帧:
AA 02 81 04 00 00 00 00 EA FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 02 | 用户个性化设置 |
| 功能码 | 81 | 写入第0位对应的开机动作配置 |
| 数据长度 | 04 | 写入 1 个配置项,共 4 字节 |
| 数据 | 00 00 00 00 | 目标配置值为 0 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x02 | 0x81 | 0x01 | 0x81 | 0xD7 | 0xFF |
完整帧:
AA 02 81 01 81 D7 FF
反馈数据为 0x81 时,表示设置已被接收。
3. 指令ID 0x03:协议层调零
指令 0x03 用于把当前关节位置作为新的协议零点。它有两种方式:
| 调零方式 | 数据值 | 说明 |
|---|---|---|
| 弱调零 | 0x00 | 只改变协议显示和协议控制零点,不改变电机底层零点 |
| 强调零 | 0x01 | 清空协议偏移,并执行底层硬调零 |
请求数据按选中的机械臂顺序排列。每条机械臂占 2 字节:
| 字节 | 含义 |
|---|---|
| 第1字节 | 起始关节编号,从 0 开始 |
| 第2字节 | 连续关节数量 |
如果最后再多带 1 字节,则该字节为调零方式。不带调零方式时,默认按强调零处理。
示例1:操作臂 7 个关节弱调零
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x02 | 0x03 | 0x00 0x07 0x00 | 0x44 | 0xFF |
完整帧:
AA 03 02 03 00 07 00 44 FF
字段解释:
| 字段 | 值 |
|---|---|
| 功能码 | 0x02,操作臂 |
| 起始关节 | 0x00 |
| 连续数量 | 0x07 |
| 调零方式 | 0x00,弱调零 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x82 | 0x01 | 0x01 | 0xCB | 0xFF |
完整帧:
AA 03 82 01 01 CB FF
反馈解析:0x82 表示操作臂调零反馈,数据 0x01 表示接收成功。
示例2:双臂 7 个关节强调零
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x03 | 0x05 | 0x00 0x07 0x00 0x07 0x01 | 0x4C | 0xFF |
完整帧:
AA 03 03 05 00 07 00 07 01 4C FF
字段解释:
| 字段 | 值 |
|---|---|
| 功能码 | 0x03,同时选择示教臂和操作臂 |
| 示教臂起始关节 | 0x00 |
| 示教臂连续数量 | 0x07 |
| 操作臂起始关节 | 0x00 |
| 操作臂连续数量 | 0x07 |
| 调零方式 | 0x01,强调零 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x03 | 0x83 | 0x01 | 0x01 | 0xFC | 0xFF |
完整帧:
AA 03 83 01 01 FC FF
反馈解析:0x83 表示双臂调零反馈,数据 0x01 表示接收成功。
4. 指令ID 0x05:机械锁和刚度切换
指令 0x05 用于让指定关节进入高刚度保持,其余关节进入低刚度保持。它不是断电锁止,而是改变关节保持力度。
请求数据格式与调零相同:每条选中的机械臂占 2 字节。
| 字节 | 含义 |
|---|---|
| 第1字节 | 起始关节编号,从 0 开始 |
| 第2字节 | 连续关节数量 |
示例:操作臂 7 个关节进入高刚度保持
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x05 | 0x02 | 0x02 | 0x00 0x07 | 0x2B | 0xFF |
完整帧:
AA 05 02 02 00 07 2B FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 05 | 机械锁和刚度切换 |
| 功能码 | 02 | 选择操作臂 |
| 数据长度 | 02 | 操作臂占 2 字节区间描述 |
| 数据 | 00 07 | 从第 0 个关节开始,连续 7 个关节进入高刚度保持 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x05 | 0x82 | 0x01 | 0x01 | 0x17 | 0xFF |
完整帧:
AA 05 82 01 01 17 FF
反馈解析:0x82 表示操作臂反馈,数据 0x01 表示接收成功。
5. 指令ID 0x06:关节数据读写
指令 0x06 是云擎最常用的控制指令,用于读取关节状态,也用于写入目标位置、速度、力矩等控制数据。
5.1 关节数据地址表
每个地址在数据帧中固定占 2 字节。
| 地址 | 名称 | 可读 | 可写 | 有效位宽 | 单位 | 说明 |
|---|---|---|---|---|---|---|
| 0x00 | pos | 是 | 是 | 16位 | rad | 受调零影响的关节位置 |
| 0x01 | vel | 是 | 是 | 12位 | rad/s | 速度目标或反馈 |
| 0x02 | tor | 是 | 是 | 12位 | N·m | 力矩目标或反馈 |
| 0x03 | kp | 是 | 是 | 16位 | 无量纲 | 位置刚度系数,非负值 |
| 0x04 | kd | 是 | 是 | 16位 | 无量纲 | 速度阻尼系数,非负值 |
| 0x05 | 线性插补速度 | 是 | 是 | 12位 | rad/s | 用于位置目标平滑运动 |
| 0x06 | 线圈温度 | 是 | 否 | 16位 | °C | 只读 |
12位数据放在 2 字节槽位中。写入速度、力矩、线性插补速度这 3 类 12 位字段时,如果 2 字节原始值为 0xFFFF(小端帧中写作 FF FF),下位机会按底层精确零值 0 处理。该特殊值仅用于写入 12 位字段,不适用于位置、刚度、阻尼或温度字段。
5.2 读取关节数据
读取请求的数据区固定为 2 字节:
| 字节 | 含义 |
|---|---|
| 第1字节 | 起始地址 |
| 第2字节 | 连续地址数量 |
读取反馈的数据区格式:
| 字段 | 长度 | 说明 |
|---|---|---|
| 回包起始地址 | 1字节 | 请求起始地址最高位置 1 |
| 地址数量 | 1字节 | 与请求一致 |
| 关节数据 | 2 × 地址数量 × 7 字节 | 按关节顺序展开 |
| 运行状态 | 1字节 | 按键、错误或外设状态 |
示例:读取操作臂 7 个关节的协议位置
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x02 | 0x02 | 0x00 0x01 | 0xCE | 0xFF |
完整帧:
AA 06 02 02 00 01 CE FF
示例反馈:7 个关节都在协议零点附近,运行状态为 0。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x02 | 0x11 | 0x80 0x01 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0x00 | 0x4D | 0xFF |
完整帧:
AA 06 02 11 80 01 FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F 00 4D FF
反馈数据中 FF 7F 为一个 16 位位置值,可理解为“接近零点的中间值”。
5.3 写入关节数据
写入请求的数据区格式:
| 字段 | 长度 | 说明 |
|---|---|---|
| 起始地址 | 1字节 | 要写入的第一个地址 |
| 地址数量 | 1字节 | 连续写入几个地址 |
| 关节数据 | 可变 | 默认从第 0 个关节开始依次写入 |
写入反馈的数据区固定为 3 字节:
| 字段 | 长度 | 说明 |
|---|---|---|
| 回包起始地址 | 1字节 | 请求起始地址最高位置 1 |
| 地址数量 | 1字节 | 与请求一致 |
| 接收状态 | 1字节 | 0x01 表示接收成功 |
示例1:操作臂 7 个关节目标位置为零,速度为零
此示例同时写入地址 0x00 和 0x01。每个关节 4 字节:位置 FF 7F,速度 FF FF。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x1E | 0x00 0x02 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF 0xFF 0x7F 0xFF 0xFF | 0x35 | 0xFF |
完整帧:
AA 06 82 1E 00 02 FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF FF 7F FF FF 35 FF
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x03 | 0x80 0x02 0x01 | 0x36 | 0xFF |
完整帧:
AA 06 82 03 80 02 01 36 FF
示例2:把操作臂 7 个关节的线性插补速度清零
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x10 | 0x05 0x01 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF | 0xEF | 0xFF |
完整帧:
AA 06 82 10 05 01 FF FF FF FF FF FF FF FF FF FF FF FF FF FF EF FF
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x06 | 0x82 | 0x03 | 0x85 0x01 0x01 | 0x1E | 0xFF |
完整帧:
AA 06 82 03 85 01 01 1E FF
6. 指令ID 0x09:使能和失能
指令 0x09 用于使能或失能指定机械臂。
| 数据值 | 含义 |
|---|---|
| 0x00 | 失能 |
| 非 0x00 | 使能 |
示例1:使能操作臂
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | 0xAF | 0xFF |
完整帧:
AA 09 82 01 01 AF FF
发送解析:0x09 为使能/失能指令,功能码 0x82 表示写操作臂,数据 0x01 表示使能。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | 0xAF | 0xFF |
完整帧:
AA 09 82 01 01 AF FF
反馈解析:功能码保持 0x82,数据 0x01 表示下位机已接收本次使能请求。
示例2:失能操作臂
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x00 | 0x39 | 0xFF |
完整帧:
AA 09 82 01 00 39 FF
发送解析:功能码 0x82 仍表示写操作臂,数据 0x00 表示失能。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x09 | 0x82 | 0x01 | 0x01 | 0xAF | 0xFF |
完整帧:
AA 09 82 01 01 AF FF
反馈解析:数据 0x01 表示下位机已接收本次失能请求,不表示“当前仍为使能”。
7. 指令ID 0x11:电机参数设置
指令 0x11 用于修改电机控制参数。公开版开放控制模式、加速度、减速度、速度环和位置环参数。 写入控制模式时,第 7 个物理关节会被跳过;写入加速度、减速度、速度环和位置环参数时不会因为第 7 个物理关节是夹爪而自动跳过。
| 参数 | 参数地址 | 参数值类型 | 单位或属性 | 参数说明 |
|---|---|---|---|---|
| 加速度 | 0x05 | 32 位浮点数 | rad/s² | 值越大,启动和提速越快 |
| 减速度 | 0x06 | 32 位浮点数 | rad/s² | 值越大,减速和停止越快 |
| 速度环 Kp | 0x1A | 32位浮点数 | 驱动参数 | 速度跟随慢就小幅调大;速度抖动就调小 |
| 速度环 Ki | 0x1B | 32位浮点数 | 驱动参数 | 长时间达不到目标速度就小幅调大;容易过冲就调小 |
| 位置环 Kp | 0x1C | 32位浮点数 | 驱动参数 | 位置跟随慢就小幅调大;到位后抖动就调小 |
| 位置环 Ki | 0x1D | 32位浮点数 | 驱动参数 | 长时间有位置误差就小幅调大;回摆或拖尾明显就调小 |
| 控制模式 | 0x0B | 32位无符号整数 | 枚举值 | 决定电机按哪种方式接受控制 |
控制模式取值:
| 模式值 | 含义 |
|---|---|
1 | 力矩混合控制模式 |
2 | 位置速度模式 |
3 | 速度模式 |
4 | 位置、速度、电流混合模式 |
写入数据格式:
| 字段 | 长度 | 说明 |
|---|---|---|
| 起始电机编号 | 1字节 | 从 1 开始 |
| 电机数量 | 1字节 | 连续数量 |
| 参数地址 | 1字节 | 见上方参数地址表 |
| 参数值 | 4字节 | 低字节在前 |
| 保存标志 | 1字节 | 0 不保存,非 0 写入并保存 |
读取数据格式:
| 字段 | 长度 | 说明 |
|---|---|---|
| 起始电机编号 | 1字节 | 从 1 开始 |
| 电机数量 | 1字节 | 连续数量 |
| 参数地址 | 1字节 | 公开版开放读取控制模式 0x0B |
调试时可先使用保存标志 0,确认动作效果正常后,再决定是否写入并保存。
示例1:把操作臂 1 到 6 号电机切到位置速度模式,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x0B 0x02 0x00 0x00 0x00 0x00 | 0xC4 | 0xFF |
完整帧:
AA 11 82 08 01 06 0B 02 00 00 00 00 C4 FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 11 | 电机参数设置 |
| 功能码 | 82 | 写操作臂 |
| 数据长度 | 08 | 起始电机、数量、参数地址、参数值、保存标志共 8 字节 |
| 起始电机 | 01 | 从 1 号电机开始 |
| 电机数量 | 06 | 连续 6 个电机 |
| 参数地址 | 0B | 控制模式 |
| 参数值 | 02 00 00 00 | 位置速度模式 |
| 保存标志 | 00 | 不掉电保存 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x8B 0x01 | 0xD6 | 0xFF |
完整帧:
AA 11 82 04 01 06 8B 01 D6 FF
反馈解析:01 06 原样返回本次电机范围,8B 表示控制模式地址的反馈,末尾数据 01 表示接收成功。
示例2:把操作臂 1 到 6 号电机加速度改为 20,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x05 0x00 0x00 0xA0 0x41 0x00 | 0xF0 | 0xFF |
完整帧:
AA 11 82 08 01 06 05 00 00 A0 41 00 F0 FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 11 | 电机参数设置 |
| 功能码 | 82 | 写操作臂 |
| 数据长度 | 08 | 起始电机、数量、参数地址、参数值、保存标志共 8 字节 |
| 起始电机 | 01 | 从 1 号电机开始 |
| 电机数量 | 06 | 连续 6 个电机 |
| 参数地址 | 05 | 加速度 |
| 参数值 | 00 00 A0 41 | 32位浮点数,表示 20 |
| 保存标志 | 00 | 不掉电保存 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x85 0x01 | 0x58 | 0xFF |
完整帧:
AA 11 82 04 01 06 85 01 58 FF
反馈解析:85 表示加速度地址的反馈,末尾数据 01 表示接收成功。
示例3:把操作臂 1 到 6 号电机减速度改为 20,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x06 0x00 0x00 0xA0 0x41 0x00 | 0x5E | 0xFF |
完整帧:
AA 11 82 08 01 06 06 00 00 A0 41 00 5E FF
发送解析:
| 字段 | 字节 | 含义 |
|---|---|---|
| 指令 | 11 | 电机参数设置 |
| 功能码 | 82 | 写操作臂 |
| 数据长度 | 08 | 起始电机、数量、参数地址、参数值、保存标志共 8 字节 |
| 起始电机 | 01 | 从 1 号电机开始 |
| 电机数量 | 06 | 连续 6 个电机 |
| 参数地址 | 06 | 减速度 |
| 参数值 | 00 00 A0 41 | 32位浮点数,表示 20 |
| 保存标志 | 00 | 不掉电保存 |
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x86 0x01 | 0x9B | 0xFF |
完整帧:
AA 11 82 04 01 06 86 01 9B FF
反馈解析:86 表示减速度地址的反馈,末尾数据 01 表示接收成功。
示例4:把操作臂 1 到 6 号电机速度环 Kp 改为 1.0,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1A 0x00 0x00 0x80 0x3F 0x00 | 0x26 | 0xFF |
完整帧:
AA 11 82 08 01 06 1A 00 00 80 3F 00 26 FF
发送解析:参数地址 0x1A 表示速度环 Kp,参数值 00 00 80 3F 表示 32位浮点数 1.0。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9A 0x01 | 0xC6 | 0xFF |
完整帧:
AA 11 82 04 01 06 9A 01 C6 FF
反馈解析:0x9A 表示速度环 Kp 地址的反馈,末尾数据 0x01 表示接收成功。
示例5:把操作臂 1 到 6 号电机速度环 Ki 改为 1.0,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1B 0x00 0x00 0x80 0x3F 0x00 | 0x83 | 0xFF |
完整帧:
AA 11 82 08 01 06 1B 00 00 80 3F 00 83 FF
发送解析:参数地址 0x1B 表示速度环 Ki,参数值 00 00 80 3F 表示 32位浮点数 1.0。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9B 0x01 | 0x87 | 0xFF |
完整帧:
AA 11 82 04 01 06 9B 01 87 FF
反馈解析:0x9B 表示速度环 Ki 地址的反馈,末尾数据 0x01 表示接收成功。
示例6:把操作臂 1 到 6 号电机位置环 Kp 改为 1.0,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1C 0x00 0x00 0x80 0x3F 0x00 | 0x3B | 0xFF |
完整帧:
AA 11 82 08 01 06 1C 00 00 80 3F 00 3B FF
发送解析:参数地址 0x1C 表示位置环 Kp,参数值 00 00 80 3F 表示 32位浮点数 1.0。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9C 0x01 | 0x40 | 0xFF |
完整帧:
AA 11 82 04 01 06 9C 01 40 FF
反馈解析:0x9C 表示位置环 Kp 地址的反馈,末尾数据 0x01 表示接收成功。
示例7:把操作臂 1 到 6 号电机位置环 Ki 改为 1.0,不掉电保存
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x08 | 0x01 0x06 0x1D 0x00 0x00 0x80 0x3F 0x00 | 0x9E | 0xFF |
完整帧:
AA 11 82 08 01 06 1D 00 00 80 3F 00 9E FF
发送解析:参数地址 0x1D 表示位置环 Ki,参数值 00 00 80 3F 表示 32位浮点数 1.0。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x82 | 0x04 | 0x01 0x06 0x9D 0x01 | 0x01 | 0xFF |
完整帧:
AA 11 82 04 01 06 9D 01 01 FF
反馈解析:0x9D 表示位置环 Ki 地址的反馈,末尾数据 0x01 表示接收成功。
示例8:读取操作臂 1 到 2 号电机控制模式
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x02 | 0x03 | 0x01 0x02 0x0B | 0x2E | 0xFF |
完整帧:
AA 11 02 03 01 02 0B 2E FF
发送解析:功能码 0x02 表示读取操作臂;数据 01 02 0B 表示从 1 号电机开始读取 2 个电机的控制模式。
示例反馈:两个电机都处于位置速度模式。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x11 | 0x02 | 0x0B | 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x02 0x00 0x00 0x00 | 0x6E | 0xFF |
完整帧:
AA 11 02 0B 00 00 00 02 00 00 00 02 00 00 00 6E FF
反馈数据前 3 字节可按保留字节处理,后续每 4 字节表示一个电机的模式值。
8. 指令ID 0x15:清除电机错误
指令 0x15 用于清除指定机械臂的电机错误。数据区必须为 0xFE。
示例:清除操作臂错误
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x15 | 0x02 | 0x01 | 0xFE | 0x85 | 0xFF |
完整帧:
AA 15 02 01 FE 85 FF
发送解析:功能码 0x02 表示操作臂,数据 0xFE 是该指令固定字节。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x15 | 0x82 | 0x01 | 0x01 | 0x88 | 0xFF |
完整帧:
AA 15 82 01 01 88 FF
反馈解析:0x82 表示操作臂清错反馈,数据 0x01 表示接收成功。
9. 指令ID 0x16:控制锁定
指令 0x16 用于把所有关节锁定到当前位置,或解除锁定。
| 功能码 | 含义 |
|---|---|
| 0x80 | 锁定 |
| 0x00 | 解锁 |
锁定后,下位机会拒绝会引起电机运动的控制类指令,直到收到解锁指令。
示例1:进入控制锁定
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x80 | 0x00 | 空 | 0x9B | 0xFF |
完整帧:
AA 16 80 00 9B FF
发送解析:功能码 0x80 表示进入控制锁定,数据长度为 0。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x80 | 0x01 | 0x01 | 0x08 | 0xFF |
完整帧:
AA 16 80 01 01 08 FF
反馈解析:功能码保持 0x80,数据 0x01 表示已接收锁定请求。
示例2:退出控制锁定
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x00 | 0x00 | 空 | 0xD0 | 0xFF |
完整帧:
AA 16 00 00 D0 FF
发送解析:功能码 0x00 表示退出控制锁定,数据长度为 0。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x16 | 0x00 | 0x01 | 0x01 | 0x88 | 0xFF |
完整帧:
AA 16 00 01 01 88 FF
反馈解析:功能码保持 0x00,数据 0x01 表示已接收解锁请求。
10. 指令ID 0x17:夹爪夹持参数
指令 0x17 用于读取或设置夹爪力矩和力控相关参数。它一次只能选择一条机械臂。 该指令只修改夹爪控制器内部参数,不写 J7 的 ESC 寄存器,也不改变 J7 控制模式。 写入成功后,参数会更新到夹爪控制器运行配置中,并在后续夹爪控制周期内生效。 如需掉电保存,可在写入数据区末尾追加 1 字节保存标志;保存标志非 0 时,设备会保存当前完整夹爪参数配置。
功能码说明:
| 功能码 | 含义 |
|---|---|
| 0x01 | 读取示教臂 |
| 0x02 | 读取操作臂 |
| 0x81 | 写入示教臂 |
| 0x82 | 写入操作臂 |
| 掩码位 | 数值 | 参数含义 | 单位或说明 | 范围 | 调整方向 |
|---|---|---|---|---|---|
| 第0位 | 0x01 | 目标夹持力 | N,夹爪端估算力 | 小夹爪:[1, 80] N大夹爪: [1, 120] N | 增大可提高目标夹持力,减小可降低夹持力度 |
| 第1位 | 0x02 | 张开前馈力矩 | N·m,电机侧前馈力矩 | 小夹爪:[0.2, 3.0] N·m大夹爪: [0.2, 5.0] N·m | 增大可提高张开辅助力矩,减小可降低张开冲击 |
| 第2位 | 0x04 | 闭合前馈力矩 | N·m,电机侧前馈力矩 | 小夹爪:[-5.0, -0.2] N·m大夹爪: [-8.0, -0.2] N·m | 闭合方向为负;增大绝对值可提高闭合辅助力矩,向 0 调整可降低闭合冲击 |
| 第3位 | 0x08 | 最大保持力矩 | N·m,电机侧力矩上限 | 小夹爪:[0.5, 5.0] N·m大夹爪: [0.5, 10.0] N·m | 增大可提高保持阶段力矩上限,减小可降低持续夹持力矩 |
| 第4位 | 0x10 | 力控比例 | 无量纲 | [0, 2.0] | 增大可提高力控响应,减小可降低力控振荡趋势 |
| 第5位 | 0x20 | 力控积分 | 1/s | [0, 2.0] 1/s | 增大可提高长期补偿能力,减小可降低积分拖尾 |
| 第6位 | 0x40 | 积分限幅 | N·s | [0, 100] N·s | 增大可提高积分补偿上限,减小可限制长期积分累积 |
| 第7位 | 0x80 | 接近闭合时的力矩缩放 | 比例 | [0, 1] | 增大可提高接近目标时的闭合辅助力矩,减小可让末端闭合更柔和 |
读取时,数据区为空表示读取全部参数;数据区为一个非零掩码时,只读取掩码选中的参数。
写入时,数据区第 1 字节为掩码,后面按掩码位从低到高依次放入 32位浮点数。 如需掉电保存,可在所有浮点数之后追加 1 字节保存标志:
数据区长度 = 1 + 参数个数 * 4 // 立即生效
数据区长度 = 1 + 参数个数 * 4 + 1 // 立即生效并按保存标志决定是否掉电保存
保存标志为 0x00 时仅立即生效;保存标志为非 0 时,设备会保存写入后的完整夹爪参数配置。
示例1:读取操作臂全部夹爪参数
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x02 | 0x00 | 空 | 0x65 | 0xFF |
完整帧:
AA 17 02 00 65 FF
示例反馈(以下数据以小夹爪默认参数为例):
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x22 | 0x01 0xFF 0x00 0x00 0x0C 0x42 0x00 0x00 0xA0 0x3F 0x00 0x00 0x20 0xC0 0x00 0x00 0x20 0x40 0x9A 0x99 0x19 0x3F 0xCD 0xCC 0xCC 0x3E 0x00 0x00 0xA0 0x41 0x33 0x33 0xB3 0x3E | 0x8C | 0xFF |
完整帧:
AA 17 82 22 01 FF 00 00 0C 42 00 00 A0 3F 00 00 20 C0 00 00 20 40 9A 99 19 3F CD CC CC 3E 00 00 A0 41 33 33 B3 3E 8C FF
反馈数据前 2 字节含义:
| 字节 | 含义 |
|---|---|
| 0x01 | 操作臂 |
| 0xFF | 返回全部 8 个参数 |
后续每 4 字节为一个 32位浮点数,顺序与参数掩码表一致。
示例2:设置操作臂目标夹持力为 35 N,最大保持力矩为 2.5 N·m
掩码为 0x09,表示写入第0位和第3位两个参数。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x09 | 0x09 0x00 0x00 0x0C 0x42 0x00 0x00 0x20 0x40 | 0xB3 | 0xFF |
完整帧:
AA 17 82 09 09 00 00 0C 42 00 00 20 40 B3 FF
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x03 | 0x01 0x09 0x01 | 0x74 | 0xFF |
完整帧:
AA 17 82 03 01 09 01 74 FF
示例3:设置操作臂目标夹持力为 2 N,并保存
掩码为 0x01,表示只写入第0位目标夹持力。数据区最后 1 字节 0x01 为保存标志,表示保存当前完整夹爪参数配置。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x06 | 0x01 0x00 0x00 0x00 0x40 0x01 | 0xBD | 0xFF |
完整帧:
AA 17 82 06 01 00 00 00 40 01 BD FF
其中 00 00 00 40 为 32位浮点数 2.0f 的小端格式,最后的 01 表示保存。
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0x17 | 0x82 | 0x03 | 0x01 0x01 0x01 | 0x7C | 0xFF |
完整帧:
AA 17 82 03 01 01 01 7C FF
11. 指令ID 0xFB:串口帧率统计
指令 0xFB 用于调试串口通讯性能。
| 功能码 | 含义 |
|---|---|
| 0x00 | 开始统计 |
| 0x01 | 查询统计结果 |
| 0x02 | 停止统计 |
查询结果共 12 字节,由 3 个 32位浮点数组成:
| 顺序 | 含义 |
|---|---|
| 第1个 | 总有效帧率 |
| 第2个 | 0x06 控制成功帧率 |
| 第3个 | 相邻帧时间间隔方差 |
示例1:开始统计
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x00 | 0x00 | 空 | 0x23 | 0xFF |
完整帧:
AA FB 00 00 23 FF
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x80 | 0x01 | 0x01 | 0xED | 0xFF |
完整帧:
AA FB 80 01 01 ED FF
示例2:查询统计结果
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x01 | 0x00 | 空 | 0x62 | 0xFF |
完整帧:
AA FB 01 00 62 FF
示例反馈:三个统计值均为 0。
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x81 | 0x0C | 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 | 0x61 | 0xFF |
完整帧:
AA FB 81 0C 00 00 00 00 00 00 00 00 00 00 00 00 61 FF
示例3:停止统计
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x02 | 0x00 | 空 | 0xA1 | 0xFF |
完整帧:
AA FB 02 00 A1 FF
反馈:
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xFB | 0x82 | 0x01 | 0x01 | 0x83 | 0xFF |
完整帧:
AA FB 82 01 01 83 FF
12. 指令ID 0xEE:错误反馈
指令 0xEE 由下位机返回,用于提示上位机发送的帧无法被正常处理。
错误反馈帧由帧头、0xEE、错误类型、长度 0x01、附加信息、校验和帧尾组成。下面给出两组可直接对照的实际反馈帧。
| 错误类型 | 含义 | 附加信息 |
|---|---|---|
| 0x00 | 帧头或帧尾错误 | 收到的帧长度 |
| 0x01 | 长度错误 | 收到的帧长度 |
| 0x02 | 校验错误 | 下位机计算出的校验字节 |
| 0x04 | 角度越界 | 越界关节编号 |
| 0x05 | 数据长度错误 | 当前数据长度或数量 |
| 0x06 | 地址错误 | 非法地址或越界值 |
| 0x07 | 当前状态不允许此操作 | 请求功能码 |
| 0xEE | 模式切换被拒绝 | 高 4 位为当前模式,低 4 位为目标模式 |
当错误类型为 0xEE 时,附加信息是模式标志字节:
当前模式 = (附加信息 & 0xF0) >> 4
目标模式 = 附加信息 & 0x0F
模式码含义:
| 模式码 | 含义 |
|---|---|
| 0x0 | 普通状态 |
| 0x1 | 控制协议状态 |
| 0x2 | 重力补偿状态 |
| 0x3 | 双臂同步状态 |
| 0x4 | 固件升级状态 |
| 0x5 | 控制锁定状态 |
常见模式标志示例:
| 附加信息 | 当前模式 | 目标模式 | 含义 |
|---|---|---|---|
| 0x31 | 0x3 双臂同步状态 | 0x1 控制协议状态 | 当前正在双臂同步,拒绝进入控制协议。 |
| 0x51 | 0x5 控制锁定状态 | 0x1 控制协议状态 | 当前处于控制锁定,拒绝进入控制协议。 |
示例1:校验错误
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xEE | 0x02 | 0x01 | 0x12 | 0x70 | 0xFF |
完整帧:
AA EE 02 01 12 70 FF
表示下位机计算出的正确校验字节是 0x12。
示例2:控制锁定期间收到运动控制指令
| 帧头 | 指令 | 功能码 | 数据长度 | 数据 | 校验 | 帧尾 |
|---|---|---|---|---|---|---|
| 0xAA | 0xEE | 0xEE | 0x01 | 0x51 | 0x9E | 0xFF |
完整帧:
AA EE EE 01 51 9E FF
附加信息 0x51 表示:当前处于控制锁定状态,目标操作是控制协议状态。
五、对接流程
- 第一步先完成 0x01 查询设备信息、0x06 读取操作臂位置、0x09 使能操作臂三项基础通讯。
- 控制关节位置前,先用 0x16 确认设备未处于锁定状态,再用 0x06 写入目标位置和速度。
- 如果只想停止线性插补,优先写 0x06 地址 0x05,并把每个关节写为
FF FF。 - 如果要使用主动上传,请通过 0x02 开启定时上传,并按
0x06 / 0x04的格式解析主动帧。