批量改尺寸最容易得到一种“看上去成功”的结果:脚本没有抛异常,文件也保存了,但某个孔越过边界、公式驱动参数被错误覆盖,或前一组参数的更新失败污染了后一组。自动化要保证的是设计意图,不能只统计执行了多少次赋值。
本文以 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 | E - D/2 >= 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 | using System; |
先解析所有参数再写入,可以避免“写完前两项才发现第五项不存在”的部分失败;但它不能把后续 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 的文件夹。
参考与验证边界
- pycatia Parameter 接口:核对参数访问与字符串赋值语义。
- pycatia Part 接口:核对更新入口。
- Microsoft COM 互操作:理解托管程序与 COM 的边界。
算例来自文中简化几何模型;C# 片段尚未在真实 CATIA 安装环境编译联调。pycatia 文档中的历史 CAA 注释用于帮助理解,不构成所有 V5 版本行为相同的承诺。