7 min read 1,965 words CAD开发

CATIA Knowledgeware与EKL参数化设计:从Parameter到Knowledge Pattern

深入CATIA Knowledgeware五大对象(Parameter、Rule、Check、Reaction、Knowledge Pattern),结合EKL语法、参数化法兰盘完整示例与企业级落地建议,掌握工业级参数化设计的核心技能。

#CATIA #Knowledgeware #EKL #参数化设计
Share:

CATIA Knowledgeware 与 EKL 参数化设计:从 Parameter 到 Knowledge Pattern

引言

如果说 CAA RADE 是 CATIA 二次开发的”重型武器”,那么 Knowledgeware(KW)就是它的参数化与规则中枢——并且是普通用户也能上手、不需要 C++ 也能产出生产级成果的那一层。本文是 CATIA 二次开发完整指南 的专题篇,专注讲 KW 的内部结构、EKL 语法、五大知识对象的组合方式,最后用一个完整可复制的参数化法兰盘示例把所有概念串起来。

阅读对象:已经熟悉 CATIA 建模、想把”重复劳动”变成”参数驱动”的设计工程师与 CAD 开发者。

Knowledgeware 模块全景

Knowledgeware 不是一个单独的 Workbench,而是若干个许可模块的总称:

模块简称主要能力
Knowledge AdvisorKWAParameter、Formula、Rule、Check、Set of Equations
Knowledge ExpertKWEExpert Rule、Expert Check(多对象批量规则)
Product Knowledge TemplatePKTUDF、Power Copy、Knowledge Pattern、Document Template
Product Engineering OptimizerPEO优化、敏感性分析
Business Process Knowledge TemplateBKT跨产品线的标准化工程模板

最常用的组合是 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)               // 列表

带单位的类型最关键——LengthAngleMassVolumeDensityPressure 等都是一等类型,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 的特点是实时双向绑定——修改 DensityVolumeTotalWeight 立即更新。但 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 名类型默认值说明
OuterDiameterLength200mm法兰外径
InnerDiameterLength80mm中心孔直径
ThicknessLength20mm法兰厚度
BoltCountInteger6螺栓数量(由 Rule 计算)
BoltDiameterLength10mm螺栓孔直径(由 Rule 计算)
BoltCircleDiameterLength160mm螺栓圆直径(由 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在一个零件里循环实例化 PowerCopyKWA + 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 中的部分能力

迁移注意事项:

  1. Document Template 在 3DX 里已废弃,被 Reference Engineering Template 替代
  2. EKL 中引用其它 Reference 的语法变化:V5 用 Product\PartBody\Pad.1,3DX 用基于 PLM Reference ID 的查找
  3. Reaction 在 3DX 中弱化,更鼓励用平台级事件总线
  4. 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 这五件套,加上一份清晰的命名与治理规范,一个团队就能把”画图”工作转变为”参数填空 + 自动校验”的流水线。

进一步阅读