PDMS-PML基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)来驱动
一个简单的Macro
T宏是包含PDMS 命令序列的一个文本文件
T运行宏
$M /MyFile
ASCII 文件
MYFILE NEW EQUIP /FRED
NEW BOX
XLEN 300 YLEN 400 ZLEN 600
NEW CYL DIA 400 HEI 600
CONN P1 TO P2 OF PREV
NEW EQUIP /$1
NEW BOX
XLEN $2 YLEN $3 ZLEN $4
NEW CYL DIA $3 HEI $4
CONN P1 TO P2 OF PREV
ASCII 文件
MYFILE 一个简单的Macro ,继续,
参数化宏Parameterized Macro T 宏可以参数化
T 文件名后面的字符串是参数(parameters)$M /MyFile NEWEQUIP 300 400 600
宏的参数
T Macros 可以有多达9 个由空格分隔的参数.$M /MyFile PML TRAINING 55 66
T 文本字符串可以以单个参数输入
$M /MyFile $< PML TRAINING $> 55 66
T $<和$>是分隔符,在它们之间的任何字符都被认为是单
个参数
变量Variables
T变量基本概念
–变量用于存储数值,变量必须有名字,变量的数值可以改变,但变量名
是固定的.
T PML变量
–在PML2中变量是一个对象(Objects)
•每一个对象(变量)有一个唯一的名字
•每一个对象都有一套函数与之相关联,这些函数称为方法
(Methods).方法用于处理对象中的数据
•生成对象时必须指明对象类型(Object type),不同的对象类型对
应不同的方法
对象(变量)类型Object Types
T内置(Build-in)的对象类型
–字符串类型(String).如'Hello World'
–实数类型(Real).整数类型包括在实数类型中,如99
–布尔类型(Boolean).用于逻辑表达式,如True,False
–数组类型(Array).可以存储任意类型的数据
T系统定义(System-defined)的对象类型
–指在PDMS中的变量类型,如Positon,Reference
T用户自定义(User-defined)的对象类型
生成、查询、删除变量
T使用命令行或者文本文件测试
T通过赋值声明变量类型
!MyString= 'Hello World'
Q var!MyString
显示<STRING> 'Hello World'
T直接声明变量类型
!Length = Real()
Q Var!Length
显示<REAL> Unset
T删除变量用到方法
!MyString.Delete()
变量命名规则(Naming Conventions) T局部变量(Local)和全局变量(Global)
!SurfaceArea! 表示局部变量
!!Area !!表示全局变量
T变量名最长16 个字符(不包括!和!!),变量名可以包含字母和数字
T变量名不能用数字和点(.)开头
T变量名的大小写不敏感
T建议:一个变量一个用途,最好给变量名一个有意义的名字,并且区分大小写
!!StartInUpperCase
PDMS属性类型-系统定义变量类型
T名字(Name)如Name
T字符串(String)如Description,Function
T实数(Real)如Angle,Temperature,Rating
T布尔(Boolean)如Lock,Shop,Built
T数组(Array)如Level
T参考(Reference)如Spref,Catref,Lstube,Ptref,Gmref T关键字(Word)如Type,Purpose
T位置(Position)如Position,Hposition
T方位(Orientation) 如Orientation
T方向(Direction)如HDirection
!!ce
T特殊全局变量!!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 = Ref
Q 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= TRUE
T坐标的变化
!Pos = !!CE.Position
!Pos.Up= 2000
!!CE.Position= !Pos
练习-变量给属性赋值T使用文本编辑器编辑
–获取当前元素的Name和Type
–新建同样类型的元素
–在命名中追加-NEW
PDMS命令中使用变量
T变量前加$表示提取变量的值
!type = !!ce.type
!name = !!
!newname= !name + ‘-NEW’
New $!type $!newname
T直接组合字符串
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 * !Width
return !Area $*函数!!Area 有两个参数一个返回值Endfunction
T 文件命名和存放位置
–文件名必须与函数名一样,后缀是小写的pmlfnc
Pmllib/NewPml
functions forms area.pmlfnc xxx.pmlfrm objects xxx.pmlobj
定义函数
T函数定义成全局变量
define function !!Area( !Length is REAL, !Width is REAL,!area is Real) !Area = !Length * !Width
Endfunction
函数调用
T将新建函数加到索引文件Pml.index中
Pml Rehash All
T调用函数并且得到返回值
!MyArea= !!Area(6,4)
Q var!MyArea
<Real> 24
T练习-新建函数计算圆的面积,测试函数
define function !!circleArea( !radius is REAL) is REAL
!Area = PI * !Radius.Power(2)
return !Area
Endfunction
PML通用功能-注释
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 screen
T退出程序
if ( count EQ 0 ) then
return
endif
逻辑控制(Control Logic)
T四种逻辑控制结构
–条件判断语句If…else…endif
–循环语句Do …enddo
–跳转Label Golabel
–错误处理Handle…Endhandle
条件判断语句(If Construct) T判断表达式中必须是布尔值
!Type = Type
!OwnType= Type of Owner
IF(!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.
ENDIF
T Elseif,else都是可选项
判断元素是否有名字
T判断元素是否有名字
!Name = Name
!FullName= FullName
If(!Name EQ !FullName) then
$p Named.
Else
$p No name.
Endif
判断常用例程
T判断变量是否定义
If(UnDefine(!x)) then
$p Variables $!x not define.
endif
T判断变量值是否存在
!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 = type
add ce
Auto ce
if(!type eq'BRAN') then
add href tref
elseif(!type eq'NOZZ') then
add cref
endif
$p Current type = $!type
循环(Do loops)
T循环赋值
!Total = 0
Do!x From1 To100 By1
!Total = !Total + !x
Enddo
T可以忽略的选项
–如果循环起始为1,From选项可以忽略
–如果步长为1,By选项可以忽略
中断循环Break
T中断循环Break
!Total = 0
Do !x To 100
!Total = !Total+ !x
If(!Total gt500) then
Break$*或者Break if(!Total gt500)
Endif
Enddo
跳过循环(Skip)
T用skip 跳过奇数
Do !x To 100
If(Int(!x/ 2) NE (!x / 2)) then
Skip$*或者Skip If(Int(!x/ 2) NE (!x / 2))
Endif
!Total = !Total + !x
Enddo
跳转(Jump)
T用golabel可以跳转到标记行,不限制前后顺序Label /Start

GoLabel/Start
T Label名最长16 个字符,不包括'/'
T不允许跳转到Do循环中
golabel/illegal
!Total = 0
do !x from 1 to 5
!Total = !Total + !x
label /illegal
enddo
错误提示
T测试程序
Next
$p OK
T可能出现的错误
(2,113) List exhausted
2表示错误出现在PDMS中的哪个模块
113是错误代码
T出现错误通常有三种结果
–出现一个警告框,用户必须确认
–输出一个错误信息
–从当前运行的程序中退出
错误处理(Error Handling) T处理特定错误,使程序继续执行
Next
Handle (2,113)
$p Last element.
EndHandle
$p OK
T处理任何可能的错误
Next
Handle Any
EndHandle
$p OK
处理多个错误
T处理多个错误
Next
Handle (2,113)
$p Last element.
ElseHandle(2,46)
$p …
EndHandle
$p OK
没有错误
T处理没有错误
!noteM= !sheetname+ '/LoadTable'
$!noteM
handle any
new note $!noteM
elsehandle none
delete note
new note $!noteM
endhandle
数组(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 value
do!Name values!BestCar$*将!BestCar中元素逐个赋给!Name $p Array element is $!Name
Enddo
–自动跳过空的数组元素
T索引循环Do indices
do !n indices!BestCar$*将!BestCar中索引号逐个赋给!n !Car = !BestCar[!n]
$p Array element $!n is $!Car
Enddo
T练习-测试数组循环
PDMS中生成数组(Collections)
T收集指定类型的Pdms元素
Var!PipeComps Coll ect All Pipe For CE
–生成的!PipeComps是数组,保存的是元素的参考号
–不使用For CE则是从整个MDB中提取
T类型用法示例
ALL所有元素
ALL Pipe所有的Pipe
ALL BRANCH MEMBERS所有管件,包括Tube
ITEMS OF EQUI /D1201设备中的所有基本体
继续…
T限制条件
Var!Elbows Coll All Elbow With (Abor gt100)for CE
With后面是一个表达式
T限制区域
Var!Elbows Coll All Elbow Within W0N0U0 to W2000N2000U2000 Var!Elbows Coll All Elbow Exclusive Within Volume /D1201 1500
Exclusive表示完全包含在空间内的元素才被选中
T追加
Var!Elbows Append Coll all Bend for CE
练习
T选择一个设备,将所有Nozzle连接的管道加入显示–加入当前设备,居中显示
–Nozzle的Cref属性记录连接的管道名称
–通过参考号定位到Nozzle
–加入显示Add Cref
Add ce
Auto ce
Var!nozzles Coll all nozzle for ce
Do !nozzle value !nozzles
$!nozzle
Add cref
EndDo
求值(Evaluate)
T通过参考号提取属性值
Var!Pipes Coll all Pipe for ce$*得到参考号
Var!Names Eval name for all from!Pipes$*提取Name属性Q var!names
T练习-将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 !pipes
Do !n indices !names
$p $!names[$!n] $!pspecs[$!n]
enddo
排列字符串Compose
T按照宽度和对齐方式排列字符串,返回数组
!a = ‘ABCDEFG’
!b = ‘DEF’
var!output compose‘$!a’width 5 L SPACE 2 ‘$!b’width 5 R
Q var!output
T输出数组的第一个元素
$p $!output[1]
练习
T完善前一个练习,排列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 !pipes
Do !n indices !names
var!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 !names
var!out compose ‘$!names[$!n]’wid$!wid1 space 2 $
‘$!pspecs[$!n]’wid$!wid2
$p $!out[1]
enddo
对话框(Form)
系统对话框
T警告对象(Alert Objects)!!Alert是系统定义的对象–三种无返回值的警告对象
–三种带返回值的警告对象
警告Alert Objects
T三种无返回值的警告对象(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 Objects
T三种带返回值的警告对象(Alert Object)
confirm, question 和input
T确认(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') then
New Elbow choose rtext
conn
endif
询问-Question Alert Objects
T询问(Question),返回值是'YES' ,'NO'或'CANCEL' !Answer = !!Alert.Question( 'OK to delete Site?' )
输入-Input Alert Objects
T输入(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') then
New Elbow choose rtext
conn
!dir = !!Alert.Input('Direction?', 'N' )
dir $!dir
!dist = !!Alert.Input('Distance?', '1000' )
dist $!dist
endif
一个简单的对话框(Form)
T 对话框是全局变量的对象
setup form !!hello Title 'Hello'
paragraph .Message text 'Hello world'button .bye 'Goodbye' OK exit
T 控件(Gadget)
Paragraph .Message 文字控件和控件名Button .bye 按钮控件和控件名
T 对话框控制属性OK
内置属性,关闭对话框
对话框调用
T 对话框存放位置
文件名与对象名一样,后缀是小写的pmlfrm T 将新建对话框加到索引文件Pml.index 中,在命令行键入
Pml Rehash All T 显示对话框Show !!hello T 命令行关闭对话框Hide !!hello
Pmllib/NewPml functions forms
area.pmlfnc
Hello.pmlfrm
objects xxx.pmlobj
调试对话框
T调试对话框
–对话框显示后,定义文件被加载到内存中,下一次直接从内存中加载
对话框定义内容
–对话框的定义文件被修改后,需要重新加载
Pml reload form !!hello
Show !!hello
方法-对话框对象(Form Object)
T显示状态shown()
T判断命令行窗口的显示状态
!shown = !!CADCBTH.shown()
if(not!shown) then
show !!CADCBTH
endif
var!date clock date
var!time clock time
$p Begin report at $!date $!time
缺省构造方法(Constructor method)
T增加一个输入框和方法
setup form !!hello
Title 'Hello'
paragraph .Message text 'Hello world'
text .input 'Enter text' width 10 is string$*字符串类型的编辑框
button .bye 'Goodbye' OK
exit
Define method .hello()$*缺省构造方法,与Form同名,不带参数!this.input.callback= '!this.doinput()'$*Callback指明响应操作endmethod
Define 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 Left
T相对前一个控件定位(Relative)
setup form !!hello
Title 'Hello'
paragraph .Message text 'Hello world'
text .input 'Enter text' at x0 ymax width 10 is string
button .bye 'Goodbye' at x0 ymax OK
exit
T相对指定控件定位
button .bye 'Goodbye' At xmax.input ymax.input OK 控件自动定位举例
对话框程序-Copy&Rename
T实现拷贝同时修改名字
T用到的命令
NEW type newname COPY oldname REN oldname newname By n 100
对话框定义文件
T对话框定义文件
setup form !!mycopy
title 'Copy and rename'
text .from 'From' at x0 width 20 is string
path right
button .ce'CE '
text .to 'To ' at x0 ymax+ 0.3 width 20 is string
text .by 'By ' at x0 ymax+ 0.3 width 10 is string
button .copy ' Copy ' at x2 ymax+ 0.3
button .cancel 'Cancel' at x23 Cancel
exit
缺省构造方法
T缺省构造方法
Define method .mycopy()
!this.ce.callback= ‘!this.ce()’
!this.copy.callback= ‘!this.copy()’
!this.by.val= ‘N0’
Endmethod
T得到CE的名字
Define method .ce()
!this.from.val= name
endmethod
主程序
T首先判断控件的值
Define method .copy()
!from = !this.form.val
$!from
handle any
!!alert.message(‘$!from not existed.’)
return
endhandle
!type = type
!to = !this.to.val
!by = !this.by.val
new $!type $!to copy $!from ren$!from $!to by $!by
endmethod
控件的内置方法
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编辑框Text
text .input 'Enter text' at x0 ymax width 10 is string
T多选框Toggle
toggle .bran 'Branch'
toggle .equi'Equipment'
T框架Frame
Frame .frame1 'Include' at x0 ymax+ 0.2
toggle .bran 'Branch'
toggle .equi'Equipment'
Exit
继续…
T按钮Button
button .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 ymax
T列表框List
list .list 'Drawlist' at x0 ymax width 18 height 5
T练习-组合上述控件,生成新的对话框!!Addvolumn,比较Ok,Cancel的不同
设置控件初始值
T缺省构造方法设置控件初始值
define method .addvolumn()
!this.bran.val= true
!this.input.val= '1500'
endmethod
按钮的应用实例
T新建方法,将当前元素的名字显示在文本框中define method .ce()
!this.cename.val= fullname
endmethod
T在缺省构造方法中指定控件的响应操作
define method .addvolumn()

!this.ce.callback= '!this.ce()'
endmethod
对话框控制属性-Apply
T新建方法,调用控件的值
define method .apply()
!dist = !this.input.val
!name = !this.cename.val
$p CE is $!name ,Dist = $!dist
endmethod
T在缺省构造方法中指定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) then
var!elements append coll all bran Within Volume
$!name$!dist
endif
if(!this.equi.val) then …
var!names eval name for all from !elements
do !element value !elements
add $!element
enddo
endmethod
列表框应用实例
T列表框用数组赋值,dtext表示display text !this.list.dtext= !names
T从列表框获取值
!name = !this.list.selection()
T新建方法,提取List中的名字
define method .doselection()
!name = !this.list.selection()
$!name
endmethod
T在缺省构造方法中指定列表框的响应操作define method .addvolumn()

!this.list.callback = '!this.doselection()' endmethod
View控件
T四种View控件
–输入输出显示窗口Alpha view
–Plot图片显示窗口Plot view
–Design显示窗口Volume view
–Draft显示窗口Area View
Alpha Views
T自定义输入输出对话框
Setup Form !!alphaview
title ' Input & Output'
view .Input ALPHA hei10 width 40
channel REQUESTS
channel COMMANDS
Exit
button .apply 'Apply' at x0 ymax Apply
button .Dismiss 'Cancel' at Xmax form-size Cancel Exit
Plot View
T显示Plot图片
setup form !!plotview
View .view1 plot width 41 hei23
exit
define method .plotview()
!this.view1.borders = false
!this.view1.add('c:/ladder.plt')
endmethod
Volumn View
T Design的显示窗口
setup form !!poptest
view .vol volume width 50 hei9
exit
path down
button .press 'swap popup' call '!this.popswap()'
menu .popmenu
add 'hello' ' '
add 'world' ' '
exit
exit
define method .popswap()
!this.vol.popup = !this.popmenu
endmethod
文件处理(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 $!Line
Enddo
T将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 !!findfile
title 'Find file'
text .filename 'File name' at x1 ymax+0.3 width 35 is string
button .browser 'Browser'
button .ok ' OK ' at x1 ymax+0.3 OK
button .cancel 'Cancel' at x10 cancel
exit
define 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()'
endmethod
Define method .display()
!fname= !this.filename.val
!output = object file(‘$!fname’)
!lines = !output.readfile()
q var!lines
endmethod
菜单(Menu)。

相关文档
最新文档