|
开始学习前的一些说明:
PDMS默认的PML库路径位于\pmllib下,窗体库位于form下,函数库位于functions下,对象库位于objects下。
PDMS系统界面定义位于pdmsui目录下,几大子模块的定义位于该目录下的子目录下,如DESIGN模块的中的GENERAL子模块的界面定义位于pdmsui\des\gen\fsystem文件中。
自己建立的函数库和窗体库等必须放在pmllib目录下,并且在第一次进入PDMS系统后必须调用PDMS的命令PML REHASH ALL,这样PDMS才会装载这些库。
如何在AVEVA 的PDMS中使用PML:
进入PDMS系统后,在COMMAND LINE中运行宏可以用$M /FILENAME;调用函数可以用CALL !!MYFUNC(),其中MYFUNC存储在myfunc.pmlfnc文件中;运行窗体可以用SHOW !!FORMNAME;在PDMS的PML语句中也可以这样使用。
有些任务如定义规则、报表模板等只能使用PML1,不能使用PML2。
一. 变量
1.变量的类型
a. 内建(built-in)的四种类型:REAL,BOOL,STRING,ARRAY。
b. PDMS系统定义的一些类型(system-defined):POSITION,ORIENTATION等
c. 自定义的一些类型和对象
2. 变量的命名规则
以 ! 开头的 是local variable(局部变量)
以 !! 开头的 是 global variable(全程变量)
变量名可以最多16个字符,可以包含 @ 字符和数字
但不能用数字开头和 点号 . 开头
3. 变量的定义和销毁
a. 变量的定义方式如下
!A = REAL() 定义REAL类型的变量!A
!A = 4 定义REAL类型的变量!A,并赋值4
!C = STRING() 定义字符串类型变量!C
!C = ‘STRING’ 定义字符串类型变量!C,并赋值’STRING’
定义系统内建或自定义的对象变量:
!E = object OBJ() 定义OBJ类型的变量!E
定义数组类型变量:
!F = ARRAY() 定义数组类型变量!F
!F[1] = !NEWVALUE 定义数组内心变量!F,并给第一个元素赋值!NEWVALUE
数组下标([]里面的内容)可以是表达式
4. 变量的作用域和生存期
a) 局部变量:只在某一段封闭的语句内部有效,譬如函数或过程内部。
b) 全局变量:在整个过程中均有效
5. 常量
REAL类型的常量:4,50.2;
字符串类型的常量:’abcd’,│abcd│
BOOLEAN类型的常量:TRUE,FALSE,YES,NO
二. 表达式
1. 表达式简介 :表达式由操作符和操作数构成,在PDMS中,根据操作符不同表达式分为逻辑表达式、数学表达式、比较表达式,所有的表达式都是有值的。
2. 操作符
给操作符及出现在表达式中的函数和方法优先级如下(↓代表优先级下降):
操作符或其它 优先级 说明
( ) 最高 括号
* / ↓ 乘除
+ - & ↓ &是字符串的连接符
EQ NE NEQ GT LT GE GEQ LE LEQ ↓ 比较符
NOT ↓ 逻辑非
AND ↓ 逻辑与
OR ↓ 逻辑或
※ 几个比较符的说明:(左指左操作数,右指右操作数)
EQ 左等于右
NE 左不等于右
LT 左小于右
GT 左大于右
LE(LEQ) 左小于等于右
GE(GEQ) 左大于等于右
※ & 表示两个字符串的连接,如果操作数不是字符串,首先被转换为临时字符串,再做连接
※ = 在PDMS中用作赋值符
※ 如果两个操作符合同时出现在一个表达式中,那么按照从左之右的顺序进行计算。
※ 在PML1中有些表达式有不同于PML2中的含义和规则。
三. 控制结构
i. 条件
标准条件语句:
IF (…..) THEN
语句
ELSEIF (…….) THEN
语句
ELSE
语句
ENDIF
没有ELSE语句:
IF (……) THEN
语句
ENDIF
嵌套的条件语句:
IF (…….) THEN
语句
IF (…….) THEN
语句
ELSEIF (……) THEN
语句
ELSE
语句
ENDIF
ENDIF
ii. 循环
标准循环语句:
DO !X FROM 10 TO 100 BY 10
语句
ENDDO
含义:!X从10 循环之100,每次增量是10
其中 循环条件 !X FROM 10 TO 100 BY 10可选,当省略时该循环语句可以为:
DO !X TO 100
语句
ENDDO
含义:!X 值每次加1直到100
DO !X
语句
ENDDO
含义:!X 值每次加一,并且循环不停止
DO
语句
ENDDO
含义:无限循环
如果在循环当中想跳出循环或者略过还未执行的语句,可以用break和skip,形式如下:
DO !NUMBER
--如果!NUMBER大于100就跳出循环
IF (!NUMBER GT 100) THEN
BREAK
ENDIF
!RESULT = !RESULT + !NUMBER
ENDDO
或者:
DO !NUMBER
--如果!NUMBER大于100就跳出循环
BREAK IF (!NUMBER GT 100)
!RESULT = !RESULT + !NUMBER
ENDDO
Skip 的使用的如下:
DO !X
!NUMBER = !SAMPLE[!X]
IF (( INT(!NUMBER / 2 ) NE ( !NUMBER / 2 )) THEN
SKIP
ENDIF
!RESULT = !RESULT + !NUMBER
ENDDO
或者:
DO !X
!NUMBER = !SAMPLE[!X]
SKIP IF ( INT( !NUMBER / 2 ) NE ( !NUMBER / 2 ) )
!RESULT = !RESULT + !NUMBER
ENDDO
iii. 跳转
在PML2中可以用以下语句实现跳转:
LABEL /LABELNAME
………………….
GOLABEL /LABELNAME
其中LABEL 指定一个跳转标签,/LABELNAME指定标签的名字,最多有16个字符,且必须以/开头,GOLABEL实现跳转。需要注意的是跳转标签只能位于同一段结构内。
例如:
DO !A
DO !B TO 3
!C = !A * !B
GOLABEL /FINISHED IF (!C GT 100)
!TOTAL = !TOTAL + !C
ENDDO
ENDDO
LABEL /FINISHED
$P TOTAL IS $!TOTAL
在内循环中,当变量!C的值大于100时,将跳出整个循环到LABEL /FINISHED处,并接着执行$P TOTAL IS $!TOTAL语句
但是以下语句是非法的:
GOLABEL /ILLEGAL
DO !COUNT TO 5
!TOTAL = !TOTAL + !COUNT
LABEL /ILLEGAL
ENDDO
不能直接从外面跳到一个循环或者条件语句内。
四. 函数
1. 函数数的定义 define !!function(!arg1 is STRING,!arg2 is REAL) is… endfunction
2. 参数说明:参数是传址的,参数可以是ANY类型,即可以!arg1 is ANY,但是在函数内部使用!arg1时必须判别了!arg1的具体类型才行。
在PML中,调用函数时使用常量作为函数的参数是错误的,例如:
!A = !!function(!arg1,4) 不能直接用常量4做参数
3. 函数的返回值
4. 函数调用
在PDMS中,函数是全局的,一个.pmlfnc文件只能有一个函数,同样,一个函数只能唯一存在与一个pmlfnc文件中。在一个文件中可以调用别的文件中定义的函数。
五. 过程:过程除了没有返回值外,其它与函数相似。
六. 宏
PML中的宏也是一系列语句的集合,宏也可以有参数。例如某一个宏文件内容如下:
$P FIRST ARGUMENT IS $F
$P SECOND ARGUMENT IS $S
如果该宏的文件名为SAMPLE.MAC,那么应该这样运行该宏 $M SAMPLE.MAC 1000 ‘SECOND’。
在宏的参数中不能包含空格,如果参数中有空格而且没有做特殊处理,那么参数将以空格为间隔符被分割开,例如:$M SAMPLE.MAC ‘ARGA ARGB’ 1000,其中’ARGA ARGB’将被分离成两个参数 ARGA和ARGB,如果一定要包含空格,那么可以用$<$>,如$<’ARGA ARGB’$>。
在函数中也可以调用宏,方式如下:
$M filename $!X $!Y $!Z
要注意的是在函数中传给宏的参数只能是字符串,因此各参数前必须加$将其转换为字符串。在PML2中最后不要将宏和函数混合使用。
宏中还有一些特殊的语法譬如同义词等。
七. 对象
1. PDMS定义的对象
2. 用户自定义的对象
a. 对象的定义方式
对象的定义如下:
DEFINE OBJECT FACTORY
MEMBER .NAME IS STRING
MEMBER .WORKERS IS REAL
MEMBER .OUTPUT IS REAL
ENDOBJECT
DEFINE METHOD.COUNT() IS REAL
……..
ENDMETHOD
DEFINE METHOD.COUNT(DEPT IS STRING) IS REAL
…….
ENDMETHOD
b. 成员变量的定义
c. 成员方法的定义
d. 方法的重载(注意参数是ANY的方法重载)
e. 构造函数
f. !THIS的说明和用法
g. 增减方法时候需要用的额外PML指令
|
|