PDMS-AVEVA-E3D二次开发教程01三维工厂设计为什么必须写代码——二次开发的三条真实通道版本与事实声明产品锚点AVEVA E3D Design官方现名曾用名 AVEVA Everything3D / AVEVA E3D历史产品 AVEVA PDMS自 2024 年 4 月 1 日起停止销售与技术支持。版本号锚点仅取官方发布说明中可查的 3.1.4.02022-02与 3.1.5.02022-04当前版本以官方发布说明为准。本篇出现的模块名/命令/文件名只写官方在线手册已记载者未确证的一律标注以官方文档为准。文中所有位号、坐标、等级、管径示例均为示例性数据不代表任何标准规定。许可与价格以 AVEVA 官方渠道为准。一句话结论AVEVA E3D Design 的二次开发只有两条官方通道——内置宏语言 PMLProgrammable Macro Language含 PML Forms Menus 界面定制与 .NET API两条通道覆盖同一套数据库区别在于 PML 贴着交互与数据模型走、.NET 贴着算法与外部系统走二者的分界线是要不要脱离 E3D 运行环境。〇、认知问题Q1为什么一个三维工厂设计软件必须开放二次开发不做二次开发工程上到底损失什么Q2AVEVA PDMS、AVEVA Everything3D、AVEVA E3D Design 是什么关系为什么教程要叫PDMS/E3D而不是只叫 E3DQ3官方说PML 与 .NET API 结合这两条通道各自的真实能力边界在哪谁更适合做什么Q4三维工厂设计里的二次开发需求能不能归成有限的几类每类对应哪条通道、哪个模块Q5哪些事不该用二次开发做做了会付出什么代价一、机制解析1.1 三维工厂设计的成本结构为什么重复动作是最大的浪费三维工厂设计3D Plant Design的交付物是从一份模型数据库里长出来的图纸、管道轴测图、材料表BoM、报表。官方数据手册的表述很直白——“All deliverables — drawings, piping isometrics, BoMs, or reports — are generated directly from the definitive 3D design model”并且Templates and rules ensure that drawings and reports automatically comply with project standards。这句话反过来读就是二次开发的全部商业理由交付物既然全部源自模型那模型侧任何一次规范化动作都会被交付物放大 N 倍。一个 5000 根管道的项目里给每根管道补一个自定义属性这种动作手工做是 5000 次点击写成一段 PML 是一次运行。官方在出图章节直接给出了量级判断“Configurable automation tools enable users to automatically generate annotated and dimensioned drawings, which can typically save thousands of person-hours on a project.”为什么这对你重要二次开发的收益不是线性的而是一次性投入 项目规模放大。你在 10 根管道的练习模型上学的方法到了 5000 根管道的项目上就是几千工时。所以本篇的定位不是教你写代码而是教你识别哪些动作值得写成代码。1.2 产品沿革三块牌子一条血脉阶段产品名状态与证据历史AVEVA PDMS已被 AVEVA E3D Design 取代自 2024 年 4 月 1 日起停止销售与技术支援过渡AVEVA Everything3DAVEVA E3D“AVEVA Everything3D™ is now AVEVA E3D Design.”当前AVEVA E3D Design官方现名与 AVEVA Unified Engineering 统一工程数据面同栈为什么教程要叫PDMS/E3D因为在真实的设计院里这两个名字会同时出现在同一份工作清单上老项目仍在 PDMS 上维护新项目按 E3D Design 建设。二者的二次开发血脉是同一套PML 从 PDMS 时代沿用至今但模块名、命令细节、可用特性存在代际差异。铁律 6 因此要求凡在两代产品间行为不同的命令/模块正文必须显式标注适用版本新项目一律按 AVEVA E3D Design 口径写。1.3 官方口径的双通道PML 与 .NET APIAVEVA 官方宣传材料的原文是“A built-in macro language, PML, together with a .NET API, provide almost unlimited flexibility in creating custom functionalities to increase efficiency and build valuable proprietary expertise.”中文官方口径一致“内置的宏语言 PML 与 .NET API 结合在一起能以无限的灵活创建自定义功能以提高效率并积累有价值的专业知识。”两条通道的关系不是新旧替代而是分工。先把边界画清楚维度PML 通道.NET API 通道官方定位内置宏语言自定义设施的正式名称是 PML Forms MenusFM官方定义为提供用 PML 定制 E3D 图形界面的能力的软件模块与 PML 并列的外部程序接口官方口径仅确认其存在与无限灵活的定位运行宿主E3D Design 进程内部随模块加载需要自行构建程序集通过产品提供的加载机制进入进程具体加载机制以官方 .NET 参考文档为准语言门槛低类 BASIC 的命令式 对象语法大小写无关高C#/VB.NET、程序集、版本绑定最适合界面交互、数据库遍历、属性读写、出图驱动、报表复杂算法、外部系统调用、第三方库复用、性能敏感计算交付形态.pmlf/.pmlfrm等文件放进 PML 搜索路径PMLLIB团队可直接共享编译产物DLL 注册配置需要版本管理与部署流程升级风险中官方手册明确Minimising Problems for Future Upgrades是一章主题高API 版本绑定需随产品升级重编译PML 通道的硬边界必须记住官方文档明确写了Serious Warning About Software Customisation一章以及Minimising Problems for Future Upgrades——这不是客套话而是官方在告诉你定制越多、升级越痛。所以本系列的取舍原则是能用 PML 表达的不要上升为 .NET。关于 .NET 通道本系列采取诚实的探测式方法学详见第 13 篇官方公开文档确认 .NET API 存在但具体命名空间/类名/方法签名并未在公开文档中确证因此本系列不写任何臆测的命名空间而是教你在本机安装目录里用反射把程序集与公开类型清点出来再据此编码。这与第 02 篇的环境探测清单是同一种工程纪律。1.4 模块地图代码会活在哪个模块里官方帮助文档把 E3D 的使用面切成若干模块。二次开发接触频率最高的三个其余模块名与职责以官方文档为准模块官方职责原文要点二次开发常见用途MODEL设计建模模块设计数据库的主体层级为 WORLD → SITE → ZONE → 各专业元素批量建模、属性校验、碰撞检查、规则执行DRAW出图模块“DRAW enables dimensioned and annotated scale drawings of selected parts of the design model to be produced. All information needed to create the drawing is accessible via a single drawing database, which extracts data to be used for dimensioning directly from the MODEL database.”批量出图、图纸目录、标注与尺寸数据取用Catalogue元件库元件/规格数据的来源“Piping components are selected using Piping Specifications that reference standard catalogue data”等级Specification完整性检查、元件数据对账另外两类看不见但必须知道的数据世界一是导入数据所在的应用数据世界官方 IFC 文档提到 Application Data World导入元素在其中带特殊后缀例如IFCREVIT-HDR二是出图自己的数据库DRAW 数据库与 MODEL 数据库分立通过取数建立联系。这两者在批量脚本里很容易被误当成设计模型本体——第 12 篇会专门处理。1.5 五类真实需求从想自动化到该写什么把工程口头的能不能自动化一下翻译成代码需求其实只有五类。这张表是本系列 20 篇的隐藏目录需求类典型诉求主通道本系列对应篇A 表单与交互“给班组做个录入界面别让他们敲命令”PMLForms Menus07、08B 批量建模与批改“把这批支架参数一次性写进模型”PML数据库读写05、06、09C 规则检查与质量“上模型前扫一遍不合格的列出来”PML Rule Manager / Clash Detection11、17D 出图与数据导出“每周出一批 ISO 图还要一份材料表”PML DRAW/Isodraft/Datal/IFC12、18、19E 跨专业/跨软件数据对接“模型和应力分析、和工艺数据怎么对上”PML 产品自带接口 .NET15、16经验法则如果一条需求描述里出现人要看、人要填、人要选它落在 A 类出现遍历、一批、每个落在 B 或 C 类出现导出、报表、图纸、交付落在 D 类出现另一个软件、另一个专业落在 E 类。分类定错通道就选错返工代价很大。1.6 不该做的事四条清晰的不不替代设计规范本身二次开发能检查是否合规不能定义什么叫合规。规则表必须由专业负责人签字代码只做执行者。不做人工判断的最后一环可自动化的判定必须能被写成确定性的条件表达式。需要看图感觉一下的不要硬写成代码。不在生产库里裸跑破坏性脚本铁律 4Save Work与 Undo/Redo 的语义边界以官方文档为准工程上正确的顺序是离线副本/Extract 上跑通 → 前后比对 → 再生产。不追求大而全的平台官方自己都在提醒升级问题。工具箱应该由小颗粒函数积木式堆起来第 20 篇的架构而不是一个巨型定制程序。二、完整代码与逐行剖析本篇还没有进入 PML 语法第一个程序先解决我的机器上到底装了什么——这是铁律 3 要求的探测动作也是后续所有脚本的前置条件。代码 1-1本机 E3D/PDMS 安装与运行时盘点PowerShell任何 Windows 机器可运行# -*- coding: utf-8 -*-# env_probe.ps1 —— 盘点本机 AVEVA 三维设计产品的安装与运行时足迹 用途为后续 PML 脚本与批处理任务提供环境探测清单铁律 3 运行powershell -ExecutionPolicy Bypass -File env_probe.ps1 输出aveva_env_inventory.csvUTF-8 #$ErrorActionPreferenceSilentlyContinue# 探测脚本的原则永不崩、只降级$rowsNew-ObjectSystem.Collections.Generic.List[object]functionAdd-Row{param($Category,$Name,$Value,$Source)$rows.Add([pscustomobject]{category $Categoryname $Namevalue $Valuesource $Source})|Out-Null}# ---- 1. 环境变量PMLLIB 是 PML 的搜索路径最关键的运行时配置 ----# 官方文档 Querying the Location of PML Files 对应的交互式查法是在命令窗口输入 Q EVAR |PMLLIB|foreach($vin (PMLLIB,PDMSDIR,PDMSWK,PDMSTMP,AVEVA_PDMS,AVEVA_E3D)){$val[Environment]::GetEnvironmentVariable($v,Machine)if(-not$val){$val[Environment]::GetEnvironmentVariable($v,User)}if($val){Add-Rowenvvar$v$valEnvironment}}# ---- 2. 常见安装根目录扫描目录名因产品代际与部署方式而异 ----$candidates (C:\AVEVA,C:\Program Files\AVEVA,C:\Program Files (x86)\AVEVA,$env:PUBLIC\Documents\AVEVA,$env:ProgramData\AVEVA)foreach($cin$candidates){if(Test-Path-LiteralPath$c){Add-Rowinstall_rootfound$cFilesystemGet-ChildItem-LiteralPath$c-Directory|Select-Object-First 20|ForEach-Object{Add-Rowinstall_child$_.Name$_.FullNameFilesystem}}}# ---- 3. 可执行文件与批处理入口只记录路径不启动避免副作用 ----foreach($exein (*.exe,*.bat)){foreach($cin$candidates){if(Test-Path-LiteralPath$c){Get-ChildItem-LiteralPath$c-Filter$exe-Recurse-Depth 3|Where-Object{$_.Name-matchpdms|e3d|everything3d|monitor|dabacon}|ForEach-Object{Add-Rowexecutable$_.Name$_.FullNameFilesystem}}}}# ---- 4. 注册表安装登记项键名样式因版本而异故用多关键字撒网 ----$regRoots (HKLM:\SOFTWARE\AVEVA,HKLM:\SOFTWARE\WOW6432Node\AVEVA,HKCU:\SOFTWARE\AVEVA)foreach($rin$regRoots){if(Test-Path$r){Get-ChildItem$r|ForEach-Object{Add-Rowregistry$_.PSChildName$_.NameRegistry}}}# ---- 5. 当前机器上的 .NET 运行时.NET 通道的前置条件第 13 篇会用 ----Add-Row.netdotnet_cli((dotnet--version)-join)CommandLineAdd-Row.netos_machine$env:PROCESSOR_ARCHITECTUREEnvironment# ---- 输出 ----$outJoin-Path(Get-Location)aveva_env_inventory.csv$rows|Export-Csv-LiteralPath$out-NoTypeInformation-Encoding UTF8if($rows.Count-eq0){Write-Host未在本机发现 AVEVA 三维设计产品足迹可继续用公开 API 与方法学练习真正的产品操作留待有环境的机器。}else{Write-Host(登记 {0} 条环境事实 - {1}-f$rows.Count,$out)}逐行剖析$ErrorActionPreference SilentlyContinue探测脚本的第一原则是永不崩、只降级。注册表与文件系统探测天生会撞权限与瞬态项“少一条永远好于崩整个清单”。PMLLIB 是全篇最重要的一行。PML 之所以能在命令窗口里敲一个函数名就调用到它靠的是搜索路径机制官方手册里专门有Storing and Loading PML Files与Querying the Location of PML Files两节讲这件事Bentley 官方文档给出的交互式查法是Q EVAR |PMLLIB|。你的脚本装到哪、为什么我这边能跑别人那边说找不到函数答案几乎都在 PMLLIB 这一行里第 02、08 篇展开。第 2 段只列目录、不启动程序盘点阶段启动一次 GUI 可能触发数据库锁或版本弹窗在共享服务器上是打扰别人的行为。第 3 段用-Depth 3限制递归深度AVEVA 安装树很深包含大量资源与模板不限深度会让脚本跑几分钟并输出几千行噪音。第 4 段的多关键字撒网AVEVA 产品的注册表布局在不同代际/不同部署方式下不一致所以不写死某一条路径而是把常见根枚举出来。这里体现的正是本系列贯穿始终的先探测后编码。第 5 段顺手记录架构与 .NET 运行时第 13 篇讲 .NET 通道时要用提前埋点省一次返工。输出用-Encoding UTF8清单是要给人看、要进评审文档的资产中文列名不能乱码。三、常见报错与排查报错 3-1脚本跑完提示未在本机发现足迹但机器上明明装了产品。现象清单为空。根因有三① 产品装在自选盘符/自选目录如D:\AVEVA\Plant\...而脚本只扫了 C 盘候选路径② 通过网络映射或虚拟化交付Citrix/App-V 类安装并未落在本机文件系统③ 只有客户端而无本地安装目录。解法先在 Windows添加/删除程序里找到产品的实际安装位置把它加进$candidates若是虚拟化交付则直接从产品的关于对话框或启动脚本里取环境变量与搜索路径落进清单。报错 3-2Q EVAR |PMLLIB|返回空或只回显命令。现象在命令窗口查不到 PML 搜索路径。根因Q类查询命令只对当前已加载模块里已注册的变量有意义且不同产品代际下环境变量的注册名可能不同这也是为什么代码 1-1 一次探测了 PMLLIB、PDMSDIR、AVEVA_E3D 等多个候选名。解法先确认当前模块已启动、命令拼写与竖线定界符正确PML 文本定界符以官方 “Text Delimiters” 一节为准仍为空时去环境变量面板与启动脚本里找别在命令窗口里反复试。报错 3-3把某个网上抄来的命令/对象名直接粘进命令窗口报语法错。现象命令无效或对象不存在。根因跨产品代际——PDMS 时代的命令与对象在 E3D Design 上不一定同名同义铁律 6也可能来自第三方宏而该宏未在你的 PMLLIB 路径内。解法回到官方在线手册按你的产品代际与版本查第三方宏先确认其文件已放入搜索路径并执行过索引重建PML REHASH ALL官方 IFC 文档明确提到该命令用于刷新 PML 索引文件再调用。报错 3-4命令窗口里粘贴多行宏文本只执行了第一行。现象后续行被当成文本。根因官方文档明确说明——粘贴选项会把粘贴文本的每一行作为独立命令执行但前提是文本确实是多行纯命令文本若包含非命令内容如说明性文字、未注释的标题行粘贴执行会在那一行中断。解法把宏存成文件、用宏机制运行而不是依赖粘贴临时粘贴时确保每一行都是合法命令。四、动手练习练习 1盘点运行代码 1-1产出一份aveva_env_inventory.csv。判定标准脚本正常退出CSV 存在且列头为category,name,value,source四列若本机装有产品category列中至少出现envvar与install_root各 1 行。无产品环境时脚本需正常退出并打印提示CSV 仅含表头。练习 2找路径在有产品的机器上用交互方式查一次 PML 搜索路径如命令窗口Q EVAR |PMLLIB|把结果与你 CSV 中的envvar/PMLLIB行比对。判定标准形成一条明确结论——“PMLLIB 的取值或未设置”并说明该书签与产品安装目录的关系。练习 3需求分类把你所在专业最近三个月提过的能不能自动化一下列成清单按 1.5 节五类归档。判定标准每条需求都必须落进 A~E 之一并写出理由若某条无法归档说明它不是二次开发需求例如属于流程管理你需要在笔记里明确指出这一点。思考题无标准答案AVEVA 官方为什么要在软件定制章节里专门写Serious Warning About Software Customisation和Minimising Problems for Future Upgrades验证要点① 你能否举出至少一个定制越深、升级越痛的真实机制提示文件名/函数名/命令名与产品内置的冲突面② 你是否理解官方 PML 加密Published PML想解决什么问题③ 你的团队有没有定制清单这类资产如果没有第 20 篇的交付清单里应该怎么补。五、小结与下一篇预告三维工厂设计的交付物全部源自模型因此模型侧的每一次规范化都会被交付物放大——这是二次开发的商业理由。AVEVA E3D Design 只开放两条官方通道PML贴交互与数据模型与.NET API贴算法与外部系统两条通道覆盖同一套数据库加上产品自带的外部接口IFC 导出、MultiCAD 导入、CAESAR II 管应力接口、Datal/OUTPUT 报表构成三条真实通道。需求可以收敛成五类交互/批量/规则/交付/对接分类定了通道就定了。下一篇进入工程现场第 02 篇《环境盘点PMLLIB 搜索路径、文件后缀族与能力探测》——把本篇的粗盘点升级成可交付的环境探测清单讲清楚 PML 文件按什么命名、放在哪里才会被找到以及为什么我这边能跑是最常见的团队协作故障。本篇认知问题回显FAQQ1为什么三维工厂设计软件必须开放二次开发A因为官方明确所有交付物图纸、轴测图、材料表、报表都直接由三维模型生成且模板与规则保证其符合项目标准因此模型侧的一次规范化动作会被全部交付物放大官方数据手册称可配置的自动化出图工具在一个项目上通常能节省数千人时。Q2AVEVA PDMS、AVEVA Everything3D、AVEVA E3D Design 是什么关系A同一血脉的三代牌子AVEVA PDMS 已被 AVEVA E3D Design 取代并自 2024 年 4 月 1 日起停止销售与支持AVEVA Everything3DAVEVA E3D是中间名官方发布页写明 “AVEVA Everything3D is now AVEVA E3D Design”。教程叫 PDMS/E3D 是因为设计院里两代产品长期并存二次开发需按代际标注差异。Q3PML 与 .NET API 两条通道的能力边界在哪A官方口径是内置宏语言 PML 与 .NET API 结合提供几乎无限的灵活性。实践中 PML 运行在 E3D 进程内、不经编译、最适合界面交互、数据库遍历、属性读写与出图报表驱动.NET API 需要构建程序集、版本绑定更紧适合复杂算法与外部系统集成。取舍原则是能用 PML 表达的不上升为 .NET因为官方专章提示定制越深升级越痛。Q4三维工厂设计的二次开发需求能归成几类A五类A 表单与交互PML Forms Menus、B 批量建模与批改数据库读写、C 规则检查与质量Rule Manager、Clash Detection 等、D 出图与数据导出DRAW、Isodraft、Datal、IFC、E 跨专业跨软件数据对接产品自带接口与 .NET。判定线索是需求描述里的人要看/遍历一批/导出交付/另一个软件四类词。Q5哪些事不该用二次开发做A四类不替代设计规范本身规则须由专业负责人定义代码只执行不做需要人眼判断的最后一环不在生产数据库上首次裸跑破坏性脚本应先离线副本或 Extract 验证并留存前后比对不追求大而全的定制平台因为官方专门提示软件定制会带来升级风险应改用小颗粒函数积木式堆叠。
阅读完成 · 觉得有帮助?