Python python-exsim 完整使用指南
一、包基础概述
1. 简介
python-exsim 是EXSIM 爆炸模拟程序的 Python 接口库,核心用于工业爆炸、可燃气体/蒸汽爆炸、粉尘爆炸的数值模拟、参数配置、批量运算、结果解析与后处理。
EXSIM 是国际通用的爆炸风险评估软件,广泛应用于石油化工、油气场站、煤化工、仓储等安全工程领域;python-exsim 实现了用 Python 脚本自动化调用 EXSIM 内核,摆脱手动图形界面操作,支持批量建模、参数遍历、工况对比、数据导出与可视化。
核心定位:EXSIM 桌面软件的自动化二次开发接口,仅作为桥梁,运行依赖原生 EXSIM 程序本体。
2. 核心功能
二、环境与安装
前置依赖(必看)
1. 标准安装命令
方式1:PyPI 在线安装(主流)
pip install python-exsim
方式2:本地源码安装(离线/定制版)
python setup.py install
方式3:虚拟环境安装(推荐工程使用)
# 创建虚拟环境
python -m venv exsim_env
# 激活环境(Windows cmd)
exsim_env\\Scripts\\activate
# 安装包
pip install python-exsim
2. 安装校验
打开 Python 交互环境,执行导入,无报错即安装成功:
import exsim
print(exsim.__version__)
3. 关键路径配置(核心步骤)
python-exsim 必须关联 EXSIM 可执行文件路径,两种配置方式:
import exsim
# 指定 EXSIM.exe 完整路径
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
在每个脚本开头指定路径,适合多版本 EXSIM 切换场景。
三、核心语法、类与参数详解
1. 核心模块与主类
库核心分为 4 大模块:
- exsim.core:核心模拟引擎、任务提交
- exsim.model:爆炸模型、介质、场地、点火源定义
- exsim.io:工程文件读写、结果解析、数据导出
- exsim.utils:工具函数、单位转换、参数校验
最常用主类:
2. 通用基础语法框架
标准脚本结构(固定模板):
# 1. 导入库
import exsim
from exsim.model import ExplosionModel, Environment, Ignition
from exsim.io import ResultReader
# 2. 绑定EXSIM程序路径
exsim.set_exsim_path(r"EXSIM完整路径\\EXSIM.exe")
# 3. 创建工程对象
proj = exsim.ExsimProject(project_name="测试爆炸工程")
# 4. 依次配置模型、环境、点火、障碍物
model = ExplosionModel(参数...)
env = Environment(参数...)
ign = Ignition(参数...)
# 5. 绑定配置到工程
proj.set_model(model)
proj.set_environment(env)
proj.set_ignition(ign)
# 6. 运行模拟
proj.run()
# 7. 读取结果
reader = ResultReader(proj.get_result_path())
data = reader.get_all_results()
3. 关键参数全解
(1)ExplosionModel 爆炸模型核心参数(可燃介质/爆炸类型)
| explosion_type | 爆炸类型 | gas(气体)/dust(粉尘)/vapor(蒸汽) | 必选,区分爆炸场景 |
| substance | 介质名称 | 字符串,如 methane(甲烷)、propane(丙烷)、coal_dust(煤尘) | 内置主流化工介质库 |
| release_rate | 泄漏速率 | kg/s | 可燃物质释放流量 |
| release_duration | 泄漏时长 | s | 持续泄漏时间 |
| density | 介质密度 | kg/m³ | 介质物理密度 |
| lower_flammable_limit | 爆炸下限 LFL | %体积分数 | 可燃极限浓度 |
| upper_flammable_limit | 爆炸上限 UFL | %体积分数 | 可燃极限浓度 |
| heat_of_combustion | 燃烧热 | kJ/kg | 介质燃烧热值 |
(2)Environment 环境气象参数
| wind_speed | 风速 | m/s |
| wind_direction | 风向 | °(0~360) |
| atm_stability | 大气稳定度 | A/B/C/D/E/F |
| ambient_temp | 环境温度 | ℃ |
| ambient_pressure | 环境压力 | kPa |
| terrain_type | 地形类型 | open(开阔地)/urban(城区)/plant(厂区) |
(3)Ignition 点火源参数
| x, y, z | 点火坐标 | m |
| ignition_delay | 点火延迟 | s |
| ignition_energy | 点火能量 | J |
(4)Obstacle 障碍物参数
# 语法示例
obs = exsim.Obstacle(
name="厂房墙体",
x1, y1, z1, # 起点坐标
x2, y2, z2, # 终点坐标
block_ratio=0.8 # 遮挡率 0~1
)
proj.add_obstacle(obs)
(5)工程运行参数 proj.run()
- run(silent=True):静默运行,不弹出EXSIM图形界面(自动化必备)
- run(timeout=300):模拟超时时间(单位s),防止卡死
- output_dir:指定结果输出文件夹
(6)结果读取常用方法
reader.get_overpressure() # 获取各距离超压值 (kPa)
reader.get_impulse() # 获取冲量 (kPa·s)
reader.get_radius(limit=5) # 获取超压5kPa对应的破坏半径 (m)
reader.to_csv("result.csv")# 结果导出为CSV
四、8个实战应用案例(可直接运行)
统一前置:已安装 EXSIM + python-exsim,且配置好 EXSIM.exe 路径
案例1:基础甲烷气体泄漏爆炸(单工况最简案例)
场景:室外开阔地,甲烷瞬时泄漏爆炸,基础风险计算。
import exsim
from exsim.model import ExplosionModel, Environment, Ignition
# 1. 绑定EXSIM路径
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
# 2. 创建工程
proj = exsim.ExsimProject("甲烷基础爆炸")
# 3. 配置爆炸模型:甲烷气体爆炸
gas_model = ExplosionModel(
explosion_type="gas",
substance="methane",
release_rate=0.5,
release_duration=10,
lower_flammable_limit=5.0,
upper_flammable_limit=15.0
)
# 4. 环境:开阔地、微风
env = Environment(
wind_speed=2.0,
atm_stability="D",
ambient_temp=25,
terrain_type="open"
)
# 5. 点火源:泄漏源附近立即点火
ign = Ignition(x=1, y=0, z=1.5, ignition_delay=0)
# 6. 绑定并运行
proj.set_model(gas_model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
# 7. 读取破坏半径
res = proj.read_result()
print(f"5kPa超压破坏半径:{res.get_radius(5):.2f} m")
案例2:丙烷储罐泄漏爆炸(带障碍物-厂区墙体)
场景:厂区丙烷泄漏,周边有建筑墙体障碍物。
import exsim
from exsim.model import ExplosionModel, Environment, Ignition, Obstacle
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
proj = exsim.ExsimProject("丙烷厂区爆炸")
# 介质模型
model = ExplosionModel(explosion_type="gas", substance="propane", release_rate=1.2)
# 环境
env = Environment(wind_speed=1.5, terrain_type="plant")
# 点火
ign = Ignition(x=2, y=1, z=1.2)
# 添加障碍物(厂区墙体)
wall = Obstacle("东侧墙体", x1=5, y1=–10, z1=0, x2=5, y2=10, z2=3, block_ratio=0.9)
# 绑定运行
proj.set_model(model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.add_obstacle(wall)
proj.run(silent=True)
res = proj.read_result()
print(f"最大超压:{res.get_max_overpressure():.2f} kPa")
案例3:多工况批量模拟(参数遍历:不同风速)
场景:遍历 1m/s、3m/s、5m/s 风速,批量计算爆炸半径,典型参数敏感性分析。
import exsim
from exsim.model import ExplosionModel, Environment, Ignition
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
wind_list = [1, 3, 5] # 待遍历风速
result_list = []
for wind in wind_list:
proj = exsim.ExsimProject(f"风速_{wind}m/s")
model = ExplosionModel(explosion_type="gas", substance="methane", release_rate=0.6)
env = Environment(wind_speed=wind, atm_stability="D")
ign = Ignition(x=1, y=0, z=1.5)
proj.set_model(model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
res = proj.read_result()
radius = res.get_radius(5)
result_list.append({"风速(m/s)": wind, "破坏半径(m)": radius})
# 打印批量结果
for item in result_list:
print(item)
案例4:粉尘爆炸模拟(煤尘场景,煤矿/煤仓)
场景:煤尘云爆炸,粉尘爆炸专属配置。
import exsim
from exsim.model import ExplosionModel, Environment, Ignition
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
proj = exsim.ExsimProject("煤尘爆炸模拟")
# 粉尘爆炸类型
dust_model = ExplosionModel(
explosion_type="dust",
substance="coal_dust",
release_rate=0.3,
heat_of_combustion=28000
)
env = Environment(terrain_type="plant", ambient_temp=22)
ign = Ignition(x=0.5, y=0, z=2, ignition_energy=0.1)
proj.set_model(dust_model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
res = proj.read_result()
print(f"煤尘爆炸冲量最大值:{res.get_max_impulse():.2f} kPa·s")
案例5:结果导出为 CSV 并 Pandas 数据分析
场景:模拟后导出全量数据,用 Pandas 做统计分析。
import exsim
import pandas as pd
from exsim.model import ExplosionModel, Environment, Ignition
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
proj = exsim.ExsimProject("结果导出分析")
model = ExplosionModel(explosion_type="gas", substance="propane")
env = Environment(wind_speed=2)
ign = Ignition(x=1, y=0, z=1.5)
proj.set_model(model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
# 导出CSV + 读取分析
csv_path = proj.export_result_csv("explosion_result.csv")
df = pd.read_csv(csv_path)
print("数据前5行:")
print(df.head())
print("超压平均值:", df["Overpressure(kPa)"].mean())
案例6:不同点火延迟对比分析
场景:泄漏后不同时间点火(0s/5s/10s),分析点火时机对爆炸强度的影响。
import exsim
from exsim.model import ExplosionModel, Environment, Ignition
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
delay_list = [0, 5, 10]
for delay in delay_list:
proj = exsim.ExsimProject(f"点火延迟_{delay}s")
model = ExplosionModel(explosion_type="gas", substance="methane", release_duration=15)
env = Environment(wind_speed=2)
ign = Ignition(x=1, y=0, z=1.5, ignition_delay=delay)
proj.set_model(model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
res = proj.read_result()
print(f"点火延迟{delay}s | 最大超压:{res.get_max_overpressure():.2f} kPa")
案例7:蒸汽爆炸(汽油蒸汽,仓储库区场景)
场景:汽油挥发蒸汽爆炸,危化品仓库风险评估。
import exsim
from exsim.model import ExplosionModel, Environment, Ignition
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
proj = exsim.ExsimProject("汽油蒸汽爆炸")
# 蒸汽爆炸类型
vapor_model = ExplosionModel(
explosion_type="vapor",
substance="gasoline",
release_rate=0.2
)
env = Environment(terrain_type="urban", wind_speed=1.8)
ign = Ignition(x=3, y=2, z=1.2)
proj.set_model(vapor_model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
res = proj.read_result()
print(f"致死半径(15kPa):{res.get_radius(15):.2f} m")
案例8:Matplotlib 绘制冲击波超压-距离曲线
场景:读取模拟数据,可视化冲击波衰减曲线(工程报告配图)。
import exsim
import matplotlib.pyplot as plt
from exsim.model import ExplosionModel, Environment, Ignition
exsim.set_exsim_path(r"C:\\Program Files\\EXSIM\\EXSIM.exe")
proj = exsim.ExsimProject("曲线绘制")
model = ExplosionModel(explosion_type="gas", substance="methane")
env = Environment(wind_speed=2)
ign = Ignition(x=1, y=0, z=1.5)
proj.set_model(model)
proj.set_environment(env)
proj.set_ignition(ign)
proj.run(silent=True)
# 获取坐标与超压数据
dist = proj.read_result().get_distance_list()
over_p = proj.read_result().get_overpressure_list()
# 绘图
plt.figure(figsize=(10,4))
plt.plot(dist, over_p, color="red", linewidth=2)
plt.xlabel("距离 (m)")
plt.ylabel("超压 (kPa)")
plt.title("爆炸超压随距离衰减曲线")
plt.grid(True)
plt.savefig("pressure_curve.png")
plt.show()
五、常见错误、报错原因与解决方案
1. 导入报错 ModuleNotFoundError: No module named 'exsim'
- 原因:未安装 python-exsim 或安装到其他 Python 环境
- 解决:pip install python-exsim,确认使用当前环境的 Python 解释器。
2. 运行时报错 EXSIM executable not found
- 原因:未配置 EXSIM 程序路径,或路径错误、路径含中文/空格乱码
- 解决:
- 使用原始字符串 r"路径"
- 路径不要含中文、特殊字符
- 重新执行 exsim.set_exsim_path()
3. 模拟运行卡死、无结果、进程挂起
- 原因1:未开启 silent=True,EXSIM 弹窗阻塞脚本
- 解决:proj.run(silent=True) 后台静默运行
- 原因2:参数不合理(泄漏速率为0、坐标越界、介质参数非法)
- 解决:检查 release_rate、坐标、可燃极限参数
- 原因3:Python 版本过高(3.11+)
- 解决:降级至 3.8~3.10
4. ResultReader 读取结果为空
- 原因:模拟计算失败,EXSIM 未生成输出文件
- 排查:
- 手动打开 EXSIM 用相同参数测试是否能计算
- 检查介质名称拼写(如 methane 不能写中文“甲烷”)
- 检查障碍物坐标是否重叠/非法
5. 批量循环模拟时文件冲突
- 原因:多个工程使用同名输出文件,覆盖报错
- 解决:每个工程设置独立 project_name 或独立 output_dir。
6. 介质名称报错 Substance not in database
- 原因:内置介质库无该名称,拼写错误
- 解决:查阅官方介质列表,使用英文标准名称;自定义介质需手动输入 LFL/UFL、燃烧热。
7. 权限报错 PermissionError
- 原因:EXSIM 安装在系统目录(C:\\Program Files),Python 无读写权限
- 解决:以管理员身份运行 Python/IDE,或把工程输出目录设置到非系统盘。
六、使用注意事项(工程落地必看)
《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。



