|
|
@@ -5,7 +5,7 @@ |
|
|
## 当前状态 |
|
|
## 当前状态 |
|
|
|
|
|
|
|
|
- 分支:`main` |
|
|
- 分支:`main` |
|
|
- 核心软件闭环已经可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、独立 HMI 运行窗口、自由监控和 Modbus RTU 真机读写均已实现 |
|
|
|
|
|
|
|
|
- 核心软件闭环已经可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、统一运行监控大屏、自由监控和 Modbus RTU 真机读写均已实现 |
|
|
- HMI 外观属性和梯形图十列可选插入网格均已按逻辑完成提交;开始工作前仍需先看 `git status` 和相关 diff,不要重置来源不明的改动 |
|
|
- HMI 外观属性和梯形图十列可选插入网格均已按逻辑完成提交;开始工作前仍需先看 `git status` 和相关 diff,不要重置来源不明的改动 |
|
|
- `docs/二次开发/` 是已有未跟踪资料,不能因当前任务删除 |
|
|
- `docs/二次开发/` 是已有未跟踪资料,不能因当前任务删除 |
|
|
- 当前没有代码阻塞;下一里程碑是实际设备 RUN 联动和交付整理 |
|
|
- 当前没有代码阻塞;下一里程碑是实际设备 RUN 联动和交付整理 |
|
|
@@ -15,7 +15,7 @@ |
|
|
- 工程格式为严格的 `1.0`,保存多 HMI 页面、初始页、报警定义、M/D 注释、多控制逻辑和结构化梯形图;不读取旧 `dataPoints` 或 `stages/branches` 格式 |
|
|
- 工程格式为严格的 `1.0`,保存多 HMI 页面、初始页、报警定义、M/D 注释、多控制逻辑和结构化梯形图;不读取旧 `dataPoints` 或 `stages/branches` 格式 |
|
|
- HMI 现有 8 类控件:Button、Indicator、NumericDisplay、NumericInput、Label、PageJump、AlarmList、ProgressBar |
|
|
- HMI 现有 8 类控件:Button、Indicator、NumericDisplay、NumericInput、Label、PageJump、AlarmList、ProgressBar |
|
|
- HMI 控件支持静态文字外观:`textColor` 使用 `#RRGGBB`,字体使用 `fontSize`、`fontBold` 和 `fontItalic`;缺失时使用原有默认样式,属性经现有 `properties` 保存,无需升级 JSON 版本 |
|
|
- HMI 控件支持静态文字外观:`textColor` 使用 `#RRGGBB`,字体使用 `fontSize`、`fontBold` 和 `fontItalic`;缺失时使用原有默认样式,属性经现有 `properties` 保存,无需升级 JSON 版本 |
|
|
- 字体颜色和基础字体设置在编辑画布、主窗口只读 HMI 和独立操作员 HMI 窗口中共享同一绘制实现;它们不参与 M/D 绑定、PLC 轮询或离线控制逻辑 |
|
|
|
|
|
|
|
|
- 字体颜色和基础字体设置在编辑画布和统一运行监控 HMI 中共享同一绘制实现;它们不参与 M/D 绑定、PLC 轮询或离线控制逻辑 |
|
|
- 梯形图使用 `Node / Wire / Series / Parallel` 表达式树和正交网格,不保存自由线段;前 10 列为条件区,输出最多位于第 11 列 |
|
|
- 梯形图使用 `Node / Wire / Series / Parallel` 表达式树和正交网格,不保存自由线段;前 10 列为条件区,输出最多位于第 11 列 |
|
|
- 每个新建或已有网络都投影出 10 个可独立点击的条件网格;空网格横线只属于 UI 插入光标,不写入工程,点击远端空格后才按需保存前置 `Wire(span)` 和真实条件节点 |
|
|
- 每个新建或已有网络都投影出 10 个可独立点击的条件网格;空网格横线只属于 UI 插入光标,不写入工程,点击远端空格后才按需保存前置 `Wire(span)` 和真实条件节点 |
|
|
- 已保存的多列 `Wire` 也按单格提供点击目标;在其中一格插入触点时,服务层原子拆分为前置横线、触点和后置横线,继续点击条件工具会逐格消费右侧横线,保持原总列宽以及撤销/重做语义 |
|
|
- 已保存的多列 `Wire` 也按单格提供点击目标;在其中一格插入触点时,服务层原子拆分为前置横线、触点和后置横线,继续点击条件工具会逐格消费右侧横线,保持原总列宽以及撤销/重做语义 |
|
|
@@ -26,11 +26,17 @@ |
|
|
- 自由监控属于当前会话,支持 M/D 批量添加、去重、读取和单点写入,不写入工程 JSON |
|
|
- 自由监控属于当前会话,支持 M/D 批量添加、去重、读取和单点写入,不写入工程 JSON |
|
|
- PLC 通信使用异步 Qt Modbus RTU;轮询地址来自 HMI、报警、梯形图和自由监控的引用并集,写入后等待轮询确认,不乐观修改缓存 |
|
|
- PLC 通信使用异步 Qt Modbus RTU;轮询地址来自 HMI、报警、梯形图和自由监控的引用并集,写入后等待轮询确认,不乐观修改缓存 |
|
|
- 真机进入要求当前连接完成首次读取;通信故障撤销首读资格并退出真机运行,恢复通信后仍停留在编辑态 |
|
|
- 真机进入要求当前连接完成首次读取;通信故障撤销首读资格并退出真机运行,恢复通信后仍停留在编辑态 |
|
|
- 进入离线或真机运行后会打开最大化的独立 HMI 窗口,主窗口保留工程师诊断工作台;两个视图共享运行页面和寄存器数据源,关闭独立窗口会统一返回编辑态 |
|
|
|
|
|
|
|
|
- 进入离线或真机运行后,弹出并最大化唯一的工程师运行监控窗口,主编程器保留在后面且布局不变;离线时组合可交互 HMI、软件梯形图轨迹和自由监控,真机时组合可交互 HMI 和自由监控 |
|
|
- 所有数量上限和超限处理见 `docs/用户使用/数量边界确认方案.md`,核心常量集中在 `app/src/domain/project_limits.h` |
|
|
- 所有数量上限和超限处理见 `docs/用户使用/数量边界确认方案.md`,核心常量集中在 `app/src/domain/project_limits.h` |
|
|
|
|
|
|
|
|
## 最近完成 |
|
|
## 最近完成 |
|
|
|
|
|
|
|
|
|
|
|
- 根据编程器面向设备交付、调试和验证工程师的需求定位,不恢复旧的纯 HMI 操作员窗口;新增职责明确的 `RuntimeMonitorWindow`,承载离线和真机共用的完整运行监控大屏 |
|
|
|
|
|
- 主窗口已移除运行监控页签和运行时布局切换;点击离线或真机运行会弹出最大化监控窗口,右上角返回、关闭弹窗和应用退出分别按统一生命周期处理,且全应用只创建一份 `RuntimeMonitorWidget` |
|
|
|
|
|
- CTU/CTD 输出节点保持现有梯形图网格宽度,将 CV 和 PV 拆成带水平内边距的两行显示,避免 `D4000`、`32767` 等边界配置在右侧电源轨处被裁剪 |
|
|
|
|
|
- 报警列表标题输入上限为 12 个字符,报警文本输入上限为 20 个字符;运行消息保持单行并在空间不足时显示省略号 |
|
|
|
|
|
- 新建报警列表默认尺寸调整为 `360×136`,默认字号比应用字体小 2pt;运行态按当前页 1~5 条记录收缩高度,超过 5 条可通过表头按钮翻页且确认命中使用当前页索引 |
|
|
|
|
|
- 主窗口默认工具栏布局调整为运行模式栏第一行,HMI 或梯形图编辑工具栏第二行;编辑工具栏仍允许用户拖动重新停靠 |
|
|
- 新增 HMI 保留外观属性键和领域校验:颜色为严格 `#RRGGBB`,字号为 `6~72`,粗体和斜体为 `true/false` |
|
|
- 新增 HMI 保留外观属性键和领域校验:颜色为严格 `#RRGGBB`,字号为 `6~72`,粗体和斜体为 `true/false` |
|
|
- 属性面板新增颜色输入与选择按钮、字号、粗体、斜体;通过既有 `HmiEditorService::updateControl()` 原子提交并保留撤销/重做 |
|
|
- 属性面板新增颜色输入与选择按钮、字号、粗体、斜体;通过既有 `HmiEditorService::updateControl()` 原子提交并保留撤销/重做 |
|
|
- `HmiGraphicsItem` 统一应用文字外观,保留地址提示、按钮禁用色、指示灯状态色、控件边框和选中框的原有语义 |
|
|
- `HmiGraphicsItem` 统一应用文字外观,保留地址提示、按钮禁用色、指示灯状态色、控件边框和选中框的原有语义 |
|
|
@@ -40,6 +46,13 @@ |
|
|
|
|
|
|
|
|
## 最近验证 |
|
|
## 最近验证 |
|
|
|
|
|
|
|
|
|
|
|
- 独立运行监控窗口改动已通过重新生成 qmake 构建后的 `main_window_tests`、`hmi_editor_service_tests`、`offline_simulation_service_tests`、`runtime_mode_service_tests` 和 `plc_runtime_tests`;主窗口测试覆盖最大化弹窗、唯一监控实例、主窗口布局不变、离线与模拟真机 HMI 写入、页面跳转、返回编辑、关闭弹窗、通信故障隐藏、重复进入刷新和应用退出 |
|
|
|
|
|
- 独立运行监控窗口改动后的 Qt Release 主程序已在 `build/runtime-monitor-window-release` 完整构建并链接成功 |
|
|
|
|
|
- 2026-08-20 使用 `COM3 / 9600 / 8E1 / 站号 1` 完成真实 PLC 安全读写:读取 `D4000=0`,临时写入并读回 `1`,随后恢复并读回 `0`;没有下载 PLC 程序,也没有执行切换 RUN 的动作 |
|
|
|
|
|
- CTU/CTD 显示修复已通过 `main_window_tests`(`QT_QPA_PLATFORM=offscreen`)和 Qt Release 主程序重新构建;改动仅涉及梯形图 UI 投影,因此未连接真实 PLC |
|
|
|
|
|
- 报警列表和分页改动已通过 `domain_tests`、`alarm_service_tests`、`hmi_editor_service_tests`、`project_management_tests` 和 `main_window_tests`;覆盖输入长度、默认五行尺寸、默认字号、运行态高度收缩、六条报警翻页和跨页确认 |
|
|
|
|
|
- 报警列表改动后的 Qt Release 主程序已重新构建并链接成功;改动不涉及 PLC 通信、Modbus 地址或运行模式,因此未连接真实 PLC |
|
|
|
|
|
- 默认工具栏布局改动已通过 `main_window_tests`(`QT_QPA_PLATFORM=offscreen`)和 Qt Release 主程序重新构建 |
|
|
- 批量删除并联支路回归已通过专项探针、`logic_editor_service_tests` 和 `main_window_tests`;逐个删除、删除完整支路和部分批量删除均保持有效 |
|
|
- 批量删除并联支路回归已通过专项探针、`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` |
|
|
- 修复后全量测试目标均通过:`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` 覆盖了属性面板提交 |
|
|
- 本次字体外观改动后的全量测试目标均通过,`main_window_tests` 使用 `QT_QPA_PLATFORM=offscreen` 覆盖了属性面板提交 |
|
|
@@ -48,7 +61,8 @@ |
|
|
- 真实 PLC 已使用 `COM3 / 9600 / 8E1 / 站号 1` 验证首次读取、断线恢复和重新首读 |
|
|
- 真实 PLC 已使用 `COM3 / 9600 / 8E1 / 站号 1` 验证首次读取、断线恢复和重新首读 |
|
|
- 2026-08-19 已读取 `D4000=0`,写入并读回 `1`,随后恢复并读回 `0`;没有下载 PLC 程序 |
|
|
- 2026-08-19 已读取 `D4000=0`,写入并读回 `1`,随后恢复并读回 `0`;没有下载 PLC 程序 |
|
|
- 本次修复只影响梯形图编辑结构归一化和删除校验,不涉及 PLC 通信或真机运行,因此没有重复写 PLC |
|
|
- 本次修复只影响梯形图编辑结构归一化和删除校验,不涉及 PLC 通信或真机运行,因此没有重复写 PLC |
|
|
- 独立 HMI 窗口改动已通过 `main_window_tests`(显示、关闭退出、页面同步,以及退出编辑后新增控件再次运行的页面刷新)及 `runtime_mode_service_tests`,Qt Release 主程序重新构建通过 |
|
|
|
|
|
|
|
|
- 运行界面此前的双投影生命周期测试已由独立顶层工程师运行监控窗口的唯一投影测试替代,不再构建或保留旧的纯 HMI 操作员窗口 |
|
|
|
|
|
- 本次窗口改动不改变 PLC 通信、Modbus 地址或寄存器读写实现;模拟真机 UI 路径已由假 PLC 仓库覆盖,真实 PLC 安全读写已在同日完成,因此未因窗口承载方式变化重复写设备 |
|
|
- 本次只修改静态 HMI 外观、领域校验和工程持久化,不改变 PLC 通信、Modbus 地址、寄存器读写或运行模式,因此未进行额外真机读写 |
|
|
- 本次只修改静态 HMI 外观、领域校验和工程持久化,不改变 PLC 通信、Modbus 地址、寄存器读写或运行模式,因此未进行额外真机读写 |
|
|
- 梯形图网格专项覆盖了新网络 10 个点击目标、第五列和第十列插入、前置空档、持久横线首格/中格/末格/单格拆分、满横线连续替换 10 个触点、多网络、满列拒绝、非法配置、原子失败、撤销/重做,以及主窗口真实 `QAction` 点击链路;同时验证普通/置位/复位线圈复用同一固定输出节点,`logic_editor_service_tests` 和 `main_window_tests` 均通过 |
|
|
- 梯形图网格专项覆盖了新网络 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` 完整构建并链接成功 |
|
|
- 梯形图网格改动后的 `domain_tests`、`project_management_tests`、`offline_simulation_service_tests` 和 `runtime_mode_service_tests` 回归均通过,确认空网格不进入 JSON 或离线执行语义;Qt Release 主程序已在 `build/grid-feature-release` 完整构建并链接成功 |
|
|
|