PDMS-PML基础
pdms实用基本操作大全要点(K12教育文档)

pdms实用基本操作大全要点(word版可编辑修改)编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(pdms实用基本操作大全要点(word版可编辑修改))的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为pdms实用基本操作大全要点(word版可编辑修改)的全部内容。
编号:40D08—01-2008 PDMS 建模操作手册( 共24页)编制王艳艳校对刘红新审核张林青项目审核贾正伟审定王金富配管室2008—2-26目录一、设备建模 (1)I利用设备模板建设备 (1)II参数化创建设备 (2)III读取宏文件生成设备 (2)IV 搭积木创建设备......................................................。
(3)V 特殊设备基本体的构建 (4)VI 设备模块常用命令...................................................。
5二、管道建模 (11)I基本管线的创建 (11)II常用的管线修改编辑命令 (12)三、错误信息类型及修改方法 (22)一、设备建模Ⅰ、利用设备模板建设备:1.创建 Site: Create ==〉 Site ==〉 tank1(名称)创建Zone: Create ==〉 Zone ==> Equipmodel2.创建设备:Utilities ==〉 Equipment3。
创建设备模版:Create ==> Basic Equipment,选择要创建的设备类型,输入对应的参数值。
修改属性:选中要修改的CE点Modify ==〉 Attributes, 修改其参数值,修改完毕后点OK即可.Ⅱ、参数化创建设备:Create ==> Stardard ==> 输入设备名称,选择具体的设备类型,选中之后点Properities,可修改其参数值,点OK确定放置点座标即可。
PDMS基础培训手册

PDMS基础数据中心 独立的数据库结构,不依赖第三方数据库。
主要优点1. 三维实体建模。
2. 专业多用户的工厂设计系统。
3. 一个设计模型(数据库)可以输出多种设计图纸,报告。
4. 等级驱动。
5. 交互设计过程中,实时三维碰撞检查。
6. 精确标注。
模型修改后,标注自动更新。
7.能强大的可编程宏语言-PML。
主要模块(Module)1.DESIGN-三维模型设计DESIGN中又包括以下几部分:1) Equipment2) Pipework3) Structure4) Cable trays5) HVAC6) Hanger&Support2.DRAFT-平竖面图生成3.ADMINISTRATION-项目用户管理4.ISODRAFT-轴测图生成5.PARAGON-构造元件库PDMS数据库层次(Database hierarchy)隐藏在PDMS强大功能后面的是简单和具有逻辑性的数据库结构,实际上PDMS数据库是专门为工厂设计定制的,它基于严格的层次和树状结构搭建。
SITEZO N EE Q U I IPIPE PIPE/100-B-2D ISH N O Z ZN Y LB R A NB R A N/100-B-2-B1/C1101-N1S U B E/STRUCTUREWORLD —建立数据库时,自动生成一个WORLD 。
在导航器中只能看到一个WORLD 。
SITE —可以是整个工厂,也可以是一个单元,一个项目。
在一个PDMS 项目中可以有多个SITE 。
ZONE —它不是一个物理分区,而是同类元件的集合,可以当作一个逻辑组。
例如PIPE ZONE ,EQUIPMENT ZONE ,STRUCTURES ZONE 。
EQUIPMENT ,STRUCTURES ,PIPES —指定了类型和名字,这一级下面才是你在图形屏幕中能实际看到的实体。
PRIMITIVE —组成模型的基本体,包括box ,cylinder ,dish 等。
PDMS常用命令

