CATIA V5 参数驱动开发:把单位、依赖更新与失败隔离做成契约


批量改尺寸最容易得到一种“看上去成功”的结果:脚本没有抛异常,文件也保存了,但某个孔越过边界、公式驱动参数被错误覆盖,或前一组参数的更新失败污染了后一组。自动化要保证的是设计意图,不能只统计执行了多少次赋值。

本文以 Windows 上的 CATIA V5 Automation 为边界。它不等同于 3DEXPERIENCE 的全部开发接口。C# 示例用于解释控制流程,运行前需在实际安装版本中核对类型库、参数路径与许可;这里没有宣称做过真实 CATIA 联调。

一、先把模板定义成有版本的输入接口

设模板是一块带两个通孔的板,输入为长度 L、宽度 W、厚度 T、孔径 D、孔中心到短边距离 E,单位统一为毫米,两孔均位于宽度中线 y=W/2,孔轴垂直板面。不要直接把 Excel 列标题当参数名:表格可能改中文名称,模板也可能重命名特征。更稳妥的做法是在程序中维护“业务字段—模板参数路径—量纲—允许范围—写入权限”的映射。

字段 量纲 本例约束 检查层
L、W 长度 正值,且处于模板的适用区间 输入预检
T 长度 2~12 mm 输入预检与设计规则
D 长度 正值,小于 W 输入预检
E 长度 大于 D/2 加最小边余量 耦合约束
模板版本 标识 与映射表一致 打开文档后

模板应主动暴露稳定、唯一的用户参数。参数路径是接口的一部分;“找不到 Length,就取第一个长度参数”会把一个明确错误变成隐蔽错误。不同参数集可能有同名项,因此上线前应逐项记录完整路径,而不是依靠树上的显示顺序。

参数是否可写也要明确:公式的结果应通过上游输入改变,不能为了赋值方便先删除公式。pycatia 的 Parameter 接口说明包含只读状态、关联关系及字符串赋值方法;这些资料可帮助核对对象语义,最终仍应与本机 V5 Automation 帮助对应。Parameter 接口资料

二、范围合法不代表几何合法

给出本例最小边余量 m=3 mm,左右两孔的中心分别位于 E 和 L-E。至少需要满足:

1
2
3
E - D/2 >= m
W/2 - D/2 >= m
L - 2E - D >= m

最后一个不等式约束两孔之间的净距。假设 L=60、W=30、D=8、E=12,则三个净余量分别为 8、11、28 mm,均满足要求。若只把 D 改为 24,单字段范围可能仍允许,但第一、第二项变成 0、3 mm,第一项已经失败。

这也说明约束应怎样排序:先拒绝 NaN、无穷大和负值,再检查单字段范围,最后做耦合约束。否则程序可能先进入 CAD 内核,得到难以定位的“特征更新失败”,而真实原因只是输入表违反了孔边距要求。

还应把输入精度与设计裕度分开。将 5.9996 mm 格式化成 6.000 mm 可能改变恰好位于边界的判断。业务计算应保留原始精度,在显示时再舍入;验收比较则采用明确的绝对容差。长度相差 1e-6 mm 与体积相差 1e-6 mm³ 的意义不同,不能共享一个没有量纲的“epsilon”。

三、在边界写清单位,在批次末尾更新

外部输入建议先转换成内部统一单位,再以带单位字符串写入尺寸参数。这样可以避免把 UI 当前显示单位当作程序接口,也方便日志直接读懂。数值转字符串使用 InvariantCulture,是为了避免小数逗号与字段分隔符相互混淆;是否接受该格式还需用安装版本做一次往返验证。

下面是 .NET Framework 4.8 环境下的核心方法。part 由外层的单一 COM 调用线程提供,且必须属于独立工作副本;参数名是示例模板的契约,不是 CATIA 的内置名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Globalization;

public static class PlateInputs
{
public static void Apply(dynamic part,
double lengthMm, double widthMm,
double thicknessMm, double diameterMm, double edgeMm)
{
double[] values = { lengthMm, widthMm, thicknessMm,
diameterMm, edgeMm };
foreach (double x in values)
if (double.IsNaN(x) || double.IsInfinity(x) || x <= 0)
throw new ArgumentException("尺寸必须为有限正值。");

if (thicknessMm < 2 || thicknessMm > 12 ||
edgeMm - diameterMm / 2 < 3 ||
widthMm / 2 - diameterMm / 2 < 3 ||
lengthMm - 2 * edgeMm - diameterMm < 3)
throw new ArgumentException("输入超出本例板件约束。");

string[] names = { "L", "W", "T", "D", "E" };
dynamic[] parameters = new dynamic[names.Length];
for (int i = 0; i < names.Length; i++)
{
parameters[i] = part.Parameters.Item(names[i]);
if (parameters[i].ReadOnly)
throw new InvalidOperationException("只读参数: " + names[i]);
}
for (int i = 0; i < names.Length; i++)
parameters[i].ValuateFromString(
values[i].ToString("G17", CultureInfo.InvariantCulture) + "mm");
part.Update();
}
}

先解析所有参数再写入,可以避免“写完前两项才发现第五项不存在”的部分失败;但它不能把后续 COM 调用变成数据库事务。参数写入仍可能在中途失败,Update 也可能报告几何问题。Part 的 Update 是依赖更新入口,不等于项目全部业务规则均已满足。Part 接口资料

写后读回应选择能明确换算量纲的数值接口;如果只拿到了本地化显示字符串,应在适配层解析,不能直接与输入字符串做相等比较。验收公差也要来自模型用途:例如长度允许 0.001 mm 的数值残差,不等于加工也允许相同公差。可以刻意将显示单位切换成英寸再执行同一组毫米输入,确认程序不依赖交互界面的单位状态;若结果变化,说明单位边界尚未真正隔离。

四、失败隔离要靠工作副本,而不是假装有回滚

一份可靠的批次状态可以是:预检通过、工作副本建立、参数写入、更新通过、几何验收、输出保存、结果提交。每一步都记录开始时间和失败原因,只有最后一步完成,任务才计为成功。

每组输入从同一份干净模板创建工作副本。发生异常后保留失败副本供诊断,不把它继续用于下一组;输出文件使用新的候选名称,验收通过才进入正式结果目录。把五个旧参数再写回去只能算“补偿尝试”:被删除的特征、关联关系变化、外部链接状态并不一定随之恢复。

外部链接也应进入输入清单。若模板引用了另一份骨架模型,模板文件哈希相同并不代表输入相同;必须记录依赖文件的版本或哈希。对于受 PLM 管理的模型,文件复制不能替代正式的修订和检入流程,需要使用相应平台提供的机制。

COM 对象也不应交给 Parallel.ForEach 随意并发访问。本文建议用一个明确拥有 CATIA 会话的调用线程串行执行模型操作,表格解析和结果汇总可以独立并行。STA 是 COM 公寓模型的一部分,但给任意后台线程贴上 STA 标签并不会自动解决消息循环、模态对话框或对象归属问题。Microsoft COM 线程模型

五、验收要比“Update 没报错”再走一步

对板件可以先计算解析体积作为低成本检查。忽略倒角并假定两个通孔不相交,本例净体积为 V=LWT-2π(D/2)²T。取 60×30×4、孔径 8,V 约为 6797.88 mm³。体积若接近完整板体的 7200 mm³,就有理由检查孔特征是否真的参与结果,而不是急着宣布批量生成成功。

解析值不是替代内核测量:模板有沉孔、倒角或筋时必须修改参考模型。可以同时检查包围盒、孔数、关键面间距以及输出是否可重新打开。特别应安排边界样本:最小厚度、刚好满足边余量、超界一个步长、只读参数、缺失路径、更新失败、保存失败和重复运行。

最终报告至少包含输入行号、模板及依赖版本、规范化参数、单位、工作副本路径、更新结果与几何验收结果。这样,自动化的产物才是一组可追踪的设计候选,而不仅是一个装满 CATPart 的文件夹。

参考与验证边界

算例来自文中简化几何模型;C# 片段尚未在真实 CATIA 安装环境编译联调。pycatia 文档中的历史 CAA 注释用于帮助理解,不构成所有 V5 版本行为相同的承诺。


 上一篇
CATIA 装配二次开发:实例、引用与可追溯 BOM,怎样避免数量翻倍 CATIA 装配二次开发:实例、引用与可追溯 BOM,怎样避免数量翻倍
同一零件在装配中出现多次时,实例路径、零件引用与业务料号不能混为一谈。本文从装配树展开和数量聚合出发,分析重复统计、缺失引用、配置状态和 BOM 可追溯性。
下一篇 
备份为什么恢复不了:从一致性边界到 RPO、RTO 与恢复演练 备份为什么恢复不了:从一致性边界到 RPO、RTO 与恢复演练
有压缩包和成功日志,仍可能无法恢复完整业务。以笔记数据库与附件目录为例,解释跨资源一致性、备份完成时间与数据恢复点的差别,计算 RPO、RTO,并给出独立暂存和隔离恢复的演练流程。
2026-10-18
  目录