将该值转换到另一套单位
你可以用 ValueForUnit 属性按指定单位获取数值。
ValueForUnit 接受两个参数:想要的单位表行号(物理量)和单位表列号(单位符号)。
单位换算示例 同时读取模块 B3 的压力:
-
当前显示单位(psia)
-
目标单位 atm(在单位表第 3 列)
Sub UnitsConversionExample(ByVal ihAPSim As Happ.IHapp)
' 本例同时获取显示单位(psia)与目标单位(atm)下的压力值
Dim ihPres As Happ.IHNode
Dim nRow As Long, nCol As Long
Dim strDisplayUnits As String, strConvertedUnits As String
On Error GoTo ErrorHandler
Set ihPres = ihAPSim.Tree.Data.Blocks.B3.Output.B_PRES
' 取得当前显示单位的行列号(psia)
nRow = ihPres.AttributeValue(Happ.HAPAttributeNumber.HAP_UNITROW)
nCol = ihPres.AttributeValue(Happ.HAPAttributeNumber.HAP_UNITCOL)
strDisplayUnits = UnitsString(ihAPSim, nRow, nCol)
' 换成目标单位列 atm(第 3 列)
nCol = 3
strConvertedUnits = UnitsString(ihAPSim, nRow, nCol)
MsgBox "Pressure in Display units: " & ihPres.Value & _
" " & strDisplayUnits & vbCrLf & _
"Pressure in Converted units: " & _
ihPres.ValueForUnit(nRow, nCol) & " " & strConvertedUnits, _
, "UnitsConversionExample"
Exit Sub
ErrorHandler:
MsgBox "UnitsConversionExample raised error " & Err.Description
End Sub
' 辅助:根据行列号返回单位符号
Public Function UnitsString(ByVal ihAPSim As Happ.IHapp, _
ByVal nRow As Long, ByVal nCol As Long)
On Error GoTo UnitsStringFailed
UnitsString = ihAPSim.Tree.Elements("Unit Table"). _
Elements(nRow - 1).Elements.Label(0, nCol - 1)
Exit Function
UnitsStringFailed:
UnitsString = ""
End Function
读取 B3 模块压力,同时显示当前单位(psia)与目标单位 atm
import win32com.client as win32
# ---------- 常量 ----------
HAP_UNITROW = 3 # 物理量行号
HAP_UNITCOL = 4 # 单位列号
# ---------- 辅助:根据行列号取单位符号 ----------
def units_string(ap, row, col):
"""
row, col 都是 1-based,访问集合时要减 1
"""
try:
return ap.Tree.Elements("Unit Table").Elements(row - 1).Elements.Label(0, col - 1)
except Exception:
return ""
# ---------- 主逻辑 ----------
def units_conversion_example(ap):
pres = ap.Tree.Data.Blocks.B3.Output.B_PRES # 压力节点
# 1. 当前显示单位
row = pres.AttributeValue(HAP_UNITROW)
col = pres.AttributeValue(HAP_UNITCOL)
cur_unit = units_string(ap, row, col)
cur_val = pres.Value
# 2. 目标单位 atm(已知在单位表第 3 列)
tgt_col = 3
tgt_unit = units_string(ap, row, tgt_col)
tgt_val = pres.ValueForUnit(row, tgt_col)
# 3. 结果
msg = (f"Pressure in display units : {cur_val} {cur_unit}\n"
f"Pressure in converted units: {tgt_val} {tgt_unit}")
print(msg) # 也可改用 tkinter.messagebox.showinfo
return msg
# ---------- 调用示例 ----------
if __name__ == "__main__":
ap = win32.Dispatch("AspenPlus.Document.34.0")
ap.InitNew2() # 或 GetObject 打开已有文件
units_conversion_example(ap)
ap.Quit()