PDMS工具集功能:生成逻辑吊点命令:|show !!creathanger|功能:add |Assembly...| 命令:|show !!Assembly|功能:add |Creat Split Tee...| (创建分割三通)命令: |show !!createe|功能:add |* Model check...| (管道查询工具)命令:|show !!pipedim|功能:add |* Generate MTO | (管道材料报表)命令:|show !!gpmto|功能:add |* Sort Pipe...| (管道排序)命令:|show !!pipeorder|功能:add |* Segment Slope...|(管道坡度设计)命令:|show !!segslope|功能:add |* 3D letter...|(增加3D字体[不支持中文])命令:|show !!letter3d|功能;add |Auto Elbow |(弯头自动连接)命令:|$m /%PMLLIB%\TOOLKIT\AUTOELBOW.MAC|功能:add |Copy&Rename...|(拷贝重命名)命令:|show !!copyrename|功能:add |Batch copy...| 命令:|show !!batchcopy|功能:add |Insulation Summary...|(生成保温报表)命令:|show !!piperep|功能:add |InterDB macro...| 命令:|kill !!interdbmac show !!interdbmac|功能: add |Add volumn...| 命令: |show !!MWaddvolumn| 功能: add |* Funnel...| (创建漏斗)命令:|show !!funnel|功能:add |* Creat Fitting...| (逻辑埋件设置及定位)命令:|show !!strufitting| 功能:add |* Named section...| (自动命名梁构件)命令:|show !!autonamesctn| 功能:add |Hanger Design...| (PUCG支吊架接口程序)命令: |show !!zdjjk|功能:add |PKPM interface...|(PDMS数据接口)命令: |$m %pdmsexe%\sxpitf| 功能:add |Glif interface...| 命令:|show !!pdms2glifr|功能:add |YMJ Selection...| (预埋件)命令:|show !!YmjAuto|功能:add |Creat Hole...|(隔栅板)命令:|show !!creathole|功能: add |Add Insulation...|(添加保温)命令:|show !!addinsu|功能: add |* Get Ipara...| 命令:|show !!getipara|功能:add |* Change Specification...| (转换管道等级)命令:|show !!chspec|功能:add |* Creat drawing number...| (创建ISO图档案号)命令: |show !!isonumber| 功能:add |Name to duty| 命令:|$m /%PMLLIB%\TOOLKIT\pipename2duty.MAC|功能:add |Name to key attribute| 命令:|$m /%PMLLIB%\TOOLKIT\lsno.MAC|功能:add |* Report spec break| 命令:|$m /%PMLLIB%\TOOLKIT\reportspec.MAC|功能:add |* Show spec break| (显示管道等级)命令:|$m /%PMLLIB%\TOOLKIT\specbreak.MAC| 功能:add |* Attachment check...| 命令:|show !!attacheck|功能:add |Reselect tube...|(查询管道材质及规格)命令|!!selectube()|功能:add |Branch Flip | 命令:|$m /%PMLLIB%\TOOLKIT\HT_exch.MAC|功能:add |Branch Merge| (管道结合)命令:|$m /%PMLLIB%\TOOLKIT\mergebranch.MAC| 功能:add |Branch Split|(管道分割)命令:|$m /%PMLLIB%\TOOLKIT\splitbranch.MAC|功能:add |flip Cable tray | 命令:|$m /%PMLLIB%\TOOLKIT\flipCabletray.MAC|功能:add |* Ftube fill branch...| 命令:|show !!ftubefill|功能:add |* 斜管连接| 命令:|$m /%PMLLIB%\TOOLKIT\superlink.mac|功能:add |* Connect next...| 命令:|show !!connectnext|功能:add |Reconnect Set-on tee| 命令:|$m /%PMLLIB%\TOOLKIT\teerelink.mac|功能:add |* Creat Gridline Column...| 命令:|show !!creatgridline|功能:add |* Set Gridline reference| 命令:|SHOW !!SETREFERENCE|功能:add |* Mtoc off| 命令:|$m /%PMLLIB%\TOOLKIT\instmtocoff.mac|功能:add |Old Equip template...|(创建标准设备)命令:|show _CDSTDEQUI|功能:add |Instrument Box| 命令: |$m /%PMLLIB%\TOOLKIT\instrumentbox.mac|功能:add |Modify Extrusion...| (修改拉伸体)命令:|SHOW !!CDPANEL|功能:add |Modify Revolution...| (修改旋转体)命令:|show !!dbeloopedit|功能:add |* Creat Nozzle...|(创建管嘴)命令:|$m /%PMLLIB%\TOOLKIT\nozzle.mac NEW|功能:add |Modify Nozzle...| (改管嘴)命令: |$m /%PMLLIB%\TOOLKIT\nozzle.mac OLD|功能:add |Nozzle Specification...| (管嘴等级及修改)命令: |CALLE XNOZZSPEC|功能:add |* Calculate Nozzle...| 命令:|show !!nozzlength|功能:add |* Check Nozzle...|(管嘴检查)命令:|show !!checknozzle|功能:add |Pml Browser...|(PML语言浏览器)命令:|show !!pmlbrowser|功能:add |Find and Replace...|(查找替换)命令:|show !!findreplace|在Display—command line里直接输入命令—Enter,将出现命令对话框。
pdms常用命令

