PDMS二次开发介绍-基于.Net(C#)平台
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
配置文件中定义了按钮名字、命令ID,及停靠属性等。 UIC文件没有指定目录,则默认在PDMS主目录中。 除了支持工具条,菜单也可以在UIC文件里定义。
创建菜单、工具条示意
源自文库
创建元素
DbElement dbCE = CurrentElement.Element; // 当前选择的元素 DbElementType dbType = dbCE.GetElementType();
迭代元素,按树结构方式迭代
// 先定义过滤器 TypeFilter filt = new TypeFilter(); filt.Add(DbElementTypeInstance.SITE); filt.Add(DbElementTypeInstance.PIPE); filt.Add(DbElementTypeInstance.NOZZLE); filt.Add(DbElementTypeInstance.TEE); CompoundFilter filtComp = new CompoundFilter(); filtComp.AddShow(filt); // 通过树浏览器扫描节点下所有指定类型的元素 ElementTreeNavigator navi = new ElementTreeNavigator(DbElement.GetElement("/*"), filtComp); DbElement[] tees = navi.MembersInScan(dbCE); string outResult = “ElementTreeNavigator()方式迭代元素:\n"; foreach (DbElement db in tees) { string subName = db.ToString(); string subType = db.GetElementType().ToString(); outResult += "名称:" + subName + ", 类型:" + subType + newLine; }
try { if (dbType == DbElementTypeInstance.WORLD) // 不同类型节点下,创建不同类型的元素 { DbElement dbSite = dbCE.Create(0, DbElementTypeInstance.SITE); dbSite.SetAttribute(DbAttributeInstance.NAME, "/NewSite"); } eslse if( SITE、ZONE、PIPE) else if( dbType == DbElementTypeInstance.BRANCH) { DbElement dbElement = dbCE.Create(0, DbElementTypeInstance.ELBOW); // 弯头 dbElement.SetAttribute(DbAttributeInstance.NAME, "/NewElbow"); dbElement = dbCE.Create(0, DbElementTypeInstance.PIPE); dbElement.SetAttribute(DbAttributeInstance.NAME, "/NewPipe"); dbElement.SetAttribute(DbAttributeInstance.DESC, "/NewAdded Pipe");
支持全路径,及环境变量。 修改插件配置文件,添加我们的插件: 启动后,就会加载插件,并调用入口函数。 D:\AVEVA\Plant\PDMS12.0.SP6\DesignAddins.xml:
创建主命令
• 重写命令类,并在类构造函数中,设置命令ID,
• 重写虚函数,用以点击命令后,需要做的工作 public virtual void Execute();
基于.Net(c#)方式开发
工程、数据库、元素概念
• 项目(Project),为数据根节点,对应实际工程项目的概念。 一个项目包括多个数据库(MDB)。 • 登陆时,可以选择进入不同模块(Module),设计模块 (Design)还是轴测图、或元件库视图。 • 每个数据库(MDB)下对应如下元素: 树状数据库中每一个节点叫做一个元素,每个元素都有属性保存 他的特征信息,不同类型的元素属性类型也不同 当前元素可以是一个有元素,也可以是元素的结合。
注册新写的命令类
• Iaddin派生类入口函数中注册新写的命令类
public void Start(ServiceManager serviceManager) { // 注册命令 CommandManager commandManager = (CommandManager)serviceManager.GetService(typeof(CommandManager));
• AVEVA .Net是AVEVA推出的一种更方便的开发方式。结合C#丰富的库及相对于PML而言更加高效, 使用C#在AVEVA上可以快速地开发出应用程序。且PML.Net使得在PML中调用C#的库成为可能,使 用C#对PDMS进行开发优势明显,但也有不足之处,那就是程序调试不方便,当C#的库DLL被 PDMS加载后,不能卸载,不能对源码实时修改,开发效率有所影响。
PDMS二次开发简介
基于.Net(C#)平台
二次开发方式综述
• AVEVA PDMS提供了三种二次开发的方式:DARs, PML和AVEVA .Net(C#)。 • DARs是Fortran的函数库,也可以用C/C++来开发,依赖的库少,但是只能用于控制台的程序,没 有用户界面(GUI),所以对于提取PDMS数据,然后进行简单处理的小程序比较试用。 • PML:ProgrammableMacroLanguage 可编程宏语言,是一种解释型的脚本语言,其只能在PDMS 软件中被解释执行。PDMS自带的很多程序就是用PML开发的。脚本语言的显著优势就是将常用的命 令封装出来,这样在测试程序新功能时,不需要编译源码,只需要编写脚本,提高软件开发效率;使 用脚本时需要将功能暴露出来,这样会对接口的合理性做更多考虑,使软件架构更清晰等。缺点就是 对于复杂算法,执行效率较低,相对.Net方式功能少。
通过代码与配置文件结合的方式,代码获取工具条管理 类,加载相应的UIC文件。
CommandBarManager commandBarManager
= (CommandBarManager)serviceManager.GetSer vice(typeof(CommandBarManager)); commandBarManager.AddUICustomizationFile ("AttributeBrowser.uic", "AttributeBrowser");
撤销机制
UndoTransaction trans = UndoTransaction.GetUndoTransaction(); trans.StartTransaction("My Transaction");
// 模拟修改 String s1 = Example.Instance.mEqui.GetString(DbAttributeInstance.DESC); String s2 = String.Concat(s1, "x"); Example.Instance.mEqui.SetAttribute(DbAttributeInstance.DESC, s2); trans.EndTransaction(); // 撤销操作,回到原来值 UndoTransaction.PerformUndo(); // 设置撤销标记
Aveva.ApplicationFramework.Presentation.dll
using Aveva.ApplicationFramework; using Aveva.ApplicationFramework.Presentation;
HelloWord插件
编译出的DLL放到PDMS主目录中,
}
}
元素修改、删除
// 元素属性修改 DbElement dbCE = CurrentElement.Element; Position curGePos = dbCE.GetPosition(DbAttributeInstance.POS); double[] newPos = new double[3] {curGePos.X + 200, curGePos.Y, curGePos.Z}; dbCE.SetAttribute(DbAttributeInstance.POS, newPos); dbCE.SetAttribute(DbAttributeInstance.DPFN, "newDpfName"); // 移动到其他节点下 DbElement dbOtherPipe = GetOtherPipe() ; dbCE.InsertAfterLast(dbOtherPipe);; // 删除 dbCE.Delete();
基于.Net(c#)方式开发
• VS中通过引用PDMS提供的DLL,编译出DLL类库,在PDMS中以插件方式 加载,实现PDMS二次开发。PDMS12.0 Sp6需要用.Net2.0版本. • 主要可实现的功能: 程序框架、设置相关,比如:添加工具条按钮及相应命令、 数据库(工程)访问、元素(实体)获取参数、修改、删除等 几何库、图形库等 • 一些事件的响应处理,比如元素创建、修改、或选中时等
ShowAttributeBrowserCommand showCommand = new ShowAttributeBrowserCommand(attributeListWindow); commandManager.Commands.Add(showCommand);
创建工具条按钮,调用新写的命令
HelloWord插件
• 可加载插件必须从这个接口类派生:Iaddin,有几个虚函数可以重写。 启动PDMS加载时调用Start(),关闭PDMS时,调用Stop()。
• 添加引用DLL,及命名空间。Pdms安装主目录中提供了各类需引用的dll。 Aveva.ApplicationFramework.dll
System.Windows.Forms.MessageBox.Show(outResult);
迭代元素2,通过前后、从属关系迭代元素
// 获取当前元素 DbElement dbCE = CurrentElement.Element; string curName = dbCE.ToString(); string curType = dbCE.GetElementType().ToString(); // 前面的元素 DbElement preDb = dbCE.Previous; if (!preDb.IsNull && preDb.GetElementType() == DbElementTypeInstance.TUBING) preDb = preDb.Previous; // 大部分情况下第一pre是 ileave tube,而不是真正的下一个元素 // 后面的元素 DbElement nxtDb = dbCE.Next(); // 该节点下所有的元素,比如一个节点下所有的管件、设备等 DbElement[] dbMembs = dbCE.Members(); foreach(DbElement db in dbMembs) { string subName = db.ToString(); string subType = db.GetElementType().ToString(); …… }
PML开发方式- Hello World示意
1.编写hello.pmlfrm代码文件,放到该目录下: D:\AVEVA\Plant\PDMS12.0.SP6\PMLLIB\design\forms\ hello.pmlfrm 2.D:\AVEVA\Plant\PDMS12.0.SP6\PMLLIB\pml.index 文件中添加 hello.pmlfrm,即可自动加载该代码。 3.进入PDMS后,命令行敲入调用命令显示对话框:show !!hello,即可弹出对话框,如右图: