ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

第 05 篇|Aspen Plus 进阶与工程案例:收敛诊断与调试

第 05 篇|Aspen Plus 进阶与工程案例:收敛诊断与调试

第 05 篇|Aspen Plus 进阶与工程案例:收敛诊断与调试

版本声明块

  • 软件:aspenONE V15 版 Aspen Plus(Windows 64 位桌面版;截至 2026-10 公开渠道最新大版本为 V15)
  • 单位体系:示例以 METCBAR 为基线并逐处显式标注单位
  • 本文目标:把「流程不收敛就去点几次运行按钮」这个动作,升级为「看控制面板的 Err/Tol 与嵌套符号 → 定位到具体回路与变量 → 用方法矩阵与初值修复」
  • 事实来源:AspenTech 官方客户支持门户(esupport.aspentech.com)KB 文章 000056985 / 000077076、官方培训课程页(Process Flowsheet Convergence in Aspen Plus、Modeling and Optimizing Chemical Processes Using Aspen Plus)、公开镜像的 Aspen Plus 用户指南与高校课件;凡未获证实的内容一律标注「未验证 / 以本机界面为准」,并给出可自省的核对方法

一句话结论:Aspen Plus 的收敛诊断只需盯住三件事——控制面板里每个收敛块的Max Err/Tol(判据是它降到1.0 以下)、撕裂流(tear stream)被收敛的相对残差上界(默认容差 tolerance = 1e-4,其迹分量阈值 Trace 默认为 1e-6)、以及Results Summary / Run Status下的逐块状态;再配上前置符号>/>>/>>>所标识的回路嵌套层级,就能把「没收敛」定位成「哪一层回路、哪个变量、该换哪种方法」——而收敛之后必须立刻校验质量平衡与能量平衡,因为收敛 ≠ 算对(铁律 4)。

〇、本篇要解决的认知问题

前面几篇把物性方法、参数回归、物性诊断讲通了,你现在有能力给流程搭出一个「物性上站得住脚」的模型。可一旦流程里出现循环回路、设计规定(Design Spec)或优化目标,运行按钮按下去之后,屏幕就不再给你一个干脆的「已完成」。控制面板里滚动的是一行行像天书一样的消息,末尾是一个永远不归零的迭代计数。本篇围绕五个问题展开:

  1. 控制面板里那行> Loop $OLVER01 Method: WEGSTEIN Iteration 9 ... Max Err/Tol 0.18603E+1究竟在说什么?Err/Tol 到底是怎么定义的,降到多少才算收敛,为什么不是「迭代次数用完」就算失败?
  2. 撕裂流(tear stream)为什么会产生?Aspen Plus 用什么算法选它、我为什么可以手动指定、又为什么不该随手乱指定?给撕裂流填初值填的到底是哪几个量?
  3. 收敛块(Convergence block)有几种、什么时候必须自己建一个?系统自动生成的$OLVER01和用户建的C-1在结果、方法、嵌套顺序上有什么本质差别?
  4. 收敛方法Wegstein / Direct / Broyden / Newton / Secant各自的适用边界是什么,q上下界、Wait这些参数一动会发生什么,为什么会「越调越乱」?
  5. 报错到底在哪里看?Results Summary / Run Status与PER_ERROR是什么关系,从报错到原因的正确排查顺序是什么?(以及最后一个必须钉死的问题:收敛了就等于算对了吗?)

这五个问题对应三类真实故障:判据类(第 1 问,看不懂 Err/Tol 就没法判断到底进展如何)、结构类(第 2、3 问,回路与收敛方案本身选错了,怎么调参数都没用)、定位类(第 4、5 问,方法选错或报错看错地方,把时间浪费在错误的层)。它们的共同特征是:程序不崩、界面不红、流程能给出「结果」,但结论不可信。

一、机制解析

1.1 顺序模块法为什么必然产生撕裂流

Aspen Plus 的稳态求解默认走顺序模块法(Sequential Modular):它把流程切成若干单元操作块,按计算顺序依次求解,前一个块的出口物流直接当后一个块的入口。这个策略对开链流程好得惊人——一次从前向后扫过去就解完了。但只要流程图里出现回路(recycle),问题就来了:要算块 B,得先知道块 A 的出口;可 A 的入口又来自 B 的出口,鸡生蛋、蛋生鸡,顺序扫描没法自洽。