PDMS工具集功能:生成逻辑吊点命令:|show !!creathanger|功能:add |Assembly...| 命令:|show !!Assembly|功能:add |Creat Split Tee...| (创建分割三通)命令: |show !!createe|功能:add |* Model check...| (管道查询工具)命令:|show !!pipedim|功能:add |* Generate MTO | (管道材料报表)命令:|show !!gpmto|功能:add |* Sort Pipe...| (管道排序)命令:|show !!pipeorder|功能:add |* Segment Slope...|(管道坡度设计)命令:|show !!segslope|功能:add |* 3D letter...|(增加3D字体[不支持中文])命令:|show !!letter3d|功能;add |Auto Elbow |(弯头自动连接)命令:|$m /%PMLLIB%\TOOLKIT\AUTOELBOW.MAC|功能:add |Copy&Rename...|(拷贝重命名)命令:|show !!copyrename|功能:add |Batch copy...| 命令:|show !!batchcopy|功能:add |Insulation Summary...|(生成保温报表)命令:|show !!piperep|功能:add |InterDB macro...| 命令:|kill !!interdbmac show !!interdbmac|功能: add |Add volumn...| 命令: |show !!MWaddvolumn| 功能: add |* Funnel...| (创建漏斗)命令:|show !!funnel|功能:add |* Creat Fitting...| (逻辑埋件设置及定位)命令:|show !!strufitting| 功能:add |* Named section...| (自动命名梁构件)命令:|show !!autonamesctn| 功能:add |Hanger Design...| (PUCG支吊架接口程序)命令: |show !!zdjjk|功能:add |PKPM interface...|(PDMS数据接口)命令: |$m %pdmsexe%\sxpitf| 功能:add |Glif interface...| 命令:|show !!pdms2glifr|功能:add |YMJ Selection...| (预埋件)命令:|show !!YmjAuto|功能:add |Creat Hole...|(隔栅板)命令:|show !!creathole|功能: add |Add Insulation...|(添加保温)命令:|show !!addinsu|功能: add |* Get Ipara...| 命令:|show !!getipara|功能:add |* Change Specification...| (转换管道等级)命令:|show !!chspec|功能:add |* Creat drawing number...| (创建ISO图档案号)命令: |show !!isonumber| 功能:add |Name to duty| 命令:|$m /%PMLLIB%\TOOLKIT\pipename2duty.MAC|功能:add |Name to key attribute| 命令:|$m /%PMLLIB%\TOOLKIT\lsno.MAC|功能:add |* Report spec break| 命令:|$m /%PMLLIB%\TOOLKIT\reportspec.MAC|功能:add |* Show spec break| (显示管道等级)命令:|$m /%PMLLIB%\TOOLKIT\specbreak.MAC| 功能:add |* Attachment check...| 命令:|show !!attacheck|功能:add |Reselect tube...|(查询管道材质及规格)命令|!!selectube()|功能:add |Branch Flip | 命令:|$m /%PMLLIB%\TOOLKIT\HT_exch.MAC|功能:add |Branch Merge| (管道结合)命令:|$m /%PMLLIB%\TOOLKIT\mergebranch.MAC| 功能:add |Branch Split|(管道分割)命令:|$m /%PMLLIB%\TOOLKIT\splitbranch.MAC|功能:add |flip Cable tray | 命令:|$m /%PMLLIB%\TOOLKIT\flipCabletray.MAC|功能:add |* Ftube fill branch...| 命令:|show !!ftubefill|功能:add |* 斜管连接| 命令:|$m /%PMLLIB%\TOOLKIT\superlink.mac|功能:add |* Connect next...| 命令:|show !!connectnext|功能:add |Reconnect Set-on tee| 命令:|$m /%PMLLIB%\TOOLKIT\teerelink.mac|功能:add |* Creat Gridline Column...| 命令:|show !!creatgridline|功能:add |* Set Gridline reference| 命令:|SHOW !!SETREFERENCE|功能:add |* Mtoc off| 命令:|$m /%PMLLIB%\TOOLKIT\instmtocoff.mac|功能:add |Old Equip template...|(创建标准设备)命令:|show _CDSTDEQUI|功能:add |Instrument Box| 命令: |$m /%PMLLIB%\TOOLKIT\instrumentbox.mac|功能:add |Modify Extrusion...| (修改拉伸体)命令:|SHOW !!CDPANEL|功能:add |Modify Revolution...| (修改旋转体)命令:|show !!dbeloopedit|功能:add |* Creat Nozzle...|(创建管嘴)命令:|$m /%PMLLIB%\TOOLKIT\nozzle.mac NEW|功能:add |Modify Nozzle...| (改管嘴)命令: |$m /%PMLLIB%\TOOLKIT\nozzle.mac OLD|功能:add |Nozzle Specification...| (管嘴等级及修改)命令: |CALLE XNOZZSPEC|功能:add |* Calculate Nozzle...| 命令:|show !!nozzlength|功能:add |* Check Nozzle...|(管嘴检查)命令:|show !!checknozzle|功能:add |Pml Browser...|(PML语言浏览器)命令:|show !!pmlbrowser|功能:add |Find and Replace...|(查找替换)命令:|show !!findreplace|在Display—command line里直接输入命令—Enter,将出现命令对话框。
PDMS基础

