实现效果
在上文中我们探讨了匿名上位机中16进制通信帧校验的python计算方法,完成校验后的数据可以用于欧拉角控制匿名上位机姿态显示。
实现原理
为了实现匿名上位机显示飞机当前状态,使用了python生成数据,用串口助手发送数据,用虚拟串口软件连接。
代码
# -*- coding: gbk -*-
#匿名上位机V7.2
#输入ROL、PIT、YAW(姿态角,依次为横滚、俯仰、航向,精确到 0.01)
#输出测试通信数据帧
#作者:玩机器人的赵老师
ROL = int(float(input("请输入横滚姿态角:\n"))*100)
PIT = int(float(input("请输入俯仰姿态角:\n"))*100)
YAW = int(float(input("请输入航向姿态角:\n"))*100)
if (ROL < 0): # 负值要取反加一
ROL = (~(-ROL) & 0xFF) + 1
if (PIT < 0): # 负值要取反加一
PIT = (~(-PIT) & 0xFF) + 1
if (YAW < 0): # 负值要取反加一
YAW = (~(-YAW) & 0xFF) + 1
ROL_H = (ROL >> 8) & 0xFF #获取高八位
ROL_L = ROL & 0xFF #获取低八位
PIT_H = (PIT >> 8) & 0xFF
PIT_L = PIT & 0xFF
YAW_H = (YAW >> 8) & 0xFF
YAW_L = YAW & 0xFF
a = [0xAA, 0xFF, 0x03, 0x07,ROL_L,ROL_H,PIT_L,PIT_H,YAW_L,YAW_H,0x00]
SC = 0 #和校验
AC = 0 #附加校验
for i in a:
SC += i
AC +=SC
a.append(SC & 0xFF)
a.append(AC & 0xFF)
print("校验结果为:",SC & 0xFF, AC & 0xFF)
for x in a:
print('{:02X}'.format(x),end=' ') # ‘02X’用0补位,2个字符长度,X转化为16进制