Przeglądaj źródła

docs: 更新当前开发交接

main
suyu 1 miesiąc temu
rodzic
commit
dad40726ba
1 zmienionych plików z 21 dodań i 12 usunięć
  1. +21
    -12
      docs/ai/handoff.md

+ 21
- 12
docs/ai/handoff.md Wyświetl plik

@@ -1,12 +1,12 @@
# 当前开发交接

> 更新日期:2026-08-19。本文件只保留当前状态和下一步;完成事项合并成结论,不追加按日期排列的开发日志
> 更新日期:2026-08-20。本文件只保留当前状态和下一步;完成事项合并成结论,不追加按日期排列的开发流水账

## 当前状态

- 分支:`main`
- 核心软件闭环已经可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、独立 HMI 运行窗口、自由监控和 Modbus RTU 真机读写均已实现
- 当前工作区有未提交改动:批量删除并联支路的结构清理修复、独立 HMI 运行窗口、相关 UI 回归测试和本交接更新;开始工作前先看 `git status` 和相关 diff,不要重置
- HMI 外观属性和梯形图十列可选插入网格均已按逻辑完成提交;开始工作前仍需先看 `git status` 和相关 diff,不要重置来源不明的改动
- `docs/二次开发/` 是已有未跟踪资料,不能因当前任务删除
- 当前没有代码阻塞;下一里程碑是实际设备 RUN 联动和交付整理

@@ -14,7 +14,11 @@

- 工程格式为严格的 `1.0`,保存多 HMI 页面、初始页、报警定义、M/D 注释、多控制逻辑和结构化梯形图;不读取旧 `dataPoints` 或 `stages/branches` 格式
- HMI 现有 8 类控件:Button、Indicator、NumericDisplay、NumericInput、Label、PageJump、AlarmList、ProgressBar
- HMI 控件支持静态文字外观:`textColor` 使用 `#RRGGBB`,字体使用 `fontSize`、`fontBold` 和 `fontItalic`;缺失时使用原有默认样式,属性经现有 `properties` 保存,无需升级 JSON 版本
- 字体颜色和基础字体设置在编辑画布、主窗口只读 HMI 和独立操作员 HMI 窗口中共享同一绘制实现;它们不参与 M/D 绑定、PLC 轮询或离线控制逻辑
- 梯形图使用 `Node / Wire / Series / Parallel` 表达式树和正交网格,不保存自由线段;前 10 列为条件区,输出最多位于第 11 列
- 每个新建或已有网络都投影出 10 个可独立点击的条件网格;空网格横线只属于 UI 插入光标,不写入工程,点击远端空格后才按需保存前置 `Wire(span)` 和真实条件节点
- 已保存的多列 `Wire` 也按单格提供点击目标;在其中一格插入触点时,服务层原子拆分为前置横线、触点和后置横线,继续点击条件工具会逐格消费右侧横线,保持原总列宽以及撤销/重做语义
- 梯形图支持 M 触点与上下沿、T/C 触点、普通/置位/复位线圈、TON、CTU/CTD、MOVE、ADD/SUB
- 只有输出、没有条件的网络按恒真执行;只有条件、没有输出的启用网络不能运行;空网络扫描时跳过
- 离线执行器按控制逻辑和网络顺序扫描,使用虚拟 M/D,并生成按逻辑 ID 隔离的运行轨迹
@@ -25,34 +29,39 @@
- 进入离线或真机运行后会打开最大化的独立 HMI 窗口,主窗口保留工程师诊断工作台;两个视图共享运行页面和寄存器数据源,关闭独立窗口会统一返回编辑态
- 所有数量上限和超限处理见 `docs/用户使用/数量边界确认方案.md`,核心常量集中在 `app/src/domain/project_limits.h`

## 当前未提交改动
## 最近完成

- 条件表达式归一化会递归移除空的 `Series / Parallel` 容器,避免批量删除整条并联行后残留空支路
- `LogicEditorService::removeNodes()` 删除并归一化后重新校验网络,结构非法时恢复编辑前状态
- 服务测试覆盖批量删除并联支路全部触点、结构归一化和撤销恢复;UI 测试覆盖画布整行多选删除及竖线连接清理
- 新增 `HmiRuntimeWindow`,复用运行态 HMI 画布,窗口生命周期和页面跳转由 `RuntimePanelController` 编排,不改变运行模式、PLC 通信或离线执行器
- 每个新的运行会话都会强制重建独立 HMI 当前页面,避免页面 ID 不变时遗漏编辑态新增控件
- 新增 HMI 保留外观属性键和领域校验:颜色为严格 `#RRGGBB`,字号为 `6~72`,粗体和斜体为 `true/false`
- 属性面板新增颜色输入与选择按钮、字号、粗体、斜体;通过既有 `HmiEditorService::updateControl()` 原子提交并保留撤销/重做
- `HmiGraphicsItem` 统一应用文字外观,保留地址提示、按钮禁用色、指示灯状态色、控件边框和选中框的原有语义
- 更新工程格式和数量边界文档;新增领域、HMI 编辑服务、JSON 往返和主窗口 UI 测试
- 梯形图编辑器新增按绝对条件列插入和按横线单格替换的服务接口;UI 统一将空格、横线格、已有条件和无选择状态路由到对应编辑用例,选中条件后串联插入会优先替换紧邻的右侧横线格,再考虑扩展网络宽度
- 梯形图条件工具提示已明确支持在选中空网格或横线处插入;线圈等输出指令仍写入独立的固定输出槽

