news 2026/11/2 15:47:39

PHAST-SAFETI二次开发教程(01):Phast™ 与 Safeti™ 全景——过程安全 QRA 的行业标配与二次开发三条通道

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHAST-SAFETI二次开发教程(01):Phast™ 与 Safeti™ 全景——过程安全 QRA 的行业标配与二次开发三条通道

PHAST-SAFETI二次开发教程(01):Phast™ 与 Safeti™ 全景——过程安全 QRA 的行业标配与二次开发三条通道

版本声明块

  • 工具与软件:Phast™ 与 Safeti™ 的版本主线为 9.x,其中 9.0 于 2023 年 12 月发布,9.1 增补了粉尘爆炸(Dust Explosions)等能力,知识中心另可见 9.3 相关的 GIS BETA 视频;历史锚点版本为 8.4、8.6、8.7 与 8.x,具体细节一律以官方发布说明为准。
  • 语言与环境:官方 Python 库 PyPWS 要求 Python 3.11 及以上;官方 API 客户端形态为 Excel、Python、.NET 与 TypeScript 四种。
  • 本文目标:用一篇文章建立 Phast™ 与 Safeti™ 的能力地图、二次开发的三条真实通道,以及全系列四阶段的学习路径。

一句话结论:Phast™ 负责后果分析(泄漏 Discharge、扩散 Dispersion、火灾/爆炸/毒性 Effects),Safeti™ 在同一界面内把后果与频率合成定量风险分析(LSIR、FN curve、PLL、IRPA 与 ALARP 判据);二次开发只有三条真实通道——桌面批量与 Excel 导入、官方 Phast API / Phast Web Services(含 Python 库 PyPWS)、以及 Phast Online 与 Phast CFD / KFX™ / EXSIM 生态,而 Safeti™ 侧的公开自动化接口目前未获官方证据,必须按"桌面操作加数据面自动化"的思路设计。

〇、本篇要解决的认知问题

开始之前,请带着这五个问题读完全篇——文末的 FAQ 会逐一自包含地回答,不依赖其他篇章。

  • Q1:Phast™ 与 Safeti™ 到底怎么分工?为什么它们总是被一起提起?
  • Q2:这套软件凭什么成为过程安全行业的标准工具?"四十年验证"对二次开发意味着什么?
  • Q3:二次开发的三条通道分别是什么?各自能做什么、需要什么前提条件?
  • Q4:官方可编程接口长什么样?为什么必须先确认"官方接口"再动手写第一行代码?
  • Q5:学完这个系列我能做什么?四阶段的学习路径如何安排?

一、机制解析

1.1 分工:一个回答"会发生什么",一个回答"风险有多大"

Phast™ 与 Safeti™ 出自同一厂商 DNV,二者使用同一套后果模型内核,但在工程角色上分工清晰:

维度Phast™Safeti™
核心问题会发生什么(后果)风险有多大(后果 × 频率)
典型输入物料、源项、气象、地面条件、点火假设前者全部 + 设备失效频率、点火概率、风向频率、受体位置
典型输出浓度等值线、火焰长度、池径、热辐射、闪火范围、超压与冲量、毒性剂量与致死率LSIR 等值线、Individual Risk、FN curve、PLL、IRPA,并据 ALARP 判据论证
结果视图2D 曲线、3D 视图、地图与 plot plan、表格、Word/Excel 报告风险等值线图、风险排序点贡献分解、社会风险曲线
典型使用者工艺安全工程师、设计院、EPCQRA 分析师、安全咨询团队、监管沟通团队

为什么这对你很重要:它直接决定二次开发的"目标函数"完全不同。Phast™ 侧的自动化目标是"把成百上千个场景的后果算出来并结构化落盘";Safeti™ 侧的自动化目标则是"把多组风险标准的验收结论批量比对出来"。前者有官方 API 支撑,后者目前以桌面操作与数据面复用为主——这两条路线的工法差异,贯穿整个系列。

1.2 为什么它是行业标配:验证历史即信用

Phast™ 与 Safeti™ 经历了四十余年的持续开发与实验验证,累计用户数以万计、服务组织数以千计,覆盖油气、炼化、LNG、氢、氨、CCS(碳捕集与封存)等场景。其物料库包含 2,000 种以上物料,物性来源为 DIPPR 数据库;另提供代表物料与用户自定义物料机制。

