Files
SystemSimulationApp/docs/update-log/更新日志-2026-09-13.md
T

88 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 更新日志 — 2026-09-13
## 摩擦与管路功能补齐及 Amesim 实测验证
- 补齐 MECMAS21 静摩擦保持、高级低速保持和 Stribeck 过渡,协调理想限位与摩擦的优先关系;弹性限位执行检查要求刚度与阻尼为正。
- LSTP00A 数值刚度要求大于零,几何模式允许剪切模量为零;PNL0001/2 取消多方指数的 2.0 上限;PNL0003 两半使用各自温度计算换热。
- 新建 13 个 Amesim/平台对照算例,均完成 3 秒;机械与三管路两个联合系统另经平台 JSON→XML→后端入口验证。34 项相关自动测试通过;旧八路固定状态雅可比夹具仍有输入摘要不匹配,已单列记录。
- 本轮保留默认重力和大气压,未增加可调环境组件。未调整雅可比算法及此前单列的积分停滞处理。详情、曲线和可导入模型见 [功能验证报告](../other/Amesim摩擦与管路功能补齐验证-2026-09-13.md)。
下方“静摩擦尚未实现”的记录描述本日较早版本,现由本节功能补齐取代。
## Amesim 元件语义与 GCC 启动恢复
- 修复 UD00 外部循环枚举转换、非循环末值保持及终点通知;当前四路、八路 corrected JSON 各改两个循环参数,保存时长仍为 10 秒。
- 补全 LSTP00A 几何刚度、MECMAS21 倾角重力/指数限位阻尼/恢复碰撞中的摩擦选择,PNL0001/2/3 多方模式,以及 PNCH012 相连活塞容积的初始化。
- 静摩擦保持/高级干摩擦尚未实现的配置改为执行时明确拒绝,补齐活动参数约束;冻结历史输入不改写。
- GCC 同类错误捕获到 Windows 原始错误 5,被驱动统一显示为“找不到文件”。正式构建增加仅针对启动故障的短间隔恢复、空版本检查与诊断保留;Windows 子进程环境独立设置,Linux 编译器配置及环境继续保留。未修改安全设置,也未宣称消除 Windows 内部拒绝访问的根源。
- 八路原求解器完成 50 秒,纯求解约 10.75 秒;四路完成 10 秒,约 0.89 秒。128 次并发预处理全部完成,其中一次瞬时失败自动恢复;连续 10 次完整启动自检通过。
详见 [元件语义报告](../other/Amesim元件语义核查与修复-2026-09-13.md) 与 [GCC 定位及恢复报告](../other/GCC偶发子进程启动失败定位与恢复-2026-09-13.md)。本部分未修改积分器和停滞处理,等待用户审阅后继续。
## 后端异步自检与仿真控制台提示
后端启动后,编辑器/API 正常提供服务,后台每个应用生命周期启动一组最小原生程序的实际预处理、编译、链接、运行检查,失败后的重试规则见下文。测试程序求解一状态方程 `dy/dt=-y`,核对 `t=0.1` 的已知解及成功标记,覆盖正式 BDF 使用的 SUNDIALS 库。它不读取用户模型,也不命中或清理模型编译缓存。
新增 `GET /api/simulation/runtime-check`,返回检测标识、当前阶段、耗时、工具链信息及失败详情。仿真控制台显示阶段变化及最终结果;最终失败时显示阶段、命令、工作目录、退出码、错误类型和 stdout/stderr 尾部。后台不可达时自动重试;页面重新获得焦点时查询一次,可识别后端重启。同一状态不重复刷日志,消息不覆盖仿真进度。
保持 `SIMULATION_NATIVE_CC`/PATH、`SUNDIALS_ROOT` 和默认查找规则;未加入 Windows 专用 GCC 绝对路径或修改启动脚本。自检和正式构建共用平台选项、库选择及链接顺序。Windows 复制相同 DLL 并隐藏检查进程窗口;Linux 使用静态库及链接分组。自检临时目录放在应用数据目录所在文件系统,避免 Linux `/tmp` noexec 造成误报。正常结束、失败、取消后清理临时文件;超时/取消终止自检进程树。既有 `SIMULATIONAPP_WARMUP=off` 继续有效。
新增 Linux CI 作业,调用现有 `bat/setup-native-linux.sh` 后执行自检和原生缓存平台回归;Windows 原有完整回归会包含更新后的自检测试。未来系统相关改动应同时核查 Windows/Linux 分支,并分别记录实际运行的平台。
## 验证
- Windows 后端 20 项通过:自检 11 项、原生后端约束 2 项、跨平台缓存集成 1 项、结果传输 6 项。自检涵盖异步服务可用性、失败后编辑器可用性、重启恢复、禁用配置、缺失命令、非零退出码、超时和取消,以及 Windows/Linux 编译链接选项。
- 自检取消/超时终止子进程的补充修改后,11 项自检专项再次通过,用时 2.535 秒。
- Microsoft Edge 中 3 项界面用例通过:检测期间可编辑且消息去重;失败详情与重启恢复;后端初始不可用时重试恢复。前端 TypeScript 检查和生产构建通过。
- 已重启本机正式 8000 后端,实际观察到预处理、编译、链接、运行和完成阶段。检测期间组件目录接口均返回 HTTP 200;该次完整自检耗时 **1.3434 秒**。证据:`test/runtime-check-20260913/live-startup.json`。
- 未连接用户 Linux 服务器,也未取得本轮 Linux 实机运行结果;Linux 参数/库分支测试通过,新增 CI 作业尚未执行,不能据此声称已在服务器验收。
- 额外运行的既有 `native-result.spec.ts` 前两项在工程名断言处失败(期望 `demo-system`,实际导入文件名为 `native-result`),未进入仿真结果断言,不计入上述通过项。本次未修改该旧用例,结果传输另由 6 项真实原生/API 回归验证。
本次完成的是启动自检和故障定位能力,不自动修改系统环境,不将“检查通过”解释为所有模型都能运行,也未宣称历史偶发 GCC 故障已经得到唯一归因。
## 补充:启动自检自动重试与提示修正
针对首次启动偶发 `gcc.exe: error: CreateProcess: No such file or directory`、随后仿真又能运行的现象,增加有上限的自动重试。首次检测失败后最多再重试 5 轮(总计最多 6 次),每次间隔 0.5 秒;成功立即结束。等待使用可取消的后台事件,不阻塞编辑器或 API,关闭后端会中止等待及后续重试。保留原有 Windows/Linux 工具链探测与配置方式。
中间失败仅提示“未通过,正在重试”及轮次,控制台和后端均暂不输出详细异常;全部失败后才展示最后一次报错,后端记录各轮失败证据。API 仅在终态提供 `attemptHistory`,保存各轮阶段、耗时及失败详情;总耗时包含重试间隔,并增加开始/完成时间。提示改为“本次启动自检”,避免把历史检查结果理解为实时仿真状态。
自检 GET 只读取状态,不会重新编译。前端在检测结束后停止定时查询,切回页面仍会查询一次;后端不可达期间保留重连查询。
补充验证:
- Windows 后端自检专项 **13 项通过**(3.835 秒),覆盖首次成功、不同重试轮次成功、全部失败后停止、重试期间不泄漏报错详情及关闭时取消等待。
- Microsoft Edge 界面专项 **6 项通过**(26.2 秒),覆盖重试恢复、最终失败详情、编辑器可用性,以及终态后推进 31 秒仍无定时请求、切回页面只读取一次。
- 前端 TypeScript 检查及生产构建通过;构建仅提示既有主包体积超过 500 kB。
- 按实际 0.5 秒配置注入一次失败,随后调用真实 GCC 完成预处理、编译、链接和运行:第 2 次检测通过,总耗时 **1.863 秒**,等待 **0.501 秒**,未输出 ERROR 日志。
- 注入连续失败:第 6 次失败后结束,总耗时 **2.553 秒**,轮间间隔 **0.505–0.515 秒**,只输出一次最终 ERROR。上述注入验证证明重试行为,不代表复现或确定了历史 GCC 故障的根因。证据:`test/runtime-check-retry-20260913/verification.json`。
- 此次未重启用户正在使用的正式后端窗口;重试逻辑在后端下次启动时生效。Linux 分支沿用已覆盖的适配路径,本轮没有 Linux 实机运行结果。
## 工程存档规则统一、草稿恢复与初始视口优化
- 浏览器手动保存、自动保存与 JSON 导出共用 v2 编码:数值、数字字符串和表达式按所选单位解释。编辑器内存、求解输入和结果快照继续使用原有 SI 规则。旧 v1 存档仍可兼容读取,重新保存后升级,不再反复提示旧规则。
- 复用原有精确浮点往返保护;无法精确往返的参数改用 SI 单位保存。无法转换的未知组件、参数或单位会明确报错,保留当前编辑内容和此前有效存档,不再自动下载旧格式却提示导出成功。
- 启动时橙色恢复提示在无交互 5 秒后,用约 180 ms 淡出并移除;悬停或键盘聚焦时暂停计时。粘贴、连接提示出现时立即让位,操作结束后不重新弹出。淡出不会删除草稿。
- 顶部只保留“恢复草稿”操作,有待恢复草稿时可点,无草稿时置灰;点击直接恢复,不再弹出提示框。移除顶部保存状态文字与相关显示状态、样式。
- 待恢复草稿使用独立存储副本,不再暂停当前模型的自动保存。下次启动优先选择最近自动保存的非空工程,防止反复恢复更早的副本;保存副本失败则保留原数据并暂停自动保存。此机制是恢复检查点,不是多版本历史库。
- 自动保存仍在改动停稳 600 ms 后执行,不是每 30 秒才保存。仿真控制台每 30 秒汇总一次期间成功的非空工程自动保存,空闲不重复刷屏;失败及时报告,相同失败不反复刷屏。
- 工程名输入框从 150 px 加长到 240 px,保留窄屏适配。
- 导入 JSON、加载浏览器工程和恢复草稿共用初始适配流程。旧实现先绘制新节点、等待测量并延迟两帧才更新视口,因此会短暂显示旧比例。现在测量期间保留布局但隐藏图形,零动画适配完成后才显示;第一次可见的工程已处于适配窗口状态。普通拖入、滚轮缩放和页面往返仍保持原行为。
本次未修改求解器、后台仿真或启动自检功能。开发中保留工作区原有未提交改动。
验证结果:
- 最终版在 Windows / Microsoft Edge 下运行 **35 项回归全部通过**(1.9 分钟):存档与提示 11 项、首次可见视口逐帧测试 3 项、建模及结果视口 11 项、压力单位 6 项、输入合同 4 项。
- 连续三轮保存/加载及 JSON 导出比较,确认 bar 数值、表达式和摄氏温度保持含义,XML 仍得到 250000 Pa 与 293.15 K;新版加载及恢复不出现旧规则提示。未知参数保存失败时旧存档不被覆盖。
- 虚拟时钟验证 5 秒淡出、悬停/焦点暂停、直接恢复、粘贴提示优先,以及 30 秒日志汇总、空闲无重复、未处理旧草稿仍自动保存、刷新后恢复最新模型。
- 逐帧验证三种加载入口,包含相同节点 ID 的工程替换:所有可见帧都已适配,首帧与后续帧视口变换一致。大型工程缩放、端口与连线对齐、结果页与建模页往返回归通过。
- 前端两份 TypeScript 配置检查与生产构建通过;仍有既有主包超过 500 kB 的警告。测试采用组件目录/结果夹具,部分启动自检请求因本地 8000 后端未运行返回连接失败,不影响上述前端回归;本轮未进行真实求解性能测试。
- 中间验证曾受开发热更新及重叠测试启动影响,最终在停止源码改动后完整重跑通过。临时本机测试启动配置已移除。
## PNCH012 参数显示与 Amesim 对齐
- PNCH012 参数表不再显示 `vol1`~`vol4`(端口外部容积)和 `dvol1`~`dvol4`(端口容积变化率)。按仓库所附 Amesim 子模型定义,这八项属于端口输入,而非用户设置参数。
- 保留气体类型、死容积、换热系数、换热面积、外部温度和初始压力/温度等常规设置;显示规则仅针对 PNCH012,不影响其他元件。
- 本次仅修改前端显示,不更改端口连接计算、求解方程、参数默认值或工程数据格式。新元件的八项兼容字段仍默认 0,旧工程的非零值及表达式继续保留并参与原有计算,不因隐藏而清零。
- 验证:Windows / Edge 下参数表与 PNCH012 共 22 项用例,首轮 21 项通过;另 1 项仍预期前轮修改前的保存版本,更新为当前合同后,连同 PNCH012 两项专项复测 3 项全部通过。确认常规参数可见、八项端口输入不可见、默认值为 0,旧非零值及表达式在浏览器保存/加载、JSON 导出与 XML 生成中保持含义。前端类型检查与生产构建通过,仅有既有主包体积警告;未运行真实求解器测试,未修改后端。