Files
SystemSimulationApp/docs/other/组件连接守恒扩展排查-2026-09-14.md

122 lines
10 KiB
Markdown
Raw Permalink 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.
# 组件连接守恒扩展排查
## 结论与范围
本次只排查,未修改生产代码。核对现有 27 类注册模型的声明、紧凑和扩展两条 C 生成路径,完成 38 个原生方程探针,涉及 24 类运行元件;另外调用安装版 Amesim 的 PNRP17、PNCH012 原始子模型进行容积传递对照。
结论是:**原有焓流问题会影响六类储气元件,另确认一处活塞容积传递遗漏。没有发现其他独立流阻、动态管路或本次机械探针中存在同类守恒错误。**
“未发现”限定于下文代码路径与测试工况。此次不是对全部组件所有模式重新进行 Amesim 长时间曲线验收。两种介质定义没有独立物理端口;UD00 的信号边界问题已在上一份报告确认,本次未重测。数值探针采用氦气介质,不代表已经覆盖理想空气或任意介质组合。
## 1. 原节点焓流 bug 的实际影响范围
PN3NODE2/P4NODE2 参考口连接下列元件时,错误不只存在于节点本身,还涉及储气元件如何接收节点汇总后的能量:
| 储气元件 | 受影响的连接 | 小模型中整个封闭系统的能量收支残差 |
|---|---|---:|
| PNCH023 | 任一气动口接节点参考口 | −189.319 W |
| PNCH012 | 任一气动口接节点参考口 | −189.319 W |
| PNL0001 | 储气侧端口 2 接节点参考口 | −189.319 W |
| PNL0003 | 端口 1 或 2 的储气侧;本次探针测试端口 1 | −189.319 W |
| 临时库 Cylinder 气瓶 | 唯一气动口接节点参考口 | −189.254 W |
| 临时库 Tank 储罐 | 唯一气动口接节点参考口 | −189.254 W |
上述探针为固定容积、无环境换热、无机械做功的封闭系统。应有“所有储气元件的质量变化率之和为零、内部能量变化率之和为零”。实测质量收支平衡到约 1e-19 kg/s,能量却持续漏算。
这些不是六个互不相关的组件公式错误,而是它们共用 `app/simulation/native_codegen/extended.py:615` 的流向选焓逻辑。参考口净流出时,接收端采用自身焓覆盖节点信息。不同模型在这里会触发相同问题。
PNL0002 的两端是流量供给口,并非这种储气参考口,当前固定供需检查不允许它们与节点参考口直接组成上述连接。因此不能仅凭“它也有内部气体”就把 PNL0002 列为同一种直接触发对象;它仍可能受到系统其他位置错误结果的间接影响。
进一步验证:
- 节点参考口净流入的对照工况,能量残差约 1.59e-12 W。这解释了某些正常测试为什么没有暴露问题。
- 参考腔体净质量流约 −4.34e-19 kg/s,几乎为零时,整个系统仍漏算约 **3573.65 W**。只处理普通单向流动不够。
- 两个节点串联仍漏算约 **189.319 W**。未来修复不能只识别“节点直接连接某一个管腔”的固定模板。
- PNCH023、PNCH012 各支路**直接分别连接各自端口**,不经上述节点汇总时,同样的冷热气体同时进出测试能量残差为 0。这进一步排除了腔体基础能量方程本身漏掉多端口求和。
## 2. 新确认:PNRP17 经节点连接 PNCH012 时丢失容积和做功
### 原因
`extended.py:270` 只查找“气动口直接连到当前 PNCH012 的活塞”,再把这些活塞的容积、容积变化率加进气室。
当连接变成:
`PNRP17 → PN3NODE2/P4NODE2 支路口 → 节点参考口 → PNCH012`
活塞不再是气室的直接邻居,因此被漏掉。活塞本身仍计算扫掠容积和受压力,气室却只采用基础容积,并认为容积变化率为零。连 `−p × 容积变化率` 的气体做功项也随之消失。
### 数值验证
小模型设置:活塞直径 0.1 m、杆径 0、初始腔长 0.2 m、活塞与缸体相对速度 0.1 m/s;气室基础容积 10 L、绝对压力 200000 Pa、温度 400 K。
| 量 | 平台直接连接 | 平台经过三通 | 平台经过四通 | Amesim 原始子模型及节点公开求和规则 |
|---|---:|---:|---:|---:|
| 活塞扫掠容积 | 1.570796 L | 1.570796 L | 1.570796 L | 1.570796 L |
| 气室总容积 | 11.570796 L | **10 L** | **10 L** | 11.570796 L |
| 气室容积变化率 | 0.785398 L/s | **0** | **0** | 0.785398 L/s |
| 平台气体内部能量变化率 | −157.079633 W | **0** | **0** | 对应应计入 −p·dV/dt |
平台直接连接时,气体内部能量变化、机械动能变化和对环境做功之和约为 −1.42e-14 W。经过节点后,功率收支出现 **157.079633 W** 的缺口。
本次 Amesim 对照不是另搭三份完整图纸运行,而是在生成程序的隔离副本中调用已安装的 PNRP17、PNCH012 原始子模型,并按 PN3NODE2/P4NODE2 的公开容积求和宏分别传递输入。三种路径都得到 11.570796 L,温度变化率 −18.109354 K/s、压力变化率 −22635.528 Pa/s。原始子模型接口与公开规则支持容积经节点传递,平台的遗漏不是 Amesim 也采用的限制。
参考文件:
- `F:/AMESim2404/Amesim/libpcd/submodels/PNRP17.c`:输出扫掠容积和容积变化率。
- `F:/AMESim2404/Amesim/libpn/submodels/PN3NODE2.c`、`P4NODE2.c`:分别汇总支路体积与体积变化率。
- `F:/AMESim2404/Amesim/libpcd/submodels/PNCH012.c`:采用外部体积及变化率计算储气状态。
这是与焓流遗漏不同的一条缺陷,涉及 **PNRP17—节点—PNCH012** 整条连接路径。修复需要沿已声明的容积传递关系汇总贡献,同时防止漏算、重复计入和无来源的环路。
## 3. 本次没有发现同类错误的部分
| 元件/路径 | 检查内容 | 结果与限制 |
|---|---|---|
| PNOR001、PNVO001 固定开度/信号开度 | 两储气腔之间正向、反向流动 | 所有质量、能量收支残差为 0;普通单通道的流向选焓成立 |
| PNL00R、临时库 Pipe、Orifice | 正向、反向流动 | 所有质量、能量收支残差为 0;不证明流阻公式与 Amesim 完全相同 |
| PNL0001、PNL0002、PNL0003 | 独立进出、两种压差方向,换热模式 | 连同相邻气室的质量、能量守恒;未把多方过程当作绝热内部能量方程检查 |
| PNL0001/2/3 环境换热 | 设置非零换热系数,核对内部能量总变化与外部热量 | 去除应有热量后,残差不超过约 1.31e-11 W |
| PNL0003 内部连接 | 两半管腔之间质量流、能量流 | 内部交换在两半方程中符号相反,合计抵消 |
| 临时库 Tee | 热冷支路同时进出 | 能量残差约 1.14e-12 W;它采用对称混合语义,与 Amesim 两种参考口节点不同 |
| PNPL01 | 封闭端 | 质量流为零,不产生气体对流能量流;在上述用例中作为封口参与验证 |
| PNRP17 直接连接 PNCH012 | 气体膨胀、受压力、机械动能与环境做功 | 收支平衡;缺陷在经过节点后的传递路径 |
| LMECHN1、MECMAS21、FORC、F000 | 四质量刚性连接、外力输入 | 节点力和约 8.88e-16 N;动能变化率与外部输入同为 90 W |
| LSTP00A 与质量块 | 接触压缩及阻尼耗散 | 动能变化 −0.599980 W、弹性势能变化 +0.15 W、耗散 +0.449980 W,收支残差为 0 |
独立流动元件的正反向测试共 18 个,全系统最大质量残差约 **3.23e-16 kg/s**,最大能量残差约 **2.31e-10 W**。这些残差对应几百至数千瓦的流动能量量级,与已确认的百瓦、千瓦漏算明显不同。
机械摩擦、恢复系数限位、多方模式等没有在本次逐个重新运行完整 Amesim 工况。其特殊过程可能有耗散或隐含热交换,不能要求仅气体内部能量或仅机械动能单独恒定。
之前确认的高温氦气物性分段遗漏、管流摩擦公式近似、UD00 时间边界缺陷仍然存在,它们属于另一类问题,本次没有修复,也不能因本次守恒测试通过就宣布消失。
## 4. 为什么现有检查会漏掉这些问题
1. `core/port_computation.py` 的供需契约包含 p、T、质量流、能量流,但主要检查双方是否声明了对应输入、输出,没有验证生成方程是否真的实现能量收支。
2. 容积、容积变化率出现在通用端口定义中,却没有纳入同一套供需契约的检查量,也没有形成通用的跨节点计算路径。
3. `systems/network.py:214` 的连接方程清单只收录相等和求和为零的变量。气体比焓的混合规则、容积的定向传递不会在这份清单中成为独立守恒项。它是声明清单,不是运行时数值守恒验收。
4. 因此,“端口供需检查通过”“质量流平衡”“C 和旧 Python 结果接近”,都不足以证明能量和做功正确。
## 5. 建议的修复范围
- 将带符号的质量流和能量流分别汇总并传递,修复所有合法参考口接收者及节点串联。
- 为容积、容积变化率建立实际生成路径,不能只搜索直接连接的活塞。
- 在测试中独立检查质量、气体能量、机械功和外部热量/环境功的收支;采用直接连接与经理想节点连接的对照。
- 保留普通单支路、动态管内部交换、临时库 Tee 的正确语义,避免对所有端口套用同一种混合规则。
上述是修复建议,本次没有实施。
## 6. 证据与复现
目录:`test/conservation-audit-20260914/`。
- `audit.py`:独立流阻、管路、节点接收者及活塞路径探针。
- `additional.py`:直接多端口气室、环境换热、机械力与功率探针。
- `edge_cases.py`:近零净流量和节点串联。
- `prepare_ame_volume.py`、`ame-volume/volume-routing.csv`:安装版 Amesim 子模型的容积路径对照。
- 每个用例的 `model.c`、`manifest.json`、`probe.json`:生成方程、变量映射、输入状态、导数和输出。
- `final-summary.json`、`catalog-inventory.json`:最终统计、逐类覆盖清单。
- `production-before.json` 与最终汇总:188 个生产文件开始、结束哈希一致,无本次生产代码改动。
诊断过程中两个首次尝试受本机编译/进程启动异常影响,重跑后均完成,保留于 `audit.log`、`retry.log`;最终 38 个用例按成功生成的探针结果统计,不将工具链异常计为组件方程问题。原模型文件和此前工作区改动均保留。