pml基础手册与总结
- 格式:pdf
- 大小:205.04 KB
- 文档页数:20
PM基础讲座-管理资料1、什么是PM所谓PM是预防性维修(Preventive Maintenance)和生产维修(Productive Maintenance)的英文首字母的略语,在日本设备工程协会的PM用语集上有如下定义:预防维修——是指从预防医学的立场出发,对设备的异状进行早期发现和早期治疗,。
(注)在预防维修由国外引进我国的最初阶段:即算作PM。
生产维修——是提高设备生产效能的最经济的维修方法。
其目的在于从设备的设计、制造、使用以致维修的全过程,换言之,也就是在设备的一生之中,设法减低设备本身价值和维修等有关设备使用的一切维修费用,以及由于设备劣化而带来的损失等全部费用,用以提高企业的生产效能。
作为它的手段,有预防维修,事后维修,改善维修和维修预防。
我国最初引进PM的时候(约在1951年),对于事先防止设备故障的活动,叫做“预防维修”,其后,约在1954年,自从美国GE社特别强调提高生产效能以来,也就是提倡意味着赚钱维修的生产维修以来,PM就形成含有两种意义的词汇,而今天说PM就只是意味着“生产维修”。
关于“预防维修”在日本语中多用预防保全一词。
2、PM的发展过程(参看表1)PM一词最初引进我国是在1951年(昭和26年),即所谓战后。
那时,从废墟上重建了军需工业,随之以此力图转向现代化工业,逐渐走向活跃的开端。
在日本通过化学工业和其它,以所谓安装工业为中心的日本能率协会的顾问活动,用报告会、出版刊物等极力宣传;与其在发生故障之后才进行维修,不如采取美国那种更为经济的在发生故障之前就进行维修的PM方式,从而开始出现预防维修的热潮。
其后,在1954年(昭和29年),如上所述,根据GE社的经验又开始提倡生产维修。
表-1 PM发展过程年代1951年(昭和26年) 1954年(昭和29年) 1957年(昭和32年) 1960年(昭和35年 1962年(昭和37年) 1971年(昭和46年) 发展过程 PM Produtive Maintenance PM 预防维修 PM Produtive Maintenance PM 生产维修 CM Corrective Maintenance CM 改善维修MP Maintenance Prevention MP 维修预防Relability Engineering 可靠性工程 TPM Total PM 全员参加的PM 特征我国最初引进预防修理中心以提高生产为目的的维修,由美国GE社所提倡强调改善,设备素质的改善强调新设备的PM设计强调可靠性和维修性由日本设备工程协会提倡强调TPM表-1 PM发展过程这个生产维修实际也包含着预防维修,也就是为了提高生产的经济效果的维修。
集团股份有限公司SAP—PM操作手册目录一、功能位置 (3)1.创建功能位置:IL01 (3)2.修改功能位置:IL02 (5)3.显示功能位置:(IL03) (7)4.按功能位置结构展开(IH01) (8)二、固定资产类设备新增 (9)1.固定资产类新增提报 (9)2.供应部建立采购订单ME21N (9)3.收货MIGO (9)4.设备到货,完善设备主数据 (9)三、项目设备 (13)1.项目利用旧设备 (14)2.项目采购新设备 (14)四、设备BOM的新增、修改 (14)1.新增单个设备BOM (14)2.修改设备BOM (21)3.显示设备BOM (21)4.批量导入设备BOM (21)五、故障知识库的新增、修改 (21)1.故障现象的新增、修改 (21)2.故障原因新增、修改 (24)六、状态监测点的新增、修改 (24)1.创建状态监测点 (24)2.修改状态监测点信息 (26)3.单个查询状态监测点的信息 (26)4.批量显示计量点 (26)5.录入状态监测点数据记录 (27)6.显示计量凭证(状态监测记录) (29)七、密封点 (30)1.根据功能位置创建密封点 (30)2.修改密封点信息 (32)3.查询计量点(密封点)信息 (33)4.密封点泄漏率统计报表查询 (33)八、换油点 (33)1.创建换油点 (33)2.修改换油点信息 (35)3.查询计量点(换油点)信息 (35)4. 维护换油信息 (35)5.换油执行 (36)6.换油历史记录 (36)九、测厚点 (37)1.创建测厚点 (37)2.修改测厚点信息 (38)3.查询计量点(测厚点)信息 (39)4.测厚监控平台 (39)5.测厚执行 (40)6.测厚历史记录 (40)十、设备维修流程 (40)1.职能部门创建维修通知单 (41)2.建立维修订单 (45)3.领料 (54)4.维修执行——内部维修(车间内部维修) (54)5.维修执行——外部维修(车间外) (55)6.维修工单报工 (55)7.维修订单关闭 (56)8.维修工单状态对照表 (58)十一、设备保养 (58)1.设备保养计划导入 (58)2.查看维护保养计划 (59)3.设备保养执行 (60)4.打印保养工单 (62)5.保养工单报工、结算、关闭 (63)十二、特种设备定检 (63)十三、设备调拨 (64)1.调拨申请 (64)2.财务处理 (64)3.职能部门处理 (64)十四、设备报废 (68)1.车间OA申请 (68)2.职能部门对设备调拨 (69)3.财务资产号报废 (69)十五、设备状态变更 (69)1.车间OA申请 (69)2.职能部门对设备调拨 (69)十六、文档管理 (70)1.创建设备文档 (70)2.修改、更新、查看文档 (74)十七、设备大修 (76)1.大修计划的制定及导入 (76)2.大修执行 (77)十八、报表相关说明 (77)1.设备台账报表 (77)2.设备故障分析报表 (80)3.设备故障率统计报表 (81)4.密封点泄漏率统计报表 (81)5.维修成本报表 (82)6.设备管理指标统计报表 (83)7.设备管理指标统计报表 (83)一、功能位置责任部门:设备科责任人:固定资产管理员1.创建功能位置:IL01在事物代码输入框处输入事务代码(IL01)回车进入界面;1.1单击结构标识后面的选择框,在弹出的选择界面上选择圣泉PM结构标识(XXXX—XXXX —XX—XX);功能位置分四层,按照XXXX—XXXX—XX—XX的格式去创建,第一层代表工厂(SAP的概念),第二层是车间名称代码(一般是车间名称首字母,附录里有对照表),第三层代表工段,第四层代表楼层。
第一部分: 基础知识PML基本概念Programmable Macro Language 可编程宏语言.通常的PML开发包括两部分, 一部分是PML宏,脚本语言; 另一部分是PML2,面向对象的编程语言.1.PML宏(Macro)宏, 就是一系列pml命令的集合.通过$m执行.格式为: $m filename [param1 param2 ….](举例)其中param1为参数, 宏可以参数化.(举例)2.面向对象的PML2PML支持对象(Object),对话框(Form)和菜单(Menu).(举例)一.变量,函数和方法1. 变量的定义及用法在PML2中, 每一个变量都是对象. 变量名以!或者!!开头,例如!weight. !开头的变量为局部变量, !!开头的为全局变量.PML内置了常用的变量类型.(1)Real 实属类型. 提供基本的四则运算操作. 例如!a = 10!b = 10!a = !a + !b$p $!a --输出变量a的值(2)String 字符串类型. 例如!strName = ‘/EQUI-TEST-1’(3)Boolean 用于逻辑表达式. 值只能是true/false(4)Array 数组(5)Position(6)Direction3.变量的创建, 删除, 查看变量可以用赋值来创建. 例如!str = ‘abc’也可以用类型标识来创建.!str= string()!str= ‘abc’删除: !str.delete()查看:通常使用q var!str也可以用$p $!str4.方法(method) 和函数(Function)Method是一个对象的子程序. 只有当对象存在,才可以调用对象的方法. 例如!strNum = ‘123’!num= !strNum.Real()$p $!num以上的代码, 调用的string类型的real()方法, 将字符串转换为数字,并输出.函数的用法与方法类似, 同样有参数和返回值. 但函数是独立存在的,全局的. 在任何地方, 都可以调用.二.程序的结构控制1.循环语句(1)Do循环例如:!sum = 0Do !i From 1 To 100 By 1!sum = !sum + !iEnddo其中!i为循环变量, 初始值为1, 终指为100, 步长为1. 当步长为1是,一般省略.(2)中断Break: 中断并跳出最内层循环(3)跳过Skip. 跳过当此存换. 例如!sum = 0Do !i From 1 To 100 By 1Skip if ( int(!i / 2) eq (!i / 2)) $* 跳过所有的偶数!sum = !sum + !iEnddo2.逻辑控制语句格式为if () then …else…其中括号内的必须是表达式.例如:IF (TYPE OF OWNER EQ ‘BRAN’) THEN$P BRANCH $!!ELSEIF (TYPE EQ ‘BRAN’) THEN$P BRANCH $!!ELSE$P NOT BRANCHENDIF其中elseif /else可选, elseif可多个.3.跳转语句定义标记Label /label1跳转Golabel /gol1不建议使用.三.其他相关语句1.数组字符串长度Length()类型转换Real(),Position(),Boolean()大小写转换LowCase(),UpCase()两端截取After(str2),Before(str2),Substring(index)中间截取Substring(index,nchars)替换Replace(str2,str3)匹配Match(str2)分割(返回数组) Split()修剪Trim()2.字符串元素数量Size()追加元素Append(value)追加数组AppendArray(Array)删除全部元素Clear()倒序Invert()搜索Find(value),FindFirst(value)和并重复项Unique()3.表达式(1)算术运算符+ - * /(2)连接运算符&(3)比较运算符LT GT EQ NEQ(4)逻辑运算符AND OR NOT4.计算函数Sqrt(x)Power(x, e)Int(x)Sin(x)Cos(x)5.注释单行注释用—开头. –之前不可出现空格之外的字符单行注释$*. $*之后的内容为注释. $*之前可出现其他字符段落注释. 用$(和$)将注释内容包括进来.(举例)6.打印$p 打印内容例如$p test line打印多行$p line 1 $Line 2输出内容包括变量$p is $!!其中$为转义字符, 如果要输出$, 则使用$$7.异常处理程序运行中, 可能需要意料之中的可能发生的异常/错误, 例如节点创建失败, 遍历子节点时超过最后一个等等. 这时需要捕捉异常,作出相应的处理.(1)异常捕捉例如Site /TEST_SITEHandle (2, 109) $*$p节点不存在Endhandle其中(2, 109)为错误编号. 也可以使用handle any捕捉任意类型的错误.(2)捕捉多个异常Site /TEST_SITEHandle (2, 109) $*$p节点不存在Elsehandle (2, 108)$p /TEST_SITE节点存在, 但不是SITE类型elsehandle none$p Site /TEST_SITE节点存在endhandle其中handle none表示没有遇到错误的情况.四.用户自定义方法/用自定义函数/自定义对象(1)自定义方法Define method .方法名(参数1 is 类型, 参数2 is 类型…) is 返回值类型其中参数可没有返回值可以没有例如Define method .Sum(!a is real, !b is real) is real!sum = !a + !bReturn !numendmethod(2)自定义函数Define function !!sum(!a is real, !b is real) is real!sum = !a + !bReturn !numendFunction与方法类似. 一个文件里只能定义一个函数,扩展名为pmlfnc, 必须放在指定的文件夹下,并执行pml rehash all(3)自定义对象Define object 对象名endobject五.文件处理(1)读取!file = object FILE(‘d:\abc123.txt')!lines = !file.ReadFile()Qvar!lines(2)写入!arr = array()!arr.append(‘line1’)!arr.append(‘line1’)!file = object FILE('d:\abc.txt')!file.WriteFile('WRITE', !arr) $*将数组!arr写入文件其中’Write’可以换成'OVERWRITE'(覆盖)和'APPEND'(追加)六.对话框及菜单1.系统对话框(1)询问!!alert!confirm = !!alert.confirm('确定要删除吗?')if(!confirm neq 'YES') thenreturnendif(2)警告!!alert.message(‘message’)(3)错误提示!!alert.error(‘error’)2.自定义对话框SETUP FORM !!custumFormTITLE '自定义对话框’Text .text1 ‘点击按钮’Button .okExit这是一个最简单的对话框, 显示一个文本框加上按钮, 但是点击按钮不会有任何反应. (截图)3.对话框调用/初始化Pmlhash allPml reload form !!custumFormShow !!custumForm4.默认构造方法/初始化方法每个form初始化时, 会自动调用与其名字相同的方法. 在刚才的代码中加上Define method .custumForm()!this.text1.tag = ‘初始化完成’Endmethod除此以外, 还可以加上默认的初始化函数在开头加上一行!this.initcall = '!this.init()', 调用构造方法结束,显示之前,会自动调用init()方法5.界面消息的响应界面消息的相应, 例如点击按钮, 选择下拉框等, 用callback关联.SETUP FORM !!custumFormTITLE '自定义对话框’Text .text1 ‘点击按钮’Button .ok ‘OK’ExitDefine method .custumForm()!this.text1.tag = ‘初始化完成’!this.ok.callback = ‘!this.ok()’EndmethodDefine method .ok()!!alert.message(‘OK’)Endmethod此时, 点击按钮, 会弹出对话框. (截图)。
sap pm操作手册摘要:一、引言1.了解SAP PM操作手册的重要性2.明确本文的目标读者二、SAP PM简介1.SAP PM的概念2.SAP PM的主要功能和模块三、SAP PM操作手册的主要内容1.系统登录与权限管理2.项目管理与计划编制3.成本管理4.采购与库存管理5.质量管理6.工程设计与审批7.报表与数据分析四、操作手册的使用方法1.查阅操作手册的技巧2.实践操作与实战案例五、常见问题与解决方案1.系统故障处理2.功能异常解决3.操作失误应对六、个性化定制与优化1.用户界面调整2.工作流配置与优化3.报表与查询定制七、提高工作效率与协同管理1.跨模块协作策略2.数据同步与共享3.业务流程整合八、总结与展望1.SAP PM在我国企业的应用现状2.未来发展趋势与挑战3.企业如何充分利用SAP PM的优势正文:一、引言随着信息技术的不断发展,企业对管理软件的需求也越来越高。
SAP PM (Project Management)作为一款成熟的项目管理软件,在我国企业中得到了广泛的应用。
为了让新用户更快地上手,熟练掌握SAP PM的各项功能,本文将详细介绍SAP PM操作手册的内容,并为大家提供实用的操作技巧。
二、SAP PM简介1.SAP PM的概念SAP PM(Project Management)是SAP ERP系统中一款专注于项目管理的专业模块,它可以帮助企业对项目进行全面、系统的管理,包括项目规划、执行、监控和收尾等各个阶段。
2.SAP PM的主要功能和模块SAP PM主要包括以下模块:- 项目管理与计划编制:项目创建、项目结构、计划编制、资源分配等;- 成本管理:成本估算、成本控制、成本分摊等;- 采购与库存管理:采购申请、采购订单、库存管理等;- 质量管理:质量计划、质量检查、质量控制等;- 工程设计与审批:工程建模、设计管理、审批流程等;- 报表与数据分析:项目报表、KPI(关键绩效指标)管理等。
PDMS中常用PML语句经验反馈——一些常用的PDMS命令陈岳这里提供一些常用的PDMS命令,可能有些只适用于台山项目。
Q abore ------查询元件的公称直径Q aod ------查询元件的外径Q P1 bore ------查询元件P1点的直径,包括设备上的Nozzle Q P3 bore ------查询元件P3点的直径,包括设备上的Nozzle Mark ce ------为当前元素做标记,可以是Pipe,Branch,members, Equipment 等,标记的内容是它本身的名称。
Mark with 'RPE1567' ce ------对当前元素标记’RPE1567’, 引号里面可以是任意内容Q Att ------查询当前元素的参数Q :ims-qcl ------查询Pipe或Branch的等级,当前元素要放在Pipe或Branch层上, Q name ------查询名称,如果知道这个名称,直接敲入命令行就可以找到改元素。
Q lastmodif ------查询最后修改时间Q usermod ------查询最后修改的用户Q usermod :ims-qcl ------查询最后修改:ims-qcl这个参数的用户Q var !!ce.ppos[0].wrt(world) ------查询阀门的设计重心Q var !!ce.ppos[999].wrt(world) ------查询阀门的设计者自己定义的重心Q var !!ce.gcof.wrt(world) ------查询阀门的重心(不考虑负体积如挖孔等)Q var !!ce.ncof.wrt(world) ------查询阀门真正的重心(这是PDMS自带的功能)q var !!ce.poss.wrt(world)Q var !!ce.hstub.attribute(':ep') ------查询branch头部的壁厚,当前元素放在branch上Q var !!ce.lstub.attribute(':ep') ------查询选定元件下面管子的壁厚Q var !!ce.spref.attribute(':ep') 或 Q :ep of spref ------查询所选元件的壁厚上边的:ep可以换成其他的参数,如:de(外径)Q cllength ------查询branch的长度Q var !!ce.spref.attribute(':matiere')[1].name ------查询管道的材料Q spref ------查询元素的制造规格,比如,对于支吊架来说,得出的结果就可能是 spref /MDP/PR09-100Q :mtoarea ------查询安装分区信息Q p1 pos wrt world ------查询元件P1点坐标,例如预埋板Q pos wrt world ------查询元件在世界中的坐标Q poss wrt world ------查询Beam的头部的中心点坐标Q pose wrt world ------查询Beam的尾部的中心点坐标Q :mdsancref ------查询ATTA、STRU以及Anchor plate之间的链接关系Q :prop desc ------查询Beam截面信息Q Dtxr ------查询元件的catalogue详细参数Q Prop code ------查询支吊架的详细类型Q angle/radius ------查询弯头和三通的角度和半径Enhance ce col red ------对当前元素着色,也可以是green,pink , cyan等其他颜色Enhance ce transl >5 ------改透明度Add all within vol ce ------添加当前元素空间内的所有元素Add all STRU within vol ce 300 Col 4 ------添加当前元素周围300空间内的所有STRU并以yellow显示,其中的STRU、300和col 4是可变的参数Add ce auto ce ------添加当前元素并居中显示Add href cref ------添加branch头部和尾部相连的管道Add cref ------添加三通相连的管道Add all bran with :ims-ssno eq 'HRA_RPE_03' ------添加具有相同属性的管道,其中的:ims-ssno和HRA_RPE_03是可变参数Add all bran with matchw(:ims-ssno,'HRA_RPE_03') ------添加具有相同属性的管道add all bran with matchwild(:ims-ssno,'HRA_PTR_53') and Hbore gt 50 ------Aid text num 2 (name of owner) at at hpos of owner ------辅助标记,其中的num 2、name of owner和hpos of owner是可变参数,比如改成num 3、TSN、ce/p0等都可以。
sap pm操作手册
摘要:
1.SAP PM 概述
2.SAP PM 操作手册内容
3.SAP PM 操作手册的使用方法
4.SAP PM 操作手册的优点
5.总结
正文:
SAP PM(项目管理)是SAP 公司推出的一款项目管理软件,主要用于帮助企业进行项目管理,包括项目的计划、执行、监控和收尾等各个阶段。
SAP PM 操作手册是SAP PM 软件的使用指南,可以帮助用户更好地理解和使用SAP PM 软件。
SAP PM 操作手册内容涵盖了SAP PM 软件的各个方面,包括软件的安装、配置、数据导入、项目创建、任务分配、进度跟踪、成本控制等。
此外,SAP PM 操作手册还包括了大量的实例和操作截图,以便用户更好地理解和操作SAP PM 软件。
使用SAP PM 操作手册的方法非常简单,用户只需按照手册中的步骤进行操作即可。
对于初学者来说,建议先阅读SAP PM 操作手册中的基础知识部分,然后再进行实际操作。
在使用过程中,如果遇到问题,可以随时查阅SAP PM 操作手册中的常见问题部分,或者向SAP 公司的技术支持团队寻求帮助。
SAP PM 操作手册的优点在于,它可以帮助用户快速上手SAP PM 软件,提高项目的管理效率和质量。
此外,SAP PM 操作手册还可以帮助用户节省大量的时间和精力,因为用户无需自己摸索SAP PM 软件的使用方法,只需要按照手册中的步骤进行操作即可。
总之,SAP PM 操作手册是一款非常实用的软件使用指南,可以帮助用户更好地理解和使用SAP PM 软件。
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()方法取指定字符串左侧的部分。