88 lines
13 KiB
Markdown
88 lines
13 KiB
Markdown
# 更新日志 — 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 生成中保持含义。前端类型检查与生产构建通过,仅有既有主包体积警告;未运行真实求解器测试,未修改后端。
|