当前位置:文档之家› pml基础手册与总结

pml基础手册与总结

PML开发介绍与总结1 pml语言简介 (2)1.1 pml变量 (2)1.2 变量类型 (2)1.3 自定义变量类型 (3)1.4 定义变量 (3)1.5 函数(Function)和方法(Method) (4)1.6 使用ANY类型的变量作为函数参数 (5)1.7 变量的方法 (6)1.8 自定义变量类型的方法 (7)1.9 方法的重载 (8)1.10 Unset和Undefined (9)1.11 删除变量 (10)2 Pml的一些特点 (10)3 Pml表达式 (11)4 pml流程控制 (11)4.1选择结构 (12)4.2 do循环 (13)4.3 GoLabel跳转语句 (14)5 pml数组 (15)5.1 定义数组 (15)5.2 数组的赋值 (15)5.3 多维数组 (15)5.4 数组的方法 (16)5.5 利用数组进行字符串处理 (17)5.6 数组排序 (18)5.7 Do values循环和Do indices循环访问数组变量 (19)6 pml宏文件概念及其运行 (19)6.1 概念 (19)6.2 带参数的宏文件 (20)语言简介介1pml语言简pml是用于pdms二次开发的面向对象的编程语言,它的面向对象属性是与其他脚本语言的最大区别,也是现代高级语言的基本特征。

pml提供了编辑窗体和菜单的功能,且语法简单方便,使得pml能实现高级语言的大部分功能,用户可以开发自己的菜单窗体,完成需求定制。

pml提供了大量的变量类型(object type)及与变量类型相对应的方法(method)。

pml 提供的方法实用,具有针对性。

比如数组(Array object)可以存放不同的数据类型,可以进行排序、清空没有赋值的元素、查找、删除等等方法,这是大多数高级语言没有提供的功能。

1.1pml变量对于pml语言,每个变量即是一个object,对应一个变量类型object type。

不同类型的变量只能保存对应类型的数据。

pml变量的特点:变量名称唯一,且不能重复。

每个object type即是一个类(class),有属于类的通用的方法和属性。

因此每个pml 的变量(object)都可以调用所属类的方法。

每个变量对应一个变量类型,在定义变量前,对应的变量类型必须存在。

1.2变量类型Pml的变量类型比较多,可以分为三类,built-in、system-defined、user-defined。

Built-in变量类型包括以下几种:字符串实数布尔数组system-defined变量类型包括Direction,Position,Orientation等多种类型,详细信息可以参考手册。

user-defined变量类型是指用户自定义的类型。

1.3自定义变量类型Pml提供的变量类型可以满足大部分情况的使用,如果有需要,用户也可以定义自己的变量类型。

下面是一个自定义变量类型的示例。

define object FACTORYmember .Name is STRINGmember .Workers is REALmember .Output is REALendobject自定义变量类型的名称是FACTORY,该变量类型有3个成员(member),分别是Name,Workers和Output。

任意一个FACTORY类型的pml变量都默认有这3个成员。

比如设变量!MyFactory是FACTORY类型,则可以通过!访问或赋值变量的Name成员,如下面的表达式分别读取和设置了变量!MyFactory的Name属性,!FactoryName = !! = ‘APPLE’Pml对成员的类型没有限制,自定义变量类型的变量也可以作为成员,如下例,成员Site 的类型是FACTORY。

define object PRODUCTmember .Code is STRINGmember .Total is REALmember .Site is FACTORYendobject为了方便区分,变量类型一般用大写表示,变量一般首字母大写。

自定义变量类型一般以变量类型的名称为文件名(字母必须是小写),以.pmlobj为后缀保存到PMLLIB文件夹下面。

程序会自动加载定义文件。

1.4定义变量Pml的变量分为全局变量(global)和局部变量(local)两种,全局变量在整个程序运行期间一直存在,而局部变量只在所在的宏文件或函数内有效。

比如一个宏文件包含下面的语句,!Y = 3!!X = 5$p $!Y $!!X运行后得到结果 3 5运行完成后在pdms中分别查询变量!Y和!!X,!Y是Undefined,而!!X是实数类型变量,值是5。

因为!Y是局部变量,宏文件运行完成后自动释放。

Pml变量名的最大允许长度是16个字符(包含前面的符号!),变量名必须以字母开头,可以是字母和数字的组合。

确定变量名时要简单易懂、避免重复,可以添加自定义的前缀进行区分。

