AI 辅助设计实战:文丘里管
从零到三个规格的全过程
使用 WPS 灵犀 + CadQuery 的完整迭代记录
共 13 个版本,历时约 1.5 小时
目录
需求与初始设计(v1) 连接管接口的曲折之路(v2 ~ v7) 需求变更:入口外径 60mm(v8) 法兰安装位的反复修正(v9 ~ v12) 入口直管段优化(v13 / VT60) 系列化设计:VT80 与 VT120 总结与反思
一、需求与初始设计(v1)
初始需求很简单:
绘制文丘里管图纸 STP,壁厚 3mm,入口直径分别是 60,总长度 300,其余参数请自行确定。
AI 根据经典文丘里管设计规范确定了以下参数:
v1 顺利生成,模型体积约 145,407 mm³。代码核心逻辑是将文丘里管的内壁和外壁轮廓分成若干段,在 XZ 截面上分别用lineTo 和revolve(360) 生成旋转体,再通过布尔减(cut)得到空心管。收缩段和扩散段采用余弦曲线插值平滑过渡,确保流体流动无突变。

图 1 | v1 文丘里管初始模型 — 入口段、收缩段、喉部段、扩散段
核心代码片段如下:
v1 核心命令 - 旋转成型# 在 XZ 截面上绘制轮廓并旋转
wp = cq.Workplane("XZ")
.moveTo(0, r_inlet)
.lineTo(L_inlet, r_inlet)
.spline([...]) # 收缩段余弦曲线
.lineTo(X2, r_throat)
...
.close()
inner_solid = wp.revolve(360, (0, 0, 0), (1, 0, 0))
# 外壁 cut 内壁 = 空心管
venturi = outer_solid.cut(inner_solid)
二、连接管接口的曲折之路(v2 ~ v7)
这是本次设计中最曲折的章节。仅仅一个"连接管接口"的添加,经历了 6 个版本的反复迭代,才最终找到正确的布尔运算策略。
2.1 需求变更
喉部增加一个连接管接口,内径 20,壁厚 3,长度 50,与文丘里管主路径联通。
2.2 v2 ~ v3:穿透 + 清理方案(失败)
AI 的策略是:
先构建空心文丘里管主体 用圆柱在喉部壁上"开孔" 单独构建连接管,与主体 union用圆柱"清理"多余实体
结果:缝隙没有补好,而且内部多了实体。

图 1 | 连接管底部与喉部之间的缝隙(红色箭头)

图 1 | v3 缝隙仍然存在

图 1 | v3 内部残留的薄片状多余实体
v3 命令 - 穿透式套筒(失败)# 连接管从喉部内壁内侧 0.5mm 开始
nozzle_y0 = D_throat_r - 0.5
nozzle_len = wall_t + 1 + L_nozzle # 56mm
nozzle_outer_cyl = cq.Solid.makeCylinder(
r_nozzle_out, nozzle_len,
cq.Vector(nozzle_x, nozzle_y0, 0),
cq.Vector(0, 1, 0))
nozzle_inner_cyl = cq.Solid.makeCylinder(
r_nozzle_in, nozzle_len + 1,
cq.Vector(nozzle_x, nozzle_y0 - 0.5, 0),
cq.Vector(0, 1, 0))
nozzle_solid = cq.Workplane("XY")
.add(nozzle_outer_cyl)
.cut(cq.Workplane("XY").add(nozzle_inner_cyl))
问题分析:多次union和cut的布尔运算产生了曲面交叉残片,表现为缝隙和内部多余薄片。
2.3 v4:内芯 Union 方案(失败)
改变策略:将连接孔圆柱与主管道内芯先 union,再整体 cut。意图是让连接孔成为内芯的一部分,一步成型。
结果:只有孔,没有接头了。连接管外壁圆柱没有被包含在外壳中。

图 1 | v4 只剩孔洞,连接管实体消失
2.4 v5:内外壳各自 Union 方案(失败)
进一步完善:外壳 = 主管道外壁 + 连接管外壁;内芯 = 主管道内芯 + 连接孔芯;然后外壳.cut(内芯)。
结果:又回到第一个错误版本,缝隙依旧。连接管外壁圆柱(半径 13mm)与喉部外壁旋转面(半径 18mm)之间仍存在间隙。

图 1 | v5 连接管底部缝隙仍未消除
2.5 v6:修正起始位置(失败)
发现连接管外径(26mm)远小于喉部内径(60mm),之前所有版本错误地从喉部外壁面起始。改为从喉部内壁面起始。
结果:仍然有缝隙。因为连接管底面是平面,喉部壁面是旋转曲面,平面与曲面之间无法完全贴合。