对二次开发而言,"验证历史"不是宣传语,而是一条工程约束:

  1. 结果可被第三方接受。你自动化产出的后果图,要能直接进入安全报告与许可论证;这要求你的脚本调用的是官方计算内核,而不是你自研的近似公式。
  2. 物性不可臆造。物料的热力学与物性行为由官方物料系统提供;自建物性参数(铁律 8)必须取自官方技术文档并标注来源。
  3. 能力边界要清楚。Phast™ 的核心链路由经验/唯象模型构成,高保真三维场景才走 CFD 扩展(Phast CFD、KFX™、EXSIM)——把两者混为一谈是最常见的论证错误。

1.3 三条通道:一次把路摸清

在动手之前,必须先把"你到底走哪条路"这件事定下来。二次开发的三条真实通道如下:

你的工程输入(工况表 / 流程模拟导出 / 数字孪生 / 设计数据) | +-----------------------+-----------------------+ | | | [通道 A] [通道 B] [通道 C] 桌面批量与 Excel 导入 官方 Phast API / Phast Online 与 CFD 生态 Phast(TM)/Safeti(TM) GUI Phast Web Services - 浏览器端筛选与应急 - Batch runner 队列 - Excel / Python / - Phast CFD(池火/射流火/ - Excel import 建研究 .NET / TypeScript 扩散) - Word/Excel 报告 - Python 库 PyPWS - KFX(TM) / EXSIM 高级 CFD - 风险排序点(RRP) - 托管端点 + 访问令牌 - Safeti 导入 asc 结果回灌 | | | 成果:研究文件与报表 成果:结构化结果对象 成果:高保真三维结果

三条通道的选型依据,可以压成一张决策表:

通道能做什么前提条件官方证据
A 桌面批量队列化跑多场景、Excel 导入快速建研究、出报告Phast™/Safeti™ 桌面许可官方 Phast/Safeti 9.0 更新文章;Knowledge Centre
B 官方 API脚本化逐场景计算、结果进结构化数据管道Phast API 访问令牌 + 网络可达托管端点https://phastwebservices.dnv.com/
C CFD 生态三维几何下的扩散/火灾/爆炸、结果回灌CFD 扩展许可与几何数据官方后果分析总览页

最佳实践:先用通道 A 把业务跑通、把"哪些参数要扫描、结果要看哪些量"想清楚,再决定是否上通道 B。没有清晰的业务参数化需求就上 API,只会把 GUI 的手工劳动翻译成 Python 的手工劳动。

1.4 官方接口的真实形态与诚实边界

