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

10 KiB
Raw Permalink Blame History

组件连接守恒扩展排查

结论与范围

本次只排查,未修改生产代码。核对现有 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 个用例按成功生成的探针结果统计,不将工具链异常计为组件方程问题。原模型文件和此前工作区改动均保留。