Skip to content
Published on

在浏览器标签页里组装并运转一台发动机 — 拆解 Combustion Lab

分享
Authors

开篇 — 发动机在浏览器标签页里运转

Combustion Lab(combustionlab.net)最近在 Hacker News 上流传开来。它是一款无需安装、也无需登录,在一个浏览器标签页里就能组装并运转内燃机的模拟器。页面顶部这样介绍自己:"CRANK-ANGLE-RESOLVED ENGINE DYNAMICS · v2.0"。意思是按曲轴转角的粒度来计算发动机的动态特性。

先看组装。排列方式在直列(Inline)、V、水平对置(Boxer)、对置(Opposed)之间选择,再定下气缸数、缸径、行程、压缩比。点火方式在火花点火(奥托循环)和压燃(柴油)之间选,再调混合比 λ 和点火提前角。进气有自然吸气、涡轮增压、机械增压,还带增压值、spool RPM 和中冷器。气门机构则设定凸轮持续角、进气门关闭与排气门开启,以及红线转速。

发动机搭好了,就可以让它运转。一边实时调整转速(RPM)、节气门、动画速度,一边读取功率(kW/HP)和扭矩(N·m/LB-FT)。结果有五种模式可看:DYNO(测功曲线)、P–V(压力-体积线图)、P–θ(压力-曲轴转角)、ENERGY(能量流动)、CROSS-SECTION(剖面动画)。数据可以导出为 CSV,还有一个讲解概念的 LEARN MODE。

不过,这个工具给自己加的那句注脚反而令人印象深刻:"Trends are engineering-realistic; certify nothing with it." 意思是趋势在工程上是可信的,但别拿它去认证任何东西。这一句会成为本文反复回到的基准点。

四个冲程,一条闭合曲线

这个工具承载的物理,就是教科书里的四冲程循环。进气时空气和燃料进入,压缩时活塞往上推,燃烧(膨胀)中燃烧做功,再由排气排出。这四个阶段以曲轴转角 θ 为参量,一步一步地计算。

P–V 线图模式很好地展示了核心。把一个循环画在压力-体积平面上,就成了一条闭合回路,而这条回路所围的面积,正是这一循环的指示功(indicated work)。把压缩比调高、或者把点火时刻提前,就能亲眼看到回路如何鼓胀、如何倾斜。

教科书里理想的奥托循环,接近一个棱角分明的矩形。而真实曲线的那些棱角会被磨圆。这是因为燃烧不是发生在一瞬间,而是在一段有限的曲轴转角区间(Wiebe 所描绘的区间)内推进,且在这期间热量始终在向壁面泄漏(Woschni)。这个工具的价值,恰恰在于能把那种"变圆"当作参数来拿捏。

为什么要把这些正时参数暴露出来,也在这里显现出来。点火提前角的几度、气门开闭角度的几度,就会改变整条曲线。把压缩比、点火提前角、λ 往爆震一侧推,自燃便逼近,而工具会用 Livengood–Wu 积分来估算这点余量。这正是抽象的循环变成一个"一碰就有反应"的对象的时刻。

单区模型不是 CFD

这里有必要坦诚一点。Combustion Lab 是一个单区(single-zone)热力学模型。它把气缸内的混合气看作均匀的一整团,在每个曲轴转角上把压力和温度当成单一数值来处理,求解能量平衡。这就是通常所说的零维(0D)模型,是发动机热力学课程经典的出发点。

页面列出的四个模型,就是插进这一平衡里的经验公式。

  • Wiebe — 描绘燃烧随曲轴转角燃烧了多少(燃烧质量分数)的 S 形曲线。
  • Woschni — 向气缸壁散逸的对流换热。
  • Chen–Flynn — 摩擦损失(FMEP)。要从指示功里减去它,才能得到实际的制动扭矩。
  • Livengood–Wu — 估算爆震何时开始的积分。

这套组合给出的,是以循环为单位的能量收支,以及在改变缸径、行程、压缩比、增压、正时时那种可信的趋势。这些都是历经数十年打磨的相关式,所以答案的方向性相当可靠。

反过来,它捕捉不到的东西也很清楚。气缸内的流动(滚流、涡流)、火焰面的形状、燃油喷雾、详尽的排放化学、进排气声学,单区模型都无法表现。那属于多区模型或完整 CFD 的地盘,计算量要大上好几个数量级,塞不进一个浏览器标签页。所以才有那句"certify nothing"的注脚。它是培养直觉的教育工具,而不是用来认证设计的东西。能自己划下这条界线,反倒是一种美德。

在浏览器里运行实时物理,意味着什么

网站没有说明自己是用什么语言和框架做的(也看不到公开的 GitHub)。所以我们不去断定它的实现,只梳理一下在浏览器里实时运行这类东西时通常会是什么样子。

按曲轴转角分解,说到底就是用很小的角度步长对常微分方程做前向积分。四冲程一个循环是 720°,所以若以 0.5° 为间隔,每个气缸一个循环就需要 1,440 步。也就是说,屏幕上每显示一个循环,背后就有数千次算术运算在转。

这里通常会把物理步进和渲染循环分开。渲染用 requestAnimationFrame 来跑,而"动画速度"控件则暗示物理可以比真实时间更快或更慢地推进。若以固定步长积分,同样的输入就会给出同样的曲线,成为确定性的执行——而 CSV 导出要有意义,正需要这种可复现性。P–V、P–θ 图和剖面动画,用 2D 画布就能低成本地绘制。

WASM 占优势的地方,正是这个热点积分循环。把 Rust、C++、AssemblyScript 之类编译成 WebAssembly,就能得到比 JS 的 JIT 更可预测的吞吐量。不过,若只是把一台发动机跑到可交互的速度,纯 JS 往往也就够了。它到底选了哪一种无从确认,而两者都是合理的选择。

重要的是这种结构带来的体验。无需安装,用一个 URL 就能分享,在手机上也能打开,改动参数的瞬间结果就有反应。把压缩比调高,就能当场看到 P–V 回路变厚、爆震余量收窄。

结语 — 为什么这类工具很好

在 Combustion Lab 里我最喜欢的有两点。一是把研究生水平的主题——发动机热力学,做成了在一个标签页里就能上手把玩的东西;二是它对自己做不到的事情很诚实。交互式模拟器的教育力量,不来自精度,而来自"参数 → 结果"之间那种即时的反馈回路。改动一个数字、看曲线如何移动的那一刻,直觉就长出来了。

同时也有需要记住的。这是趋势而非真相,单区模型把一切与空间有关的东西都藏了起来。它不是用来挑选实际涡轮或修磨凸轮的工具,而是用来把握为什么那样的选择会把曲线弯成那样的工具。浏览器里的交互式模拟器之所以是一种被低估的教育手段,原因正在于这种即时性。

参考资料