官方为 Phast™ 后果计算提供的是托管 Web 服务形态的接口:Phast Web Services 门户(https://phastwebservices.dnv.com/)明列 Excel、Python、.NET、TypeScript 四种客户端形态;Python 侧对应官方 PyPI 包pypws(文档体例写作 PyPWS),要求 Python 3.11 及以上。计算端点形如https://phastwebservices.dnv.com/api/analytics/v1/。

同时必须把边界说清楚(这也是本系列的写作纪律):

  • 未确证项 F:Safeti™ 侧是否存在等价的公开 API,本次检索未找到官方证据。因此 Safeti™ 相关的自动化,本系列一律限定为"桌面操作 + 数据面自动化",不宣称其具备公开 API 能力。
  • 未确证项 B:官方可编程接口形态是 Web Services(REST)与四种官方客户端库,未见 COM / Scripting 独立接口的官方表述。凡在网上看到"Phast 的 COM 接口",请一律回到官方门户核对。
  • 未确证项 A:Phast™ 研究文件的具体扩展名,官方页面未给出确证,本系列一律写"以官方 User Manual 为准",不写任何扩展名。

铁律 2(闭源事实纪律):任何 API 类名、方法名、端点、文件扩展名,都必须有官方证据;查不到的一律写"未确证 / 以官方文档为准"。Phast™ 与 Safeti™ 是闭源商业软件,公开技术资料有限,宁缺毋编是唯一安全策略。

1.5 四阶段学习路径

本系列 20 篇按四阶段递进,本篇属于第一阶段:

阶段篇号能力目标
入门01~04认识产品、搭好环境、看懂数据模型、跑通第一个后果分析
核心05~08解剖模型链路、掌握源项与物料、气象与地形、第一个批处理
进阶09~12Safeti™ 与 QRA 原理、研究设置、影响分析与验收标准、CFD 扩展
高级/实战13~20批处理工程化、自定义源项与物料、数据对接与三条实战线

二、完整操作与脚本/API 代码逐段剖析

2.1 通道 A 走查:用桌面把"一个研究"跑完(操作步骤清单)

在你写任何脚本之前,先用桌面走一遍完整流程,把"研究"这个概念坐实。以下是标准动作序列(各版本菜单措辞可能微调,以官方 User Manual 为准):

步骤 1 启动 Phast(TM)(或 Safeti(TM)),确认标题栏/关于页显示的版本号为 9.x 主线 步骤 2 新建一个 Study Folder,用于收纳本项目下所有研究 步骤 3 在 Study Folder 下新建一个 Study(例如 "Tank Farm - LPG") 步骤 4 在该 Study 下新建一个 Scenario(场景),例如 "V-101 10mm 孔泄漏" 步骤 5 在场景输入区依次设置:物料 -> 源项(容器/管道/孔径/相态)-> 气象 -> 地面条件 -> 点火假设 步骤 6 选择需要计算的结果类型:扩散浓度、热辐射、闪火、超压、毒性 步骤 7 点击运行;官方内核通常在秒级给出结果(单场景经验/唯象模型) 步骤 8 在结果视图中查看:2D 曲线、3D 视图、地图/plot plan、结果表格 步骤 9 导出报告:选择 Word 报告或 Excel 表格(供后续批量汇总) 步骤 10 回到步骤 3,复制该 Study 作为模板,批量扩建气候与孔径维度

这一步的目的是什么:把"场景 = 一组输入 + 一组结果"这个心智模型固化下来。第 03 篇会把它形式化为 Study Folder / Study / Scenario 三层数据模型,第 04 篇会逐字段讲源项输入。

2.2 通道 B:能力自检脚本(确认接口可见性)

在决定投入通道 B 之前,先跑一个只读的能力盘点脚本,确认三件事:API 目标地址是否指向官方端点、访问令牌是否已按纪律配置、物料系统是否可见。

# capability_probe.py —— 通道 B 能力自检:只读,不产生任何计算费用# 运行前提:pip install pypws(需 Python >= 3.11),且访问令牌已放入环境变量importos# 读取环境变量,避免把令牌写进代码frompypws.utilitiesimportgetAnalyticsApiTarget# 官方工具函数:返回当前 API 调用目标地址frompypws.materialsimport(# 官方物料模块的检索函数族getAllCasIds,# 取全部可用 CAS 号getDNVComponents,# 取 DNV 自有组分组件的标识集合getDIPPRComponents,# 取源自 DIPPR 的组分组件的标识集合getUserComponents,# 取用户自定义组件的标识集合getMaterialByCasId,# 按 CAS 号取物料定义)defmain()->None:target=getAnalyticsApiTarget()# 核验调用目标是否指向官方托管端点print(f"当前 Phast API 目标:{target}")# 打印出来与官方门户对照token=os.environ.get("PHAST_API_TOKEN","")# 令牌只从环境变量读取(铁律 5)print(f"访问令牌是否已配置:{bool(token)}")# 只输出布尔值,绝不回显令牌内容dnv=getDNVComponents()# DNV 组件集合dippr=getDIPPRComponents()# DIPPR 组件集合(物料库 2000+ 的物性来源)user=getUserComponents()# 用户自定义组件集合print(f"DNV 组件数={len(dnv)}DIPPR 组件数={len(dippr)}用户组件数={len(user)}")cas_ids=getAllCasIds()# 全部可用 CAS 号print(f"可用 CAS 号总数:{len(cas_ids)}")# 作为"物料系统是否可用"的客观判据sample_cas=cas_ids[0]# 取任意一个 CAS 号作样例,不臆造具体编号(铁律 8)material=getMaterialByCasId(sample_cas)# 返回对象的字段结构以官方参考文档为准print(f"样例物料 CAS={sample_cas}取出成功:{materialisnotNone}")if__name__=="__main__":main()# 一次性盘点通道 B 的可见能力

逐行要点:getAnalyticsApiTarget()解决"我到底在调谁"的疑问——企业网络里配错代理或指向测试环境时,这一行就能暴露问题;os.environ.get而非字面量解决凭据泄露;getMaterialByCasId的返回对象结构以官方 PyPWS 参考文档为准,所以脚本只判断"是否取出成功",不臆造其属性名。

铁律 3(只用官方接口):二次开发仅使用 DNV 官方的 Phast API / Phast Web Services / PyPWS。网络上流传的第三方封装器没有官方背书,既带来法律风险,也会在你升级版本时瞬间失效。

2.3 通道选型检查清单(动手前先过一遍)

[ ] 业务是否真的需要批量?场景数 < 20 且只在项目初期,通道 A 更划算 [ ] 参数化维度是否清楚?要扫描的是孔径、物料、气象、点火假设中的哪几个? [ ] 结果要落成什么?只要图,还是要结构化表格进数据库/报表? [ ] 许可是否齐备?通道 A 需桌面许可;通道 B 需访问令牌 [ ] 凭据怎么管?令牌走环境变量或密钥管理,不进仓库(铁律 5) [ ] 是否涉及 Safeti(TM) 风险计算?若是,先按"桌面操作 + 数据面自动化"设计(未确证项 F) [ ] 有没有一致性回归基准?每次自动化结果要与 GUI 结果做对照(铁律 7)

三、常见报错与排查

报错 3-1:ImportError: No module named 'pypws'。
现象:脚本无法导入官方 Python 库。根因有两种:一是当前 Python 环境未安装该包,二是解释器版本低于官方要求的 3.11。解法:先python --version确认版本,再在同一解释器下pip install pypws;多版本共存时务必用虚拟环境,否则会出现"装了但导入不到"的错觉。

报错 3-2:脚本能导入却始终连不通服务。
现象:调用计算时长时间无响应或返回网络类错误。根因:企业网络对托管端点的访问受限,或代理配置未生效。解法:先用浏览器打开官方门户 https://phastwebservices.dnv.com/ 验证可达性,再用getAnalyticsApiTarget()打印脚本侧的调用目标并逐字比对;网络策略问题应交由 IT,而不是在代码里硬写代理绕过。

报错 3-3:鉴权类失败(令牌缺失、过期或未被识别)。
现象:请求被拒绝,提示与授权相关。根因:访问令牌未配置、已过期,或因脚本把令牌写死而无法轮换。解法:把令牌放入环境变量或密钥管理服务(铁律 5),过期后统一在配置侧轮换;不要把令牌提交进版本库,即使后来删掉也可能残留在历史里。

报错 3-4:“我自动化算出来跟 GUI 不一致”。
现象:同一场景,脚本与桌面结果有偏差。根因排查顺序:单位是否混用(官方 Web Services 面向全 SI 单位,铁律 4)→ 物料是否为同一 CAS 号/同一代表物料 → 气象与地面条件是否逐项一致 → 源项相态假设是否相同。解法:固定一个"黄金场景"(最简单的单组分、单气象、固定孔径),逐字段比对 GUI 与脚本输入,把差异收敛到零之后再扩维。

四、动手练习

  • 练习 1(走通通道 A):用桌面完整跑一遍 §2.1 的十个步骤,建成一个 Study Folder、一个 Study、一个 Scenario 并出图。判定:你能不看清单复述出"三层数据层次"的名称与各自作用。
  • 练习 2(填出决策表):针对你手上真实的项目,把 §1.3 的决策表补全为你的版本——写下通道 A/B/C 各自的用途、前提、放弃理由。判定:至少有一条通道被你明确"否掉"并给出理由(例如"本项目 Safeti™ 侧无公开 API,风险部分只用通道 A")。
  • 练习 3(能力自检):在 Python 3.11+ 虚拟环境中安装pypws,运行capability_probe.py。判定:脚本打印出 API 目标地址、令牌配置布尔值与物料计数;若可用 CAS 号总数为 0,说明环境或授权有问题,需回到 §三排查。
  • 练习 4(边界自检):在网上找一篇声称"Phast 有 COM 接口 / 某工具能直读流程模拟原生文件"的文章,逐条与官方门户比对,写出哪一条有官方证据、哪一条属于未确证项。判定:能准确引用"未确证项 B/E"的口径,而不是照抄网络说法。
  • 练习 5(路径规划):结合你的岗位,写出你在四阶段中真正要走的篇号(例如工艺安全工程师可能重点走 05~08、13、17、18)。判定:每篇都能写出"我要用它解决哪个具体痛点"。

五、小结与下一篇预告

本篇建立了全系列的坐标系:产品分工(Phast™ 管后果、Safeti™ 管风险)、三条通道(桌面批量与 Excel 导入、官方 Phast API / Phast Web Services 与 PyPWS、Phast Online 与 CFD 生态)、两条纪律(只用官方接口、查不到就写未确证)、一条路径(四阶段 20 篇)。请记住那个最重要的判断:通道 B 的官方能力只覆盖 Phast™ 侧的后果计算,Safeti™ 侧的公开 API 未获确证——这句话会决定你后续所有架构决策。

第 02 篇《环境与许可》将补齐动手前的最后一环:许可形态(Individual / Network,订阅、租赁与永久)、Veracity 商店的购买与续期、Knowledge Centre 作为下载与发布说明的统一入口、API 访问令牌的必要性与治理方式,以及一套可直接运行的环境自检脚本。

本篇认知问题回显(FAQ)

Q1:Phast™ 与 Safeti™ 的分工是什么,为什么会一起出现?
A:Phast™ 做后果分析,回答"会发生什么",输出浓度等值线、火焰长度、池径、热辐射、闪火范围、超压与冲量、毒性剂量与致死率等;Safeti™ 做定量风险分析(QRA),在同一界面里把后果与频率(设备失效频率、点火概率、风向频率)合成,输出 LSIR 等值线、Individual Risk、FN curve、PLL 与 IRPA,并据 ALARP 判据论证。二者出自同一厂商 DNV,共用同一套后果模型内核,所以常被一起提及;但 Safeti™ 侧是否存在公开 API 未获官方证据。

Q2:"四十余年验证"对二次开发意味着什么?
A:它意味着三件事。第一,你自动化产出的后果结果可以支撑安全报告与许可论证,前提是调用官方计算内核而不是自研近似公式;第二,物料与物性由官方物料系统提供(物料库 2,000 种以上,物性源自 DIPPR),自建参数必须取自官方技术文档并标注来源;第三,能力边界必须清楚——核心链路是经验与唯象模型,三维高保真场景才走 Phast CFD、KFX™、EXSIM。

Q3:二次开发的三条通道是什么,各自前提如何?
A:通道 A 是桌面批量与 Excel 导入,能力是队列化多场景、Excel import 快速建研究与出报告,前提是桌面许可;通道 B 是官方 Phast API / Phast Web Services(含 Python 库 PyPWS,要求 Python 3.11+),能力是脚本化逐场景计算并进结构化数据管道,前提是访问令牌与网络可达托管端点;通道 C 是 Phast Online 与 CFD 生态,能力是三维几何下的扩散、火灾、爆炸计算并把结果回灌 Safeti™,前提是 CFD 扩展许可与几何数据。

Q4:官方可编程接口是什么形态?为什么强调"先确认官方接口"?
A:官方为 Phast™ 后果计算提供托管 Web 服务形态的接口,门户 https://phastwebservices.dnv.com/ 明列 Excel、Python、.NET、TypeScript 四种客户端形态,Python 侧对应 PyPI 包pypws,计算端点形如 https://phastwebservices.dnv.com/api/analytics/v1/。强调"先确认"是因为 Phast™ 与 Safeti™ 为闭源商业软件,公开技术资料有限:COM / Scripting 独立接口未见官方表述,Safeti™ 侧公开 API 未获证据,研究文件扩展名亦未确证。凡查不到官方出处的类名、方法名、扩展名,一律写"未确证 / 以官方文档为准",绝不臆造。

Q5:本系列的学习路径如何安排?
A:四阶段 20 篇。入门阶段(01~04)认识产品、搭环境、看懂 Study Folder / Study / Scenario 三层数据模型、跑通第一个后果分析;核心阶段(05~08)解剖 Discharge → Dispersion → Effects 模型链路与 UDM、掌握源项与物料、气象与地形、第一个批处理;进阶阶段(09~12)学 Safeti™ 与 QRA 原理、研究设置、影响分析与验收标准、CFD 扩展;高级与实战阶段(13~20)做批处理工程化、自定义源项与物料、数据对接,以及三条实战流水线。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 4:01:06

【电机滤波例程3】新息协方差自适应扩展卡尔曼滤波(EKF)原理,MATLAB。PMSM电流测量噪声在线调整。附下载链接

完整代码&#xff0c;附下载链接。包运行成功 文章目录总述实现流程输出说明运行结果MATLAB源代码总述 采用表贴式永磁同步电机模型&#xff0c;满足 LdLqp.L。通过已知αβ电压驱动机电状态预测&#xff0c;以αβ电流为量测修正电流、机械转速和电角度。 扩展卡尔曼滤波利用…

作者头像 李华
网站建设 2026/10/19 13:32:47

Bun vs npm 实战对比:一次跨 libc 依赖踩坑带来的迁移笔记

本文基于一个多前端子项目从 npm/pnpm 迁移到 Bun 的过程整理。 文中速度数据为同一台 x86_64 机器、同一份依赖清单下的参考量级&#xff0c;用于直观感受差距&#xff0c;不是实验室级精确基准。 适合读者&#xff1a;正在考虑或已经使用 Bun&#xff0c;遇到原生依赖、跨平台…

作者头像 李华
网站建设 2026/10/19 13:32:46

使用 psql 按数据库分别记录查询历史:\set HISTFILE 变量详解

文档教程知识库 【免费下载链接】til :memo: Today I Learned 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ti/til 点击查看 免费下载 导读 默认情况下&#xff0c;psql 会把你在会话中输入的所有 SQL 查询和反斜杠命令统一记录在 ~/.psql_history 一个文件里&…

作者头像 李华