## 最近验证

- 批量删除并联支路回归已通过专项探针、`logic_editor_service_tests` 和 `main_window_tests`;逐个删除、删除完整支路和部分批量删除均保持有效
- 修复后全量测试目标均通过:`alarm_service_tests`、`domain_tests`、`hmi_editor_service_tests`、`logic_editor_service_tests`、`main_window_tests`、`offline_simulation_service_tests`、`plc_runtime_tests`、`project_management_tests`、`register_monitor_service_tests`、`runtime_mode_service_tests`
- 本次字体外观改动后的全量测试目标均通过,`main_window_tests` 使用 `QT_QPA_PLATFORM=offscreen` 覆盖了属性面板提交
- Qt Release 主程序已重新构建并链接成功
- `git diff --check` 通过
- 真实 PLC 已使用 `COM3 / 9600 / 8E1 / 站号 1` 验证首次读取、断线恢复和重新首读
- 2026-08-19 已读取 `D4000=0`,写入并读回 `1`,随后恢复并读回 `0`;没有下载 PLC 程序
- 本次修复只影响梯形图编辑结构归一化和删除校验,不涉及 PLC 通信或真机运行,因此没有重复写 PLC
- 独立 HMI 窗口改动已通过 `main_window_tests`(显示、关闭退出、页面同步,以及退出编辑后新增控件再次运行的页面刷新)及 `runtime_mode_service_tests`,Qt Release 主程序重新构建通过
- 本次独立窗口改动没有改变 PLC 通信协议或寄存器写入逻辑,因此未做额外真机读写
- 本次只修改静态 HMI 外观、领域校验和工程持久化,不改变 PLC 通信、Modbus 地址、寄存器读写或运行模式,因此未进行额外真机读写
- 梯形图网格专项覆盖了新网络 10 个点击目标、第五列和第十列插入、前置空档、持久横线首格/中格/末格/单格拆分、满横线连续替换 10 个触点、多网络、满列拒绝、非法配置、原子失败、撤销/重做,以及主窗口真实 `QAction` 点击链路;同时验证普通/置位/复位线圈复用同一固定输出节点,`logic_editor_service_tests` 和 `main_window_tests` 均通过
- 梯形图网格改动后的 `domain_tests`、`project_management_tests`、`offline_simulation_service_tests` 和 `runtime_mode_service_tests` 回归均通过,确认空网格不进入 JSON 或离线执行语义;Qt Release 主程序已在 `build/grid-feature-release` 完整构建并链接成功
- 本次梯形图改动仅涉及编辑服务和 UI 投影,不改变 PLC 通信、真机运行、Modbus 地址或寄存器读写,因此没有重复连接真实 PLC

## 待完成

1. 在确认接线、地址和负载安全后,将 PLC 切到 RUN,完成 HMI 与实际设备的完整联动测试
2. 整理最终演示工程、构建说明和验收记录
3. 复核当前未提交 diff,并按逻辑拆分提交;不要把 `docs/二次开发/` 等来源不明改动混入提交

## 下一会话起点

1. 运行 `git status --short`,确认当前未提交和未跟踪文件仍在
2. 根据任务读取 `docs/architecture.md`、数量边界文档或硬件/Modbus 要点,不再从旧开发日志推断现状
3. 修改代码后运行受影响测试和 Release 构建;涉及真机通信时按 `AGENTS.md` 做 COM3 读写及恢复验证
2. 若继续扩展 HMI 外观,优先复用 `HmiAppearanceProperty` 的保留属性键、领域校验和统一绘制路径,避免把样式逻辑放入寄存器或运行服务
3. 若继续扩展梯形图插入交互,保持空网格为 UI 会话投影,只有真实 `Node / Wire / Series / Parallel` 表达式进入工程;条件区继续统一使用 `ProjectLimits::kMaximumConditionColumns`
4. 修改代码后运行受影响测试和 Release 构建;涉及真机通信时按 `AGENTS.md` 做 COM3 读写及恢复验证

Ładowanie…
Anuluj
Zapisz