11PML基础王元AVEVA中国2005.11.1922如何学习PML编程T需要具备的基本知识–熟悉Pdms的基本操作–了解Pdms的运行机制,模块之间的关系–Pdms属性的操作–Pdms命令的操作–Pml语法(本教程)–通过Pdms菜单查找示范程序课程将包括...TPML介绍–PML概念–PML功能–PML构成TPML程序语言–变量的定义及用法–循环Do、判断If、跳转Golabel–错误处理–文件处理–函数Functions、方法Method–对话框Forms和菜单Menu33课程结束后...T您会具有以下知识…–PML构成及功能–编写简单的宏–PML变量的定义及应用–PML函数/方法的定义及调用–PML窗体/对象的定义及调用PML-功能强大的语言TProgrammableMacroLanguage可编程宏语言TPML2基于面向对象(ObjectOriented)概念的编程语言T支持用户自定义对象类型(ObjectTypes)T简单易学,与PDMS无缝连接T丰富的内置函数,方法及对象T最简单的对话框,菜单编写语言44PML构成TMacros–Macros是包含PDMS命令序列的ASCII文件–Macros在PDMS中通过$m/FILENAME来执行TPML–变量(Variables)–判断语句(ifConstrcuct)–循环(Doloops)–错误处理(ErrorHandling)–文件处理(FilesandDirectories)T窗体和菜单–PDMS大多数应用程序都由对话框(Forms)和菜单(Menus)来驱动一个简单的MacroT宏是包含PDMS命令序列的一个文本文件T运行宏$M/MyFileASCII文件MYFILENEWEQUIP/FREDNEWBOXXLEN300YLEN400ZLEN600NEWCYLDIA400HEI600CONNP1TOP2OFPREV55NEWEQUIP/$1NEWBOXXLEN$2YLEN$3ZLEN$4NEWCYLDIA$3HEI$4CONNP1TOP2OFPREVASCII文件MYFILE一个简单的Macro,继续,参数化宏ParameterizedMacroT宏可以参数化T文件名后面的字符串是参数(parameters)$M/MyFileNEWEQUIP300400600宏的参数TMacros可以有多达9个由空格分隔的参数.$M/MyFilePMLTRAINING5566T文本字符串可以以单个参数输入$M/MyFile$PMLTRAINING$5566T$和$是分隔符,在它们之间的任何字符都被认为是单个参数66变量VariablesT变量基本概念–变量用于存储数值,变量必须有名字,变量的数值可以改变,但变量名是固定的.TPML变量–在PML2中变量是一个对象(Objects)•每一个对象(变量)有一个唯一的名字•每一个对象都有一套函数与之相关联,这些函数称为方法(Methods).方法用于处理对象中的数据•生成对象时必须指明对象类型(Objecttype),不同的对象类型对应不同的方法对象(变量)类型ObjectTypesT内置(Build-in)的对象类型–字符串类型(String).如'HelloWorld'–实数类型(Real).整数类型包括在实数类型中,如99–布尔类型(Boolean).用于逻辑表达式,如True,False–数组类型(Array).可以存储任意类型的数据T系统定义(System-defined)的对象类型–指在PDMS中的变量类型,如Positon,ReferenceT用户自定义(User-defined)的对象类型77生成、查询、删除变量T使用命令行或者文本文件测试T通过赋值声明变量类型!MyString='HelloWorld'Qvar!MyString显示STRING'HelloWorld'T直接声明变量类型!Length=Real()QVar!Length显示REALUnsetT删除变量用到方法!MyString.Delete()变量命名规则(NamingConventions)T局部变量(Local)和全局变量(Global)!SurfaceArea!表示局部变量!!Area!!表示全局变量T变量名最长16个字符(不包括!和!!),变量名可以包含字母和数字T变量名不能用数字和点(.)开头T变量名的大小写不敏感T建议:一个变量一个用途,最好给变量名一个有意义的名字,并且区分大小写!!StartInUpperCase88PDMS属性类型-系统定义变量类型T名字(Name)如NameT字符串(String)如Description,FunctionT实数(Real)如Angle,Temperature,RatingT布尔(Boolean)如Lock,Shop,BuiltT数组(Array)如LevelT参考(Reference)如Spref,Catref,Lstube,Ptref,GmrefT关键字(Word)如Type,PurposeT位置(Position)如Position,HpositionT方位(Orientation)如OrientationT方向(Direction)如HDirection!!ceT特殊全局变量!!CE–得到当前元素的参考,DBref类型–‘.’点操作符可以提取元素的属性和隐含属性99变量提取属性T用变量提取属性值,变量名=DBref变量.属性名!Name=!!ce.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=RefQvar!Ref变量给PDMS属性赋值T属性名=变量名–名字赋值,变量中第一个字符必须是/!!ce.Name=!Name!!ce.Describsion=!Desc!!ce.Temp=!Temp!!ce.Pspec=!Pspec!!ce.Purp=!Purp1010常用的赋值方法T可以不是当前元素!A=!!CE!!CE=!!CE.Owner!A.Built=TRUET坐标的变化!Pos=!!CE.Position!Pos.Up=2000!!CE.Position=!Pos练习-变量给属性赋值T使用文本编辑器编辑–获取当前元素的Name和Type–新建同样类型的元素–在命名中追加-NEW1111PDMS命令中使用变量T变量前加$表示提取变量的值!type=!!ce.type!name=!!ce.name!newname=!name+‘-NEW’New$!type$!newnameT直接组合字符串New$!type$!name-NEW方法(Method)和函数(Function)T函数(Function)是执行特定功能的子程序T方法(Method)是对象(变量)的函数–在PML2中变量是一个对象(Objects)•每一个对象(变量)有一个唯一的名字•每一个对象都有一套函数与之相关联,这些函数称为方法(Methods).方法用于处理对象中的数据•生成对象时必须指明对象类型(Objecttype),不同的对象类型对应不同的方法–方法并不改变对象的类型和对象中的值T参考手册CadcentreSoftwareCustomisationReferenceManual1212方法-字符串对象(StringObject)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='hellohowareyou!'!newstr=!str.after('hello').trim().upcase()qvar!newstrString'HOWAREYOU!'T练习-将字符串改为'whereareyou?‘!str='hellohowareyou!'!newstr=!str.after('hello').trim().replace('how','where').replace('!','?')1313PML表达式T表达式运算符(Expressionoperators)–算术运算符+-*/–和并符&–比较运算符EQNELTLEGTGE–布尔运算符NOTANDOR表达式说明T表达式可以嵌套T运算符前后必须加空格T表达式前后的类型必须一致!X=64!Y=32!Z=!X+!Y!Z=96!A='Hello'!B='World'!AB=!A+!B!AB='HelloWorld'!XY=!X&!Y!XY='6432'1414方法-实数对象(RealObject)T开方Sqrt()T乘方Power(REAL)T取整INT()定义函数T函数定义成全局变量definefunction!!Area(!LengthisREAL,!WidthisREAL)isREAL!Area=!Length*!Widthreturn!Area$*函数!!Area有两个参数一个返回值EndfunctionT文件命名和存放位置–文件名必须与函数名一样,后缀是小写的pmlfncPmllib/NewPmlfunctionsformsarea.pmlfncxxx.pmlfrmobjectsxxx.pmlobj1515定义函数T函数定义成全局变量definefunction!!Area(!LengthisREAL,!WidthisREAL,!areaisReal)!Area=!Length*!WidthEndfunction函数调用T将新建函数加到索引文件Pml.index中PmlRehashAllT调用函数并且得到返回值!MyArea=!!Area(6,4)Qvar!MyAreaReal24T练习-新建函数计算圆的面积,测试函数definefunction!!circleArea(!radiusisREAL)isREAL!Area=PI*!Radius.Power(2)return!AreaEndfunction1616PML通用功能-注释T单行注释--Thisisanew-stylePMLcomment------------------------------$*Thefollowinglinescalculatethenewangle!Z=!X+!Y$*Weareassumingboth!Xand!YareREALT段落注释$(skipif(!XEQ!Y)…$)PML通用功能-打印等T打印$PThistextwillbeoutputtothescreen.T换行$PThisisanexampleofamuchlongermessage$thatwillbeoutputtothescreenT退出程序if(countEQ0)thenreturnendif1717逻辑控制(ControlLogic)T四种逻辑控制结构–条件判断语句If…else…endif–循环语句Do…enddo–跳转LabelGolabel–错误处理Handle…Endhandle条件判断语句(IfConstruct)T判断表达式中必须是布尔值!Type=Type!OwnType=TypeofOwnerIF(!Typeeq'BRAN')THEN$P