# 当前开发交接 > 更新日期:2026-08-25。本文件只保留当前工作区状态、最近验证和下一步,不记录历史开发流水账;稳定架构和业务细节分别以 `docs/architecture.md` 及对应专题文档为准。 ## 当前状态 - 分支:`main` - 核心闭环可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、运行监控、自由监控和 Modbus RTU 真机读写均已实现 - 梯形图条件区已经统一为显式模型:可见横线保存为 `Wire`,明确断路保存为 `Gap`,输出固定在第 11 列 - 工程 JSON 继续严格使用 `1.0`,不增加版本迁移或早期同版本草稿兼容分支 - HMI 进度条控件已经完整移除,编辑器、运行投影和工程 JSON 均不再支持该类型 - 返回编辑态后会拒绝退出前排队的离线扫描轨迹,梯形图不会重新显示旧的绿色导通状态 - 新建工程名称为空或全是空白时会禁用确认按钮,取消输入时继续安全保留当前工程,不再静默接受无效名称 - 第一次保存和工程另存为会用当前工程名称预填 `.json` 文件名,并兼容 Windows 非法字符与保留设备名 - PLC 通信配置支持刷新当前可用串口及按当前站号自动搜索:搜索异步遍历可用串口和全部受支持串口参数,找到后自动回填并进入正式连接,搜索可随时取消 - HMI/梯形图复制粘贴、数量边界收紧和全局对话框标题栏调整仍保留在当前未提交工作区 - 当前没有代码阻塞,Release 功能测试、性能测试和主程序构建均已通过 ## 工作区状态 - 当前未提交功能改动包含 HMI/梯形图复制粘贴、数量边界收紧、对话框标题栏调整、显式 `Wire / Gap` 梯形图连接模型、离线轨迹退出时序修复、HMI 进度条控件移除,以及 PLC 自动搜索 - PLC 自动搜索新增服务层搜索契约、独立 Qt Modbus RTU 探测实现、配置对话框进度/取消交互、主窗口依赖注入、候选覆盖测试和离屏对话框流程测试 - Git 忽略的 `json/` 本地示例工程已同步当前格式;综合测试工程删除了进度条对象和关联说明,电机正反转工程无需内容调整 - `.gitignore`、`AGENTS.md`、未跟踪脚本和测试大纲文档属于工作区已有内容,没有被本轮回退 - `build/` 只保存本地构建和测试输出,不纳入 Git ## 本轮变更结论 - 条件区每一段可见、可选择和可删除横线都持久化为 `Wire(columnSpan)`;没有横线的位置使用 `Gap(columnSpan)` 明确占位 - 有输出的网络必须由 `Node / Wire / Gap` 显式占满前 10 列;直接添加输出生成 `Wire(10) + Output`,一个触点后添加输出生成 `Node + Wire(9) + Output` - 删除触点会在原位置留下单格 `Gap`;删除横线只断开选中的网格,支持在 `Gap` 上补横线或原位插入触点 - 并联各支路必须显式等宽,短支路补线保存为真实 `Wire`;母线、节点和输出自身端子、并联竖线仍由结构派生 - `Gap` 可以保存草稿,但运行校验会拒绝;执行器不再把 `condition=null + output` 解释为隐式恒真网络 - JSON 继续严格读写 `formatVersion: "1.0"`,新增 `kind: "gap"` 表达式;早期依赖隐式输出连线或隐式并联补线的同版本草稿不会自动迁移 - `RuntimePanelController` 只在仍处于离线运行且执行器状态为 `Running` 时接收扫描轨迹;返回编辑态后的过期排队回调会被丢弃 - HMI 控件枚举、注册描述、专用配置模型、编辑服务比较/默认值、JSON 字段、画布绘制、属性表单、添加动作和工具栏图标中的进度条代码均已删除 - 严格 `1.0` 工程只接受当前注册表中的 7 类 HMI 控件;包含已移除控件类型的工程会按不支持类型拒绝加载,不做同版本迁移 - HMI 编辑和工程管理测试样例已移除该控件,并保留未知 HMI 类型加载失败的通用回归覆盖 - 自动搜索固定使用界面当前站号,按优先级遍历每个可用 PC 串口的 60 组受支持串口参数;不穷举 `1~247` 站号 - 每组参数只读 `D0`,不写 PLC;正常回复或合法 Modbus 异常回复都视为参数匹配,找到后先释放搜索串口再交给原正式连接流程 - 搜索期间配置表单和确认按钮禁用,自动搜索按钮切换为停止命令;取消、无串口和全部失败都有明确结果,找到后自动回填端口、波特率、数据位、校验位和停止位 - 端口下拉框右侧提供刷新按钮;窗口打开和手动刷新时都只保留系统当前实际存在的串口,不再把已经拔掉的上次配置端口重新加入列表 ## 最近验证 - 2026-08-25 PLC 自动搜索完成后,11 个 Release 功能测试目标全部通过;`plc_connection_dialog_tests` 覆盖开始、取消、进度、参数回填和端口刷新,`plc_runtime_tests` 覆盖 180 组候选优先级、去重和边界 - 2026-08-24 修复新建工程空名称静默失败后,10 个 Release 功能测试目标全部通过,Release 主程序重新编译并链接成功 - 2026-08-24 删除 HMI 进度条后重新 qmake、构建并通过 10 个 Release 功能测试目标:Domain、Alarm、HMI 编辑、梯形图编辑、离线仿真、工程管理、寄存器监控、运行模式、运行面板控制器和 PLC Runtime 全部通过 - 新增真实 `RuntimePanelController + LogicEditorWidget` 无界面回归测试,确认退出前排队的 `scanCompleted` 在编辑态不会恢复绿色轨迹 - 独立 Release 性能目标通过:100 个控制逻辑扫描约 `0.207 ms`,4001 个 M 寄存器完整读写约 `0.048 ms`;CSV 位于 `build/tests/release/performance_tests/benchmark.csv` - Qt Release 主程序重新构建并链接成功:`build/release/release/integrated_platform.exe` - 工程管理测试覆盖 `Gap` 严格 `1.0` 往返、`Wire(10)` 恒真输出、拒绝加载 `condition=null + output` 的隐式连线草稿,以及拒绝未知 HMI 控件类型 - `json/full_hmi_ladder_test.json` 和 `json/motor_forward_reverse.json` 均已使用当前 `JsonProjectStorage` 实际加载成功,并通过领域校验 - 2026-08-25 使用新搜索器按站号 `1` 对本机 `COM1/COM2/COM3` 完成 180 组参数的只读 `D0` 尝试,设备未返回 Modbus 响应并正确报告未找到;本次没有写寄存器,不需要恢复原值,也不能作为成功联机证据 ## 待完成 1. 人工确认 HMI 工具栏和属性面板不再出现进度条入口或空白属性行,再操作直接输出、触点后输出、横线选中、单格断线、断路补线、断路插入触点、删除触点和保存重载,并确认离线仿真返回编辑态后不保留绿色轨迹 2. 需要继续使用的早期隐式连线 `1.0` 草稿应在当前编辑器中重新保存为显式 `Wire / Gap` 结构,本项目不提供自动迁移 3. 在确认 PLC 已上电、RS-485 接线正确、COM2 已配置为 Modbus RTU 从站且站号正确后,人工验收自动搜索能找到配置并自动完成正式连接 4. 提交时区分本轮显式连接模型、PLC 自动搜索与工作区其他已有改动,避免混入无关未跟踪文件 ## 下一会话起点 1. 先运行 `git status --short`,保留工作区全部现有修改,不回退来源不明的文件 2. PLC 设备条件就绪后先在配置窗口保持正确站号,点击自动搜索,确认进度、停止、未找到提示,以及找到后参数回填和正式连接 3. 人工验收 HMI 时确认“更多控件”菜单只保留页面跳转、报警列表和报警配置;验收梯形图时重点确认选中有线网格仍显示横线,删除后只有目标格变为断路,补线后恢复运行资格 4. 修改代码后运行 `pwsh -NoLogo -NoProfile -File .\scripts\run_qt_tests.ps1 -Configuration Release -Suite All`、Release 主程序构建和 `git diff --check`