# WebServer 修改调试计划 > 日期: 2026-07-14 > 基于: [WEBSERVER_COMPARISON.md](WEBSERVER_COMPARISON.md) ## 修改优先级 ### 高优先级(必须修复 — M1, M2, M3) #### 1. SBO 遥控流程 (M1) **目标**: yk/ao/param 的 set 操作支持 SELECT→DIRECT 两阶段控制 **改动文件**: `src/system/libweb_server/src/ws_method.cpp` **改动点**: - `ws_sig_set_yk()`: 根据 `ctrl_type` 判断 `DIRECT_NORMAL` 直控或 `SBO_NORMAL` 选控 - `ws_sig_set_ao()`: 同上 - `ws_sig_set_param()`: 同上 - SBO 流程: 先 `DC_STEP_SELECT` → 再 `DC_STEP_DIRECT` **调试方法**: 前端发送 yk/ao/param set 命令,确认 SBO 类型信号走 SELECT→DIRECT 流程 #### 2. dc_save_out_signals_xml (M2) **目标**: datacenter out 命令执行后保存 XML **改动文件**: `src/system/libweb_server/src/ws_method.cpp`(cmd 处理部分) **改动点**: - 在 `type=cmd` 处理中,当命令以 `datacenter` 开头且子命令为 `out`/`all` 时 - 调用 `dc_save_out_signals_xml()` 保存到 `config/SYSTEM/datacenter_out.xml` **调试方法**: 前端执行 `datacenter out` 命令 → 检查 `config/SYSTEM/datacenter_out.xml` 是否生成 #### 3. ws_build_dc_data_json (M3) **目标**: datacenter 命令执行后返回信号元数据 JSON **改动文件**: `src/system/libweb_server/src/ws_method.cpp` **改动点**: - 新增函数 `ws_build_dc_data_json(types)` — 调用 `dc_get_signal_info_by_id` 遍历信号 - 在 `type=cmd` 处理中,datacenter 命令执行后调用此函数构建 JSON - 通过 `ws_send_binary` 发送 dc_data JSON **调试方法**: 前端执行 `datacenter all` 命令 → 检查返回的 JSON 是否包含 out/in/yk/ao/param 完整数据 ### 中优先级(建议修复 — M4, M5) #### 4. ws_send_large_text (M4) **目标**: 大文本(>35KB)分片发送,防止 WS 帧溢出 **改动文件**: `src/system/libweb_server/src/ws_method.cpp` 和/或 `web_server.cpp` **改动点**: - 新增 `ws_send_large_text()` — 35KB 分片 `cmd_rsp_chunk` 消息 - `ws_cmd_exec()` 返回大字符串时使用分片发送代替二进制发送 **调试方法**: 执行产生大量输出的命令(如 datacenter all),检查前端是否收到分片 #### 5. AO/Param 元数据 (M5) **目标**: JSON 中包含 min/max/step/unit 字段 **改动文件**: `src/system/libweb_server/src/ws_method.cpp` 的 `ws_make_sig_json` **改动点**: - AO 信号 JSON 增加 `min/max/step/unit` 字段 - 需要在信号结构中存储 `stru_signal_param` 或从 datacenter 查询 ### 低优先级(可选 — M6) #### 6. p_ctrl 伴随生命周期 (M6) **改动文件**: `src/system/libweb_server/src/ws_method.cpp` **改动点**: 信号结构体增加 `p_ctrl*`,add 时分配,del 时释放 ## 测试方案 1. **启动 RTU**: `./RTU` 验证 webserver 正常启动 2. **浏览器连接**: `http://localhost:8080` → 终端页面 3. **测试命令**: 点击命令面板按钮执行各模块命令 4. **测试信号CRUD**: 通过前端数据页面添加/删除/修改信号 5. **测试SBO流程**: 通过前端修改 SBO 类型信号值 6. **测试大输出**: 执行 `datacenter all` 验证分片发送