CATIA Knowledgeware与EKL参数化设计:从Parameter到Knowledge Pattern
深入CATIA Knowledgeware五大对象(Parameter、Rule、Check、Reaction、Knowledge Pattern),结合EKL语法、参数化法兰盘完整示例与企业级落地建议,掌握工业级参数化设计的核心技能。
CATIA Knowledgeware 与 EKL 参数化设计:从 Parameter 到 Knowledge Pattern
引言
如果说 CAA RADE 是 CATIA 二次开发的”重型武器”,那么 Knowledgeware(KW)就是它的参数化与规则中枢——并且是普通用户也能上手、不需要 C++ 也能产出生产级成果的那一层。本文是 CATIA 二次开发完整指南 的专题篇,专注讲 KW 的内部结构、EKL 语法、五大知识对象的组合方式,最后用一个完整可复制的参数化法兰盘示例把所有概念串起来。
阅读对象:已经熟悉 CATIA 建模、想把”重复劳动”变成”参数驱动”的设计工程师与 CAD 开发者。
Knowledgeware 模块全景
Knowledgeware 不是一个单独的 Workbench,而是若干个许可模块的总称:
| 模块 | 简称 | 主要能力 |
|---|---|---|
| Knowledge Advisor | KWA | Parameter、Formula、Rule、Check、Set of Equations |
| Knowledge Expert | KWE | Expert Rule、Expert Check(多对象批量规则) |
| Product Knowledge Template | PKT | UDF、Power Copy、Knowledge Pattern、Document Template |
| Product Engineering Optimizer | PEO | 优化、敏感性分析 |
| Business Process Knowledge Template | BKT | 跨产品线的标准化工程模板 |
最常用的组合是 KWA + PKT:KWA 负责”在一个零件内部做参数与规则”,PKT 负责”把参数化的零件批量复制成结构化产物”。本文重点讨论这两个模块,KWE/PEO/BKT 留给读者后续按需学习。
EKL 语法速览
EKL(Enterprise Knowledge Language)是 KW 内部使用的脚本语言,长得像 BASIC + SQL 的混血。理解它的关键是:EKL 是基于”特征引用”的,每个变量都是 CATIA 模型中实际存在的对象。
类型系统
EKL 把所有值都视为有类型的对象:
let length(Length) // 带单位的长度
let count(Integer) // 整数
let flag(Boolean) // 布尔
let label(String) // 字符串
let myPad(Pad) // 一个 Pad 特征
let myList(List) // 列表
带单位的类型最关键——Length、Angle、Mass、Volume、Density、Pressure 等都是一等类型,EKL 会自动做单位换算。例如:
let l(Length)
l = 100mm
let l2(Length)
l2 = l + 2cm // 自动得到 120mm
操作符与函数
+ - * / 算术
== <> < > <= >= 比较
and or not 逻辑
"prefix" + "_" + name 字符串拼接
round(x) ceil(x) floor(x) 数学
sqrt(x) sin(x) cos(x)
length("hello") 字符串长度
引用模型对象
反引号包裹的字符串是特征路径:
`Parameters\OuterDiameter`
`PartBody\Pad.1\Length`
`Geometrical Set.1\Sketch.1`
引号内部的反斜杠是 CATIA 自身的层级分隔符(不是 Windows 路径)。
控制流
if condition then
expression1
else
expression2
endif
let i(Integer)
i = 0
while i < 10
{
/* ...对第 i 项做点什么... */
i = i + 1
}
/* 也可对集合做迭代: */
for x inside myList
{
/* ...处理 x... */
}
注意:EKL 的 while / for inside 循环只在 KWE 与 Knowledge Pattern 中可用,纯 KWA 的 Rule 里不能写循环——这是新手最容易绊倒的地方。
五大知识对象逐个讲解
1. Parameter / Formula
Parameter 是显式声明的命名变量。建模工程师熟悉的”参数树”中的所有项都是 Parameter。
在 KWA 里手工添加:菜单 Knowledge → Formula → Add → 选择类型(Length / Integer / Boolean …)→ 输入名字与初值。
Formula 是把一个 Parameter 与一个 EKL 表达式绑定:
`Parameters\TotalWeight` = `Parameters\Density` * `Parameters\Volume`
Formula 的特点是实时双向绑定——修改 Density 或 Volume,TotalWeight 立即更新。但 Formula 的右侧只能是表达式,不能写控制流。
最佳实践:
- 命名遵循统一前缀(如
Param_、Geom_、Calc_),方便后续过滤 - 单位敏感的参数显式带单位(
100mm而不是100) - 避免在 Formula 里直接引用
PartBody\Pad.1\FirstLimit\Length,应该建一个中间 Parameter,让 Pad 的长度反过来引用 Parameter——这样改参数化结构时不会破坏几何
2. Rule
Rule 是事件驱动的代码块,可以包含控制流。在零件每次 Update 时触发。
let nBolts(Integer)
let diameter(Length)
diameter = `Parameters\OuterDiameter`
if diameter < 100mm then
nBolts = 4
else if diameter < 200mm then
nBolts = 6
else if diameter < 400mm then
nBolts = 8
else
nBolts = 12
endif
`Parameters\BoltCount` = nBolts
`Parameters\BoltCircleDiameter` = diameter * 0.85
Rule 的强大之处:
- 完全嵌入零件,重新打开后规则仍然生效
- 可以读写所有可访问的 Parameter
- 可以调用内置函数(数学、字符串、Body 操作)
Rule 的边界:
- 不能新增几何(要新增几何用 Knowledge Pattern)
- 在大型装配中性能开销不可忽视,建议在 Product 顶层只放轻量 Rule
3. Check
Check 是”会发出警告”的特殊 Rule。它返回一个 Boolean,CATIA 会在违反时点亮检查器图标。
// 名为 Check_MinWallThickness
`PartBody\Pad.1\FirstLimit\Length` >= 2mm
更复杂的 Check 可以带消息:
let okay(Boolean)
let msg(String)
let t(Length)
t = `Parameters\WallThickness`
okay = (t >= 2mm) and (t <= 10mm)
msg = "壁厚 " + t + " 超出允许范围 [2mm, 10mm]"
Message(msg)
okay
典型用途:
- 工艺合规性检查(最小壁厚、最大长径比、允许的特征数量)
- 装配级冲突预警
- 与 Reaction 配合做”软强制”——违反时给出警告,但不阻断保存
4. Reaction
Reaction 是事件响应器:监听某个对象的事件(修改、激活、Update),触发指定的 Action(一段 EKL 或 VBScript)。
例:当某个 Parameter 被修改时,自动重新生成衍生几何:
// Source: Parameters\OuterDiameter
// Type: ValueChange
// Action:
let r(Length)
r = `Parameters\OuterDiameter` / 2
`Geometrical Set.1\Circle.1\Radius` = r
Reaction 比 Rule 更”响应式”,但调试更难——事件链一长就容易陷入”为什么没有触发”的迷宫。建议生产环境优先用 Rule,Reaction 只在事件驱动语义不可替代时使用。
5. Knowledge Pattern:批量结构化建模的核武器
这是整个 KW 体系最强的武器。Knowledge Pattern 允许你用 EKL 在 Rule 里实例化整组 PowerCopy / UDF,相当于”建模脚本”。
一个最简单的 Pattern 骨架:
let i(Integer)
let template(PowerCopyReference)
let inst(PowerCopyInstance)
let pos(Plane)
template = `KnowledgePatternTemplates\BoltHoleTemplate`
i = 0
while i < `Parameters\BoltCount`
{
pos = `Geometrical Set.1\BoltPositionsArray\Plane.` + (i + 1)
inst = template -> Instantiate("Hole_" + i, pos)
i = i + 1
}
Pattern 的关键概念:
- Template:一个预先做好的 PowerCopy(参考 PKT 工作台中的 PowerCopy 工具)
- Instantiate:把 Template 在指定位置/参数下实例化为新的几何
- 循环:可以在 while/for 内任意次实例化
Pattern 的应用面非常广:
- 标准件批量分布(螺栓、焊点、铆钉)
- 参数驱动的肋板生成(数量与位置随设计参数变化)
- 复杂电气线束的拓扑生成
完整示例:参数化法兰盘
下面我们把上面五种对象组合起来,做一个能根据”外径”自动决定螺栓数量、孔径、孔位、并附带壁厚校验的法兰盘。
Step 1: 设计 Parameter
| Parameter 名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
OuterDiameter | Length | 200mm | 法兰外径 |
InnerDiameter | Length | 80mm | 中心孔直径 |
Thickness | Length | 20mm | 法兰厚度 |
BoltCount | Integer | 6 | 螺栓数量(由 Rule 计算) |
BoltDiameter | Length | 10mm | 螺栓孔直径(由 Rule 计算) |
BoltCircleDiameter | Length | 160mm | 螺栓圆直径(由 Rule 计算) |
Step 2: 主 Rule(命名 Rule_FlangeSizing)
let d(Length)
d = `Parameters\OuterDiameter`
// 螺栓数量按外径阶梯
if d < 120mm then
`Parameters\BoltCount` = 4
else if d < 200mm then
`Parameters\BoltCount` = 6
else if d < 320mm then
`Parameters\BoltCount` = 8
else
`Parameters\BoltCount` = 12
endif
// 螺栓直径按外径阶梯(GB/T 9119 简化版)
if d < 120mm then
`Parameters\BoltDiameter` = 10mm
else if d < 200mm then
`Parameters\BoltDiameter` = 12mm
else if d < 320mm then
`Parameters\BoltDiameter` = 16mm
else
`Parameters\BoltDiameter` = 20mm
endif
// 螺栓圆直径 = 外径 * 0.8(工程经验值)
`Parameters\BoltCircleDiameter` = `Parameters\OuterDiameter` * 0.8
Step 3: 几何骨架
在 Geometrical Set 里手工建立:
Plane.XY为基础平面Sketch.Outer画外圆(直径绑定OuterDiameter)Sketch.Inner画内圆(直径绑定InnerDiameter)Pad.Body把两个草图拉伸成法兰本体(厚度绑定Thickness)Geometrical Set.BoltPositions为螺栓位置集合(下面用 Pattern 填充)
Step 4: 螺栓孔的 PowerCopy 模板
在 PKT 工作台中创建一个 PowerCopy BoltHoleTemplate:
- 输入:1 个 Plane、1 个 Length(孔径)、1 个 Length(深度)
- 输出:1 个 Hole 特征
Step 5: 螺栓位置 Knowledge Pattern
let i(Integer)
let n(Integer)
let bcd(Length)
let r(Length)
let angle(Angle)
let centerPoint(Point)
let template(PowerCopyReference)
let inst(PowerCopyInstance)
n = `Parameters\BoltCount`
bcd = `Parameters\BoltCircleDiameter`
r = bcd / 2
template = `KnowledgePatternTemplates\BoltHoleTemplate`
i = 0
while i < n
{
angle = (i * 360deg) / n
centerPoint = pointInPlane(`Plane.XY`,
r * cos(angle),
r * sin(angle))
inst = template -> Instantiate("BoltHole_" + i + 1,
centerPoint,
`Parameters\BoltDiameter`,
`Parameters\Thickness` + 2mm)
i = i + 1
}
Step 6: 合规 Check
最后加一个 Check 防止设计师误用:
let dRing(Length)
dRing = `Parameters\OuterDiameter` - `Parameters\BoltCircleDiameter`
let okay(Boolean)
okay = dRing >= 30mm
Message("外径与螺栓圆直径之差至少 30mm(当前 " + dRing + ")")
okay
效果
设计师只需修改 OuterDiameter 一个参数,整个法兰的厚度联动、螺栓数量、孔径、孔位、合规检查全部自动更新。这就是 KW 的真正威力——把设计经验固化为 Rule,让模型自己执行。
与 Power Copy / UDF 的边界
KW 工具集里还有 PowerCopy(PC)和 User-Defined Feature(UDF)两个相邻概念,初学者常混淆:
| 工具 | 用途 | 在哪里建 | 在哪里实例化 |
|---|---|---|---|
| Parameter / Rule | 单零件内部的参数与逻辑 | KWA | 当前零件 |
| PowerCopy | ”几何拼图块”,可拷贝到其他零件 | PKT | 任意零件,手动或 Pattern 调用 |
| UDF | ”封装的特征”,可像 Pad 那样在树上呈现一个节点 | PKT | 任意零件 |
| Knowledge Pattern | 在一个零件里循环实例化 PowerCopy | KWA + PKT | 当前零件 |
经验法则:
- 单零件参数化 → Parameter + Rule
- 跨零件复用一段几何 → PowerCopy
- 想让特征”看起来像内置 Pad” → UDF
- 想根据数量参数循环实例化 → Knowledge Pattern + PowerCopy
DELMIA / 3DEXPERIENCE 下的迁移
3DEXPERIENCE 上的 Knowledgeware 模块名称发生了变化:
- Engineering Rules Capture:相当于 V5 的 KWA
- EKL:脚本语言本身在 3DX 中保留 Enterprise Knowledge Language 称谓,与 V5 的语法兼容性高
- Knowledge Apps:取代 PKT 中的部分能力
迁移注意事项:
- Document Template 在 3DX 里已废弃,被 Reference Engineering Template 替代
- EKL 中引用其它 Reference 的语法变化:V5 用
Product\PartBody\Pad.1,3DX 用基于 PLM Reference ID 的查找 - Reaction 在 3DX 中弱化,更鼓励用平台级事件总线
- PowerCopy 在 3DX 中要求显式声明 Inputs/Outputs 的语义类型(不能像 V5 那样依赖隐式约定)
如果团队主力还在 V5、未来要迁 3DX,EKL 表达式部分基本可移植,几何引用部分需要重做。建议把规则尽量集中在 Parameter 上,少直接引用几何特征。
企业级落地建议
命名规范
Param_<功能>_<单位> // 例如 Param_OuterDia_mm
Calc_<计算结果> // 例如 Calc_BoltCount
Geom_<几何对象> // 例如 Geom_Sketch_Outer
Rule_<规则名> // 例如 Rule_FlangeSizing
Check_<检查项> // 例如 Check_MinWallThickness
统一前缀让大型项目里”哪些是手工参数、哪些是规则计算结果”一目了然。
版本治理
- KW 对象本身存在
.CATPart内部,无法独立 diff - 推荐做法:导出 EKL 文本(菜单
Knowledge → Export Rules),把 EKL 文件纳入 Git,与 CATPart 配套 - ENOVIA / 3DEXPERIENCE 用户可以直接走 PLM 版本管理,但要确保对 KW 对象开启了细粒度版本
性能调优
KW 在大装配中容易成为瓶颈。常见对策:
- 单个 Rule 内的对象访问超过 50 次,要拆分到多个 Rule
- 避免 Rule 之间循环依赖(A 修改 B,B 修改 A)
- Reaction 的 Action 中不要做大段几何运算
- 把”展示用”的衍生量放 Formula,把”决策用”的逻辑放 Rule,两者性能特征不同
与 ERP/PDM 的集成口径
最后一公里:把 KW 计算结果输出到 ERP/PDM。常用方案:
- Automation 桥接:用 VBA / Python 脚本读取 Parameter 写出 CSV 或调 Web API
- 3DX REST API:3DEXPERIENCE 上更优雅的方式
- ENOVIA SOA:传统 V5 + ENOVIA 部署的成熟方案
具体接入方式建议参考 CATIA 二次开发完整指南 中的 Automation 章节。
总结
Knowledgeware 不是”高级用户的玩具”,而是把一线工程师的设计经验固化为模型自身规则的工程化武器。掌握 Parameter / Rule / Check / Reaction / Knowledge Pattern 这五件套,加上一份清晰的命名与治理规范,一个团队就能把”画图”工作转变为”参数填空 + 自动校验”的流水线。
进一步阅读:
- CATIA 二次开发完整指南 — 系列总览
- Creo 参数化设计自动化 — 参数化思想的横向对比
- NX 二次开发完整指南
文章标签
相关文章
CATIA Knowledgeware and EKL Parametric Design: From Parameters to Knowledge Pattern
A deep dive into the five core Knowledgeware objects (Parameter, Rule, Check, Reaction, Knowledge Pattern), with EKL syntax, a complete parametric flange example, and enterprise-grade adoption guidance.
CATIA二次开发完整指南:从CAA到Automation
系统介绍CATIA二次开发的四大技术路线(CAA RADE、Automation对象、VBA宏、Knowledgeware),覆盖环境搭建、典型场景、ENOVIA集成与常见陷阱,帮助开发者选择最合适的扩展方式。
Creo参数化设计自动化:提升设计效率的关键技术
深入探讨Creo参数化设计的核心技术和自动化实现方案,包括族表、程序、关系式等高级功能的应用。