顺序模块法的标准解法是撕裂(tearing):在回路上「剪一刀」,假设某一股物流的组成、流量、压力、焓已经知道,把它当作一个临时进料(tear stream)代进去,顺序扫描直到剪口处的下游端,再把算出来的这股物流和当初假设的值比对;不一致就修正假设、重新扫,如此迭代直到剪口两端数值自洽——这就叫收敛。

进料 F │ v ┌────────┐ 出口物流 (未撕裂侧) │ 块 A │──────────────────────┐ └────────┘ │ ▲ v │ ✂ 撕裂点:假设此股物流的值 ┌────────┐ (撕裂流 tear stream) │ 块 B │<──────────────────────┘ └────────┘ │ v 产品 P 顺序扫描:F → A → B →(回到撕裂点比对)→ 不一致则修正假设 → 重扫

术语必须精确:撕裂流(tear stream)是被「假设」的那股内部物流,不是回收流的名字;收敛块(Convergence block)是负责反复修正撕裂流假设、直到自洽的那个迭代器。系统会根据流程拓扑自动找出「极大环状子系统」(Maximal Cyclical Subsystem,MCS,即可以放在一起收敛的一组块),再对每个 MCS 用Motard–Westerberg 方法自动生成一组撕裂流。这就是官方培训(Process Flowsheet Convergence in Aspen Plus)里讲的「自动撕裂与排序」的底层逻辑。

1.2 撕裂流的收敛变量与判据:N+2 个量与 1e-4

一个撕裂流要收敛的不是「流量」这一个数,而是官方课件明确列出的一组量:

  • 每一个组分的摩尔流率(N 个组分就是 N 个量);
  • 压力(1 个量);
  • 质量焓(1 个量)。

所以一个撕裂流的收敛变量总数是N + 2(N 为组分总数)。判据用的是相对残差:设某变量本轮计算值XcalX_{cal}Xcal​、上一轮假设值XassumedX_{assumed}Xassumed​,当所有 N+2 个变量都满足

∣Xcal−XassumedXassumed∣≤Tol \left|\frac{X_{cal}-X_{assumed}}{X_{assumed}}\right| \le \text{Tol}​Xassumed​Xcal​−Xassumed​​​≤Tol

时,撕裂流才算收敛。官方课件给出的默认Tol = 1e-4;另外还有一个迹分量阈值(Trace),用于把摩尔分数低于该值的组分排除在物料平衡收敛之外,其默认值 =Tol / 100 = 1e-6。

这里有一处极易混淆、必须讲清的区分:撕裂流的 Tol(1e-4)与每个单元块的内部收敛容差不是一回事。官方课件同时说明:块容差的默认值也是 1e-4,把它收紧到1e-6「往往能改善撕裂流收敛」;但块容差只能局部(在具体块的设定里)或全局针对闪蒸类简单模型(Setup / Simulation Options)修改,全局那一项不会改变 RadFrac 这类复杂块的容差。所以「把全局容差改小就能让塔更收敛」是错的——塔有塔自己的容差。

1.3 控制面板消息的正确读法

控制面板(Control Panel)里的每一行,都是一次收敛块执行的「体检记录」。官方课件给出两种标准格式,理解它们是全篇的核心技能:

> Loop $OLVER01 Method: WEGSTEIN Iteration 9 Converging tear streams: 3 4 5 vars not converged, Max Err/Tol 0.18603E+1 >> Loop C-2 Method: SECANT Iteration 2 Converging specs: H2RATE 1 vars not converged, Max Err/Tol 0.36525E+03

这一行里有六个信息位,逐个拆开:

信息位含义读它做什么
>/>>/>>>回路嵌套层级:>是最外层回路,>>表示嵌在某个回路里一层,>>>表示嵌两层判断「先收敛哪个、后收敛哪个」,嵌套错了会死循环
$OLVER01/C-2收敛块名。$OLVER开头是系统自动生成的,其余是用户自己建的决定「改方法」该去哪个块
Method: WEGSTEIN/SECANT该块用的收敛方法方法选错是「越调越乱」的常见根因
Iteration 9该块自身的迭代计数看是「迭代用满仍不降」还是「在收敛但慢」
Converging tear streams: 3 4/Converging specs: H2RATE这个块在收敛哪几股撕裂流或哪条设计规定精确定位到具体对象
Max Err/Tol 0.18603E+1本轮迭代里,所有未收敛变量中最大的那个 Err/Tol 值这是判断「还差多远」的唯一首要指标

