PDMS二次开发之PML编程基础
- 格式:pdf
- 大小:397.55 KB
- 文档页数:54
PML基础王元AVEVA中国2005.11.19如何学习PML编程T需要具备的基本知识–熟悉Pdms的基本操作–了解Pdms的运行机制,模块之间的关系–Pdms属性的操作–Pdms命令的操作–Pml语法(本教程)–通过Pdms菜单查找示范程序课程将包括...T PML介绍–PML概念–PML功能–PML构成T PML程序语言–变量的定义及用法–循环Do、判断If、跳转Golabel–错误处理–文件处理–函数Functions、方法Method–对话框Forms和菜单Menu课程结束后...T您会具有以下知识…–PML构成及功能–编写简单的宏–PML变量的定义及应用–PML函数/方法的定义及调用–PML窗体/对象的定义及调用PML -功能强大的语言T P rogrammable M acro L anguage可编程宏语言T PML2基于面向对象(Object Oriented)概念的编程语言T支持用户自定义对象类型(Object Types)T简单易学,与PDMS无缝连接T丰富的内置函数,方法及对象T最简单的对话框,菜单编写语言PML构成T Macros–Macros是包含PDMS 命令序列的ASCII文件–Macros 在PDMS 中通过$m /FILENAME来执行T PML–变量(Variables)–判断语句(if Constrcuct)–循环(Do loops)–错误处理(Error Handling)–文件处理(Files and Directories)T窗体和菜单–PDMS大多数应用程序都由对话框(Forms)和菜单(Menus)来驱动一个简单的MacroT宏是包含PDMS 命令序列的一个文本文件T运行宏$M /MyFileASCII 文件MYFILE NEW EQUIP /FREDNEW BOXXLEN 300 YLEN 400 ZLEN 600NEW CYL DIA 400 HEI 600CONN P1 TO P2 OF PREVNEW EQUIP /$1NEW BOXXLEN $2 YLEN $3 ZLEN $4NEW CYL DIA $3 HEI $4CONN P1 TO P2 OF PREVASCII 文件MYFILE 一个简单的Macro ,继续,参数化宏Parameterized Macro T 宏可以参数化T 文件名后面的字符串是参数(parameters)$M /MyFile NEWEQUIP 300 400 600宏的参数T Macros 可以有多达9 个由空格分隔的参数.$M /MyFile PML TRAINING 55 66T 文本字符串可以以单个参数输入$M /MyFile $< PML TRAINING $> 55 66T $<和$>是分隔符,在它们之间的任何字符都被认为是单个参数变量VariablesT变量基本概念–变量用于存储数值,变量必须有名字,变量的数值可以改变,但变量名是固定的.T PML变量–在PML2中变量是一个对象(Objects)•每一个对象(变量)有一个唯一的名字•每一个对象都有一套函数与之相关联,这些函数称为方法(Methods).方法用于处理对象中的数据•生成对象时必须指明对象类型(Object type),不同的对象类型对应不同的方法对象(变量)类型Object TypesT内置(Build-in)的对象类型–字符串类型(String).如'Hello World'–实数类型(Real).整数类型包括在实数类型中,如99–布尔类型(Boolean).用于逻辑表达式,如True,False–数组类型(Array).可以存储任意类型的数据T系统定义(System-defined)的对象类型–指在PDMS中的变量类型,如Positon,ReferenceT用户自定义(User-defined)的对象类型生成、查询、删除变量T使用命令行或者文本文件测试T通过赋值声明变量类型!MyString= 'Hello World'Q var!MyString显示<STRING> 'Hello World'T直接声明变量类型!Length = Real()Q Var!Length显示<REAL> UnsetT删除变量用到方法!MyString.Delete()变量命名规则(Naming Conventions) T局部变量(Local)和全局变量(Global)!SurfaceArea! 表示局部变量!!Area !!表示全局变量T变量名最长16 个字符(不包括!和!!),变量名可以包含字母和数字T变量名不能用数字和点(.)开头T变量名的大小写不敏感T建议:一个变量一个用途,最好给变量名一个有意义的名字,并且区分大小写!!StartInUpperCasePDMS属性类型-系统定义变量类型T名字(Name)如NameT字符串(String)如Description,FunctionT实数(Real)如Angle,Temperature,RatingT布尔(Boolean)如Lock,Shop,BuiltT数组(Array)如LevelT参考(Reference)如Spref,Catref,Lstube,Ptref,Gmref T关键字(Word)如Type,PurposeT位置(Position)如Position,HpositionT方位(Orientation) 如OrientationT方向(Direction)如HDirection!!ceT特殊全局变量!!CE–得到当前元素的参考,DBref类型–‘.’点操作符可以提取元素的属性和隐含属性变量提取属性T用变量提取属性值,变量名=DBref变量.属性名!Name = !!!Desc= !!ce.Description!Pspec= !!ce.Pspec!Temp = !!ce.Temp!Purp= !!ce.Purp!Rating = !!ce.cref.pspec.rating!Pos = !!ce.Pposition[3]$*P-point[3]坐标!Dir = !!ce.Pdirection[1] $*P-point[1]方向T查询属性类型!Ref = RefQ var!Ref变量给PDMS属性赋值T属性名= 变量名–名字赋值,变量中第一个字符必须是/!!= !Name!!ce.Describsion=!Desc!!ce.Temp= !Temp!!ce.Pspec= !Pspec!!ce.Purp= !Purp常用的赋值方法T可以不是当前元素!A = !!CE!!CE = !!CE.Owner!A.Built= TRUET坐标的变化!Pos = !!CE.Position!Pos.Up= 2000!!CE.Position= !Pos练习-变量给属性赋值T使用文本编辑器编辑–获取当前元素的Name和Type–新建同样类型的元素–在命名中追加-NEWPDMS命令中使用变量T变量前加$表示提取变量的值!type = !!ce.type!name = !!!newname= !name + ‘-NEW’New $!type $!newnameT直接组合字符串New $!type $!name-NEW方法(Method)和函数(Function)T函数(Function)是执行特定功能的子程序T方法(Method)是对象(变量)的函数–在PML2中变量是一个对象(Objects)•每一个对象(变量)有一个唯一的名字•每一个对象都有一套函数与之相关联,这些函数称为方法(Methods).方法用于处理对象中的数据•生成对象时必须指明对象类型(Object type),不同的对象类型对应不同的方法–方法并不改变对象的类型和对象中的值T参考手册Cadcentre Software Customisation Reference Manual方法-字符串对象(String Object)T字符串长度Length()T类型转换Real(),Position(),Boolean()T大小写转换LowCase(),UpCase()T两端截取After(str2),Before(str2),Substring(index) T中间截取Substring(index,nchars)T分隔符截取Part(nth),Part(nth,delim)T替换Replace(str2,str3)T匹配Match(str2),MatchWild(str2)T分割(返回数组)Split()T修剪Trim(),Trim(option)方法实例T方法示例!str= 'hello how are you!'!newstr= !str.after('hello').trim().upcase()q var!newstr<String> 'HOW ARE YOU!'T练习-将字符串改为'where are you?‘!str= 'hello how are you!'!newstr= !str.after('hello').trim().replace('how', 'where').replace('!', '?')PML表达式T表达式运算符(Expression operators)–算术运算符+-* /–和并符&–比较运算符EQ NE LT LE GT GE–布尔运算符NOT AND OR表达式说明T表达式可以嵌套T运算符前后必须加空格T表达式前后的类型必须一致!X = 64!Y = 32!Z = !X + !Y!Z = 96!A = 'Hello '!B = 'World'!AB = !A + !B!AB = 'Hello World'!XY = !X & !Y!XY = '6432'方法-实数对象(Real Object)T 开方Sqrt()T 乘方Power(REAL)T 取整INT()定义函数T 函数定义成全局变量define function !!Area( !Length is REAL, !Width is REAL ) is REAL !Area = !Length * !Widthreturn !Area $*函数!!Area 有两个参数一个返回值EndfunctionT 文件命名和存放位置–文件名必须与函数名一样,后缀是小写的pmlfncPmllib/NewPmlfunctions forms area.pmlfnc xxx.pmlfrm objects xxx.pmlobj定义函数T函数定义成全局变量define function !!Area( !Length is REAL, !Width is REAL,!area is Real) !Area = !Length * !WidthEndfunction函数调用T将新建函数加到索引文件Pml.index中Pml Rehash AllT调用函数并且得到返回值!MyArea= !!Area(6,4)Q var!MyArea<Real> 24T练习-新建函数计算圆的面积,测试函数define function !!circleArea( !radius is REAL) is REAL!Area = PI * !Radius.Power(2)return !AreaEndfunctionPML通用功能-注释T单行注释--This is a new-style PML comment------------------------------$*The following lines calculate the new angle!Z = !X + !Y $*We are assuming both !X and !Y are REAL T段落注释$(skip if (!X EQ !Y)…$)PML通用功能-打印等T打印$P This text will be output to the screen.T换行$P This is an example of a much longer message $that will be output to the screenT退出程序if ( count EQ 0 ) thenreturnendif逻辑控制(Control Logic)T四种逻辑控制结构–条件判断语句If…else…endif–循环语句Do …enddo–跳转Label Golabel–错误处理Handle…Endhandle条件判断语句(If Construct) T判断表达式中必须是布尔值!Type = Type!OwnType= Type of OwnerIF(!Type eq'BRAN') THEN$P CE is Branch.ELSEIF(!OwnType eq'BRAN') THEN$P CE is Branch member.ELSE$P CE is $!Type,Pls select Branch.ENDIFT Elseif,else都是可选项判断元素是否有名字T判断元素是否有名字!Name = Name!FullName= FullNameIf(!Name EQ !FullName) then$p Named.Else$p No name.Endif判断常用例程T判断变量是否定义If(UnDefine(!x)) then$p Variables $!x not define.endifT判断变量值是否存在!x =real()用函数判断用方法判断If(Unset(!x)) then…if(!x.Unset()) then…If(Set(!x)) then…if(!x.Set()) then…练习-条件判断T判断当前元素类型(Type),添加当前元素和与之连接的元素–如果是'BRAN',加入头尾连接的元素add Href Tref–如果是'NOZZ',加入连接的管道add Cref–打印当前元素类型!type = typeadd ceAuto ceif(!type eq'BRAN') thenadd href trefelseif(!type eq'NOZZ') thenadd crefendif$p Current type = $!type循环(Do loops)T循环赋值!Total = 0Do!x From1 To100 By1!Total = !Total + !xEnddoT可以忽略的选项–如果循环起始为1,From选项可以忽略–如果步长为1,By选项可以忽略中断循环BreakT中断循环Break!Total = 0Do !x To 100!Total = !Total+ !xIf(!Total gt500) thenBreak$*或者Break if(!Total gt500)EndifEnddo跳过循环(Skip)T用skip 跳过奇数Do !x To 100If(Int(!x/ 2) NE (!x / 2)) thenSkip$*或者Skip If(Int(!x/ 2) NE (!x / 2))Endif!Total = !Total + !xEnddo跳转(Jump)T用golabel可以跳转到标记行,不限制前后顺序Label /Start…GoLabel/StartT Label名最长16 个字符,不包括'/'T不允许跳转到Do循环中golabel/illegal!Total = 0do !x from 1 to 5!Total = !Total + !xlabel /illegalenddo错误提示T测试程序Next$p OKT可能出现的错误(2,113) List exhausted2表示错误出现在PDMS中的哪个模块113是错误代码T出现错误通常有三种结果–出现一个警告框,用户必须确认–输出一个错误信息–从当前运行的程序中退出错误处理(Error Handling) T处理特定错误,使程序继续执行NextHandle (2,113)$p Last element.EndHandle$p OKT处理任何可能的错误NextHandle AnyEndHandle$p OK处理多个错误T处理多个错误NextHandle (2,113)$p Last element.ElseHandle(2,46)$p …EndHandle$p OK没有错误T处理没有错误!noteM= !sheetname+ '/LoadTable'$!noteMhandle anynew note $!noteMelsehandle nonedelete notenew note $!noteMendhandle数组(Array)T从字符串创建数组!Str= 'Benz,Bmw,Audi'!BestCar= !Str.Split(',')Q var!BestCar<ARRAY>[1] <STRING> 'Benz'[2] <STRING> 'Bmw'[3] <STRING> 'Audi'$*数组元素,索引号T逐个元素添加!BestCar[5] = 'Cadillac'方法-数组对象(Array Object)T数组元素数量Size()T数组最大宽度Width()T追加元素Append(value)T追加数组AppendArray(Array)T删除全部元素Clear()T删除单个元素!MyArray[N].Delete()T删除数组Delete()T压缩数组Compress()T排序Sort()T倒序Invert()T搜索Find(value),FindFirst(value) T和并重复项Unique()数组方法实例T数组追加,数组必须存在,否则提前声明!BestCar.Append('Lincoln')T声明数组!BestCar= array()数组循环T赋值循环Do valuedo!Name values!BestCar$*将!BestCar中元素逐个赋给!Name $p Array element is $!NameEnddo–自动跳过空的数组元素T索引循环Do indicesdo !n indices!BestCar$*将!BestCar中索引号逐个赋给!n !Car = !BestCar[!n]$p Array element $!n is $!CarEnddoT练习-测试数组循环PDMS中生成数组(Collections)T收集指定类型的Pdms元素Var!PipeComps Coll ect All Pipe For CE–生成的!PipeComps是数组,保存的是元素的参考号–不使用For CE则是从整个MDB中提取T类型用法示例ALL所有元素ALL Pipe所有的PipeALL BRANCH MEMBERS所有管件,包括TubeITEMS OF EQUI /D1201设备中的所有基本体继续…T限制条件Var!Elbows Coll All Elbow With (Abor gt100)for CEWith后面是一个表达式T限制区域Var!Elbows Coll All Elbow Within W0N0U0 to W2000N2000U2000 Var!Elbows Coll All Elbow Exclusive Within Volume /D1201 1500Exclusive表示完全包含在空间内的元素才被选中T追加Var!Elbows Append Coll all Bend for CE练习T选择一个设备,将所有Nozzle连接的管道加入显示–加入当前设备,居中显示–Nozzle的Cref属性记录连接的管道名称–通过参考号定位到Nozzle–加入显示Add CrefAdd ceAuto ceVar!nozzles Coll all nozzle for ceDo !nozzle value !nozzles$!nozzleAdd crefEndDo求值(Evaluate)T通过参考号提取属性值Var!Pipes Coll all Pipe for ce$*得到参考号Var!Names Eval name for all from!Pipes$*提取Name属性Q var!namesT练习-将Zone中所有的Pipe名称和等级打印到命令行–使用Do循环将Name和Pspec输出到一行Var!Pipes Coll all Pipe for ce$*得到参考号Var!Names Eval name for all from !Pipes$*提取Name属性Var!Pspecs eval pspec for all from !pipesDo !n indices !names$p $!names[$!n] $!pspecs[$!n]enddo排列字符串ComposeT按照宽度和对齐方式排列字符串,返回数组!a = ‘ABCDEFG’!b = ‘DEF’var!output compose‘$!a’width 5 L SPACE 2 ‘$!b’width 5 RQ var!outputT输出数组的第一个元素$p $!output[1]练习T完善前一个练习,排列Name和PspecVar!Pipes Coll all Pipe for ce$*得到参考号Var!Names Eval name for all from !Pipes$*提取Name属性Var!Pspecs eval pspec for all from !pipesDo !n indices !namesvar!out compose ‘$!names[$!n]’wid15 space 2 ‘$!pspecs[$!n]’wid15 $p $!out[1]enddo练习T继续完善前一个练习,自动设置宽度Width()Var!Pipes Coll all Pipe for ce$*得到参考号Var!Names Eval name for all from !Pipes$*提取Name属性Var!Pspecs eval pspec for all from !pipes!wid1 = !names.width()!wid2 = !pspecs.width()Do !n indices !namesvar!out compose ‘$!names[$!n]’wid$!wid1 space 2 $‘$!pspecs[$!n]’wid$!wid2$p $!out[1]enddo对话框(Form)系统对话框T警告对象(Alert Objects)!!Alert是系统定义的对象–三种无返回值的警告对象–三种带返回值的警告对象警告Alert ObjectsT三种无返回值的警告对象(Alert Object)!!Alert.Error( 'You cannot do this!' )!!Alert.Message( 'Saving your data now!' )!!Alert.Warning( 'Do not press this button again!' )T缺省情况,警告窗口出现在光标附近,可用X,Y值指定其在屏幕上的位置,整个屏幕左上角是0,0,右下角是1,1 !!Alert.Error( 'You cannot do this!' , 0.25, 0.1)确认-Comfirm Alert ObjectsT三种带返回值的警告对象(Alert Object)confirm, question 和inputT确认(Confirm),返回值是'YES'或'NO'!Answer = !!Alert.Confirm( 'Are you sure!' )练习T确认是否在管道上生成弯头,YES则生成,NO则退出–生成弯头New Elbow choose rtext–连接Conn!Answer = !!Alert.Confirm('Creat Elbow?')If(!answer eq'YES') thenNew Elbow choose rtextconnendif询问-Question Alert ObjectsT询问(Question),返回值是'YES' ,'NO'或'CANCEL' !Answer = !!Alert.Question( 'OK to delete Site?' )输入-Input Alert ObjectsT输入(Input)!Answer = !!Alert.Input( 'Enter Width of Floor','10' )–第一个值是输入提示,第二个值是缺省值–Input alerts 返回一个字符串值练习T完善上一个练习–如果生成弯头,询问出口方向和距离–改变方向Dir U–改变距离Dist 1000!Answer = !!Alert.Confirm('Creat Elbow?')If(!answer eq'YES') thenNew Elbow choose rtextconn!dir = !!Alert.Input('Direction?', 'N' )dir $!dir!dist = !!Alert.Input('Distance?', '1000' )dist $!distendif一个简单的对话框(Form)T 对话框是全局变量的对象setup form !!hello Title 'Hello'paragraph .Message text 'Hello world'button .bye 'Goodbye' OK exitT 控件(Gadget)Paragraph .Message 文字控件和控件名Button .bye 按钮控件和控件名T 对话框控制属性OK内置属性,关闭对话框对话框调用T 对话框存放位置文件名与对象名一样,后缀是小写的pmlfrm T 将新建对话框加到索引文件Pml.index 中,在命令行键入Pml Rehash All T 显示对话框Show !!hello T 命令行关闭对话框Hide !!helloPmllib/NewPml functions formsarea.pmlfncHello.pmlfrmobjects xxx.pmlobj调试对话框T调试对话框–对话框显示后,定义文件被加载到内存中,下一次直接从内存中加载对话框定义内容–对话框的定义文件被修改后,需要重新加载Pml reload form !!helloShow !!hello方法-对话框对象(Form Object)T显示状态shown()T判断命令行窗口的显示状态!shown = !!CADCBTH.shown()if(not!shown) thenshow !!CADCBTHendifvar!date clock datevar!time clock time$p Begin report at $!date $!time缺省构造方法(Constructor method)T增加一个输入框和方法setup form !!helloTitle 'Hello'paragraph .Message text 'Hello world'text .input 'Enter text' width 10 is string$*字符串类型的编辑框button .bye 'Goodbye' OKexitDefine method .hello()$*缺省构造方法,与Form同名,不带参数!this.input.callback= '!this.doinput()'$*Callback指明响应操作endmethodDefine method .doinput()$*响应操作,’.’前面加空格!this.message.val= !this.input.val$*!this = !!hello, val表示value endmethod缺省构造方法T缺省构造方法–与Form同名,不带参数–在调用对话框的时候自动执行–一般用于设置控件的缺省值和回调方法–再一次显示对话框时,缺省构造方法不再执行,因为对话框的定义内容已经全部加载到内存中,–Kill !!hello从内存中清除已经加载的定义内容控件的响应操作(Callbacks)T控件的callback成员用于指定控件的响应操作T控件的响应可以是以下的操作–显示另一个对话框form!this.show.Callback= 'show !!hello'–直接执行一条命令command!this.remove.Callback= 'remove all'–调用一个函数function!this.area.Callback= '!area = !!area(!length,!width)'–调用一个方法method!this.apply.Callback= '!this.Apply()'对话框布局(Form Layout)T对话框有一个隐含的定位网格,原点在Form的左上角T每个控件(Gadget) 有四个隐含变量可以用于参考定位XMIN, XMAX, YMIN, YMAX控件定位T自动定位(Auto-placement)–PATH Down 下一个控件在前一个控件的下方–PATH up,PATH Right(缺省), PATH LeftT相对前一个控件定位(Relative)setup form !!helloTitle 'Hello'paragraph .Message text 'Hello world'text .input 'Enter text' at x0 ymax width 10 is stringbutton .bye 'Goodbye' at x0 ymax OKexitT相对指定控件定位button .bye 'Goodbye' At xmax.input ymax.input OK 控件自动定位举例对话框程序-Copy&RenameT实现拷贝同时修改名字T用到的命令NEW type newname COPY oldname REN oldname newname By n 100对话框定义文件T对话框定义文件setup form !!mycopytitle 'Copy and rename'text .from 'From' at x0 width 20 is stringpath rightbutton .ce'CE 'text .to 'To ' at x0 ymax+ 0.3 width 20 is stringtext .by 'By ' at x0 ymax+ 0.3 width 10 is stringbutton .copy ' Copy ' at x2 ymax+ 0.3button .cancel 'Cancel' at x23 Cancelexit缺省构造方法T缺省构造方法Define method .mycopy()!this.ce.callback= ‘!this.ce()’!this.copy.callback= ‘!this.copy()’!this.by.val= ‘N0’EndmethodT得到CE的名字Define method .ce()!this.from.val= nameendmethod主程序T首先判断控件的值Define method .copy()!from = !this.form.val$!fromhandle any!!alert.message(‘$!from not existed.’)returnendhandle!type = type!to = !this.to.val!by = !this.by.valnew $!type $!to copy $!from ren$!from $!to by $!byendmethod控件的内置方法T控件的内置方法(Method)和成员(Member)–变灰一个控件!this.apply.Active = FALSE–聚焦控件!this.input.SetFocus()–编辑框只读!this.input.seteditable(false)–清除列表框的值!this.list.clear()–改变按钮上的文字!this.apply.tag = ' Add '–改变按钮的背景颜色!this.apply.backgroud= 2复杂对话框程序添加指定空间内的设计元素T添加指定空间内的设计元素T程序中用到的命令Var!Comps Append Coll All pipe Within Volume /D1*******控件定义(Gadget)T文本框Paragraph,对于Paragraph,at必须在text前面paragraph .cename at x0 ymax text 'No name' width 20 height 1 T编辑框Texttext .input 'Enter text' at x0 ymax width 10 is stringT多选框Toggletoggle .bran 'Branch'toggle .equi'Equipment'T框架FrameFrame .frame1 'Include' at x0 ymax+ 0.2toggle .bran 'Branch'toggle .equi'Equipment'Exit继续…T按钮Buttonbutton .ce'CE' at x0 ymax tooltip'Select pipe'button .ok 'OK' at x0 ymax OK $*关闭对话框,保留控件值button .apply 'Apply' at x0 ymax Apply $*不关闭对话框button .cancel 'Cancel' at x0 ymax Cancel $*关闭对话框,不保留控件值T图标按钮,png图像文件必须在Pmllib搜索路径内!icon = !!pml.getpathname('modmodeon16.png')button .pick pixmap/$!icon at x0 ymaxT列表框Listlist .list 'Drawlist' at x0 ymax width 18 height 5T练习-组合上述控件,生成新的对话框!!Addvolumn,比较Ok,Cancel的不同设置控件初始值T缺省构造方法设置控件初始值define method .addvolumn()!this.bran.val= true!this.input.val= '1500'endmethod按钮的应用实例T新建方法,将当前元素的名字显示在文本框中define method .ce()!this.cename.val= fullnameendmethodT在缺省构造方法中指定控件的响应操作define method .addvolumn()…!this.ce.callback= '!this.ce()'endmethod对话框控制属性-ApplyT新建方法,调用控件的值define method .apply()!dist = !this.input.val!name = !this.cename.val$p CE is $!name ,Dist = $!distendmethodT在缺省构造方法中指定Apply按钮的响应操作define method .addvolumn()…!this.apply.callback = '!this.apply()' $*不关闭对话框endmethod多选框状态判断T多选框(toggle)的状态通过.val成员判断!this.bran.val= true$*表示选中多选框的应用实例T完善Apply方法define method .apply()!name= !this.cename.val!dist= !this.input.val!elements = array()if(!this.bran.val) thenvar!elements append coll all bran Within Volume$!name$!distendifif(!this.equi.val) then …var!names eval name for all from !elementsdo !element value !elementsadd $!elementenddoendmethod列表框应用实例T列表框用数组赋值,dtext表示display text !this.list.dtext= !namesT从列表框获取值!name = !this.list.selection()T新建方法,提取List中的名字define method .doselection()!name = !this.list.selection()$!nameendmethodT在缺省构造方法中指定列表框的响应操作define method .addvolumn()…!this.list.callback = '!this.doselection()' endmethodView控件T四种View控件–输入输出显示窗口Alpha view–Plot图片显示窗口Plot view–Design显示窗口Volume view–Draft显示窗口Area ViewAlpha ViewsT自定义输入输出对话框Setup Form !!alphaviewtitle ' Input & Output'view .Input ALPHA hei10 width 40channel REQUESTSchannel COMMANDSExitbutton .apply 'Apply' at x0 ymax Applybutton .Dismiss 'Cancel' at Xmax form-size Cancel ExitPlot ViewT显示Plot图片setup form !!plotviewView .view1 plot width 41 hei23exitdefine method .plotview()!this.view1.borders = false!this.view1.add('c:/ladder.plt')endmethodVolumn ViewT Design的显示窗口setup form !!poptestview .vol volume width 50 hei9exitpath downbutton .press 'swap popup' call '!this.popswap()'menu .popmenuadd 'hello' ' 'add 'world' ' 'exitexitdefine method .popswap()!this.vol.popup = !this.popmenuendmethod文件处理(Handling Files)文件处理(Handling Files)T读写文件需要使用FILE对象!Input = object FILE('%pdmsexe%\abc.txt')!Lines = !Input.ReadFile() $* ReadFile将文件内容写到字符串数组中!ResultArray= ARRAY() $* 声明新数组do !Line VALUES !Lines!Column1 = !Line.Part(1)!ResultArray.Append( !Column1)Enddo!Output = object FILE('%pdmsexe%\def.txt')!Output.WriteFile('WRITE', !ResultArray) $* WriteFile将数组写到文件T ReadFile()方法可以自动打开(Open)和关闭(Close)文件T写文件还有覆盖模式'OVERWRITE'和追加模式'APPEND'练习-文件处理T将一个文本文件的内容显示在命令行中!Input = object FILE('d:\abc.txt')!Lines = !Input.ReadFile() $* ReadFile将文件内容写到字符串数组中do !Line VALUES !Lines$p $!LineEnddoT将Pipe名称写入到一个文本文件中Var!Pipes Coll all Pipe for ce$*得到参考号Var!Names Eval name for all from !Pipes$*提取Name属性!Output = object FILE('%pdmsexe%\def.txt')!Output.WriteFile('overWRITE', !names) $*将数组写到文件选择文件的标准函数T函数定义define function!!fileBrowser(!directory is STRING,!seedFile is STRING,!title is STRING,!existFlag is BOOLEAN,!callback is STRING)T使用实例!!filebrowser('%pdmsuser%','*','Text File',true,'!filename = !!()q var!filename')实例应用T调用标准函数setup form !!findfiletitle 'Find file'text .filename 'File name' at x1 ymax+0.3 width 35 is stringbutton .browser 'Browser'button .ok ' OK ' at x1 ymax+0.3 OKbutton .cancel 'Cancel' at x10 cancelexitdefine method .findfile()!this.browser.callback=|!!filebrowser('%pdmsuser%','*','',true,'!!findfile.filename.val= !!()')|endmethod练习-显示文件T File Browser选择文件,将内容显示在命令行中define method .findfile()!this.browser.callback=|!!filebrowser('%pdmsuser%','*','',true,'!!findfile.filename.val= !!()')|!this.ok.callback= '!this.display()'endmethodDefine method .display()!fname= !this.filename.val!output = object file(‘$!fname’)!lines = !output.readfile()q var!linesendmethod菜单(Menu)。
[原创]PDMS软件的二次开发及应用PDMS软件的二次开发及应用姓名:王晶指导老师:郭琳实习单位:建造公司技术部电议室毕业院校:哈尔滨工业大学所学专业:软件工程2010 年 12 月摘要PDMS软件在许多行业中流行,适应多种行业建模,具有一定的普遍性。
PDMS软件能够进行的三维建模可直接生成自动标注的分专业或多专业布置图、单管图、配管图、结构图、支吊架安装图,并抽取材料等。
PDMS软件的引进为公司带来了更多的方便提高了效率和准确度,但由于该软件的普及性特点注定了对本公司所涉及的工程项目不具备针对性,虽然带来了巨大的效益,同时对于具体项目而言仍然不可避免的存在着某些繁琐复杂的手工工作程序。
本课题使用PML语言对PDMS软件进行了二次开发,提供了多个扩展功能,通过与原软件风格相融合的图形化形式展示给用户,操作方便,不但解决了工作中存在的许多重复、耗时的工作,提高工作效率,增强计算准确率,也成为PDMS的二次开发的真实实践,掌握一种新的技术。
对PDMS软件新增功能的使用将为公司带来更高效、更省时的收益,并将随着该技术的不断完善、熟练,成为公司的一种商品为公司带来新的效益。
关键词:PDMS;PML语言;文件存储;Add-ins;目录摘要.................................................I 目录................................................II 一概述..............................................1 1.1 课题背景及研究目的 . (1)1.1.1 与课题相关的研究综述 (1)1.1.2 课题研究目的与意义 ...........................2 1.2 课题研究的创新点 ................................. 2 二研究方案............................................52.1 技术方案 (5)2.1.1 PDMS运行机制及二次开发技术 (5)2.1.2 PML功能及构成 ..............................7 2.2 技术关键 (7)2.2.1 PML 中Add-ins的应用 (8)2.2.2 PML文件存储机制 (8)2.2.3 PML对象的应用 .............................10 三 PDMS扩展功能介绍及应用 ............................113.1 PDMS扩展功能界面展示 .......................... 11 3.2 电缆路径自动敷设及电缆长度统计功能 .............. 12 3.3 托架上某截面电缆信息的展示功能 .................. 15 3.4 填充率计算及护管选型功能 ........................ 16 3.5 错误路径删除及打印单个路径图纸功能 .............. 18 3.6 相关联的其它扩展功能 ............................ 19 四总结.............................................20 五参考文献...........................................21 六致谢 (22)一概述1.1 课题背景及研究目的PDMS软件作为一个三维工厂设计系统应用于五十多个国家,其中石油、化工、制药行业用户占42%。
利用PML语言提高PDMS建模效率在PDMS三维建模的过程中,利用PML语言创建一些常用命令的快捷方式,能够减少建模过程中一些不必要的重复工作,缩短建模时间,不仅极大的提高建模的效率和准确度,也为之后模型的校对提供便利。
标签:PML语言;菜单小工具;效率PDMS (plant design management system)是英国的A VEV A公司开发的一款三维工厂设计管理软件,它是以元件数据库为核心,高度参数化,并具有直观、准确、方便、灵活的特点,已经非常广泛地应用于化工、电力及海洋工程等行业。
此外,PDMS 还是各设计专业设计、建模和交流协调的平台,能十分方便地检查出设计过程中出现的“错、漏、碰、缺”等问题;尤其是在设计空间紧张、设计密度高的工程行业,使用三维建模设计,能够更高效地实现总体布置的优化。
1 PDMS常用操作PDMS是一个适用性比较强的三维设计软件,但是每个设计单位并不会应用到PDMS所有的设计功能,一些揉和到一起的功能显得有些臃肿,并不方便。
因此,设计单位需要项目管理人员针对自身需要,利用PML语言对PDMS中的一些功能进行分类和剥离,从而减少建模过程中一些不必要的重复工作,缩短建模时间,提高创建三维模型的效率和准确度。
下面首先介绍一下在日常建模过程中遇到的一些常用操作。
1.1 管线管底对齐/管顶对齐在创建项目模型的过程中,经常需要对管线进行管底对齐或管顶对齐的操作,在常规操作过程中,首先需要测量该管线的管底标高/管顶标高,然后通过菜单栏position相关命令移动至相应的位置,当类似管廊的位置需要对齐的管线命令比较多时,就要多次重复相关操作,费时费力,还经常由于取点不准确造成一定的偏差。
1.2 管线头部收尾/尾部收尾在创建项目模型的过程中,有些管线的头尾或者尾部本身没有连接关系,需要在最后一个元件或指定位置进行收尾。
在常规的操作过程中,需要点选菜单栏上的connect下的branch命令进行相关操作,费时费力。
利用PML语言开发PDMS建模作者:张博陈冬霞来源:《数字技术与应用》2014年第06期摘要:PDMS三维配管设计中,PDMS 前期的建模和后期的出图占据了很大的比重。
前期建立的PDMS数据库资源丰富,如何开发这个宝藏,是我们面临的一个重要课题。
本文简要介绍如何利用PML 语言,编程解决PDMS建模中的一些问题,重点阐述了如何编程实现一步设定一批管道绝热信息,在附录中列出程序并做了相应的程序说明。
通过开发利用PML语言编程,以期降低工作强度,提高工作效率。
关键词:PDMS PML语言编程管道绝热中图分类号:TQ050.2 文献标识码:A 文章编号:1007-9416(2014)06-0189-011 概述PDMS是英国AVEVA公司开发的三维工厂设计系统,是工厂设计管理系统(Plant Design Management System)的简称,目前在国内已被广泛应用于石化、冶炼、制药、电力等行业。
较之传统的CAD等平面设计软件,PDMS以数据库作支撑,通过PML(Programmable Macro Language)可编程宏语言后台运行,借助三维实体模型表观,直观而精准的体现了空间内设备、管道、结构等的相互位置关系,且支持提取平立面图纸和表格,经简单整理即可生成项目的施工文件,达到无差错,最优化设计,使现有的设计思想、方法及过程都发生一系列变革,为工程设计人员提供了全新的设计方法和手段。
本文通过PML编程语言的二次开发,找到了一种自动设置管道解热等级的方法,从而避免了手动设置,且可以批处理,从而大大提高了工作效率。
2 PML语言编程在PDMS建模中的应用PDMS常规上管道模型,一般是按照PID将各管件,法兰,阀门等依次合理的布置在某一空间里(当然包括管线命名,如XSC1303A-80-S9A-H3-GC2),最后再设置管道绝热。
管道的绝热设置一般是逐个手动设置绝热等级(如H3),因为只有设置好后,利用相应模板抽出的表格才有保温厚度。
发电厂烟风道数字化设计綦学良【摘要】针对采用工厂三维设计管理系统(PDMS)软件平台固有的供热通风与空气调节(HVAC)风道设计模式建立三维模型,精细化程度低,不能满足对烟风道零件开取材料的要求,通过基于三维设计软件平台的二次开发,在输入设计参数、布置三维模型、烟风道元件材料统计等方面,对发电厂烟风道数字化设计进行了研究.结果表明,发电厂烟风道数字化设计的应用不仅可以提高设计效率,同时能在专业间协同、设计数据传递及提取、材料统计、精细化设计和碰撞检查等方面提高设计质量.【期刊名称】《吉林电力》【年(卷),期】2018(046)001【总页数】4页(P22-25)【关键词】烟风道;数字化设计;二次开发;自动布置规则【作者】綦学良【作者单位】中国电力工程顾问集团东北电力设计院有限公司,长春 130021【正文语种】中文【中图分类】TP391.72随着发电设计行业对设计成品直观性、全专业化配合、高精细化程度、高效率的需求不断提升,以三维设计为主体的发电厂数字化设计正广泛普及和应用,其中工厂三维设计管理系统(PDMS)是较为主流的数字化设计平台之一[1]。
热机专业作为发电项目的主体专业对实体空间占位、专业间碰撞检查、高效率材料统计的需求尤为突出。
热机专业烟风道设计计算量大,烟风道零件形式复杂、多变,对空间占位的要求高;同时,零件的材料量统计项目繁多、耗时。
采用PDMS软件平台固有的供热通风与空气调节(HVAC)风道设计模式建立三维模型,已不能准确刻画零件的外形及占位,为实体碰撞检查提供有效依据且模型精细化程度低,不能满足对烟风道零件开取材料的要求,因此,针对于发电项目对烟风道设计精细化程度的迫切需求,烟风道三维设计的各类方法、体系、软件程序应运而生。
本文以基于PDMS12.1SP2三维设计平台进行的二次开发烟风道三维设计体系为例,与该软件平台固有的HVAC风道设计模式相对比分析,着重探讨发电厂烟风道三维设计的有效方法[2]。
基于PML语言的PDMS三维建筑模型设计王楠;王黎;王云极【摘要】以规则建筑单体为例,探讨了在火力发电厂三维布置设计中运用可编程宏语言(PML)快速建立建筑模型的方法,通过采用三维工厂设计管理系统(PDMS)界面操作和PML语言2种方式建立输煤综合楼建筑模型,并进行建模效率对比,证明该方法在工程运用过程中与传统界面操作方式相比效率更高、规范性更好、人为误差更少.【期刊名称】《吉林电力》【年(卷),期】2016(044)006【总页数】3页(P43-45)【关键词】可编程宏语言(PML);三维工厂设计管理系统(PDMS);建筑模型【作者】王楠;王黎;王云极【作者单位】中国电力工程顾问集团东北电力设计院有限公司,长春130021;中国电力工程顾问集团东北电力设计院有限公司,长春130021;中国电力工程顾问集团东北电力设计院有限公司,长春130021【正文语种】中文【中图分类】TP391.72;TU271随着数字化设计在火力发电项目中的普及和深化应用,参与设计的各个专业都根据自身特点开展了服务于全专业协同的数字化设计研究工作,土建专业在数字化平台上的布置设计工作主要是建筑模型的建立,为汽机、锅炉、电气、结构、暖通、给排水、照明等其他专业提供房间布置,工作范围遍及全厂,提高建筑专业建模效率将对于促进数字化协同设计高效发展产生重要意义。
三维工厂设计管理系统(PDMS)是应用最为广泛的工厂三维设计软件之一,软件核心为7大类结构化数据库,建筑专业模型数据主要存储于其中的参照数据库,包含几何数据、材料属性、门窗信息等。
软件提供的可编程宏语言(PML)[1],具有强大的二次开发功能,包含丰富的内置函数、方法及对象[2],操作便捷,能够与PDMS无缝连接[3],几乎所有的建模工作都可以通过命令和函数的组合来实现[4]。
基于此,探索高效、规范化建立规则三维建筑模型的程序化方法,并通过实际应用验证其可行性。
规范化的建筑模型设计是基于数据库开展协同设计、三维绘图、材料统计的基础,同时也是与其他各专业开展协同配合的基础。
第一部分: 基础知识PML基本概念Programmable Macro Language 可编程宏语言.通常的PML开发包括两部分, 一部分是PML宏,脚本语言; 另一部分是PML2,面向对象的编程语言.1.PML宏(Macro)宏, 就是一系列pml命令的集合.通过$m执行.格式为: $m filename [param1 param2 ….](举例)其中param1为参数, 宏可以参数化.(举例)2.面向对象的PML2PML支持对象(Object),对话框(Form)和菜单(Menu).(举例)一.变量,函数和方法1. 变量的定义及用法在PML2中, 每一个变量都是对象. 变量名以!或者!!开头,例如!weight. !开头的变量为局部变量, !!开头的为全局变量.PML内置了常用的变量类型.(1)Real 实属类型. 提供基本的四则运算操作. 例如!a = 10!b = 10!a = !a + !b$p $!a --输出变量a的值(2)String 字符串类型. 例如!strName = ‘/EQUI-TEST-1’(3)Boolean 用于逻辑表达式. 值只能是true/false(4)Array 数组(5)Position(6)Direction3.变量的创建, 删除, 查看变量可以用赋值来创建. 例如!str = ‘abc’也可以用类型标识来创建.! str = string()! str = ‘abc’删除: ! str.delete()查看:通常使用q var! str 也可以用$p $!str4.方法(method) 和函数(Function)Method是一个对象的子程序. 只有当对象存在,才可以调用对象的方法. 例如!strNum = ‘123’!num = !strNum.Real()$p $!num以上的代码, 调用的string类型的real()方法, 将字符串转换为数字,并输出.函数的用法与方法类似, 同样有参数和返回值. 但函数是独立存在的,全局的. 在任何地方, 都可以调用.二.程序的结构控制1.循环语句(1)Do循环例如:!sum = 0Do !i From 1 To 100 By 1!sum = !sum + !iEnddo其中!i为循环变量, 初始值为1, 终指为100, 步长为1. 当步长为1是,一般省略.(2)中断Break: 中断并跳出最内层循环(3)跳过Skip. 跳过当此存换. 例如!sum = 0Do !i From 1 To 100 By 1Skip if ( int(!i / 2) eq (!i / 2)) $* 跳过所有的偶数!sum = !sum + !iEnddo2.逻辑控制语句格式为if () then … else …其中括号内的必须是表达式.例如:IF (TYPE OF OWNER EQ ‘BRAN’) THEN$P BRANCH $!!ELSEIF (TYPE EQ ‘BRAN’) THEN$P BRANCH $!!ELSE$P NOT BRANCHENDIF其中elseif /else可选, elseif可多个.3.跳转语句定义标记Label /label1跳转Golabel /gol1不建议使用.三.其他相关语句1.数组字符串长度Length()类型转换Real(),Position(),Boolean()大小写转换LowCase(),UpCase()两端截取After(str2),Before(str2),Substring(index)中间截取Substring(index,nchars)替换Replace(str2,str3)匹配Match(str2)分割(返回数组) Split()修剪Trim()2.字符串元素数量Size()追加元素Append(value)追加数组AppendArray(Array)删除全部元素Clear()倒序Invert()搜索Find(value),FindFirst(value)和并重复项Unique()3.表达式(1)算术运算符+ - * /(2)连接运算符&(3)比较运算符LT GT EQ NEQ(4)逻辑运算符AND OR NOT4.计算函数Sqrt(x)Power(x, e)Int(x)Sin(x)Cos(x)5.注释单行注释用—开头. –之前不可出现空格之外的字符单行注释$*. $*之后的内容为注释. $*之前可出现其他字符段落注释. 用$(和$)将注释内容包括进来.(举例)6.打印$p 打印内容例如$p test line打印多行$p line 1 $Line 2输出内容包括变量$p is $!!其中$为转义字符, 如果要输出$, 则使用$$7.异常处理程序运行中, 可能需要意料之中的可能发生的异常/错误, 例如节点创建失败, 遍历子节点时超过最后一个等等. 这时需要捕捉异常,作出相应的处理.(1)异常捕捉例如Site /TEST_SITEHandle (2, 109) $*$p节点不存在Endhandle其中(2, 109)为错误编号. 也可以使用handle any捕捉任意类型的错误.(2)捕捉多个异常Site /TEST_SITEHandle (2, 109) $*$p节点不存在Elsehandle (2, 108)$p /TEST_SITE节点存在, 但不是SITE类型elsehandle none$p Site /TEST_SITE节点存在endhandle其中handle none表示没有遇到错误的情况.四.用户自定义方法/用自定义函数/自定义对象(1)自定义方法Define method .方法名(参数1 is 类型, 参数2 is 类型…) is 返回值类型其中参数可没有返回值可以没有例如Define method .Sum(!a is real, !b is real) is real!sum = !a + !bReturn !numendmethod(2)自定义函数Define function !!sum(!a is real, !b is real) is real!sum = !a + !bReturn !numendFunction与方法类似. 一个文件里只能定义一个函数,扩展名为pmlfnc, 必须放在指定的文件夹下,并执行pml rehash all(3)自定义对象Define object 对象名endobject五.文件处理(1)读取!file = object FILE(‘d:\abc123.txt')!lines = !file.ReadFile()Q var!lines(2)写入!arr = array()!arr.append(‘line1’)!arr.append(‘line1’)!file = object FILE('d:\abc.txt')!file.WriteFile('WRITE', ! arr) $*将数组!arr写入文件其中’Write’可以换成'OVERWRITE'(覆盖)和'APPEND'(追加)六.对话框及菜单1.系统对话框(1)询问!!alert!confirm = !!alert.confirm('确定要删除吗?')if(!confirm neq 'YES') thenreturnendif(2)警告!!alert.message(‘message’)(3)错误提示!!alert.error(‘error’)2.自定义对话框SETUP FORM !!custumFormTITLE '自定义对话框’Text .text1 ‘点击按钮’Button .okExit这是一个最简单的对话框, 显示一个文本框加上按钮, 但是点击按钮不会有任何反应. (截图)3.对话框调用/初始化Pmlhash allPml reload form !!custumFormShow !!custumForm4.默认构造方法/初始化方法每个form初始化时, 会自动调用与其名字相同的方法. 在刚才的代码中加上Define method .custumForm()!this.text1.tag = ‘初始化完成’Endmethod除此以外, 还可以加上默认的初始化函数在开头加上一行!this.initcall = '!this.init()', 调用构造方法结束,显示之前,会自动调用init()方法5.界面消息的响应界面消息的相应, 例如点击按钮, 选择下拉框等, 用callback关联.SETUP FORM !!custumFormTITLE '自定义对话框’Text .text1 ‘点击按钮’Button .ok ‘OK’ExitDefine method .custumForm()!this.text1.tag = ‘初始化完成’!this.ok.callback = ‘!this.ok()’EndmethodDefine method .ok()!!alert.message(‘OK’)Endmethod此时, 点击按钮, 会弹出对话框. (截图)。
PDMS二次开发插件
PDMS软件开发工具集
1.管道流向标注工具
在draft环境中,通过鼠标在管道附近单击进行自动的管道流向标注,标注方向即为管道的设计流向。
流向标志的形状、大小和颜色可以设置。
2.创建工具栏工具
把编写好的pml程序,按照规则命名(工具栏名+工具名)后放到指定文件夹中,则在pdms中自动生成工具栏和对应的工具。
可以同时定义多个工具栏,用户不用进行任何其他操作。
3.创建菜单工具
与创建工具栏类似,用户只需要把写好的pml程序按规则命名(菜单名+工具名)后放到指定文件夹中即可,不用其他任何操作。
4.软管和线缆建模工具
在海洋平台结构和船舶上存在着大量的各种功能的软管,各软管之间及软管与其他结构物之间可能会相互干涉,从而影响施工和软管的正常使用。
软管形态模拟工具的主要功能是在设计阶段准确的模拟各个软管的位置和形态,避免软管的干涉,使设计更加合理。
主要功能如下:
建模功能
软管模拟工具可以模拟以下几种情况的软管形态:
在软管两端点所在竖直平面内指定位置有吊点
在软管两端点所在竖直平面内有障碍点
在软管两端点所在竖直平面外有障碍点
软管两端高于甲板,中间有一部分软管平放在甲板上
编辑功能
软管形态编辑功能是对建模功能的补充,是对已有的软管形态进行局部调整的工
具。
主要功能包括:
对已有软管的任意部分进行任意方向的偏移(合理的偏移)镜像已有的软管模型。
一个PDMS中的PML二次开发程序—结构平台委托的自动生成工具作者:李书剑来源:《数字技术与应用》2017年第09期摘要:本文介绍了一个化工设计中用于结构平台委托的程序的开发思路与应用。
关键词:PDMS;PML;二次开发;结构平台委托中图分类号:TP311.1 文献标识码:A 文章编号:1007-9416(2017)09-0174-021 引言化工及炼油设计中,管道设计专业的工作主要包括两部分,一是搭建工厂三维模型,生成施工图纸和材料报表,二是向各专业提交委托资料。
在委托资料中,工作量最大的是向结构专业提交的平台委托资料。
目前,国内绝大多数设计院管道设计专业向结构专业的委托还停留在纯二维规划阶段,不仅要在模型中对平台上存在的大量管道穿洞及荷载点进行测量,还要在CAD中进行大量重复的绘图编辑工作,以一个冷换构架为例,二维绘图往往需要一周甚至更长时间,而且由于人工输入量较大,常存在漏掉荷载点或者开洞的情况,校审及后期会签的工作量大,且修改不便。
针对以上问题,我们考虑开发一个应用程序从PDMS工厂三维模型中直接生成给结构专业的平台委托资料,通过进一步的开发,将来也可生成其他专业委托资料。
2 程序构思(1)程序原理分析。
平台委托自动生成的内容包括:判断荷载点的位置及大小,开洞的尺寸及定位,后期的自动标注和分图等,具体实现路径如表1。
(2)程序应用范围。
本程序适用于包括PDMS11.5, PDMS12.0,E3D在内的主要版本PDMS客户端。
(3)主要设计理念。
设计时的主要理念与难点如下:(1)如何判断管道是否穿洞:解决方案:利用PML找出所有平台范围内直管段(TUBI),然后判断直管段头尾,如果直管段头尾分别位于平台上下两侧,则判断其为穿洞。
(2)如何判断管道开洞大小:解决方案:首先判断管道外径(abor),然后判断管道保温厚度及是否伴热,由于不同工艺包中对伴热及保温的描述不同,所以增加了单独判断保温的自选命令。
PDMS中常用PML语句经验反馈——一些常用的PDMS命令陈岳这里提供一些常用的PDMS命令,可能有些只适用于台山项目。
Q abore ------查询元件的公称直径Q aod ------查询元件的外径Q P1 bore ------查询元件P1点的直径,包括设备上的Nozzle Q P3 bore ------查询元件P3点的直径,包括设备上的Nozzle Mark ce ------为当前元素做标记,可以是Pipe,Branch,members, Equipment 等,标记的内容是它本身的名称。
Mark with 'RPE1567' ce ------对当前元素标记’RPE1567’, 引号里面可以是任意内容Q Att ------查询当前元素的参数Q :ims-qcl ------查询Pipe或Branch的等级,当前元素要放在Pipe或Branch层上, Q name ------查询名称,如果知道这个名称,直接敲入命令行就可以找到改元素。
Q lastmodif ------查询最后修改时间Q usermod ------查询最后修改的用户Q usermod :ims-qcl ------查询最后修改:ims-qcl这个参数的用户Q var !!ce.ppos[0].wrt(world) ------查询阀门的设计重心Q var !!ce.ppos[999].wrt(world) ------查询阀门的设计者自己定义的重心Q var !!ce.gcof.wrt(world) ------查询阀门的重心(不考虑负体积如挖孔等)Q var !!ce.ncof.wrt(world) ------查询阀门真正的重心(这是PDMS自带的功能)q var !!ce.poss.wrt(world)Q var !!ce.hstub.attribute(':ep') ------查询branch头部的壁厚,当前元素放在branch上Q var !!ce.lstub.attribute(':ep') ------查询选定元件下面管子的壁厚Q var !!ce.spref.attribute(':ep') 或 Q :ep of spref ------查询所选元件的壁厚上边的:ep可以换成其他的参数,如:de(外径)Q cllength ------查询branch的长度Q var !!ce.spref.attribute(':matiere')[1].name ------查询管道的材料Q spref ------查询元素的制造规格,比如,对于支吊架来说,得出的结果就可能是 spref /MDP/PR09-100Q :mtoarea ------查询安装分区信息Q p1 pos wrt world ------查询元件P1点坐标,例如预埋板Q pos wrt world ------查询元件在世界中的坐标Q poss wrt world ------查询Beam的头部的中心点坐标Q pose wrt world ------查询Beam的尾部的中心点坐标Q :mdsancref ------查询ATTA、STRU以及Anchor plate之间的链接关系Q :prop desc ------查询Beam截面信息Q Dtxr ------查询元件的catalogue详细参数Q Prop code ------查询支吊架的详细类型Q angle/radius ------查询弯头和三通的角度和半径Enhance ce col red ------对当前元素着色,也可以是green,pink , cyan等其他颜色Enhance ce transl >5 ------改透明度Add all within vol ce ------添加当前元素空间内的所有元素Add all STRU within vol ce 300 Col 4 ------添加当前元素周围300空间内的所有STRU并以yellow显示,其中的STRU、300和col 4是可变的参数Add ce auto ce ------添加当前元素并居中显示Add href cref ------添加branch头部和尾部相连的管道Add cref ------添加三通相连的管道Add all bran with :ims-ssno eq 'HRA_RPE_03' ------添加具有相同属性的管道,其中的:ims-ssno和HRA_RPE_03是可变参数Add all bran with matchw(:ims-ssno,'HRA_RPE_03') ------添加具有相同属性的管道add all bran with matchwild(:ims-ssno,'HRA_PTR_53') and Hbore gt 50 ------Aid text num 2 (name of owner) at at hpos of owner ------辅助标记,其中的num 2、name of owner和hpos of owner是可变参数,比如改成num 3、TSN、ce/p0等都可以。
随着计算机及图形技术的发展,工厂布置设计从传统的手工设计绘图发展到了二维计算机辅助设计和三维协同设计。
二维设计软件以AutoCAD(本文简称CAD)为代表,二维制图及编辑功能强大,容易上手,接受程度高,但缺乏协同性,无法进行碰撞检查。
三维工厂协同设计软件以PDMS(Plant Design Management System)为代表,支持多专业协同设计,实时碰撞检测,抽取平面布置图及管道ISO图。
一、二次开发简介及基本原理CAD二次开发目前有AutoLISP、、VBA等多种方式,其中AutoLISP语法简单,容易上手,目前应用较多,特别适合非软件专业的工程设计人员使用。
PDMS目前提供PML (Programmable Macro Language 可编程宏语言)及.NET两种二次开发方法。
PML是一种脚本语言,语法简洁易学,功能强大。
PDMS软件中的很多功能都是用PML编写的,在软件根目录下可以查看到源码,非常有利开发者模仿学习。
综合考虑二次开发的使用规模及后续使用者的维护扩展,本文采用AutoLISP及PML进行研究及开发。
PDMS提供了数据及模型的导入导出功能,通过“DBlist”可以把数据以PML宏文件(文档格式)导出,供其他PDMS项目使用。
因此,理论上我们只要能生成(自动或手动)符合PML语法的宏文件,就可以往PDMS里面导入数据或模型,这是往PDMS导入数据的基本思路。
二、线性构件的数据转换及应用在PDMS中,材料构件一般分为线性构件及平面构件。
线性构件主要有钢结构杆件、管道、桥架、暖通风管等。
这类构件一般需数据库支持,在PDMS 中通过坐标及数据库中预定义的等级(截面及材料)来进行定义。
因此,只要把CAD中的坐标(直线或圆弧)信息结合相应的等级属性写成宏文件,即可向PDMS中导入构件。
钢结构的转换实例:在钢结构CAD设计图中(见图1)筛选出杆件的中心线(一般中心线在单独的层,也可以编写以颜色或线型批量筛选的工具)形成选择集;分析线段的首尾坐标点,结合型钢截面定义的PML语句,写入到指定位置的PML宏文件中;循环直至把选择集中所有中心线全部写入宏文件中;在PDMS中导入宏文件,即可批量生成钢结构。