文章目录
项目简介
1、主要功能
1.可以升级下位机程序
2.可以配置下位机的某些参数
3.可以接收下位机数据并可视化显示出来
4.可以接收下位机输出的日志信息,并可以保存下来
5.下位机可能会记录存储某些数据,上位机可以读取并显示出来
6.上位机需要具备完整的操作提示和错误提示
2、软件功能设计
物理层需使用UART或232的全双工通讯,同时规定数据如果没有特殊标注都使用小端模式传输(低字节在前高字节在后)。
在上一章中使用了比较通用的Modbus协议和下位机进行通讯,这一章将通过自定义的协议实现一个这个调试上位机。
协议格式如下:
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
2Byte | 1Byte | N个Byte | N个Byte | 1Byte |
0xAAAA | 0~0xff | 使用varint编码 | 异或校验 |
命令标识定义如下:
0x00命令
此命令标识只能由下位机向上位机发送,上位机无需回复,功能为监控数据,数据段包含两个4个字节的整型数据,同时为节省带宽使用varint编码
一个字节的0~6bit为数据,第7个bit为是否需要向下解析,如下示例:
第一个数据为1,第二个数据为500,那么发送数据为:
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
0~1字节 | 2字节 | 3字节 | 4~6字节 | 7字节 |
0xAA,0xAA | 0x00 | 0x03 | 0x01,0xF4,0x03 | 0x00 |
第一个数据为500,第二个数据为60000,那么发送数据为:
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
0~1字节 | 2字节 | 3字节 | 4~8字节 | 9字节 |
0xAA,0xAA | 0x00 | 0x05 | 0xF4,0x03,0xE0,0xD4,0x03 | 0x00 |
0x01命令
上位机向下位机发送此命令查询下位机当前运行的程序状态:
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
0~1字节 | 2字节 | 3字节 | 无 | 4字节 |
0xAA,0xAA | 0x01 | 0x00 | 无 | 0x00 |
下位机回复:
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
第0~1字节 | 第2字节 | 第3字节 | 第4字节 | 第5字节 |
0xAA,0xAA | 0x01 | 0x01 | 0x00:当前运行在boot中,0x01:运行在app中 | 0x00 |
0x02命令
上位机向下位机发送此命令控制下位机跳转boot或app
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
0~1字节 | 2字节 | 3字节 | 4字节 | 5字节 |
0xAA,0xAA | 0x02 | 0x01 | 0x00:跳转到App,0x01:跳转到Boot | 0x00 |
下位机回复:
帧头 | 命令标识 | 数据个数 | 数据 | 校验 |
---|---|---|---|---|
第0~1字节 | 第2字节 | 第3字节 | 第4字节 | 第5字节 |
0xAA,0xAA | 0x02 | 0x01 | 0x00:成功,其他失败 | 0x00 |
0x03命令
上位机向下位机发送此命令或取下位机app软件版本号
上位机数据:无
下位机数据:3个字节版本号
0x04命令
上位机向下位机发送此命令通知下位机app程序开始升级,下位机收到命令后进行升级前的初始化操作
上位机数据:4个字节的文件大小
下位机数据:0:成功,其他失败
0x05命令
上位机向下位机发送app程序升级文件数据
上位机数据:N个字节,前4个字节为文件的偏移
下位机数据:5个字节,第一个字节为错误码:0:成功,1:Flash写入失败,2:偏移错误(后面4个字节为正确的偏移),3:还未接收到文件信息
0x06~0x08
0x03到0x05为仅在boot中支持的升级app程序用到的指令,0x06~0x08为仅在app中支持的升级boot程序用到的指令
0x10
上位机获取下位机配置数量,同时下位机接收到命令将把读取索引设置到开头
上位机数据:无
下位机数据:2个字节,当前设备的配置数量
0x11
上位机获取下位机配置,同时下位机每反回一条索引向后加1
上位机数据:无
下位机数据:N个字节,第一个字节为故障码,0为正常,后续格式为,Key:Value,Key为配置名称,Value为值
0x12
上位机设置下位机配置
上位机数据:N个字节,格式为,Key\0Value,Key为配置名称,Value为值
下位机数据:0:成功,其他失败
0x13
上位机获取下位机配置
上位机数据:N个字节,格式为,Key\0,Key为配置名称
下位机数据:N个字节,第一个字节为故障码,0为正常,后续为Value
0x14
时间同步
上位机数据:4个字节,当前时间戳
下位机数据:0:成功,其他失败
0x20
上位机获取下位机事件记录条数
上位机数据:8个字节,前4字节开始时间戳,后4字节结束时间戳
下位机数据:4个字节,当前设备的记录条数
0x21
上位机获取下位机事件记录条数,同时启动传输,通过0x22命令
上位机数据:8个字节,前4字节开始时间戳,后4字节结束时间戳
下位机数据:4个字节
0x22
下位机上传事件记录数据通道
下位机数据:N个字节,前4个字节为时间戳,其他为事件描述字符串
一、界面
配置和监控页面都使用表的形式来显示