# ValveMonitorConfig **Repository Path**: GKoSon/ValveMonitorConfig ## Basic Information - **Project Name**: ValveMonitorConfig - **Description**: C#写的winform上位机 内存可视化展示 空中配置(类似空中升级) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-21 - **Last Updated**: 2026-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 嵌入式设备空中配置上位机 > 误打误撞偶然想出来的完美方案! ## 项目介绍 常规嵌入式配置工具,大多采用 Shell 交互协议,通过串口逐条收发(TX/RX)完成设备配置。 **本方案摒弃逐条交互,采用完整二进制整包一锅端的方式完成设备配置下发与读取。** 主要特点: 1. 使用 bin 文件整包传输,区别于传统「多次少量」Shell 逐行收发模式,一次性完成全部配置读写。 2. C#上位机相当于嵌入式设备的**内存可视化工具**,直接映射设备配置结构体。 3. MCU 串口同时兼容两套解析逻辑: - Shell解析:复用 RT‑Thread Shell 组件,字节流逐字节消费; - 整包中断解析:串口接收完整数组一次性消费,例如 `pc_write_SystemConfig(uint8_t *data)`,接收**256**字节数组直接写入Flash`0X3800`,该能力原生Shell组件并不支持。 4. **整包解析模式与Shell模式互斥**,MCU支持指令切换工作模式。 - 普通模式:上位机可作为普通串口助手,查看设备日志; - 配置模式:执行完整配置包读写操作。 ## 核心原理 MCU端定义配置结构体,配置实例存放于片内Flash固定地址 `0X3800`。 ```c typedef struct { char Head[8+1]; char client[16+1];//默认 ”1732477287654321“ uint8_t pwd[43+1];//默认 “NSeQFDNqFlCc0f13HGP2hAugH2nWp6_zJrpVTHCkujY” uint8_t pcHour; uint8_t pcMin; uint32_t pcTimeGap; char devid[16+1];//默认 “LYWT251025000001” char swVer[8]; uint32_t otaTaskId; char cid[20+1]; char imeiGsn[15+1]; uint16_t bootCnt; imu_bias_t bias; int32_t degree; flag_t flag; uint8_t limitCount; uint8_t reportedCount; uint8_t tian; uint16_t crc16; } SystemConfigType; ``` MCU已经实现两个核心接口,Shell下测试验证可用: - `void pc_read_SystemConfig(void)`:PC读取设备配置 - `void pc_write_SystemConfig(uint8_t *data)`:PC下发修改后的配置数组写入设备Flash ## 本仓库实现内容 本仓库为 **C# WinForm上位机工程**,完成如下开发目标: 1. 完善GUI界面,做配置结构体可视化展示与编辑 2. 完善业务逻辑 - 串口通信框架 - bin文件可视化框架 ## 工作流程简述 1. 上位机发送读指令,MCU返回完整`SystemConfigType`二进制数据包; 2. C#上位机解析二进制包,GUI展示全部参数,支持用户修改; 3. 用户编辑完成后,上位机组装完整二进制包(带CRC16校验); 4. 切换MCU至整包配置模式,调用`pc_write_SystemConfig()`将整包下发写入Flash; 5. 可切回Shell日志模式,继续查看设备打印输出。 ## 注意事项 - Shell模式 / 整包配置模式互斥,需要指令切换; - 数据包末尾携带`crc16`校验,保障传输可靠性; - MCU配置数据存放Flash地址:`0X3800`。 ---