关于最后一项,官方原话钉得很死:「Convergence is achieved when the value of Max Err/Tol becomes less than 1.0」——即Max Err/Tol < 1.0 就是收敛达成。上例里0.18603E+1就是1.86031.86031.8603,大于 1,说明还差得远(大约还差一半);而0.36525E+03 = 365.25说明那条设计规定偏离极大。请注意:Max Err/Tol 是「本轮最大相对残差 ÷ 容差」,它会随迭代上下跳动,不能看单点,要看趋势。官方课件推荐的判读方法是「Plots of error/tolerance vs. iteration-#」——把 Err/Tol 对迭代数画成图,单调下降说明思路对、只是需要更多迭代或更好初值;下不去甚至上翘说明结构或方法有问题,加迭代次数没用。

但「Max Err/Tol < 1.0」这个判据有一个前提,极易被忽略:Err/Tol 是「相对残差 ÷ 容差」,分母上的容差是可改的。如果把撕裂流的 Tol 从默认 1e-4 放宽到 1e-2,Max Err/Tol 会「人工」跌到 1.0 以下、界面显示收敛,可物料平衡的实际精度同步变差——这是**「改判据、不改解」的假收敛**,属于【铁律】级别的红线:收敛质量必须连同所用容差一起记录,只看是否小于 1.0 而不问容差取值,等于自欺。官方给出的方向恰好相反:把块容差从 1e-4收紧到 1e-6,反而能改善撕裂流收敛。因此判断一个块的收敛是否可信,至少要同时看三样东西——所用的 Tol 是多少、Max Err/Tol 的趋势是否单调下降、以及收敛后质量平衡的残差量级(与 1.9 节的结果校验清单配套使用)。

1.4 收敛方案的四个层级:自动到什么程度该收手

官方把「收敛指定」分成四级,逐级更灵活也更复杂。记住这张表,就记住了「什么时候该自己动手」:

层级做什么撕裂流设计规定方法何时用
Level 1全自动撕裂与排序(默认)系统按 MCS + Motard–Westerberg 自动选自动识别撕裂用 Wegstein,设计规定用 Secant大多数常规流程的起点
Level 2指定首选撕裂流(并给初值)用户点名,系统补齐其余同 Level 1同 Level 1自动撕裂选得不合理,或想给初值
Level 3自建收敛块,指定方法与对象用户指定用户指定可换 Broyden / Newton 等撕裂与设计规定强耦合、嵌套不合理
Level 4自定**(部分或完整)计算顺序**用户指定用户指定用户指定极少用,处理特殊的嵌套顺序

Level 1 有一个关键的默认行为必须记住:设计规定(Design Spec)的收敛回路被嵌套在撕裂流回路的内层(官方表述: design-spec convergence loops are nested inside the tear stream convergence loop)。这个默认在多数情况没问题,但当设计规定的操纵变量「主要靠外层回路决定」时,内层在外层里反复调整就是白费功夫——官方课件给了一个真实例子:两塔之间的中间回流(inter-reflux)流量被用来满足塔底产品的纯度规定,而该纯度主要由两塔之间的中间回流决定,不是由单塔塔顶采出决定;默认把设计规定嵌在塔回路内层时,规定块和撕裂块双双不收敛。解法是改设计规定嵌套位置(Convergence / Conv Options / Defaults / Sequencing设为 Outside),或用Conv Order把规定块提到外层。这就是「结构错了,调参数没用」的典型。

这条结构性错误的现场特征值得单独记住:它的表现是「两个块互相拖累、都收敛不了」——以>>开头的内层规定块,其 Max Err/Tol 降不下去,外层撕裂块也随之不降;而你换初值、调q、加迭代次数全都无效。这与「方法选错」的现场特征是可区分的:方法选错通常只表现为「某一个块慢、换上对的方法就好」。由此得到一条排查判据——如果一个高优先级的数值修复(换方法、加迭代)做过之后问题纹丝不动,就该把怀疑从「数值」转向「嵌套结构」,遵循先动结构、再动数值的顺序。这与官方收敛策略里「先查结构、后调数值」的思路是同一个道理。

1.5 收敛方法矩阵:五种方法各自的适用边界

官方课件把方法的适用性列得很清楚,下面整理成对照表(撕裂流侧与设计规定侧分开看):

