ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FRI 与 KG-TOWER 二次开发教程(08):KG-TOWER 数据面——输入输出、PRO/II 工具与报表取数

FRI 与 KG-TOWER 二次开发教程(08):KG-TOWER 数据面——输入输出、PRO/II 工具与报表取数 FRI 与 KG-TOWER 二次开发教程08KG-TOWER 数据面——输入输出、PRO/II 工具与报表取数版本与事实声明KG-TOWER 版本口径v5.4.x注册页 v5.4.62025-01-14requirements 页 v5.4.5以官方当前发布为准PRO/II 集成工具只适配官网当前下载的 KG-TOWER 版本官方原文。KG-TOWER 没有公开 API无 COM/REST/CLI/Python 接口官方页面也未公布案例文件扩展名与内部结构底账 U3/U4。本文一律不猜测、不编造。KG-TOWER 许可禁止修改、改动、翻译、反汇编、创建派生材料并禁止未经书面许可向 Koch-Glitsch 竞争对手分发软件输出底账 §3铁律 3。KG-TOWER 覆盖对象官方常规与高性能阀塔板、筛板常规与高性能散堆与规整填料PROFLUX®、FLEXIGRID® 严苛工况格栅填料DEMISTER® 除沫器。文中任何数值为示例性建模不代表任何标准规定不对应任何真实装置数据。一句话结论KG-TOWER 的数据面只有三条腿——界面动作rating/design/revamp产生的结果、唯一官方互操作通道 PRO/II→KG-TOWER 工具在 PRO/II 菜单启动选塔→看负荷→选级→启动 KG-TOWER→从 Output 下拉选 Export to KG-TOWER、以及报表/图形导出件因为官方未公布文件格式取数的正确姿势是在保存对话框里取证解析导出报表而不是猜扩展名或逆向文件。〇、本篇要解决的认知问题Q1KG-TOWER 界面的 rating、design、revamp 三种动作分别对应什么意图为什么数据面必须按意图区分Q2PRO/II→KG-TOWER 工具到底做什么六个操作步骤是什么为什么要强调成对升级Q3KG-TOWER 的案例文件到底叫什么扩展名为什么这篇不给答案Q4报表导出件应该怎么解析才稳为什么版式漂移是必须防的Q5一个可复现的软件侧核算应该记录哪些运行清单信息一、机制解析1.1 三种动作 × 数据面先声明意图再谈字段KG-TOWER 官方定位是塔内件水力学核算hydraulic rating软件用于assist you in the specification of mass transfer equipment协助你确定传质设备规格。第三方软件站把它的能力概括为design, rate, and troubleshoot trayed and packed columns设计、核算、排障。把这两句话对齐得到三种动作意图动作意图典型输入典型输出数据面差异rating核算几何已知求该几何在某工况下的水力学表现塔径、板间距/填料层高、内件型号、负荷、物性泛点率、压降、各限制项裕度几何为输入性能为输出design设计负荷与分离要求已知求合适几何负荷、物性、目标泛点率推荐塔径/内件方案几何为输出revamp改造现有塔在新负荷下的能力评估现有几何 新负荷能否达标的裕度、瓶颈项几何锁定负荷可变为什么这对你重要与第 01 篇讲的 HTRI rating/simulation/design 决定哪些字段可写完全同构——同一套界面字段在不同意图下可写性不同。你的数据契约必须带一个intent字段否则把 design 的约束当 rating 的输入写结果会被忽略或报错。1.2 唯一官方互操作通道PRO/II→KG-TOWER 工具的六步官方数字服务页与安装说明给出了这条通道的完整操作这是本系列能确认的唯一软件间集成路径① 在 PRO/II 菜单中启动 KG-TOWER 工具Launch the KG-TOWER utility from the PRO/II menu ② 选择塔Select the tower ③ 查看塔的液/气负荷View column liquid and vapor loads ④ 选定级做深入分析Select specific stages for in-depth analysis ⑤ 启动 KG-TOWER 应用做综合核算Launch the KG-TOWER application ⑥ 在 KG-TOWER 的 Output 下拉菜单选 Export to KG-TOWER 导出官方对该工具的价值描述是“消除手工转录数据的需要能在很短时间内做大量计算并消除数据传递错误的风险”并强调它用与 Koch-Glitsch 工程师相同的方法same methodologies对 Koch-Glitsch 塔板与填料做水力学评估。为什么必须成对升级官方两次写明该工具只适配官网当前下载的 KG-TOWER 版本。所以工具与 KG-TOWER 是一个版本对。这带来三个工程后果其一公司锁版本时整链一起锁其二升级前必须确认工具也有对应新版其三批处理脚本里要把工具版本 KG-TOWER 版本作为一个联合前置条件校验第 16 篇。1.3 文件面为什么这篇不给扩展名这是本系列最重要的诚实纪律示范。我们已经检索了官方页面没有任何一处公布 KG-TOWER 案例文件的扩展名或内部结构底账 U4。因此本文的做法是不猜。不写.kgt这类看起来很像的名字——那是编造。取证。让你在本机做一件 30 秒的事在 KG-TOWER 里另存为看保存对话框的文件类型过滤器与默认文件名——那才是权威答案。登记。把取证结果写进run_manifest.json的tool_state供团队共享。不解析二进制。案例文件既未公开格式许可又禁止创建派生材料——不去解析它。取数走导出报表或走 PRO/II 工具的数据流。取证清单在 KG-TOWER 界面里逐一确认并记录 ────────────────────────────────────────────── [ ] 另存为对话框文件类型过滤器显示什么扩展名 [ ] 默认文件名是什么 [ ] 打开对话框能否打开旧版本文件官方称 v5.4 可打开所有旧版文件 [ ] 导出报表/图形有哪些格式选项ExcelCSV图片 [ ] Output 下拉菜单里有没有 Export to KG-TOWERPRO/II 通道相关 ──────────────────────────────────────────────1.4 报表解析为什么版式漂移是头号敌人导出报表尤其 Excel/CSV是最可靠的取数通道但它的结构会随版本漂移列顺序变、表头名称改、多出单位行、合并单元格变多。因此解析器必须遵守三条纪律按键取数不按位置取数先定位表头行建立列名 → 列号映射再按列名取值而不是硬编码df.iloc[:, 3]。单位显式报表里常混排 mm 液柱、in H₂O/ft、kPa解析时必须把单位一并取出写进结果的units字段铁律 5/8。允许多表头候选同一含义的列在不同版本可能叫% Flood、Flooding %、Approach to Flood, %——维护一个别名表。经验法则报表解析器应当宁可少取、不可错取——取不到的字段标记为NA并写warnings绝不猜一个数填进去。1.5 运行清单软件侧核算的可复现凭证软件侧核算人工或半自动也必须留凭证。建议每批核算固化一份run_manifest.jsonrun_manifest.json软件侧 ├── tool_state : KG-TOWER 版本口径(v5.4.x)、PRO/II 工具版本、二者是否成对 ├── intent : rating / design / revamp ├── files : 案例文件名与扩展名本机取证所得非猜测 ├── reports : 导出报表文件名、格式、导出时间 ├── sources : 若结果与自建引擎对照记录关联式编号(E1..E13) ├── units : 报表内各量的单位集 └── license : 输出用途说明是否对外、是否涉竞品——对应许可红线 3最后一项license很关键KG-TOWER 许可禁止未经书面许可向 Koch-Glitsch 竞争对手分发软件输出。把输出用途作为数据的一部分等于把合规检查嵌进了流程第 16 篇详述。二、完整代码与逐行剖析代码 2-1通用报表解析骨架按列名取数 单位提取 别名表# -*- coding: utf-8 -*- parse_report.py —— 通用报表解析骨架CSV 版纯标准库 设计纪律按键取数列名映射不按位置取数单位随值一起取取不到标 NA 并告警。 importcsvimportrefromtypingimportDict,List,Optional# 同义列名别名表不同版本可能用不同表头ALIASES{flood_pct:[% Flood,Flooding %,Approach to Flood, %,泛点率],dP:[Pressure Drop,Total dP,压降],u_h:[Hole Velocity,孔气速],u_sup:[Superficial Velocity,表观气速],u_flood:[Flood Velocity,Flooding Velocity,泛点气速],}UNIT_PATre.compile(r\(([^)]*)\)\s*$)# 表头里的单位如 Pressure Drop (mm liquid)defdetect_header(rows:List[List[str]],must_have:List[str])-Optional[int]:在前若干行里找到包含目标列名的表头行返回行号fori,rowinenumerate(rows[:10]):low | .join(row).lower()ifany(k.lower()inlowforkinmust_have):returnireturnNonedefbuild_colmap(header:List[str])-Dict[str,int]:建立 规范键 - 列号 映射含单位提取colmap,units{},{}foridx,nameinenumerate(header):forcanon,altsinALIASES.items():ifany(a.lower()inname.lower()forainalts):colmap[canon]idx mUNIT_PAT.search(name)ifm:units[canon]m.group(1)breakreturncolmap,unitsdefparse_csv(path:str)-dict:withopen(path,newline,encodingutf-8)asf:rowslist(csv.reader(f))hdr_rowdetect_header(rows,[aforaltsinALIASES.values()forainalts])ifhdr_rowisNone:return{rows:[],warnings:[未找到可识别表头],units:{}}colmap,unitsbuild_colmap(rows[hdr_row])out,warns[],[]forrinrows[hdr_row1:]:ifnotany(c.strip()forcinr):continuerec{}forcanon,idxincolmap.items():try:rec[canon]float(r[idx].replace(,,).strip())except(ValueError,IndexError):rec[canon]None# 取不到就 NA绝不猜数missing[kfork,vinrec.items()ifvisNone]ifmissing:warns.append(f缺字段{missing}:{r})out.append(rec)return{rows:out,units:units,warnings:warns}if__name____main__:# 演示写一个报表式 CSV 再解析版式故意带单位与中文别名demostage,% Flood,Pressure Drop (mm liquid),Hole Velocity (m/s)\n1,77.0,255.1,25.5\n2,78.3,258.0,25.8\nwithopen(_demo_report.csv,w,encodingutf-8,newline)asf:f.write(demo)resparse_csv(_demo_report.csv)print(识别单位集:,res[units])fori,recinenumerate(res[rows],1):print(f第{i}条:,rec)print(告警:,res[warnings]or无)实测输出识别单位集: {dP: mm liquid, u_h: m/s} 第1条: {flood_pct: 77.0, dP: 255.1, u_h: 25.5} 第2条: {flood_pct: 78.3, dP: 258.0, u_h: 25.8} 告警: 无逐段剖析ALIASES是版本漂移的唯一防线它把同一含义的多种表头写法集中登记新增版本只要补一行别名。这一招比锁死列位置稳健一个数量级。UNIT_PAT用正则从表头里抽括号内单位示例里% Flood没有括号所以flood_pct不出现在units中——这是正常的泛点率本来就是无量纲。解析器不去硬塞一个单位正是不猜的体现。rec[canon] None而不是跳过该记录缺字段应显式可见进warnings而不是静默丢弃——静默丢弃会让某版本少了压降列这种问题潜伏很久。float(r[idx].replace(,, ))报表里的千分位逗号是常见坑尤其导出为本地化 Excel 时。反直觉提醒本例detect_header只扫前 10 行。真实报表常有标题行 公司抬头 日期行 单位行 表头行五六行铺垫把扫描范围改成 30 行往往比改解析逻辑更有效。代码 2-2运行清单生成与成对升级校验# -*- coding: utf-8 -*- manifest.py —— 软件侧运行清单 版本成对校验 importjson,datetimedefmake_manifest(kgtower_ver,proii_tool_ver,intent,files,reports,units,license_note):warn[]# 官方要求PRO/II 工具只适配官网当前 KG-TOWER 版本 → 主版本号须一致ifkgtower_ver.split(.)[:2]!proii_tool_ver.split(.)[:2]:warn.append(fKG-TOWER({kgtower_ver}) 与 PRO/II 工具({proii_tool_ver}) 主次版本不一致f官方要求工具只适配当前 KG-TOWER 版本请成对升级)ifintentnotin(rating,design,revamp):raiseValueError(intent 必须是 rating/design/revamp)mdict(tsdatetime.datetime.now().isoformat(timespecseconds),tool_statedict(kgtowerkgtower_ver,proii_toolproii_tool_ver),intentintent,filesfiles,reportsreports,unitsunits,licenselicense_note,warningswarn)returnmif__name____main__:mmake_manifest(5.4.6,5.4,rating,files[case_reported_as_saved_by_user.*],# 扩展名以本机保存对话框取证为准reports[report_01.csv],units{dP:mm liquid,u_h:m/s},license_note仅内部使用未向 Koch-Glitsch 竞争对手分发)print(json.dumps(m,ensure_asciiFalse,indent2))m2make_manifest(5.4.6,5.3,rating,[],[],{},内部)print(\n版本不一致校验告警:,m2[warnings])逐段剖析files里故意用case_reported_as_saved_by_user.*这种不含扩展名的占位这是官方未公布格式U4在数据结构上的落地——清单里记录文件名与取证来源而不是伪造一个扩展名。版本校验比较前两段5.4而不是全串因为注册页是5.4.6、工具页写5.4两者主次版本一致即为成对用全串比较会产生假告警。intent做白名单校验把意图提升为一等字段1.1 节的结论。license字段承载输出用途这是把许可红线 3 嵌进流程的最小实现。三、常见报错与排查报错 3-1PRO/II 导出的文件 KG-TOWER 读不了。现象工具导出后 KG-TOWER 打不开或提示版本不符。根因官方要求工具只适配官网当前下载的 KG-TOWER 版本工具与 KG-TOWER 需成对。解法核对两者主次版本号如 5.4把版本一致性做成批处理的前置门禁代码 2-2。报错 3-2按位置取数后换一版报表全错位。现象df.iloc[:,3]在旧版是压降、新版变成孔气速。根因按位置取数未建列名映射。解法改用build_colmap的键→列号映射 别名表并对关键列做取值范围合理性校验如泛点率应在 0~150 之间。报错 3-3报表里数字读成nan因为表头行没找到。现象所有字段 NA。根因报表前置了多行抬头表头行超出扫描范围。解法扩大detect_header扫描范围如 30 行或按包含 ≥2 个已知列名作为表头判据而不是包含任一个。报错 3-4把导出的结果直接发给了外部。现象合规问题。根因KG-TOWER 许可禁止未经书面许可把软件输出分发给 Koch-Glitsch 的竞争对手底账 §3。解法交付前核对接收方身份在run_manifest.json的license字段登记输出用途对外交付走人工审批闸门第 16 篇。报错 3-5想直接读案例文件拿几何参数省去手工录入。现象设计了解析案例文件二进制的方案。根因官方未公布格式U4且许可禁止反汇编与创建派生材料。解法放弃该方案。几何参数从公开产品手册、Perry 特性表E5或本人机录入获取软件输出只作对标不作解析对象。四、动手练习练习 1跑通解析运行代码 2-1。判定输出识别单位集含dP: mm liquid与u_h: m/s两条记录字段全为数值告警为无。练习 2别名扩展给ALIASES增加一条Total Pressure Drop作为压降别名并用一个含该表头的 CSV 验证。判定解析出的dP非 None并保留了括号内单位。练习 3成对校验运行代码 2-2。判定第一次输出的warnings为空第二次工具 5.3 vs KG-TOWER 5.4.6输出含请成对升级的告警。练习 4取证清单如果你本机装有 KG-TOWER完成 1.3 节的取证清单并把结果写入run_manifest.json若未安装则写出你会如何在保存对话框里取证的四步操作。判定四步齐全打开另存为 → 记录文件类型过滤器 → 记录默认文件名 → 打开对话框核验旧版兼容且明确未取证前不写扩展名。五、小结与下一篇预告本篇把 KG-TOWER 的数据面讲清了按意图区分数据流rating/design/revamp 决定字段可写性唯一官方互操作是 PRO/II→KG-TOWER 工具的六步操作且必须成对升级文件格式官方未公布所以取数靠取证 报表解析而不是猜扩展名报表解析要按键取数、单位随值、缺则标 NA并把许可合规输出用途写进运行清单。请记住本篇最想传递的态度面对闭源软件诚实比聪明重要——猜一个扩展名省下的 30 秒可能让你在半年后发现整批数据的来源都不可信。第 09 篇《FRI 数据资产怎么用》我们转向 FRI——讲清 DRP、两本 Design Handbook、4 ft/8 ft 塔实验数据体系的定位以及公开文献里 FRI 数据是如何被引用的Aspen 白皮书的 FRI 实验对照、Sulzer 公开文章引用 FRI 数据、规整填料 HETP 关联式的 FRI 基准并给出对照而不复刻的方法论。本篇认知问题回显FAQQ1KG-TOWER 的 rating、design、revamp 三种动作分别对应什么意图Arating核算是几何已知、求该几何在某工况下的水力学表现几何为输入、性能为输出design设计是负荷与分离要求已知、求合适几何几何为输出revamp改造是几何锁定、评估现有塔在新负荷下的能力与瓶颈项。三者对同一套界面字段的可写性不同因此数据契约中必须带intent字段。Q2PRO/II→KG-TOWER 工具做什么六步操作是什么为什么要成对升级A它把 PRO/II 中的塔水力学信息转换成 KG-TOWER 可读取的文件消除手工转录与数据传递错误。六步为在 PRO/II 菜单启动工具 → 选择塔 → 查看液/气负荷 → 选定级 → 启动 KG-TOWER 做综合核算 → 在 Output 下拉菜单选 “Export to KG-TOWER”。必须成对升级因为官方明确该工具只适配官网当前下载的 KG-TOWER 版本所以工具与 KG-TOWER 是一个版本对。Q3KG-TOWER 的案例文件扩展名是什么A本系列不给答案因为官方公开页面未公布其案例文件扩展名或内部结构。正确做法是取证在 KG-TOWER 里另存为观察保存对话框的文件类型过滤器与默认文件名把结果登记进运行清单同时不解析该文件官方未公布格式且许可禁止反汇编与创建派生材料。编造一个看起来很对的扩展名会让整批数据的来源都不可信。Q4报表导出件怎么解析才稳为什么版式漂移是头号敌人A三条纪律按键取数先定位表头行、建立列名→列号映射而非硬编码列位置、单位随值取出并写入结果的 units 字段、维护同义列名别名表如 % Flood / Flooding % / Approach to Flood, %。版式漂移是头号敌人因为列顺序、表头名、单位行、合并单元格都会随版本变化按位置取数会直接错位。Q5软件侧核算应记录哪些运行清单信息A至少七项tool_stateKG-TOWER 版本口径与 PRO/II 工具版本、是否成对、intentrating/design/revamp、files案例文件名与扩展名须本机取证所得、reports导出报表文件名/格式/时间、sources若与自建引擎对照记录关联式编号、units报表内各量单位集、license输出用途说明对应许可中不向竞品分发输出的红线。
返回列表