PDMS基础VANTAGE Plant Design System工厂三维安排设计治理体系PDMS差不多培训手册PDMS差不多数据中间自力的数据库构造,不依附第三方数据库。
重要长处1.三维实体建模。
2.专业多用户的工厂设计体系。
3.一个设计模型(数据库)能够输出多种设计图纸,申报。
4.等级驱动。
5.交互设计过程中,及时三维碰撞检查。
6.精确标注。
模型修改后,标注主动更新。
7.能强大年夜的可编程宏说话-PML。
重要模块(Module)1.DESIGN-三维模型设计DESIGN中又包含以下几部分:1) Equipment2) Pipework3) Structure4) Cable trays5) HVAC6) Hanger&Support2.DRAFT-平竖面图生成3.ADMINISTRATION-项目用户治理4.ISODRAFT-轴测图生成5.PARAGON-构造元件库PDMS数据库层次(Database hierarchy)隐藏在PDMS强大年夜功能后面的是简单和具有逻辑性的数据库构造,实际上PDMS 数据库是专门为工厂设计定制的,它基于严格的层次和树状构造搭建。
ZON EEQ U I IPIPE PIPE/100-B -2C YLID ISHN O ZZN B R A NB R A N/100-B -2-B 1/C 1101-N 1SU B E/STRUCTUREWORLD —建立数据库时,主动生成一个WORLD 。
在导航器中只能看到一个WORLD 。
SITE —可因此全部工厂,也可因此一个单位,一个项目。
在一个PDMS 项目中能够有多个SITE 。
ZONE —它不是一个物理分区,而是同类元件的集合,能够算作一个逻辑组。
例如PIPE ZONE ,EQUIPMENT ZONE ,STRUCTURES ZONE 。
EQUIPMENT ,STRUCTURES ,PIPES —指定了类型和名字,这一级下面才是你在图形屏幕中能实际看到的实体。
pdms实用基本操作大全

编号:40D08-01-2008PDMS 建模操作手册( 共24页 )编制王艳艳校对刘红新审核张林青项目审核贾正伟审定王金富配管室2008-2-26目录一、设备建模 (1)I利用设备模板建设备 (1)II参数化创建设备 (2)III读取宏文件生成设备 (2)IV 搭积木创建设备 (3)V 特殊设备基本体的构建 (4)VI 设备模块常用命令 (5)二、管道建模 (11)I基本管线的创建 (11)II常用的管线修改编辑命令 (12)三、错误信息类型及修改方法 (22)一、设备建模Ⅰ、利用设备模板建设备:1.创建 Site: Create ==> Site ==> tank1(名称)创建Zone: Create ==> Zone ==> Equipmodel 2.创建设备:Utilities ==> Equipment3. 创建设备模版:Create ==> Basic Equipment,选择要创建的设备类型,输入对应的参数值。
修改属性:选中要修改的CE点Modify ==> Attributes, 修改其参数值,修改完毕后点OK即可。
Ⅱ、参数化创建设备:Create ==> Stardard ==> 输入设备名称,选择具体的设备类型,选中之后点Properities,可修改其参数值,点OK确定放置点座标即可。
参数化模型设备的修改:Modify ==> Equipment Specification ==> 点Properities, 修改其属性值。
Ⅲ、读取宏文件生成设备:1.选择要处理的源设备,生成一个宏文件Utilities ==> DB listing ==> 输入要输出的宏文件路径==> 点Add CE ,点Apply,这样就输出一个宏文件。
2.打开命令行Command line , 读取刚才生成的宏文件,$M D:\Temp\ (读取第一步生成的文件)这样就可生成一个与原CE一样的设备Ⅳ. 搭积木创建设备1. Create Equipment 输入设备名称2. Create ==> Primitive ==>选择搭积木组成设备的各个组件,拼成一个设备,具体的组件名称可取默认值,设备嘴子另外命名。
PDMS基本操作

