ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Python 脚本生成化工原理流体输送机械 PPT:泵特性曲线与工作点

Python 脚本生成化工原理流体输送机械 PPT:泵特性曲线与工作点 简介这份化工原理流体输送机械PPT面向化工、制药、能源等专业的学生与一线技术人员围绕如何为流体输送选对设备展开把课堂理论与工程选型衔接起来。课件仅含1个PPT文件压缩包约5.28MB类型单一便于直接放映、打印与随身复习适合课堂讲授、期末复习或岗前培训使用。内容从动力式、容积式与其他类型的分类讲起重点剖析离心泵的构造与原理包括开式、半开式、闭式叶轮的效率差异蜗壳泵壳的能量转换作用填料密封与机械密封的适用场合同时延伸到漩涡泵、往复泵、鼓风机、压缩机以及固体流态化输送等场景。选型部分结合流体腐蚀性、粘度、含固量、易燃易爆性和温度压强以及所需流量与扬程说明合理定规格、算功率、安排位置的思路并提示启动前灌满液体、轴封防漏等操作细节。目前已有91人学习下载适合想系统梳理知识点并补足工程判断依据的读者。1. 化工原理流体输送机械 PPT 为什么值得用脚本生成讲过《化工原理》流体输送机械这一章的人多半遇到过同一种返工泵扬程算完了、轴功率算完了画到课件上却发现表格里的数字和曲线对不上改一个流量点就要重画泵特性曲线、重排表格、重誊公式。一份四十页的课件真正的知识点只有 H-Q 曲线、工作点、汽蚀余量和功率换算这几块剩下的全是重复劳动。把课件当代码工程来做用 Python 算参数、拟合曲线、驱动 python-pptx 出页数据改一处图和表全跟着动这是目前做教学资源比较稳的一条路。它适合三类人要反复修订课件的教师、做课程资源交付的工程师、以及要给内部培训做技术文档的人。2. 流体输送机械的计算内核伯努利方程与离心泵扬程的 Python 实现课件里最容易出错的地方从来不是排版是数字。排版错了肉眼能看出来扬程少算一个动压差或者流量单位没换成 m³/s只有学生做课后题时才会暴露。所以第一步不是打开 PPT而是先把计算内核写成可测试的 Python 模块。2.1 流体输送机械的分类与对应的计算入口讲这一章绕不开分类但分类不是为了背名词而是为了确定用哪套公式。叶片式泵按伯努利方程算扬程容积式泵的流量几乎只由转速和排量决定风机关心的是全压和风量压缩机则必须考虑气体压缩过程中的温度变化。把这张对照关系先钉死后面写代码时就不会张冠李戴。类别典型设备主控参数计算入口叶片式泵离心泵、轴流泵流量 Q、扬程 H、效率 η、汽蚀余量 NPSH伯努利方程 特性曲线容积式泵往复泵、齿轮泵排量 q、转速 n、排出压力Q q·n·ηv风机离心通风机风量 Q、全压 p、轴功率 NN Q·p / η压缩机活塞式、离心式排气量、压比、多变指数多变压缩功积分真空泵水环真空泵抽气速率、极限压力抽气量与密封液温度相关离心泵是绝大多数流体输送机械课件的重心下面的代码也只围绕它展开。轴流泵的扬程低、流量大公式形式一致只是特性曲线的形状完全不同——H-Q 曲线近乎陡降这一点在做图时会直接体现出来。2.2 从伯努利方程到泵扬程一个能直接跑的 Python 函数对 1-1 和 2-2 两个截面写伯努利方程把泵提供的能量 H 单独留出来就得到扬程表达式。注意这里全部用 SI 单位压强用 Pa、密度用 kg/m³、速度用 m/s任何一处混用工程单位都会让结果差一个量级。# fluid_calc.py from dataclasses import dataclass G 9.81 # 重力加速度m/s^2 dataclass class PumpPoint: head: float # 泵扬程 Hm 液柱 p_eff: float # 有效功率 NeW p_shaft: float # 轴功率 NW def pump_head(rho, p1, p2, z1, z2, u1, u2, hf, gG): 由伯努利方程求泵扬程全部使用 SI 单位。 rho: 密度 kg/m^3 p1/p2: 进出口压强 Pa z1/z2: 进出口高度 m u1/u2: 进出口流速 m/s hf: 两截面间管路阻力损失m 液柱 static (p2 - p1) / (rho * g) # 静压差折算的液柱高度 geodetic z2 - z1 # 位差 dynamic (u2 ** 2 - u1 ** 2) / (2 * g) # 动压差常被漏掉的一项 return static geodetic dynamic hf def powers(rho, q, head, eta, gG): q 单位 m^3/seta 为泵效率0~1 p_eff rho * g * q * head # 有效功率 return PumpPoint(headhead, p_effp_eff, p_shaftp_eff / eta) if __name__ __main__: # 常温水从敞口池送到高位槽p1 p2 常压池面和大槽液面流速近似为 0 r pump_head(rho1000, p1101325, p2101325, z10, z218, u10, u20, hf6.5) print(f所需扬程 H {r:.2f} m) print(powers(1000, 20 / 3600, r, eta0.68)) # 20 m^3/h 折算成 m^3/s逻辑上就是把扬程拆成静压差、位差、动压差和阻力损失四块逐项算完再相加。参数里最容易翻车的是hf它必须包含吸入管路和排出管路的全部沿程与局部阻力用当量长度法或阻力系数法算出来单位是 m 液柱而不是 Pa。另外eta要用工况点对应的效率不能直接拿铭牌上的最高效率——泵在偏离设计流量时效率会明显下降这也是做效率曲线图的意义。2.3 轴功率、效率与电机功率参数怎么设有效功率只跟流量、扬程、密度有关跟泵本身无关轴功率要除以效率电机功率还要在轴功率基础上留出裕量。这三个数在课件里常常被画成一张流程图但真正要讲清楚的是裕量怎么取。参数符号单位取值说明体积流量Qm³/s课件表格里用 m³/h代入公式前除以 3600扬程Hm由伯努利方程算得不是泵的几何高度密度ρkg/m³常温水取 1000油品和酸液必须按实际值效率η—离心泵一般 0.5~0.8小流量泵偏低轴功率NkWN ρgQH / (1000η)电机功率NmkW常见做法是在轴功率上乘 1.1~1.2电机功率的裕量取值有讲究。轴功率大于 5 kW 时取 1.1 倍左右就够小功率泵因为启动电流和工况波动的影响更明显取到 1.2 甚至 1.3 也说得过去。还有一种更保守的做法是直接按泵的额定轴功率配电机不去做动态计算这在工程上很常见。2.4 安装高度与汽蚀余量最容易算错的三个量汽蚀余量是这一章唯一带有安全边界性质的内容也是最容易讲糊涂的地方。有效汽蚀余量由装置决定必需汽蚀余量由泵本身决定两者之间必须留 0.5 m 以上的余量。吸入侧从吸入液面到泵入口列方程得到有效汽蚀余量NPSHa (p0 - pv) / (ρg) - Hg - hf吸其中 p0 是液面上方压强pv 是输送温度下的饱和蒸汽压Hg 是吸入液面到泵入口的垂直高度hf吸 是吸入管路阻力损失。常压 20℃ 的水pv 约 2.34 kPap0 取 101.325 kPa代入后 (p0-pv)/(ρg) 约等于 10.1 m这个数字在很多教材里被反复引用但换成 80℃ 的水pv 涨到 47 kPa 左右这个值会掉到 5.6 m 上下泵立刻就装不高了。允许安装高度由 NPSHa NPSHr 0.5 反算def max_suction_height(rho, p0, pv, npshr, hf_suction, margin0.5, gG): 返回允许的最大几何安装高度单位 m。 margin 为安全余量工程上常取 0.5 m。 available (p0 - pv) / (rho * g) # 吸入侧可用压头 return available - npshr - margin - hf_suction # 输送 80℃ 热水泵必需汽蚀余量 3.5 m吸入管路阻力 1.2 m print(max_suction_height(971, 101325, 47400, npshr3.5, hf_suction1.2))结果约 0.9 m意思是泵必须装在液面以上不到一米的位置实际工程里更稳妥的做法是把泵放在液面以下倒灌。参数 pv 必须查输送温度下的饱和蒸汽压课件里如果只给一个水的汽化压 2.34 kPa学生做换热器冷凝液输送的题目时一定会算错。3. 用 python-pptx 搭化工原理 PPT 的页面骨架与版式计算内核跑通之后才轮到排版。手工排版的问题不在慢而在于不可复现改一次数据就要重新对齐一次表格、重新截一次图。用 python-pptx 驱动母版出页可以把内容和版式彻底分开——版式交给 .pptx 模板文件内容交给 Python 脚本。3.1 为什么用母版加脚本而不是直接生成全部形状有人图省事用脚本把每个文本框的坐标都写死。这样生成的 PPT 在 16:9 投影上看着还行换到 4:3 或者被学生用 WPS 打开时标题就会跑到页脚上去。正确的做法是先手工做一个模板文件把封面、标题内容、两栏对比、纯标题、结束页这几个版式在幻灯片母版里定义好脚本只负责往占位符里填字。模板里需要预置的版式大致是这几类版式索引名称用途关键占位符0封面章节标题、主讲人标题、副标题1标题和内容概念讲解、公式推导标题、正文2两栏内容泵与风机的对比标题、正文×25仅标题满版插图、特性曲线标题6空白大表格、参数对照无索引号取决于模板不要照抄这里写死的数字先用脚本把prs.slide_layouts的 name 打出来确认一遍再编码。3.2 填充占位符标题、正文与项目符号from pptx import Presentation from pptx.util import Pt prs Presentation(template.pptx) # 带母版和占位符的模板 slide prs.slides.add_slide(prs.slide_layouts[1]) slide.shapes.title.text 离心泵的主要部件与作用 body slide.placeholders[1].text_frame # 按占位符索引取正文框 body.word_wrap True bullets [ 叶轮把电机输入的机械能转化为液体的动能和静压能, 泵壳收集液体并降低流速完成动能到静压能的转换, 轴封防止高压液体沿轴泄漏也防止空气被吸入, ] for i, line in enumerate(bullets): para body.paragraphs[0] if i 0 else body.add_paragraph() para.text line para.font.size Pt(20) # 字号写死母版不保证继承 para.font.name Source Han Sans SC关键点是body.paragraphs[0]这个写法。text_frame默认已经带一个空段落直接add_paragraph()会在最前面留下一个空行课件上看起来就是标题下面多了一条空白。另外字号和字体必须在脚本里显式设置占位符继承母版的样式只在 PowerPoint 里有效转成 PDF 或者用其他软件打开时经常丢失。3.3 插入表格与图片位置和尺寸怎么算python-pptx 里的长度单位默认是 EMU用Cm、Inches、Pt这几个工具类换算更省事。表格的行高只是建议值单元格内容多了会自动撑高所以不要指望用固定行高把表格压进一页。from pptx.util import Cm, Pt rows [ (Q / (m³·h⁻¹), H / m, η / %), (0, 32.0, 0), (20, 30.5, 52), (30, 26.6, 66), (40, 22.4, 58), ] shape slide.shapes.add_table( len(rows), 3, leftCm(2.0), topCm(4.5), widthCm(20.0), heightCm(5.0), ) table shape.table for r, row in enumerate(rows): for c, text in enumerate(row): cell table.cell(r, c) cell.text str(text) cell.text_frame.paragraphs[0].font.size Pt(14) cell.text_frame.paragraphs[0].font.name Source Han Sans SC # 插图按像素和 DPI 反算插入宽度避免图被拉伸 slide.shapes.add_picture(pump_curve.png, Cm(2.0), Cm(4.0), widthCm(20.0))图片插入时只给width高度会按原始宽高比自动算这一点比同时指定宽高安全得多。同一页上既有表格又有图片时建议用仅标题版式然后自己算两个元素的位置别指望版式里有现成的图占位符。提示add_table的height只是初始值。四行以上的参数表在默认字号下通常会撑到 6 cm 左右排版时按 1.2 cm 一行估算比较稳。3.4 中文字体和段落样式的几个坑服务器上跑脚本最容易遇到的是字体问题。Linux 环境里没有微软雅黑和宋体matplotlib 画出来的图里中文会变成方框python-pptx 设置的字体名在目标机器上不存在时会被静默替换。常见的解决办法是在容器里装一套思源黑体或者 Noto Sans CJK SC脚本里统一用Source Han Sans SC同时把字体文件随课件一起交付。段落间距也要显式设。paragraph.space_after Pt(6)和paragraph.line_spacing 1.2这两句在公式页尤其重要因为公式图片的高度往往比文字行高大不设间距就会出现图和文字挤在一起的情况。公式本身不建议用 PowerPoint 的公式对象脚本生成可编辑公式要经过 LaTeX 到 MathML 再到 OMML 的两次转换中间任何一步出错都很难查直接把公式用 matplotlib 的 mathtext 渲染成 300 dpi 的透明 PNG 再插进去稳定得多。4. 流体输送机械 PPT 里的泵特性曲线与管路特性曲线怎么画、怎么求交点这一章的重点是课件里那两张图。离心泵的 H-Q 曲线由厂家实验测定管路特性曲线由装置本身决定两条线的交点就是泵在这套装置上的实际工作点。手绘这两条线也能讲但一旦要改流量范围或者换泵全图重画用 numpy 拟合、scipy 求根改一个参数就重算一遍还能顺手把交点坐标标注在图上。4.1 两条曲线的数学形式与拟合方式离心泵的扬程曲线在常用工作段上可以用二次多项式近似管路特性曲线用伯努利方程整理后也是一个二次式泵特性H a - b·Q²a 是关死点扬程b 由曲线陡度决定管路特性He H0 K·Q²H0 是位差加静压差折算的液柱高度K 由管路阻力系数决定拟合用的样本点通常从泵样本上取四到五个流量点。取点时不要只取高效区的点两端的点决定了二次项系数的准确度。Q / (m³·h⁻¹)H / mη / %032.002030.5523026.6664022.4584519.548用numpy.polyfit对 Q² 做一次线性拟合就能得到 a 和 b比直接对 Q 做二次拟合更稳因为常数项会被自动约束成关死点扬程。转速改变时用比例定律换算Q 与 n 成正比H 与 n² 成正比轴功率与 n³ 成正比这条规律在做变频调速的课件页时几乎是必讲的。4.2 绘图代码与中文字体配置import numpy as np from scipy.optimize import brentq import matplotlib matplotlib.use(Agg) # 无显示环境必须指定后端 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [Noto Sans CJK SC, Source Han Sans SC, SimHei] plt.rcParams[axes.unicode_minus] False # 负号不显示成方框 A, B 32.0, 0.0060 # 泵特性曲线系数 H0, K 12.0, 0.0035 # 管路特性曲线系数 q np.linspace(0, 45, 300) # 单位 m^3/h h_pump A - B * q ** 2 h_line H0 K * q ** 2 f lambda x: (A - B * x ** 2) - (H0 K * x ** 2) q_op brentq(f, 1, 45) # 数值求根避免手推解析解出错 h_op A - B * q_op ** 2 fig, ax plt.subplots(figsize(6.4, 4.0), dpi200) ax.plot(q, h_pump, lw2, label泵特性曲线 H-Q) ax.plot(q, h_line, lw2, label管路特性曲线 He-Q) ax.plot([q_op], [h_op], o, colorcrimson, ms8) ax.annotate(f工作点 Q{q_op:.1f} m³/hH{h_op:.1f} m, xy(q_op, h_op), xytext(q_op 3, 30), arrowpropsdict(arrowstyle-, colorcrimson)) ax.set_xlabel(流量 Q / (m³·h⁻¹)) ax.set_ylabel(扬程 H / m) ax.grid(alpha0.3) ax.legend() fig.tight_layout() fig.savefig(pump_curve.png, dpi200, transparentFalse)参数上要注意两点。q的范围必须覆盖工作点并留出余量否则曲线会画到页面外面brentq的第二个和第三个参数是求根区间函数在这两个端点上的值必须异号工作点流量在 20~25 m³/h 之间时取 1 到 45 一定安全但如果管路阻力系数 K 很大导致工作点流量很小区间下限取 1 就可能失效这时改成 0.01 更稳。matplotlib.use(Agg)在服务器上跑时必须加否则会因为找不到显示设备直接报错。4.3 解析解、数值解与调用的取舍两条二次曲线的交点其实有解析解Q √((A - H0) / (B K))。手推一遍对讲课有好处学生能看出工作点流量和哪些因素有关——关死点扬程越高工作点越靠右管路阻力越大工作点越靠左。但代码里仍然建议用brentq因为一旦把泵特性换成三次拟合或者叠加了两台泵并联的曲线解析解就不存在了数值解法不用改结构。串联和并联是这一章的另一组必讲内容。两台相同泵并联同一扬程下流量翻倍串联则同一流量下扬程翻倍。课件上做图时把单泵曲线和并联曲线画在同一坐标系里一眼就能看出并联的流量增量远小于两倍——这一点用代码生成比手画准确得多。4.4 图片插进 PPT 的尺寸与 DPI 换算matplotlib 输出的 PNG 是按像素算的插进 PPT 时要换算成厘米公式是厘米 像素 / dpi × 2.54。上面那张图 6.4 英寸宽、200 dpi像素宽度 1280对应的物理宽度约 16.3 cm。如果强行插成 20 cm图会被放大 1.23 倍文字边缘发虚。图表类型建议 dpi建议插入宽度适用位置特性曲线20016~18 cm单页满版两栏对比图2008~9 cm两栏版式单侧公式渲染图300按行宽 6~12 cm公式推导页结构示意图15012~20 cm概念讲解页交付前把整份 PPT 的图片体积过一遍。200 dpi 已经够投影仪和打印用堆到 600 dpi 只会让文件从 8 MB 涨到 60 MB发给学生时非常难受。5. 数据驱动批量生成流体输送机械 PPT 与交付前排错真正让这套流程省时间的是把内容抽出去。一门课有十几讲每讲的页面结构高度相似把每页的文字和计算参数写进 YAML渲染脚本只负责读数据、算数、出页改内容就不用碰代码。5.1 用 YAML 描述每页内容与计算参数# deck.yaml title: 流体输送机械 slides: - layout: 1 title: 离心泵的特性曲线 bullets: - 泵的 H-Q 曲线由厂家实验测定样本上给出四到五个工况点 - 管路特性曲线由装置决定与泵本身无关 - 两条曲线的交点就是实际工作点 - layout: 5 title: 工作点的确定 chart: {a: 32.0, b: 0.0060, h0: 12.0, k: 0.0035}渲染循环按layout字段选版式遇到chart字段就调第 4 章的绘图函数出图再插入calc类似的字段直接喂给第 2 章的计算模块。这样一份课件的数据源就是一个几十行的 YAML 文件放进 Git 里能看到每次修订到底改了哪句话、哪个参数。5.2 交付前的三项检查数值校验最省事的做法是给计算模块写几个 pytest 用例把教材例题的答案作为期望值钉死。扬程、轴功率、允许安装高度这三项各留一个用例浮点数比较用abs(actual - expected) 1e-3不要用等号。改公式时先跑一遍测试比打开 PPT 用眼睛核对快得多。字体检查看两处一是 matplotlib 生成的图片里中文有没有变方框二是 PPT 在目标机器上打开时标题字体有没有被替换。前者靠容器里装好中文字体解决后者靠打包时带上字体文件或者在模板里把字体设成通用性更好的黑体族。导出 PDF 用命令行就够了不需要打开图形界面soffice --headless --convert-to pdf --outdir ./dist 流体输送机械.pptx导出后翻一遍公式页和表格页重点看公式图片的基线和正文对不对齐、表格有没有跨页断裂。LaTeX 渲染的公式图如果底部留白太多基线就会偏低解决办法是在 matplotlib 里用fig.savefig(..., bbox_inchestight, pad_inches0.02)把透明边距裁掉。这个小参数调完整份课件的公式页会干净一大截。本文还有配套的精品资源点击获取
返回列表