方法类型适用于关键特性
Direct(逐次代入)撕裂流撕裂流最朴素:直接把算出来的值当作下一轮假设;收敛慢但极稳
Wegstein撕裂流(默认)撕裂流用割线加速外推;可用参数:加速因子q的上下界、首次加速前的直代次数Wait、两次加速间的直代步数、连续加速步数
Secant设计规定(默认)单条设计规定割线法(线性近似)+ 高阶增强;函数不连续/平坦/非单调时可自动切换到区间收缩或区间对分
Broyden撕裂流 + 设计规定一个或多个撕裂、多条设计规定、撕裂与规定同时收敛拟牛顿法,用近似的雅可比矩阵;当撕裂与规定强耦合、嵌套不现实时首选
Newton撕裂流 + 设计规定同上改进牛顿法(联立非线性方程组),支持变量边界与线搜索;当 Broyden 不奏效时用

对应的「适用性」官方速查:撕裂流用Wegstein(默认)/ Direct / Broyden / Newton;设计规定用Secant(默认)/ Broyden / Newton;撕裂流与设计规定一起收敛只用Broyden / Newton。

Wegstein 的参数值得单列一条经验法则:q是加速外推因子,官方给出的控制参数包括上下界与直代步数;q越靠近 1 外推越弱(退化为直代,稳但慢),越靠近 0 外推越强(快但可能震荡)。所以在「收敛慢但残差稳降」时,适度收紧q上下界让它更稳,往往比盲目加迭代有效;而「残差来回振」时,必须先把结构问题的嫌疑排除,再谈参数。这些参数都挂在Convergence / Conv Options / Methods页。

还有一条经验法则必须补上:方法的更换只在「同一套撕裂流集合与同一套嵌套结构」内部有效。如果换了方法仍然不收敛,说明问题多半不在方法,而在撕裂流的选法或初值——应先把「每个回路恰好一股撕裂流」与「选相对稳定的物流」两条落实,再谈方法。反过来,若某个撕裂流本身的相对残差就在容差附近反复徘徊,换个方法往往立竿见影。把这条顺序记住,就能避免「病急乱投医、把方法来回换几十遍」的时间浪费。

1.6 收敛块该自己建还是放任自动

Level 1 会自动生成$OLVER01、$OLVER02……它们本质上是系统替你建的收敛块:$OLVER01收敛撕裂流、$OLVER02收敛设计规定,名字里带$就是「系统生成」的标记。你自己在Convergence / Convergence下建的块(如C-1、C-2)才是 Level 3。两者的结果页完全一致——Summary(每个被收敛变量的最终状态、数值与 Err/Tol)、Tear History(每轮最大 Err/Tol 与误差最大变量的历史表,可画图)、Spec History(设计规定的操纵变量值与规定误差历史)。看系统块的结果:在Convergence / Object Manager里选中它、点Edit;看用户块的结果:在Data Browser左侧选Results。

什么时候该自己建块?官方课件的判据可以归纳为三条最佳实践:其一,想换数值方法(例如撕裂用 Broyden 换掉 Wegstein);其二,想让撕裂与设计规定同时收敛(一个块挂两个页签);其三,想手动控制嵌套顺序(Conv Order,先建者嵌套更深)。反之,能自动就别手动——官方明确说 Level 1 的自动排序「Often … satisfactory」。

还有一条容易踩的坑:撕裂流集合偏多或偏少都不好。官方原文说,如果你只指定了残缺的撕裂集合,Aspen Plus 会自动补全;如果你指定了冗余的集合(撕裂流给多了),它可能忽略其中一些,或找出一个低效的顺序。判别准则是一句极简口诀:「尽量让每一个可能的计算回路里恰好含一股撕裂流。」

1.7 报错在哪里看:Run Status 与 PER_ERROR

很多人找报错找错了地方。官方 KB 000056985 的原文把结构讲得很清楚:Aspen Plus 的错误消息存在一个叫PER_ERROR的文件夹里,挂在它所指向的对象下方。两条主要路径:

  • 整体仿真的消息:存在Results Summary / Run Status下的PER_ERROR集合里。
  • 收敛块自己的消息:存在该收敛块自己的Output段下,路径形如Tree.Data.Convergence.Convergence.Elements("C-1").Output.PER_ERROR.Elements。

配套的 KB 000077076 则给出Run-Status的文本形态,它按「对象类别」把消息分组播报,例如:

The following Unit Operation blocks were completed with warnings: B4 B2 The following Unit Operation blocks were completed with errors: B6 The following Convergence blocks were completed with warnings: C-1 C-2 The following messages were issued during Input Translation: ...