PDMS基本操作PDMS是一款用于进行建筑和工程设计的三维建模软件,它具有强大的功能和灵活的操作,可以帮助工程人员更好地进行设计和分析工作。
本文将介绍PDMS的基本操作,希望能够对初学者有所帮助。
首先是创建模型。
在PDMS中,可以通过File菜单中的选项创建一个新的模型。
在创建模型时,需要选择适当的单位和坐标系。
创建模型后,可以在模型视图中绘制各种元素。
绘制元素是PDMS中的基本操作之一、在PDMS中,可以使用不同的工具和命令来绘制各种元素,如墙体、柱子、梁、管道等。
绘制元素时,需要指定元素的类型、尺寸和位置等参数。
通过选择合适的工具和命令,可以在模型中绘制出各种符合设计要求的元素。
在PDMS中,还可以使用构建结构的功能来创建模型的组件之间的关联关系。
通过构建结构,可以将不同的元素组合成一个完整的系统。
例如,在管道系统中,可以使用构建结构将各个管道和阀门等组合成一个完整的管道系统。
除了上述基本操作外,PDMS还提供了生成报告的功能。
通过生成报告,可以获得模型的详细信息,如元素的属性、尺寸、材料等。
这些信息可以帮助用户更好地了解模型的特点和性能,为后续的设计和分析提供参考。
除了上述基本操作外,PDMS还提供了其他的一些功能和工具,如复制、剪切、粘贴等,可以帮助用户更好地进行模型的操作和管理。
此外,PDMS还支持与其他软件的集成,如CAD软件、分析软件等,可以方便地进行数据的导入和导出。
总结起来,PDMS是一款功能强大的三维建模软件,通过掌握其基本操作,可以更好地进行建筑和工程设计工作。
希望本文的介绍能对初学者有所帮助,使他们能够更好地使用PDMS进行设计和分析工作。
第一部分:PDMS基础

FEDI三维设计集成系统培训手册第一部分:PDMS基础三维工作组二OO八年九月学习目标 z了解主要模块功能z了解数据库层次z了解权限设置z掌握视图基本操作z掌握本专业常用工具栏操作z掌握命令栏及常用命令1.1.PDMS概念P lant D esign M anagement S ystem = PDMS 1.2.PDMS基础1.2.1. 主要特点z以数据库为中心z三维实体建模z多专业协同设计z实时三维碰撞检查z生成设计图纸和报告1.2.2. 主要模块(MODULES)z设计模块(DESIGN)-Equipment 设备-Pipework 管道-Structure 建筑、结构-Cable trays 电缆桥架-HVAC 暖通和六道-Hanger&Support 支吊架-Design Templates 设计模版 z平立面图模块(DRAFT)z轴测图模块(ISODRAFT)z管理模块(MONITOR) 各个模块切换:a)登录前选择b) 设计中切换1.3.数据库层次(Hierarch)PDMS数据库是专门为工厂设计系统定制的,它基于树状结构搭建,易于理解和使用。
设计模块的数据库层次如下:WORLD → SITE → ZONE → ……管道:SITE→ZONE→PIPE→BRAN→BRAN members设备:SITE→ZONE→EQUI→SUBE→PRIM桥架:SITE→ZONE→PIPE→BRAN→BRAN members建筑结构:SITE→ZONE→STRU→FRMW→SBFR →SCTN→FITT→FLOOR→STWALL→FITT1.4.PDMS视图操作1.4.1.三键鼠标– 左键-点取CE (current element表示当前元件,当前元件可以是一个WORLD、SITE、ZONE、EQUIPMENT、NOZZLE、PIPE、BRANCH等)– 中键-视图控制(平移、旋转、缩放等)– 右键-快捷菜单1.4.2.显示局部内容有两种方法a)在模型窗口中点右键快捷菜单b)快捷按钮Limits CE OptionsZoom to SelectionWalk to Draw ListCentre on Selection1.4.3.视图控制ZOOM RECTANGLEF2=Zoom In/OutF3=PanF5=RotateF8=Shaded 实体/线框切换F9=Border 视图控制显示/隐藏切换1.4.4.存取视图在三维视图中用鼠标右键点取图标,在出现的弹出式菜单中点击Save view>view1/2/3/4,将当前显示保存到视图1/2/3/4,总共能保存四个视图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)来驱动一个简单的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)。