在编写程序时,为了避免重复和减少资源占用,应该尽量减少使用全局变量,使用!!CD为前缀的变量是系统预留的全局变量,在定义变量时要避免重复。

定义一个built-in类型变量(REAL,STRING,BOOL,ARRAY)可以通过直接赋值确定其变量类型,比如!MyVariable = 2,则变量! MyVariable会自动根据所赋值的类型确定为real 类型,不用另外指定变量类型。

当定义一个值为空的变量时,可以采用如下的方式!MyVariable2 = STRING(),指定!MyVariable的类型为字符串,而值为空(UNSET)。

对应其他类型变量的定义需采用下面的形式,!MyVariable3 = object DIRECTION()和方法((Method)1.5函数函数((Function)和方法函数一般定义在一个单独的文件中,文件名必须是小写的函数名称,后缀为.pmlfnc。

函数定义文件一般存放在PMLLIB文件夹中。

每个函数定义文件只能包含一个函数,且文件的第一行必须是define function开头。

所有的用户自定义函数都是global类型变量。

函数和方法类似,都可以带有参数和指定返回值。

参数和返回值的类型必须在函数和方法定义时指定,当在主程序中调用函数或方法时必须把对应类型的值传递给函数或方法,经过处理后把返回值传递给主程序。

下面的语句定义了一个函数!!AreaDefine Function !!Area( !Length is REAL, !Width is REAL ) is REAL!Area = !Length * !WidthReturn !AreaEndFunction!!Area的功能是根据主程序传递过来的参数!Length和!Width计算矩形面积并将面积返回主程序。

参数!Length、!Width 和返回值都是REAL类型,返回值用关键词Return指定,最后以endfunction结束函数定义。

一般在表达式中调用有返回值的函数,如:!MyLength = 15!MyWidth = 10!MyArea = !!Area(!MyLength, !MyWidth)则得到!MyArea = 150,注意参数的顺序不能颠倒,否则可能会导致错误。

上面的语句也可以简化为!MyArea = !!Area(15, 10)函数也可以用参数的方式返回运行结果(没有返回值的函数称为PML Procedure,用Call 关键词调用),即在调用函数前定义一个变量,并把变量包含在函数的参数列表里。

如下面的例子,Define Function !!LengthAndTrim(!Name is STRING, !Length is REAL)!Name = !Name.Trim()!Length = !Name.Length()EndFunction函数的功能是计算字符串变量!Name的长度(去掉前后空格),REAL类型参数!Length 用于存放并返回计算结果。

函数的调用过程如下,!Name = ' FRED '!Length = REAL()Call !!LengthAndTrim(' FRED ', !Length)运行完后,字符串长度的计算结果存放在了变量!Length中。

注意,必须是一个变量存放返回的计算结果,不能是常量,如!!LengthAndTrim(' FRED ', 2)是错误的,因为函数不能修改一个常数。

对于特殊的情况,当函数或Procedure没有参数时,函数名后面的括号也必须保留,如Define Function !!LengthAndTrim()。

对有返回值的函数也可以采用Call关键词调用,但会由于无法保存而导致返回值丢失。

1.6使用ANY类型的变量作为函数参数某些特殊情况下,可以指定函数的参数或返回值的类型为ANY,即可以接受任何类型的变量。

如下面的例子定义参数!Argument为ANY类型。

Define Function !!Print(!Argument is ANY)$P $!Argument在使用ANY类型的变量前需要确定变量的具体类型,可以使用变量的pmlobjectType()方法如下。

Define Function !!AnyType(!Argument is ANY)Type = !Argument.pmlobjectType()if ( !Type EQ 'STRING' ) then- - do something with a STRINGelseif ( !Type EQ 'REAL' ) then- - do something with a REALelseif ( !Type EQ 'DBREF' ) then- - do something with a DB Referenceelse- - do something with all other types or give an errorendifEndFunction1.7变量的方法方法是与具体的变量类型相对应、且可以由任意一个变量调用的函数。

每种变量类型包含的方法可以参考手册。

下面以STRING类型为例说明如何使用变量的方法。

!Mystring = STRING() 定义一个STRING类型的变量截取部分字符,取指定的字符串右侧的剩余部分赋值给新变量!Mystring ='Iwanttolearnenglish'!newstring = !Mystring.after('Iw')则!newstring = 'anttolearnenglish'同理可以调用before()方法取指定字符串左侧的部分。

相关主题