这四类信息的工程含义完全不同,绝不能混为一谈:单元告警=该块结果可用但要标注;单元错误=该块结果不可用;收敛块告警=循环类单元(如 RadFrac)的收敛质量存疑;输入翻译消息=你的输入被输入校验挡下了(往往伴随弹窗)。只读一句「整体状态」是拿不到这些区分的。

另外,控制面板的诊断消息级别(Diagnostic Message Level)是 0~8 级,默认Level 4。级别越高,写出的信息越多:Level 0 只列收敛块的终端错误,Level 3 起加上收敛块告警,Level 4 起加上简要诊断信息,Level 5 起列出每轮未收敛变量,Level 6 起列出每轮每一个变量,Level 7~8 是各算法专用的深挖诊断。排查疑难收敛时把级别临时提到 5 或 6,是标准动作;改回去也别忘——级别越高,控制面板与历史文件越啰嗦,大规模流程会明显变慢。诊断级别可全局设(Setup / Specifications / Diagnostics),也可局部设在具体块上;其中Simulation 管单元块的级别,Convergence 管收敛块的级别。

1.8 撕裂流初值策略

给撕裂流填初值,填的就是 1.2 节那 N+2 个量:进料的组成、总流量、温度/焓、压力。官方原文的指导是「Enter initial compositions and flow rates for the tear streams on Stream / Input / Specification sheets」——即在把撕裂流当作一股真正的进料去填写它的 Specification。合理解法有两条:

  • 靠过程知识:据物料衡算先估一个循环量级(例如按单程转化率倒推循环流量),比初值全填零靠谱得多。
  • 靠简化模型热启动:先用简单模型(如把 RadFrac 先换成 DSTWU)让流程转起来,把转出来的解回填给撕裂流,再切回严格模型。官方课件的收敛策略里明确写了这条:「Start with simple unit operation models. For example, converge the flowsheet with a DSTWU before switching to RadFrac.」

一条经验法则:优先选那股「相对稳定、变化不大」的物流当撕裂流(官方原文: select a tear stream that remains relatively constant)。原因是残差判据是相对值,撕裂一股本就平稳的物流,初值误差小、迭代残差也小;撕裂一股成分波动剧烈的物流,往往要更多迭代。

1.9 收敛 ≠ 算对(铁律落点)

到这一步必须把系列级铁律 4 钉死:收敛 ≠ 算对。Aspen Plus 的收敛判据只保证「撕裂点两端自洽、块内方程残差低于容差」,它不保证你输入的自由度、物性方法与装置设定在工程上正确。一个物性方法选错、单位混用、或者给塔规定了两条互相冲突的操作规格的模型,完全可以「收敛」到一个物理上荒谬的解。因此本篇的收尾动作不是「看到Converged就导出数据」,而是一套结果校验清单:

校验项方法通过标准
质量平衡闭合进料总质量/总摩尔流率 vs 所有产品之和残差在数值精度内(相对误差远小于 Tol)
能量平衡闭合各单元 Heat Duty 代数和 + 进出料焓差残差与容差同量级或更小
组分平衡闭合逐组分(尤其关键组分)进料 vs 产品之和关键组分不凭空出现/消失
工程常识温度/压力/组成/流量是否落在物理区间无负流量、无超临界意外、无「一级塔分馏原油」式谬误

二、完整操作与逐项剖析

2.1 首次诊断:把控制面板与结果页看穿

界面操作步骤:

  1. 运行流程后,点击工具栏的Run Control Panel按钮(或菜单Run / Control Panel),打开控制面板窗口。
  2. 从头向尾滚动,找出最后一条Loop开头的消息——那是阻塞收敛的那个收敛块。记下它的:嵌套符号、块名、方法、在收敛谁、以及Max Err/Tol。
  3. 若流程卡住,用Run / Load Results载入暂停时的结果;再进Data / Convergence / Convergence打开Convergence / Object Manager。
  4. 选中出问题的收敛块:系统块($OLVERxx)点Edit直接看结果页;用户块则在Data Browser左侧选Results。
  5. 分别打开Summary、Tear History、Spec History三张结果页。

关键设定表(结果页读什么):

结果页内容用途
Summary每个被收敛变量的最终收敛状态、数值、Err/Tol一眼看出「卡在哪一个变量」
Tear History每轮的最大 Err/Tol 与误差最大变量;可画 Err/Tol–迭代数曲线判断趋势:单调下降还是上翘
Spec History操纵变量值 + 设计规定误差随迭代的历史诊断设计规定的收敛行为

期望输出:Tear History画出来的Err/Tol 对迭代数曲线单调下降并穿过 1.0;Summary里每个变量的 Err/Tol 都< 1.0;控制面板末行不再刷出新的Loop消息,且状态栏给出「Results Available」。若Tear History曲线上翘或锯齿,直接跳到第三节按「根因」排查。

2.2 三种修复动作的界面路径

动作 A:换收敛方法(Level 3)。走Data / Convergence / Convergence,新建收敛块C-1,在Type处选方法(如Broyden);再到Tear Streams页签填要收敛的撕裂流 ID;若还想同时收敛设计规定,在Design Specs页签填 Design Spec 的 ID。想比较不同方法,就多建几个块分别试——这正是官方课件的 Workshop 内容。

动作 B:改首选撕裂流并给初值(Level 2)。在Convergence / Tear页指定希望被收敛的撕裂流;然后到那股物流的Stream / Input / Specification页,像填进料一样填组成、流量、温度、压力(即 N+2 个量)。注意别把它填成真正的进料——它只是初值。

动作 C:改嵌套顺序(Sequencing / Conv Order)。在Convergence / Conv Options / Defaults / Sequencing里把Design spec nesting设为Outside(让设计规定嵌到撕裂回路外层),或在Convergence / Conv Order / Specifications页手动排出顺序(先列者嵌套更深)。官方提示:用户嵌套设置优先于设计规定嵌套设置;而系统可能为了稳定性「不严格照排」。

2.3 诊断消息级别的临时调高

操作:Setup / Specifications / Diagnostics,把Convergence的消息级别从默认4调到5 或 6。级别 5 会列出每轮未收敛变量,级别 6 会列出每轮每一个变量的数值——排查「某个组分流量一直不降」这类问题时,这是决定性证据。期望输出:控制面板出现逐轮、逐变量的明细行,能直接看到一个或多个变量的相对残差始终不达标。排查完务必改回 4,否则大规模流程的运行时间和日志体积会显著上升。

三、常见报错与排查

下面五条覆盖「不收敛」的高频现场,每条按「现象 → 根因 → 解法」给。

1. 残差下不去、Max Err/Tol在某一水平线上下振荡,加迭代次数无效。

  • 现象:Tear History曲线是锯齿而非单调下降;把最大迭代数加大到几百次仍在同一量级跳动。
  • 根因:这是结构性问题,不是「迭代不够」。常见三种:撕裂流选得不合理(回路里含了多于一或零股撕裂流);设计规定嵌错了层(规定在内、其操纵变量却由外层回路决定);或流程本身有一条互相耦合的约束没有被同一策略收敛。
  • 解法:先查撕裂流的「每回路恰好一股」口诀;再用Sequencing把强耦合的规定与撕裂放到同一层或同时收敛(Level 3 建一个块同时挂Tear Streams与Design Specs两页,方法选Broyden);只有确认结构无误后才考虑收紧q让它更稳。

2. 报错信息里出现「单元错误」或「收敛块告警」,但整体状态仍显示可出结果。

  • 现象:Run Status播报...completed with errors: B6或...Convergence blocks were completed with warnings: C-1,界面却不红。
  • 根因:Run Status是按对象分类播报的,单元错误只说明那一个块的结果不可用,不等于整流程作废;收敛块告警说明循环类单元的收敛质量存疑。整体状态是粗粒度信号,掩盖了细粒度问题。
  • 解法:以Run Status的逐块文本为准。B6报错就去看B6的Output / PER_ERROR;C-1告警就去看C-1的收敛结果页与Output / PER_ERROR。凡是单元错误,该块结果一律不得进入结论。这条直接连着铁律 4:把「状态可出结果」当「结果可信」是典型的第二类错误。

3. 报错在控制面板一闪而过,找不到源头。

  • 现象:日志里出现*** SEVERE ERROR之类的字样(例如FORTRAN DIVIDE BY ZERO ENCOUNTERED.),但没给到具体的块。
  • 根因:控制面板是流式输出,早期消息被后期刷走;且默认诊断级别 4 只给简要信息,深挖细节没写出来。
  • 解法:打开Run Status与PER_ERROR集合(整体仿真在Results Summary / Run Status下),它按类别把消息归拢好了;再把Setup / Specifications / Diagnostics的级别临时抬到 6,重跑一次拿到逐轮明细。SEVERE ERROR属于高严重级,通常会中断相关块的计算,必须在解决后才继续。

4.Max Err/Tol单调下降但极慢,几十轮才降一个量级。

  • 现象:趋势对、方向对,就是慢;加大迭代次数最终能收敛,但代价高。
  • 根因:多为方法选择不当(强非理想体系用 Wegstein 直代加速不足)、初值离解太远、或块容差没设好。
  • 解法:按最佳实践逐条排查——先给撕裂流一个靠物料衡算估的初值(经验法则: 选相对稳定的物流当撕裂流);把撕裂方法从Wegstein换成Broyden;官方课件还给出了「块容差默认 1e-4,收紧到 1e-6 常能改善撕裂流收敛」这一招(注意它不改变 RadFrac 这类复杂块的容差);最后才是适度加大迭代上限。

5. 同一个模型,换台电脑或换台泵的规格后再跑,突然不收敛了。

  • 现象:完全相同的流程文件,参数微调后收敛行为判若两样。
  • 根因:不是数值方法问题,而是输入本身变得不可行或物性越界。官方收敛策略明确要求先做两件事:「确认各单元块行为符合预期」与「确认物性在整个操作区间内都算得对」。参数微调可能把某个块推到了物性无效区或超临界区。
  • 解法:先做可行性检查(温度/压力/组成是否落在物理区间),再查物性(关键体系的二元参数、是否外推出数据区间——连铁律 5与铁律 10);参考官方收敛策略的四连:从简单模型起(DSTWU → RadFrac)、给合理解初值、检查物性、检查输入拼写与单位。单位错配是「不报错但必错」的隐形杀手(铁律 2),每处数值都应显式标单位。

四、动手练习

练习 1:为一个含单回路 + 一条设计规定的流程,产出一张「三层判据对照表」。

做法:搭一个「反应器 → 闪蒸 → 一部分液相回流」的简单回路流程,再叠加一条设计规定(例如用回流比操纵塔顶纯度)。运行后采集三层信息:控制面板最后一条Loop消息(含嵌套符号与 Max Err/Tol)、该收敛块的Summary页(每个变量的 Err/Tol)、以及Results Summary / Run Status的逐块文本。
判定标准:产出一张表,含「收敛块、方法、嵌套层、Max Err/Tol、Summary 里各变量 Err/Tol、Run Status 逐块状态」六列;当流程收敛时,表内所有Err/Tol 必须< 1.0,且Run Status不得出现任何completed with errors。若出现「Max Err/Tol < 1.0 但 Run Status 有单元错误」,必须写下该块的 ID 并去它的Output / PER_ERROR里找原因——这正是练习的核心:收敛判据与报错判据是两套独立信号,必须同时看。

练习 2:用 Sequencing 修复一个「设计规定嵌错层」的失败案例。

做法:构造 1.4 节提到的双塔场景(塔间中间回流操纵某产品纯度),先保持默认嵌套(规定在内层),确认它不收敛;再把Convergence / Conv Options / Defaults / Sequencing的Design spec nesting设为Outside,或用Conv Order把规定块排到外层,重跑。
判定标准:产出一张对照表,含「嵌套位置、规定块最大迭代数、撕裂块最大迭代数、是否收敛、最终 Max Err/Tol」;Outside那一栏必须收敛且 Max Err/Tol < 1.0,而默认栏必须不收敛。若两栏结果相同,说明构造的耦合不够强,需让操纵变量更依赖外层回路后重做。另需补记一项:修复前后控制面板消息的嵌套符号变化(默认应为>>处于内层,修复后规定块应升到与撕裂块同级或其外层)。若符号没变而结果却变了,说明所谓「修复」其实是数值偶然,必须重做实验以确保结论稳定,否则这张对照表不能作为工程证据。

练习 3:按铁律 4 完成一次收敛后的平衡校验。

做法:对练习 1 的收敛结果,手工核对:进料总摩尔流率与所有产品之和的差(质量平衡);各单元 Heat Duty 代数和与进出料焓差的差(能量平衡);关键组分的进出料差(组分平衡)。
判定标准:产出一张三行的平衡校验表,每行给出「残差绝对值、残差相对值、是否在数值精度内」。任何一行相对残差显著大于撕裂流 Tol(1e-4),就必须判定该模型「收敛但不可用」,并指出最可能的输入错误(物性、单位或自由度)。若三行都通过,写出结论:「该模型的收敛是可信收敛」。

