Aspen HYSYS 二次开发系列教程(1):能力地图与最小闭环——优化闭环五步的由来
版本声明块
- 软件:aspenONE V15(2025-05-13/14 发布;上一主版本 aspenONE V14.5,2024-11;未发现后续主版本的官方发布信息)
- 语言/环境:Python 3.x + pywin32(Windows,位数须与 64 位 HYSYS 一致——铁律 3);VBA 为官方一手对照路线
- 文档现实:公开可得的官方自动化手册是 Aspen HYSYS Customization Guide V7.3(2011-03)的第三方托管镜像;V8–V15 未发现公开的官方自动化手册更新版本,官方在线文档在 AspenTech Support Center 凭据之后
- 本文目标:画出三条技术路线的能力边界,并亲手跑通最小闭环、亲眼看一次真实报错
一句话结论:Aspen HYSYS 二次开发只有一条可走的主线——用 COM 自动化(HYSYS.Application与HYSYS.SimulationCase两个 ProgID)搭起"读流股→改参数→重算→取值→判优"的工艺优化闭环五步,再把这个闭环交给外层优化器反复迭代;Aspen Simulation Workbook(ASW)与 Event Scheduler 是官方优先的免编程路线,但它们解决不了"求使目标函数最小的操作点"这类迭代优化。
〇、本篇要解决的认知问题
- 三条路线(COM 自动化 / ASW / Event Scheduler)各自能做什么、明确做不到什么?选错要付什么代价?
- aspenONE V15 是什么时候发布的?写技术方案的版本栏到底该填什么?
- "工艺优化闭环五步"分别由谁负责、用对象模型里的什么成员实现,哪一步最容易出错?
- 官方有没有现成的"工艺优化"产品,还是必须自研外层优化器?
- 优化之前要不要先做敏感性分析——先圈变量还是先搭算法框架?
一、机制解析
1.1 版本与归属钉死(价值锚点:写错版本号会让整段选型讨论失去意义)
截至 2026 年 10 月,公开可确认的最新主版本是 aspenONE V15(2025-05-13/14 发布);上一主版本 aspenONE V14 的末位小版本为 V14.5(2024-11)。未找到任何官方发布的后续主版本信息——这两点必须写进技术方案的版本栏,因为一旦文档里写了一个并不存在的版本号,读者会去找那个版本。
1.2 三条路线的分工与天花板
| 路线 | 入口 | 能做什么 | 明确做不到 |
|---|---|---|---|
| COM 自动化 | ProgIDHYSYS.Application(Automation Server)、HYSYS.SimulationCase | 外部程序读写对象、触发求解、批量迭代 | 不跨平台;许可与部署受约束 |
| ASW(Aspen Simulation Workbook) | Excel 内配置化 | 单工况参数化、报表联动 | 多变量迭代寻优 |
| Event Scheduler | GUI 事件编辑器 | 动态事件序列(阀、泵动作时序) | 全局目标寻优、外部系统集成 |
判据:问题含"求使目标函数最小的操作点"时,只有 COM 自动化+外层优化器可表达——这是本篇闭环五步存在的根本原因。
1.3 闭环五步与对象模型成员映射
① 读流股 → MaterialStreamFlowsheetStreams(如 .Temperature.Value) ② 改参数 → Flowsheet.Operations.Item("Feed").<属性>.Value = x ③ 重算 → Run/求解触发(稳态与动态语义不同——第 12 篇陷阱) ④ 取值 → 求解成功后读输出属性(Run 完成≠收敛,铁律 6) ⑤ 判优 → 外层脚本比较目标并迭代(第 17 篇优化器)最容易出错的是第③④步:把"执行了 Run"当作"收敛了"——假阳性在自动化场景会写进报表(第 14 篇断言层)。
二、完整代码与逐行剖析
2.1 最小闭环验证(VBA,官方一手路线)
' 前提:Options→VBA→Enable VBA support(默认禁用——铁律 4) Sub MinimumLoop() Dim HysysApp As Object, HysysSim As Object Set HysysApp = CreateObject("HYSYS.Application") Set HysysSim = HysysApp.ActiveDocument Dim FeedStream As Object Set FeedStream = HysysSim.Flowsheet.Operations.Item("Feed") ' 以本机对象名为准 FeedStream.Temperature.Value = 25 ' ℃(unit set 口径——第 7 篇) FeedStream.Pressure.Value = 101.3 ' kPa ' ③ 重算 + ④ 取值:状态检查后读输出(铁律 6) Debug.Print FeedStream.Temperature.Value End Sub逐行要点:CreateObject("HYSYS.Application")走 ProgID 晚期绑定;ActiveDocument是 SimulationCase 入口——与HYSYS.SimulationCaseProgID 直连的差别在第 2 篇展开(铁律 2)。
2.2 pywin32 对照(社区事实标准)
importwin32com.client hysys_app=win32com.client.Dispatch("HYSYS.Application")# 位数须与 64 位 HYSYS 一致(铁律 3)hysys_app.Visible=Truesim_case=hysys_app.ActiveDocument feed=sim_case.Flowsheet.Operations.Item("Feed")# 未证实对象名以本机 dir() 自查为准(铁律 7)print("进料温度:",feed.Temperature.Value)2.3 亲眼看一次真实报错(本篇的"事实纪律"演示)
故意访问一个不存在的属性:feed.Fluxx.Value→ 报 “Object doesn’t support this property”。这就是铁律 7 的由来——未获官方背书的属性名一律标注"未证实",并用本机dir()/GetIDsOfNames 自查;本文所有示例数值标注为示例值,非官方工况数据。
三、常见报错与排查
- CreateObject/Dispatch 失败—— 根因:ProgID 未注册(许可或安装不完整)或 pywin32 位数不匹配(铁律 3)。解法:regedit 查 ProgID;换 64 位 Python。
- VBA 菜单不可用—— 现象:Tools→VBA 灰色。根因:VBA support 默认禁用(铁律 4)。解法:Options→VBA→Enable VBA support。
- 读到旧值—— 现象:输出与 GUI 不一致。根因:Run 未成功仍取结果(铁律 6)。解法:状态检查后再取值(第 14 篇断言层)。
- 稳态脚本跑在动态 case 上—— 现象:单元或属性不存在。根因:两模式可用对象集不同(第 12 篇)——"模式切换"属性名在公开检索零命中,不得写成事实;用结构指纹断言守卫。
四、动手练习
- 最小闭环复现:按 2.1/2.2 完成读→改→Run→取值→判优五步(判优用任意阈值)。判定标准:目标值与 GUI 一致(相对误差 < 1e-6);未收敛时脚本能给出 FAIL 而非旧值。
- 路线选择练习:同一问题(“使冷凝器负荷最小的回流比,约束纯度 ≥0.95”)分别用 ASW 和 COM 脚本尝试。判定标准:ASW 路径只能单点验证、COM 路径可迭代——写出两者天花板的机制差异(三要点:求根 vs 寻优、单变量 vs 多变量、免编程 vs 集成)。
- 思考题(无标准答案):优化前为什么先做敏感性分析?验证要点清单:① 圈变量与搭框架的顺序对评估成本的影响;② 响应非单调时外层优化器空转的例子;③ 给出"先 Sensitivity 再优化器"的判定线。
五、小结与下一篇预告
本篇钉死版本基线与三条路线分工,确立闭环五步骨架——它是全系列 19 篇的执行主线。下一篇逐层拆解 COM 对象模型:Application、SimulationCase、Flowsheet、Operations/Streams 四层链与两个 ProgID 的入口差异(铁律 2)。
本篇认知问题回显(FAQ)
Q1:Aspen HYSYS 二次开发的主线是什么?ASW 和 Event Scheduler 解决不了什么?
A:主线是 COM 自动化(ProgID HYSYS.Application 与 HYSYS.SimulationCase)搭起的闭环五步——读流股、改参数、重算、取值、判优;ASW 与 Event Scheduler 是免编程路线但解决不了"求使目标函数最小的操作点"这类迭代优化。
Q2:写 Aspen HYSYS 技术方案时版本栏应该填什么?
A:填 aspenONE V15(2025-05-13/14 发布;上一主版本 V14.5,2024-11)——截至 2026 年 10 月未发现官方发布的后续主版本信息;写不存在的版本号会让整段选型讨论失去意义。
Q3:工艺优化闭环五步分别用对象模型的什么成员实现?
A:读流股用 MaterialStreamFlowsheetStreams(如 .Temperature.Value),改参数用 Flowsheet.Operations.Item(…) 的属性写入,重算触发 Run,取值在求解成功后读输出属性,判优由外层脚本比较目标并迭代——最易错的是把"执行了 Run"当作"收敛了"。
Q4:官方有没有现成的 HYSYS 工艺优化产品?
A:没有面向"全局寻优操作点"的官方产品——官方工具层到单工况参数化为止;迭代寻优必须由外层优化器通过 COM 自动化反复执行闭环五步实现。
Q5:pywin32 调用 Aspen HYSYS 前必须满足什么条件?
A:ProgID 须在注册表有有效条目(安装+许可完整才会注册),且 pywin32 所在 Python 位数必须与 64 位 HYSYS 一致——否则 CreateObject/Dispatch 直接失败。