图 1 | v6 连接管底面平面与喉部曲面之间的间隙
2.6 v7:最终解决方案(成功)
经过 6 次失败,AI 终于找到了正确的策略:
核心思路:连接管外壁圆柱从喉部中心轴(Y=0)开始,穿过整个壁厚区域向上延伸。这样外壳 union 后,连接管在壁厚区域(Y=15~18mm)有充分的体积重叠。cut后自然在壁厚处形成穿孔。
v7 核心命令 - 一次 Cut 成型(成功)# 连接管外壁:从喉部中心轴 (Y=0) 向上延伸
nozzle_out_cyl = cq.Solid.makeCylinder(
r_nozzle_out, # 13mm
r_th_o + L_nozzle + 2, # 70mm
cq.Vector(nozzle_x, 0, 0),
cq.Vector(0, 1, 0))
# 连接孔内芯:从喉部中心轴向上延伸
nozzle_in_cyl = cq.Solid.makeCylinder(
r_nozzle_in, # 10mm
r_th_o + L_nozzle + 3, # 71mm
cq.Vector(nozzle_x, 0, 0),
cq.Vector(0, 1, 0))
# 外壳 = 主管外壁(4段) + 连接管外壁 → union
# 内芯 = 主管内芯(4段) + 连接孔圆柱 → union
# 最终 = 外壳.cut(内芯) ← 只有一次布尔运算
venturi_v7 = total_outer.cut(total_inner)
| v7 | 连接管从中心轴开始,一次 cut | 成功 |
三、需求变更:入口外径改为 60mm(v8)
入口变为外径是 60,其余参数不变。
之前 v1~v7 的"入口直径 60mm"实际指的是内径。v8 将其修正为外径,所有尺寸自动换算:
| 60 mm | ||
| 54 mm | ||
| 33 mm | ||
| 27 mm |
v8 尺寸换算D_inlet_r = (D_inlet_outer - 2 * wall_t) / 2 # (60-6)/2 = 27
r_in_o = D_inlet_outer / 2 # 30 (入口外壁半径)
D_throat_r = D_inlet_r / 2 # 13.5
r_th_o = D_throat_r + wall_t # 16.5
四、法兰安装位的反复修正(v9 ~ v12)
法兰看似简单,实则经历了方向错误、孔型异常、入口台阶等多个问题的反复修正。
4.1 v9:首次添加法兰(方向错误)
入口位置增加圆角矩形法兰安装位,厚度 6mm,每个角一个通孔,内径 3.7。孔中心所在的正方形的边长 51。
AI 使用Workplane("XY").box()创建法兰,圆角用edges("|Z").fillet()。但生成的法兰大面平行于 XY 平面,而非垂直于管道轴向(X 方向)。

图 1 | v9 法兰方向错误,大面应垂直于管道轴向
4.2 v10:修正法兰方向
改为在 YZ 平面绘制矩形,沿 X 方向挤出,使法兰大面垂直于管道轴向。
v10 法兰方向修正flange = (
cq.Workplane("YZ")
.transformed(offset=(-flange_thickness / 2, 0, 0))
.rect(flange_length, flange_width)
.extrude(flange_thickness) # 沿 X 方向挤出
)
flange = flange.edges("|X").fillet(flange_fillet)
4.3 v11:三个问题一起修复
v10 仍有三个问题:
- 法兰中心和管道中心不一致
— transformed(offset=...)导致法兰偏移到管道内部(X=0~6) - 安装孔不是通孔
— Solid.makeCylinder的起始位置不够长,未完全贯穿 - 入口被堵住了
— 法兰中心孔直径 60mm 等于管道外径,法兰材料覆盖了入口端面

图 1 | v11 安装孔呈现 C 形非完整圆孔(渲染伪影)
三处修复:
v11 三处修复# 修复1: 法兰位置 — 不偏移,用 extrude(-thickness) 向 -X 挤出
flange = (
cq.Workplane("YZ")
.center(0, 0) # 中心对齐
.rect(flange_length, flange_width)
.extrude(-flange_thickness) # X=[-6, 0]
)
# 修复2: 安装孔 — 加长贯穿距离
h = cq.Solid.makeCylinder(hole_diameter / 2,
flange_thickness + 2, # 多出 2mm 确保贯穿
cq.Vector(-flange_thickness - 1, dy, dz),
cq.Vector(1, 0, 0))
# 修复3: 中心孔直径 = 管道内径(而非外径)
center_hole = cq.Solid.makeCylinder(
D_inlet_r, # 27mm(管道内径半径)
flange_thickness + 2, ...)
4.4 v12:入口台阶修复
法兰中心孔改为 Φ54mm(管道内径),与管道内壁面齐平,消除环形台阶。

