VX300 协议解析
包结构索引
1.包头
字节1
包头字节始终为255。标头字节仅表示新数据包的开始。
2.长度
字节2
通常的做法是发送一个字节告知数据包长度,以便接收代码知道数据包中预期有多少个字节。 在我们的情况下,数据包始终为13个字节长,因此该字节始终为13个字节。
3.指令类型
字节3
指令类型字节是您要发送到固件的命令的主要标识符。 请参阅“命令索引”部分以查看指令类型的列表。
了解命令的三种类型
您会注意到每个命令最多可以有3个版本。 例如,命令40可以作为40、41或42发送。
将其视为在单个字节中发送两条信息可能是最简单的。
命令IE:0/10/20/40/50/80
带有命令IE的R / W请求:0/1/2
每个命令具有三种不同类型的读/写0 =写无回波包1 =用回波包写2 =已读
例如,如果您要调用命令40,则它可能是以下版本之一:40 =写无回波包41 =使用回波包写42 =已读
回音包
当请求回送数据包时,固件将执行写命令,然后返回串行数据包。串行数据包将与接收到的数据包相同,因此称为名称。回声包。
使用回音包的原因主要有两个:确认已接收并写入数据在代码中充当时序控件。通常,在第一个命令完成之前,您不希望下一部分代码执行。因此,在继续进行下一部分代码之前,您需要等待回显被返回。
请注意,并非每个命令都具有所有三个R / W选项。某些命令仅允许读取,而某些命令则没有0或无回声的选项。
4.指令子类型
字节4
指令子类型字节用于命令子类型。例如,对于用于设置模型变量的指令类型40,有以下子类型指令:
1 | 设置机器人模型 |
10 | 读/写一个模型变量 |
20 | 配置一个模型关节 |
21 | 读/写一个关节的最大值/最小值 |
22 | 读/写一个抓手的最大值/最小值 |
5.指令细节1/2/3/4
字节5 /字节6 /字节7 /字节8
这些字节用于发送命令所需的详细信息。 它们可能是寄存器地址,伺服ID,联合ID或其他信息。
6.数据字节1/2/3/4
字节9 /字节10 /字节11 /字节12
数据字节用于发送有符号整数。 由于一个字节只能保存0〜255个有符号整数之间的值,因此分成4个字节。
7.校验和
字节13
校验和用于检查串行数据包是否已成功完整发送,以及所有数据是否正确。
请注意:包头不包含在校验和中校验和的
计算公式如下:
校验和=(长度+指令类型+指令使用+指令详细信息1 +指令详细信息2 +指令详细信息3 +指令详细信息4 +数据字节1 +数据字节2 +数据字节3 +数据字节4)%256
示例
读写所有舵机寄存器
Header | Length | Instruction Type | Value Range | Servo Count | Register Address Low Byte | Register Address High Byte | Value Range |
255 | 13 | 30 |
Data Integer(1) | Data Integer(2) | Data Integer(3) | Data Integer(4) | CheckSum |
读取关节的2D点/重心
Header | Length | Instruction Type | Value Range | Servo Count | Register Address Low Byte | Register Address High Byte | Value Range |
255 | 13 | 82 | 40 |
Data Integer(1) | Data Integer(2) | Data Integer(3) | Data Integer(4) | CheckSum |
X position low byte | X position high byte | Y position low byte | Y position high byte | |
作者:kay 出处:https://www.cnblogs.com/kay2018/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |