HTRI二次开发教程(11):板式换热器自动化——Xphe 案例模型与模块间数据传递
HTRI二次开发教程11板式换热器自动化——Xphe 案例模型与模块间数据传递版本与事实声明版本锚点当前Xchanger Suite 9.4官方 Xchanger Suite Educational 版含 Xace/Xist/Xphe 三模块。官方 Xphe 描述“Rate, simulate, and design plate-and-frame exchangers usinguser-defined plate types or plates selected from an internal manufacturers’ databank. Xphe contains aport maldistribution modelthat calculates the flow through each plate channel.”示例代码中所有标识符为占位符数值均为示例性建模不代表任何标准规定不对应任何真实装置。一句话结论Xphe 与 Xist 的数据模型差异集中在三点——板型来源用户自定义 vs 内部厂商库、端口分布模型计算每个板通道流量、通道几何板片波纹与板对数把管壳式的扫描脚本迁到板式关键不是改模块名而是按板式的变量层级裁剪扫描维度并利用官方的模块间数据传递能力在 Xist/Xace/Xphe 间复用案例数据。〇、本篇要解决的认知问题Q1Xphe 与 Xist 的数据模型差在哪里为什么脚本不能改个模块名就复用Q2Xphe 的板型从哪来内部厂商库与用户自定义对自动化意味着什么Q3端口分布模型port maldistribution model在案例里是什么取数时要不要取Q4官方的模块间数据传递是什么能力怎么用于跨模块工作流Q5板式扫描的变量该怎么裁剪避免维度爆炸一、机制解析1.1 Xphe 与 Xist 的数据模型差异官方组件页对两者的定位不同Xist管壳式“supports all standard TEMA exchanger types”几何维度是壳径/管径/管长/管间距/折流板/管程数/壳型等Xphe板式“using user-defined plate types or plates selected from an internal manufacturers’ databank”几何维度是板型、板片数、通道排列、端口尺寸等。为什么脚本不能改个模块名就复用两者的字段树结构不同——geometry.exchanger.shell_id在板式案例里不存在没有壳而板式特有的板对数number of plates板片波纹角在管壳式里也不存在。模块名的更换必须伴随数据模型的重建回到第 04 篇的数据字典方法。1.2 板型来源厂商库 vs 用户自定义官方明确 Xphe 可用用户自定义板型或从内部厂商板型库中选择板片。这对自动化的含义厂商库板型是预置对象你需要先枚举可用板型第 06 篇的测绘能力在此复用——枚举库节点再选择用户自定义板型是输入参数集合波纹几何、板片尺寸、材料等需要逐字段写入。经验法则优先用厂商库数据可靠、参数齐只在自家专有板型时才用自定义。自动化脚本应对两种来源都留路径一个选择器按名/按属性选库中板型、一个构造器写自定义板型参数。1.3 端口分布模型官方“Xphe contains a port maldistribution model that calculates the flow through each plate channel.” 这意味着 Xphe 的结果里有一类**“每个板通道的流量分布”**——它不属于 summary 标量而属于 detailed 剖面类。取数含义端口分布是多值分布每个通道一个值适合存成sectionport_distribution, parameterchannel_flow, position序号, value...的长表。它常被忽略但对板式换热器的流量分配均匀性判断很关键。1.4 模块间数据传递官方 Xist 页“As a module in Xchanger Suite,Xist lets you quickly transfer applicable case data to other components like Xvib or Xace.”Xace 页“Xace lets you quickly transfer applicable case data to other components like Xist or Xhpe.”Xphe 页“Xphe lets you quickly transfer applicable case data to other components like Xist or Xace.”能力解读官方描述的是一种在模块间传递适用案例数据的工作流——同一股流体/工况可以在不同模块间复用不必重复录入。对自动化正面价值跨模块方案比选同一工况用管壳式/板式/空冷分别评估可以共享输入边界传递的是适用数据applicable case data并非整个案例——不可适用字段不会传递因此跨模块脚本必须做字段级核对不能假定传了就全有。反直觉点很多人以为数据传递 案例复制。实际是适用子集的传递。跨模块工作流里核对传递后哪些字段为空是必须的一步见代码 11-2。1.5 板式扫描的变量裁剪板式几何维度多板型 板对数 通道数 端口全因子极易爆炸。裁剪策略先固定板型选定厂商库中一款只扫工况与板对数板对数取离散档位如 20/30/40 片不做连续扫描端口尺寸作为约束而非变量先满足可制造性报告只需overall_u / 两侧压降 / 端口分布均匀性三类目标。1.6 板式自动化的三条纪律纪律一模块即模型换模块要重建字段树。管壳式的壳径/管长/折流板在板式里根本不存在板式的板型/板对数/板片波纹在管壳式里也不存在。改个模块名复用脚本是板式自动化里最常见、代价最高的错误——第 04 篇的数据字典方法在这里必须重走一遍。纪律二厂商库板型先枚举、后选择不许自造名字。官方明确板型可来自内部厂商板型库。库里的板型是预置对象必须先枚举再按名选择自造一个板型名不会帮你创建板型只会让你拿到错误结果或直接失败。这条与铁律 1探测优先同源。纪律三端口分布要取、要存、要能算均匀性。端口分布模型算每个板通道的流量是板式流量分配均匀性的直接证据。只取 summary 标量、不取端口分布的板式自动化是不完整的——均匀性差往往是板式性能不达标的主因之一。一条经验法则板式的变量裁剪比变量扫描更重要。板片几何细碎波纹角、板片厚度、端口尺寸、通道排列若不做裁剪组合数会以不可思议的速度膨胀。先固定板型与端口尺寸可制造性约束只扫工况与板对数是工程上最务实的一条路。二、完整代码与逐行剖析代码 11-1Xphe 案例契约与变量裁剪# -*- coding: utf-8 -*- xphe_contract.py —— Xphe 板式案例契约板型来源 变量裁剪 用法python xphe_contract.py 输出xphe_contract.json 说明示例性建模不代表任何标准规定不对应任何真实装置。 importjsondefmake_contract(plate_source,selected_plateNone,custom_paramsNone):plate_source: vendor_db 用厂商库custom 用用户自定义板型。ifplate_sourcevendor_db:plate{source:vendor_db,selected_plate_name:selected_plate,# 先做枚举再填enum_field:板型枚举节点探测所得}elifplate_sourcecustom:plate{source:custom,params:custom_paramsor{}}else:raiseValueError(plate_source 必须是 vendor_db 或 custom)return{meta:{module:Xphe,mode:rating,template:xphe_template.htri,disclaimer:示例性建模不代表任何标准规定不对应任何真实装置,},plate:plate,# 变量裁剪板对数用离散档位不做连续扫描variables:{geometry.plates.number_of_plates:[20,30,40],# 离散档位process.shell_side_flow:[8.0,10.0,12.0],# kg/s},fixed:{geometry.connections.port_size:端口尺寸: 先满足可制造性,},targets:{outputs.summary.overall_u:{unit:W/(m2·K)},outputs.summary.dp_hot:{unit:kPa},outputs.summary.dp_cold:{unit:kPa},# 端口分布作为剖面类目标单独标记outputs.port_distribution.channel_flow:{unit:kg/s,kind:profile},},}defcheck(contract):probs[]ifcontract[plate][source]vendor_dband\notcontract[plate].get(selected_plate_name):probs.append(选用厂商库板型时selected_plate_name 不能为空须先枚举)forpath,valsincontract[variables].items():iflen(vals)5:probs.append(f{path}取值档位过多{len(vals)}易致维度爆炸)returnprobsif__name____main__:cmake_contract(vendor_db,selected_plate枚举后填板型名)probscheck(c)withopen(xphe_contract.json,w,encodingutf-8)asf:json.dump(c,f,ensure_asciiFalse,indent2)print(已写出 xphe_contract.json)ifprobs:print([校验问题])forpinprobs:print( - p)else:print([OK] 契约通过校验。)逐行剖析make_contract用plate_source分支把厂商库/自定义两条路显式建模不假设板型从哪来而是让契约声明来源脚本据此走枚举或构造。厂商库路径强制要求selected_plate_name非空先枚举、后选择——把库板型必须来自枚举结果做成校验规则铁律 1 的又一次落地。variables用离散档位20/30/40 片反直觉但关键——板对数连续扫描意义不大实际制造是整数板片离散档位既符合工程又不爆炸。targets里给端口分布加了kind: profile把标量目标与剖面目标分开标记指导第 09 篇的取数分流标量入宽表、剖面入长表。check检查档位数 5把 1.5 节的裁剪经验做成可执行护栏。端口尺寸放进fixed而非variables先满足可制造性再谈优化这是板式设计的经验法则。代码 11-2跨模块数据传递后的字段核对# -*- coding: utf-8 -*- xfer_check.py —— 模块间数据传递后的字段级核对 用法python xfer_check.py 【重要】标识符须替换为探测所得真实值。 要点官方描述的是传递适用案例数据applicable case data 不是整案例复制因此必须逐字段核对哪些没传过来。 fromdrive_caseimportsession PROGIDHTRIAutomationServer.ProgID本机枚举所得OP_LOAD打开案例的方法探测所得OP_XFER模块间数据传递的方法探测所得# 期望传递后应有的字段规范路径 - 真实标识符占位EXPECT{process.shell_side_inlet_T:真实标识符,process.shell_side_flow:真实标识符,process.duty:真实标识符,geometry.plates.number_of_plates:真实标识符,# 板式特有通常不来自 Xist}defprobe_present(case,ident):try:nodecaseforpartinident.split(.):nodegetattr(node,part)returnTrueexceptException:# noqa: BLE001returnFalsedefmain():src源案例路径如 Xist 案例dst目标案例路径如 Xphe 案例withsession(PROGID,300)as(app,_start):src_casegetattr(app,OP_LOAD)(src)dst_casegetattr(app,OP_LOAD)(dst)getattr(src_case,OP_XFER)(dst_case)# 触发传递形式以探测为准missing[]fornorm,identinEXPECT.items():ifinident:missing.append((norm,标识符未探测确认))continueifnotprobe_present(dst_case,ident):missing.append((norm,传递后缺失))print(跨模块传递核对结果)ifmissing:fornorm,whyinmissing:print(f [缺]{norm}:{why})print(提示适用数据才会传递板式特有字段通常需在目标案例单独设置。)else:print( [OK] 全部期望字段均存在。)if__name____main__:main()逐行剖析EXPECT里特意放了一个板式特有字段板对数预期它传递后缺失用来演示适用数据 ≠ 全部字段这一官方边界。probe_present用 try/except 判断字段是否存在跨模块传递后字段在不在是首要问题比值对不对更基础。未探测确认的标识符记为标识符未探测确认而非静默跳过核对脚本里未知本身就是要报出来的结果。打印提示明确板式特有字段通常需单独设置把 1.4 节的边界结论写进脚本输出。传递动作OP_XFER是占位符官方告诉我们可以传具体方法名要探测。三、常见报错与排查报错 3-1把 Xist 的扫描脚本直接换模块名跑板式报字段不存在。现象getattr抛属性不存在的错误。根因Xphe 数据模型与 Xist 不同没有壳有板对数/板型。解法重建数据字典第 04 篇方法按板式字段树重写字段路径模块名更换必须伴随数据模型重建。报错 3-2用厂商库板型但selected_plate_name为空。现象契约校验报错或运行失败。根因没先枚举库中板型就填了名字或没填。解法先按第 06 篇方法枚举板型库节点取真实板型名再填绝不自造板型名。报错 3-3跨模块传递后目标案例某些字段为空。现象传递成功但结果缺东西。根因官方传递的是applicable case data适用数据板式特有字段不会从管壳式传过来。解法用xfer_check.py逐字段核对对缺失的模块特有字段在目标案例单独设置。报错 3-4板式扫描案例数爆炸。现象矩阵巨大跑不完。根因板型 × 板对数 × 工况做全因子。解法先固定板型板对数取离散档位≤5 档端口尺寸作约束只对少数关键变量做组合。报错 3-5端口分布结果取不出来或取成单个标量。现象想取每个通道流量却只拿到一个数。根因端口分布是剖面类结果每通道一个值被当作标量读取。解法按kindprofile走剖面取数第 09 篇 detailed 处理法存成sectionport_distribution的长表。四、动手练习练习 1板式契约用代码 11-1 生成一份 Xphe 契约。判定xphe_contract.json存在plate.source为vendor_db或customvariables中每个变量档位数 ≤5。练习 2板型枚举对 Xphe 案例用第 06 篇的测绘方法枚举板型库节点。判定得到至少 1 个候选板型名把它填进契约的selected_plate_name后check通过。练习 3跨模块核对从 Xist 案例向 Xphe 案例做一次数据传递运行代码 11-2。判定输出中至少一项被标[缺]板式特有字段且你能解释为什么它是适用的边界。练习 4端口分布取数取一个案例的端口分布结果存成长表。判定长表sectionport_distribution、position覆盖所有板通道通道流量之和与总流量相对偏差 2%。五、小结与下一篇预告本篇把自动化从管壳式拓展到板式Xphe 的数据模型差异板型来源、端口分布、通道几何要求重建字段树而非复用管壳式脚本厂商库板型必须先枚举后选择端口分布是剖面类结果需专门取数官方模块间数据传递传的是适用数据子集跨模块工作流必须做字段级核对。变量裁剪上板对数用离散档位、端口尺寸作约束。第 12 篇《空冷器与振动Xace 与 Xvib》我们处理另外两个关键模块——空冷器 Xace厂商风机选型、流量/温度分布不均、冗余风扇 TT-27与严格振动分析 Xvib有限元、fluidelastic instability 与 vortex shedding、rho-V² 判据并给出空冷批量校核 振动联合取数的自动化骨架。本篇认知问题回显FAQQ1Xphe 与 Xist 的数据模型差在哪里脚本能直接复用吗AXist 是管壳式、几何维度为壳径/管径/管长/管间距/折流板/管程/壳型支持所有标准 TEMA 壳型Xphe 是板式、几何维度为板型/板对数/通道排列/端口尺寸且含端口分布模型。两者字段树不同geometry.exchanger.shell_id在板式里不存在。因此不能改个模块名就复用必须按第 04 篇方法重建数据字典与字段路径。Q2Xphe 的板型从哪来对自动化意味着什么A官方称 Xphe 使用user-defined plate types or plates selected from an internal manufacturers’ databank即用户自定义板型或从内部厂商板型库选择。对自动化厂商库板型需先枚举库节点再选择“先枚举后选择”用户自定义则逐字段写入参数经验法则是优先用厂商库仅专有板型才自定义。脚本应对两种来源都留路径。Q3端口分布模型是什么取数时要不要取A官方称 Xphe 含 port maldistribution model计算流经每个板通道的流量。它是剖面类结果每通道一个值而非 summary 标量取数时应按sectionport_distribution, parameterchannel_flow, position通道序号, value...存成长表并可用通道流量之和与总流量的偏差衡量分配均匀性。Q4官方的模块间数据传递是什么怎么用A官方称 Xist/Xace/Xphe 各自可把applicable case data适用案例数据传递给其它组件如 Xist→Xvib/Xace、Xace→Xist/Xhpe。它适合跨模块方案比选同工况用管壳式/板式/空冷分别评估时共享输入。但传的是适用子集而非整案例因此跨模块脚本必须做字段级核对模块特有字段如板式的板对数通常不会传过来需在目标案例单独设置。Q5板式扫描的变量该怎么裁剪A四条策略先固定板型选定厂商库一款只扫工况与板对数板对数取离散档位如 20/30/40 片不做连续扫描端口尺寸作为可制造性约束而非优化变量目标只取整体传热系数、两侧压降与端口分布均匀性三类。同时校验每个变量档位数 ≤5避免维度爆炸。