图 1 | 法兰中心孔内壁的台阶(修复前)
五、入口直管段优化(v13 / VT60)
入口的直身段 90 有什么依据吗?如果不影响性能,适当缩短一下。
AI 检索了文丘里管设计规范,发现经典设计中"入口圆管段长等于入口管径"是常见做法(ISO 5167 标准)。当前入口段 90mm 偏长,缩短为 60mm(= 1 倍入口外径)对流体性能无影响。
v13 入口段缩短L_inlet = D_inlet_outer # 60mm (= 入口外径 60mm, 1D)
L_total = L_inlet + L_converging + L_throat + L_diffuser # 270mm
总长度从 300mm 减为 270mm,质量从 ~1187g 降为 ~1060g。此版本被重命名为 VT60,作为 60mm 系列的最终版本。
六、系列化设计:VT80 与 VT120
6.1 VT80(v2)
入口外径 80,螺钉孔所在正方形边长 72,其余参数适当适配调整。
6.2 VT120(v1)
入口外径 120,螺钉孔所在正方形边长 105,其余参数适当适配调整。连接管直径不要变化。
连接管参数(内径 20mm、壁厚 3mm、长度 50mm)在三个规格间保持一致,确保零部件通用性。
七、总结与反思
7.1 版本迭代时间线
v1 文丘里管初始版本,入口直径 60(内径),余弦曲线过渡,体积 145,407 mm³
v2 添加连接管接口,穿透式方案 → 缝隙 + 多余实体
v3 穿透式套筒 + 切割清理 → 缝隙 + 多余实体
v4 内芯 Union 方案 → 连接管消失
v5 外壳+连接管 / 内芯+孔 → 缝隙
v6 修正起始位置到内壁面 → 仍有缝隙
v7 连接管从中心轴开始,一次 cut → 成功
v8 入口直径改为外径制(60mm 外径,54mm 内径)
v9 添加圆角矩形法兰 → 法兰方向错误
v10 修正法兰方向 → 位置偏移 + 孔未贯穿 + 入口堵塞
v11 修复法兰三问题 → 中心孔台阶
v12 中心孔改为管道内径,消除台阶
v13 / VT60 入口段缩短为 1D(60mm),总长 270mm
VT80 v1 入口外径 80mm 系列,连接管直径放大
VT80 v2 修正连接管直径保持与 VT60 一致
VT120 v1 入口外径 120mm 系列,法兰孔距 105mm
7.2 关键教训
布尔运算是双刃剑。在 CAD 建模中,多次 union/cut 运算极易在曲面交叉处产生残留薄壳。v7 的成功证明了一个重要原则:
如果可以用一次布尔减解决的问题,就不要拆成多次 union + cut。
坐标系理解是基本功。法兰方向错误(v9)、位置偏移(v10~v11)都源于对 cadquery 工作平面(Workplane)和坐标系变换的理解偏差。Workplane("YZ").extrude()的挤出方向取决于工作平面的法线方向,需要仔细推导。
"外径"和"内径"必须明确。v1~v7 中"入口直径 60"被 AI 理解为内径,v8 才修正为外径。在工程沟通中,管径标注的歧义是常见错误来源。
7.3 效率对比:从坎坷到高效
回顾整个迭代过程,有一个明显的效率分水岭:
v1 ~ v7(连接管接口设计):6 个版本,反复修改布尔运算策略,耗时约 1 小时。这是 AI 首次处理此类 T 形三通管的曲面拼接问题,多次尝试不同方案才找到正确的"一次 cut"策略。
v8 ~ v13(法兰 + 参数调整):6 个版本,包括法兰方向修正、三处缺陷修复、入口段优化,每个版本都在 1 分钟内输出成功。AI 已经建立了正确的建模范式,参数修改变成了简单的"改数字 → 重新生成"。
VT80、VT120(系列化设计):每个规格 1 分钟内完成。只需修改入口外径、法兰尺寸等参数,构建逻辑完全复用,一次成型。
这印证了一个重要的经验:一旦正确的建模范式建立起来,后续的参数化变型可以极速完成。前期的"坎坷"本质上是在摸索正确的布尔运算策略,一旦 v7 的"一次 cut"方案被验证通过,后续所有修改都变成了纯粹的参数替换。
7.4 工具与协作模式
整个设计过程使用 WPS 灵犀(AI 助手)+ CadQuery(Python CAD 库)完成。从需求提出到三个规格的最终交付,共迭代 16 个版本。AI 在每次反馈后都能快速定位问题并给出新的方案,人类工程师则负责判读截图、确认几何关系、提出精确的修正方向。
这种人机协作的模式,特别适合参数化设计的快速迭代场景:AI 负责代码生成和几何计算,工程师负责设计判断和质量把控。
本文由 WPS 灵犀辅助生成 | 2026.05.12

点赞收藏加关注,将来用到不迷路
୧⍤⃝🍓୧⍤⃝🌸୧⍤⃝🍎୧⍤⃝🍉
夜雨聆风