Du kannst nicht mehr als 25 Themen auswählen
Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
当前开发交接
更新日期:2026-08-26。本文件只保留当前工作区状态、最近验证和下一步,不记录历史开发流水账;稳定架构和业务细节分别以 docs/architecture.md 及对应专题文档为准。
当前状态
- 分支:
main
- 核心闭环可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、运行监控、自由监控和 Modbus RTU 真机读写均已实现
- D 区 Float32/REAL 读写已接入:HMI 和自由监控可选 Int16/Float32,底层仍保存原始 16 位字,Float32 使用低字/高字连续双 D 编解码
- 真机本地梯形图只读推算已实现:HMI/自由监控继续读写 PLC,本地梯形图只读 PLC 缓存并在临时仓库推算轨迹
- 编辑态 M/D 数据监控已接入:监控面板可在编辑态修改虚拟 M/D,并将值作为下一次离线仿真的进程内初始值;运行输出不会污染初始值
- 数据监控在编辑态作为与 HMI 页面、控制逻辑并列的第三个编辑页签显示,运行监控窗口继续复用同一监控服务;离线写虚拟仓库,真机写 PLC 缓存
- 应用外部配置业务已经完成,固定读取可执行文件目录下的
config/application.ini
- 配置支持 6 个体验型数量上限、2 个新建 HMI 页面默认尺寸和 6 个 PLC 串口默认参数
- 配置启动时只读取一次,不热更新,不覆盖已有文件,不回写 PLC 配置窗口中的临时修改
- 当前没有代码阻塞,命令语输入和用户运行程序导出功能已接入,Release 功能测试和 Release 主程序构建均已通过
工作区状态
- 当前工作区干净;用户运行程序导出代码已提交为
e8f7cc9 feat: 改为工程数据封装导出,旧运行版兼容入口清理已提交为 7a827a2 fix: 移除旧运行版兼容入口,配套文档提交为 e8f5e81 和 d324d23
- 工程树的新建页面、新建控制逻辑及重命名入口已统一禁止提交空名称或纯空白名称,确认按钮会随输入有效性即时启停
- 新增
ApplicationSettings、严格 UTF-8 INI 加载器及独立 application_settings_tests
- 新增用户文档
docs/用户使用/应用配置说明.md,并同步架构、数量边界、测试约定和 AGENTS.md 索引
build/ 只保存本地构建和测试输出,不纳入 Git
- 未创建或修改发布包内的默认 INI;正式程序首次运行时由加载器按实际可执行文件目录创建
- 新增
LogicCommandService,支持首期 14 类命令解析、M/D 地址校验、指令补全数据和原子转换
- 梯形图条件区、横线、Gap 和输出槽支持双击命令输入;成功后复用现有表达式树和图元刷新,失败保留输入并标红
- 连续
LD 会创建下一个网络;连续 AND/ANI 追加当前网络;连续 OR/ORI 将累计条件整体并联且不额外占用主干列
- 命令生成节点直接标记为已配置,不新增命令文本持久化格式;运行、JSON 保存和真机本地推算继续使用结构化梯形图
- 新增
docs/用户使用/命令语输入说明.md 和命令解析、连续输入、横线/Gap 替换及原子失败测试
- 命令输入框失焦会自动结束未提交输入,场景刷新会清理旧选择;表达式渲染跳过零长度连接线
- 删除后保留的
Gap 会被横线和条件追加优先复用,连续横线插入会消耗目标后的 Gap,不会错误创建新网络
- 已有条件节点和输出节点支持双击进入命令输入;条件节点可用
LD/LDI/LDP/LDF 替换,输出节点可用 OUT/SET/RST/MOV/ADD/SUB 替换,类型不匹配时原子拒绝
- 双击已有节点时命令输入框会回填当前指令和 M/D 地址;补全弹窗改为左对齐的“指令 / 操作数 / 说明”三列表格,并扩大宽高,输入框在视口边缘自动避让
- 命令补全增加
LD=、LD<>、LD<、LD<=、LD>、LD>= D 值比较指令,格式为比较指令 + D 地址 + 有符号常量
MOV/ADD/SUB 命令输入保留指令对话框允许的常量操作数;补全过滤只按第一段指令名匹配,输入空格后的 M/D 操作数时仍保留指令提示
- 双击命令输入只打开空输入框,不再自动弹出补全列表;用户开始输入指令名后才显示补全,并移除未实现的
TON/CTU 提示项
- 梯形图删除支持框选网络批量删除;混合选中时忽略断路占位,不再弹出“已经是断路”的误导提示
- 梯形图画布统一支持从网络内部或外部开始鼠标拖拽框选,Ctrl 继续追加选择
- 新增“文件 -> 导出用户运行程序”:导出前执行运行校验,将当前工程写入临时 JSON,复制已编译的编程器 exe 并把工程数据封装到 exe 尾部,再复制 Qt DLL 与平台插件到用户选择的目标目录
- 新增
RuntimeProjectBundleService,封装格式包含固定魔数、版本、长度和 SHA-256;导出使用本地进度窗口和原子文件写入,不再在导出时调用 PowerShell、qmake 或 MinGW
scripts/package_qt_app.ps1 只负责维护者构建普通编程器发布包;发布包携带 Qt 运行库后可移动到任意目录导出
- 导出入口改为选择目标父目录并输入文件夹名称,最终生成“文件夹/同名 exe + 运行库”的完整目录,覆盖已有目录前需要确认
- 用户运行版启动后隐藏编程器编辑器,直接进入离线仿真;运行监控顶部提供离线/真机切换、PLC 配置、断开和退出程序操作
- 修复用户运行版未完成 PLC 首次读取时切换真机导致运行监控窗口隐藏、应用无可见窗口而退出的问题;现在保持离线运行并在运行监控窗口提示先配置 PLC 并完成首次读取
本轮变更结论
- 默认配置文件包含
[Config]、[ProjectLimits]、[HmiDefaults] 和 [PlcDefaults] 四个分区,当前版本固定为 1
- 文件不存在时自动创建目录和默认文件,本次使用代码默认值;创建或读取失败时默认值启动,底部输出详细原因并弹一次警告
- 缺失普通字段使用默认值,未知字段忽略;重复字段、版本错误、非法 UTF-8、非整数、越界或不支持的串口枚举值会使整份配置回退
- 领域聚合校验、编辑服务、JSON 保存加载、运行前校验和 UI 使用同一份启动期
ProjectLimitSettings
- 用户调低上限后,超限工程在局部对象中解析失败,不替换当前工程、不加载部分内容,也不修改原 JSON
- 全工程 HMI 控件 2048、全工程网络 2048、M/D 地址、16 位数值、梯形图结构、表达式、Modbus 和文件容量继续使用代码硬限制
DefaultPageWidth/DefaultPageHeight 只影响新建页面;已有页面继续使用工程 JSON 中的尺寸
- PLC 默认值初始化主窗口连接配置;不存在的默认 COM 端口仍按现有规则过滤,不会制造无效端口项
- 页面和控制逻辑名称在界面提交前统一去除首尾空白;服务层继续负责空名称、长度和唯一性校验
- 真机每次完整 PLC 轮询成功后,复制梯形图引用的 M/D 到独立临时虚拟仓库,再复用离线扫描规则计算轨迹
- 本地线圈、MOVE、ADD、SUB 只修改本轮临时仓库;前面网络的临时结果可供本轮后续网络使用,下一轮重新从 PLC 最新缓存开始
- 真机轨迹明确标记为“PLC 缓存 · 本地推算轨迹”,不读取、生成、下载或修改 PLC 内部程序和内部轨迹
- 真机梯形图区显示只读边界提示:本地输出不写入 PLC 程序或 M/D,同时说明 HMI 和自由监控仍可写 PLC
- 本地推算失败或 PLC 断线/通信故障时停止推算并退出真机运行;推算故障详情在退出后保留,下一次启动重新清理
- Float32 工程 JSON 固定保存
dataType: "int16" 或 "float32";缺少字段直接拒绝加载,不增加旧结构兼容分支
- 离线仿真启动前复制编辑态确认的初始 M/D 快照,停止或返回编辑态时恢复初始快照;初始值只存在进程内,不写工程 JSON
- 普通梯形图比较、MOVE、ADD、SUB 继续按 Int16;普通整数指令可以读取 Float32 占用字,但不能写入其任一 D
- 自由监控完全重复点拒绝,部分重叠允许但提示;Float32 批量地址步长为 2,并显示 D 起始~结束范围
- Float32 写入使用一次写两个连续保持寄存器,真机缓存等待轮询读回;Float32 轮询分块不会拆开两个连续字
最近验证
- 2026-08-26 将数据监控从停靠面板迁移为第三个编辑页签;Release 主程序重新执行 qmake 和
mingw32-make -j2 链接通过,Release All 套件和 git diff --check 通过
- 2026-08-25 执行
run_qt_tests.ps1 -Configuration Release -Suite All,12 个 Release 功能测试目标和性能测试全部通过
- 2026-08-25 执行
run_qt_tests.ps1 -Configuration Release -Suite Functional,包含命令输入测试的 12 个功能测试目标全部通过
- 2026-08-25 重新执行 qmake 和
mingw32-make -j2,Release 主程序 build/release/release/integrated_platform.exe 链接通过
- 2026-08-26 修复用户运行版未配置 PLC 切换真机的窗口生命周期问题,Release 主程序 qmake 和
mingw32-make -j2 编译通过,git diff --check 通过
- 2026-08-26 使用
json/motor_forward_reverse.json 重新生成 build/package/motor_forward_reverse_fixed,运行版启动后进程保持运行,确认补丁已编入用户运行版入口
- 2026-08-26 新增用户运行程序 exe 尾部工程封装,Release 主程序、封装回归测试和 Functional 套件通过;导出链路不再依赖
package_qt_app.ps1
- 2026-08-26 Release 主程序在独立
build/release-final 目录重新 qmake 和 mingw32-make -j2 链接通过;发布包复制到项目目录外后,工程封装 exe 实际启动并保持运行,确认不依赖源码目录
- 2026-08-26 删除
--runtime-project、旁路工程 JSON 和 qrc 资源入口;普通发布包脚本只构建编程器,新的发布包和工程封装 exe 均重新构建、启动验证通过
- 2026-08-25 修复用户运行程序导出资源错配:使用合法
1.0 工程夹具验证 qrc 指向 JSON、运行版 exe 启动不再出现 illegal value;Release 主程序构建、All 测试及普通/运行版打包均通过
- 2026-08-25 新增数据监控编辑页和离线初始值生命周期;Release Functional 测试、主程序 qmake/
mingw32-make -j2 和新增快照回归通过
- 2026-08-25 修复命令输入失焦、零长度连线黑点、删除后 Gap 复用和连续横线插入;Release Functional 测试及主程序构建通过
- 2026-08-25 修复双击空网格时补全列表提前弹出;现在仅在用户开始输入后显示补全,并移除未实现的 TON/CTU 提示;Release Functional 测试和主程序构建通过
- 2026-08-25 修复已有节点双击无法进入命令输入;新增条件/输出节点替换回归测试,Release Functional 测试、主程序构建和
git diff --check 通过
- 2026-08-25 修复梯形图整网删除误报断路、网络内部无法启动框选;新增批量网络删除原子性测试,Release Functional 测试、主程序构建和
git diff --check 通过
- 2026-08-25 新增 Float32 编解码、HMI 双字读写、D3999/D4000 边界、HMI 重叠、自由监控步长/重叠/读写和 Float32 轮询元数据测试;All 套件全部通过
application_settings_tests 覆盖首次创建与默认内容、完整加载、缺失和未知字段、重复字段、越界、非整数、版本不兼容、非法 UTF-8 及创建失败回退
- 新增离线初始值和监控写入回归测试:编辑态 M/D/Float32 写入进入初始仓库,仿真输出在停止和重启时被丢弃
- 领域和服务测试覆盖 HMI 页面/控件、报警、控制逻辑/网络动态上限与新建页面默认尺寸
- 工程管理测试覆盖调低页面上限后拒绝两页面工程,并确认当前工程状态保持不变
- 性能基准通过:代表性软件扫描约
0.203 ms,4001 个虚拟寄存器边界工作量约 0.0454 ms
- 重新执行 qmake 并完成 Release 主程序链接:
build/float32/release/integrated_platform.exe
- 新增真机测试覆盖:本地临时输出不改变 PLC 源仓库、同一轮后续网络可见、完整轮询只触发一次推算、断线/通信故障停止推算并返回编辑态、推算故障详情保留
- 使用已有
build/manual_plc_discovery_probe/release/manual_plc_discovery_probe.exe 在 COM3 / 9600 / 8E1 / 站号 1 完成一次真实 D0 探测,结果找到 PLC;本轮未重复执行真实 M/D 写入恢复流程
- 本轮未做完整真机运行轨迹人工验收:改动的本地推算路径只读取 PLC 缓存、输出只写临时仓库,不改变 PLC 通信写入;本轮 UI 命令输入改动同样未连接真实 PLC,交付前仍建议现场连接真实 PLC 确认轨迹随完整轮询刷新
待完成
- 本轮代码和文档已完成并提交;后续只需按现场计划继续做真实 PLC 验收
- 现场使用真实 PLC 做一次 Float32 真机验收:读取 D10/D11 原值,写入一个有限 Float32,确认一次双寄存器请求,轮询读回显示正确,恢复原值并再次读回确认
- 现场同时确认 HMI 写入仍正常、本地轨迹随每轮 PLC 缓存刷新、PLC 源 M/D 不被本地梯形图输出改变
下一会话起点
- 先运行
git status --short,确认工作区状态后再开始下一项改动
- 若继续改配置字段,同步更新默认文件内容、严格加载器、配置测试和
docs/用户使用/应用配置说明.md
- 提交前重新运行 Release 测试、主程序构建和
git diff --check
- 命令输入尚未做完整人工 UI 验收,交付前需在编辑器中双击已有触点、条件网格、横线、Gap 和输出槽,确认替换、输入框位置、补全、错误标红和连续光标移动