# 当前开发交接 > 更新日期:2026-08-26。本文件只保留当前工作区、本轮验证和下一步。 ## 当前状态 - `当前窗口需求.md` 的多字数值扩展已完成:现有 `Int16/Float32` 链路已扩展为 `Int16/Int32/Float32/Float64` - HMI 数值显示/输入、编辑态数据监控、运行态自由监控、离线初始值、工程 JSON、地址冲突检查、PLC 轮询和 Modbus 写入均使用同一套类型与连续字规则 - 项目仍只生成和运行本地 HMI/梯形图仿真,不生成、编译或下载 PLC 程序;真机本地梯形图轨迹仍只读 PLC 缓存并在临时仓库推算 - 本轮没有实现 Int64、无符号数、二/八/十六进制、ASCII、POU 变量监控、信捷原版寄存器网格或自定义监控偏移 - TouchWin 没有原生 Double64 数值控件;本项目的 `Double (Float64)` HMI 是基于 PLC 连续四个 D 的增强能力 ## 类型与地址规则 | 类型 | 占用字数 | 起始地址 | 输入规则 | | --- | ---: | --- | --- | | `Int16` | 1 | `D0~D4000` | `-32768~32767` 的整数 | | `Int32` | 2 | `D0~D3999` | `-2147483648~2147483647` 的整数 | | `Float32` | 2 | `D0~D3999` | 有限 IEEE-754 单精度值 | | `Float64` | 4 | 偶数 `D0~D3996` | 有限 IEEE-754 双精度值 | - 多字值固定按信捷顺序保存:低地址是低 16 位,地址递增时依次保存更高的 16 位 - `Int32Codec`、`Float32Codec`、`Float64Codec` 和统一数值 variant 负责类型化读写;底层仓库仍只保存原始 16 位字 - Float32 显示 9 位有效数字,Double 显示 17 位有效数字;浮点输入使用 C locale 并支持科学计数法,NaN、Inf 和溢出值拒绝 - Double 奇数首地址、Int32/Float32 的 `D4000`、Double 的 `D3997` 及其他越界范围在领域层拒绝 ## HMI、监控与工程 - HMI 属性面板和运行输入支持四种 D 类型;Int16/Int32 使用整数输入,Float32/Double 使用科学计数法文本输入 - HMI 多字绑定按完整字范围检查:相同地址和相同类型允许重复绑定,部分重叠或同起始地址不同类型拒绝 - MOVE、ADD、SUB 仍是 16 位整数指令,禁止写入任何 Int32、Float32 或 Float64 HMI 值占用的 D - 编辑态数据监控和运行态自由监控继续共用 `RegisterMonitorService`;Int32/Float32 批量步长为 2,Double 步长为 4,类型列显示完整占用范围 - 多字离线初始值按连续字块完整捕获;停止仿真后恢复 Int32/Float32/Double 的全部占用字 - 监控表最多 64 行,PLC 上限按去重后的实际 16 位 M/D 地址计数,最多 256 个;候选监控集合会在提交前验证,失败不留下部分监控点 - 工程 JSON 仍是严格 `formatVersion: "2.0"`,`dataType` 新增 `int32` 和 `float64`;未知的 `int64` 等枚举直接拒绝 ## PLC 通信 - 仓库增加通用 `readWords/writeWords` 连续字接口;虚拟仓库完整校验后一次复制,PLC 仓库保留 Int16 单字通道并为 2~4 字值使用多字通道 - Int16 继续写一个 Holding Register;Int32、Float32 和 Double 分别把 2 个或 4 个连续字放在一次多寄存器请求中发送 - 轮询元数据从 Float32 起始地址泛化为连续 `RegisterWordRange`;每个读块最多 120 字,拆块边界不会切开 2 字或 4 字值 - 地址和多字范围在当前异步回复结束后一起切换;候选配置失败时运行模式和监控模型都恢复旧状态 - PLC 缓存仍只在真实轮询读回后更新,不以写请求受理代替设备确认 ## 最近验证 - 13 个 Release Functional 测试目标全量通过 - 新增回归覆盖 Int32 最小/最大值和负数、Float32 `20.0` 字序、Double `1.0` 字序、Double 偶数地址、NaN/Inf、JSON 往返、HMI 复制粘贴、多字冲突和 16 位梯形图写入保护 - 监控回归覆盖四类型批量步长、完整轮询地址、离线初始值捕获、停止仿真恢复、64 行与 256 实际地址上限的候选拒绝 - PLC 回归覆盖 Int16 单字路径、Int32/Double 一次多字回调、Double `D118~D121` 不跨 120 字边界、无法合法拆分的重叠范围拒绝和地址集合原子切换 - Qt Release 主程序已重新构建到 `build/release/release/integrated_platform.exe`,离屏启动 3 秒正常保持事件循环 - `git diff --check` 通过;工作区只有 `runtime_mode_service_tests.cpp` 的 CRLF/LF 转换提示,没有空白错误 - 当前 Windows 没有枚举到串口设备,无法使用 `COM3 / 9600 / 8E1 / 站号 1` 做真实 PLC 多寄存器写入,因此本轮没有伪造真机结果 ## 工作区与下一步 - 当前改动尚未提交 Git - 开始本轮前已有的 `docs/工程格式说明.md`、`docs/用户使用/数量边界确认方案.md` 和旧交接修改均已保留并增量合并,没有回退来源不明的改动 - 设备可用后在 PLC STOP 状态先读取一组连续 D 原值,分别验证 Int32、Float32、Double 的一次多寄存器写入与读回,再恢复全部原值并读回确认 - 人工打开 HMI 页面和数据监控,检查四类型下拉框、Double 偶数地址提示、长数值显示和不同系统缩放下的输入框布局