双标识符变量访问:塔板组成分布
RadFrac 的液相组成分布是需要两个标识符的变量示例。 对于 pfdtut 模拟结果,变量 X 在 Variable Explorer 树形视图中的位置如图所示:

在变量 X 下方的第一层节点代表塔板,每个节点的 Name 属性即为塔板号;
第二层节点为各组分的组成,其 Name 属性为组分 ID,对应 Value 属性即为该塔板内该组分的液相摩尔分数。
以下代码片段演示如何从这一两层结构中取出组分组成: 使用两层嵌套循环依次遍历各塔板与各组分,最终访问到具体数值节点。
Public Sub CompProfExample(ByVal ihAPsim As Happ.IHapp)
' 本例获取带两个标识符的非标量变量值(液相组成分布)
Dim ihTrayNode As Happ.IHNode ' 塔板节点(第一维)
Dim ihXNode As Happ.IHNode ' 变量 X 节点
Dim ihCompNode As Happ.IHNode ' 组分节点(第二维)
Dim strOut As String
Dim nLines As Integer
On Error GoTo ErrorHandler
ihXNode = ihAPsim.Tree.Data.Blocks.B6.Output.Elements("X")
nLines = 0
strOut = ""
' 第一层循环:遍历各塔板
For Each ihTrayNode In ihXNode.Elements
' 第二层循环:遍历各组分
For Each ihCompNode In ihTrayNode.Elements
strOut = strOut & Chr(13) & ihTrayNode.Name & _
Chr(9) & ihCompNode.Name & Chr(9) & _
ihCompNode.Value
nLines = nLines + 1
' 每满 40 行弹一次窗,避免消息框过长
If nLines = 40 Then
MsgBox strOut, , "CompProfExample"
strOut = ""
nLines = 0
End If
Next ihCompNode
Next ihTrayNode
' 剩余不足 40 行也显示
If nLines > 0 Then
MsgBox strOut, , "CompProfExample"
End If
Exit Sub
ErrorHandler:
MsgBox "CompProfExample raised error " & Err.Description
End Sub
Python翻译
import win32com.client as win32
from tkinter import Tk, messagebox
def comp_prof_example(ih_ap_sim):
"""与 VB CompProfExample 完全一致:双标识符非标量变量"""
ih_x_node = ih_ap_sim.Tree.Data.Blocks.B6.Output.Elements("X") # 液相组成 X
str_out, n_lines = "", 0
for ih_tray_node in ih_x_node.Elements: # 第1维:塔板
for ih_comp_node in ih_tray_node.Elements: # 第2维:组分
str_out += f"\n{ih_tray_node.Name}\t{ih_comp_node.Name}\t{ih_comp_node.Value}"
n_lines += 1
if n_lines == 40: # 满40行弹窗
_show(str_out, "CompProfExample")
str_out, n_lines = "", 0
if n_lines > 0: # 剩余不足40行
_show(str_out, "CompProfExample")
def _show(text, title):
root = Tk()
root.withdraw()
messagebox.showinfo(title, text.strip())
root.destroy()
# ---------------- 调用入口 ----------------
if __name__ == "__main__":
ap = win32.Dispatch("AspenPlus.Document.34.0")
ap.InitNew2() # 或 GetObject 打开已有文件
comp_prof_example(ap)
ap.Quit()