五、小结与下一篇预告

这一篇把「没收敛」从一句抱怨拆成了可定位的诊断。核心结论有四条:

第一,收敛的第一判据是 Max Err/Tol < 1.0,它是「本轮最大相对残差 ÷ 容差」,必须看趋势而不是单点;撕裂流的收敛变量是N+2 个(每个组分摩尔流率 + 压力 + 质量焓),默认容差1e-4,迹阈值1e-6。

第二,控制面板那六个信息位(嵌套符号、块名、方法、迭代数、收敛对象、Max Err/Tol)合起来才能定位问题;>/>>/>>>告诉你回路嵌套在哪一层,嵌套错了是最难靠调参数补救的结构性错误。

第三,收敛方案分四级,能自动(Level 1)就别手动;一旦手动,就要遵循「每个回路恰好一股撕裂流」的口诀,并在强耦合时用 Broyden/Newton 把撕裂与规定同时收敛。

第四,报错要看对地方:整体消息在Results Summary / Run Status下的PER_ERROR,收敛块消息在该块自己的Output / PER_ERROR;Run Status的逐块文本能区分「单元告警/单元错误/收敛块告警/输入翻译消息」,比一个整体状态码信息量大得多。

留下的问题是这块「被收敛的东西」本身:本篇所有诊断都围绕「撕裂流与设计规定」,而真实工程里最常不收敛、也最值得较真的,是那台精馏塔——它的每一级有自己的一组自由度,冷凝器与再沸器各占一个,剩下的「两个操作规定」到底怎么选、为什么某些组合根本不可解、收敛算法又该怎么配,这些不解决,塔的收敛问题会在本篇的方法层面反复出现却抓不到根。

下一篇:《第 06 篇|Aspen Plus 进阶与工程案例:精馏塔严格建模与 RadFrac 配置》——平衡级自由度计数、冷凝器/再沸器组合矩阵、两个操作规定的选择与禁配、压力剖面与进料 convention、side draw / pumparound / 三相等附加自由度,以及 Standard / Strongly Non-ideal Liquid / Petroleum-Wide-Boiling / Azeotropic / Cryogenic / Custom 六种收敛方案的适用边界。


本篇认知问题回显(FAQ)

Q1:Aspen Plus 控制面板里的 Err/Tol 是什么意思,降到多少才算收敛?

A:Err/Tol 是收敛变量「本轮相对残差 ÷ 指定容差」,控制面板显示的是本轮所有未收敛变量中最大的那个 Max Err/Tol;官方判据是它降到 1.0 以下即收敛,应画 Err/Tol–迭代数曲线看趋势而非单点。

Q2:Aspen Plus 的撕裂流为什么会产生,收敛时要同时满足哪些变量?

A:顺序模块法遇到循环回路时无法一次扫完,必须在回路上剪一刀假设某股物流值,该股即撕裂流;它要同时满足 N+2 个变量(每个组分摩尔流率、压力、质量焓)的相对残差 ≤ 默认容差 1e-4。

Q3:Aspen Plus 的收敛块什么时候该自己建,自动生成的 $OLVER 和用户建的 C-1 有何区别?

A:$OLVER 开头是系统自动生成的收敛块(撕裂用 Wegstein、设计规定用 Secant),用户建的 C-1 属 Level 3;当需要换数值方法、让撕裂与设计规定同时收敛、或手动控制嵌套顺序时才自建,否则能自动就别手动。

Q4:Aspen Plus 的 Wegstein、Broyden、Newton、Secant 各自该用在哪里?

A:撕裂流用 Wegstein(默认)/ Direct / Broyden / Newton,单条设计规定用 Secant(默认),多条规定或撕裂与规定一起收敛只用 Broyden / Newton;Wegstein 可用 q 上下界与 Wait 等参数调节加速强度。

Q5:Aspen Plus 报错信息存在哪里,从报错到原因该怎么排查?

A:整体消息存在 Results Summary / Run Status 下的 PER_ERROR 集合,收敛块消息存在该块自己的 Output / PER_ERROR 下;排查顺序是先看 Run Status 逐块文本区分告警与错误,再看撕裂流选择与嵌套结构,然后查物性与输入可行性和单位,最后才加减迭代或调方法——且收敛不等于算对,必须补做质量与能量平衡校验。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进