最新文章

关于网站停止更新的通知 PDMS教程-两种让Branch继承Pipe温度、压力等属性的方法 PDMS教程-显示支架编号的方法(显示逻辑支架stext名称的命令) PML教程1-PML语言开发概览 PDMS教程-查询螺栓长度、直径、数量、描述的命令
 

常用知识点

                      安装&汉化                              基础知识                              报错汇总                              插件

                      设备建模                                管道建模                              结构建模                              电气仪表建模

                      平面出图                                ISO出图                               元件库&等级表                    三维模型

                      PML                                      导入导出&格式转换              PDMS课程                          SP3D课程


 

声明:本系列教材摘自官方发布的PML程序开发说明,如有侵权,请联系删除。

 

1 PML 语言开发概览

AVEVA 支持用户使用 PML(Programmable Macro Language 可编程宏命令语言在 AVEVA Plant 系统软件上进行定制开发二次开发。

PML 是基于 AVEVA 命令讲法的可编程语言。随着技术的发展,PML 已增加更多现代开发语言的特点,更接近其它觉见的面向对象语言。

PML 可分为 3 个不同部分:

PML 1: 作为 PML 的第一个版本,基于命令语法。提供了基本的 IF 语句、DO 循环、变量及错误处理。

PML 2: 作为PML 的第二个版本,增加了面向对象语言的特点。可使用 Function、Object 及方法。

PML.Net: 可使用.NET 语言进行开发。

1.1 PML 1 - 宏命令操作符

当 PML 写成宏命令操作符,PPDMS 将视其为独立的多行命令,并接顺序执行(相当于把命令接顺序输入到命令行中)

PML 1 写成的宏命令写成文件并保存为 ASCII 格式可使用$m/FileName 或直接拖拽到命令行中执行。

1.2 PML 2 - 宏命令操作符

PML2 与现代的面向对象语言非常相似,包括提供了多态性和函数重载。

然后 PML2 并不提供继承及变量的Public/Private 定义。

通过方法的级连特点,PML2 可在一行代码中使用多个运算符,这在 PML1 中是不能实现的。

PML2 的特点:

    • 提供内置的变量类型:STRING , REAL, BOOLEAN, ARRAY
    • 通用的内置方法
    • 函数取代宏
    • 用户自定义对象
    • PML 存放路径:PMLLIB
    • 动态加载 Form, Function , Object

示例:

声明变量:

    • 声明局部变量,为 Real 类型,值为 3: !realVariable = 3
    • 声明全局变量,为 Boolean 类型,值为 Fail: !!booleanVariable = FALSE
    • 设置数据成员 3 为 Fred:!ArrayVariable[3] = |Fred|

查询对象信息:

    • 查询对象的值及类型:q var !exampleObject
    • 查询对象的类型: q var !exampleObject.objectType()
    • 查询对象包括的成员:q var !exampleObject.attributes()

对象的方法:

    • 查询对象包含的方法:q var !exampleObject.methods()
    • 查询对象是否设置值:q var !exampleObject.Set()
    • 查询数据的成员数量:q var !arrayVariable.Size()
    • 查询字符串长度:q var !stringVariable.length()

1.3 PML Object

PML 中所有变量都有对象类型。变量的对象类型在变量定义时就被 设置并在变量征集周期内保持不变。变量符值时需要考虑对象类型是否匹配。

PML 中主要有以下三种对象类型:

    • 系统内置类型。例如:String , Real , Boolean, Array
    • 系统定义类型。包括:Position , Direction , Orientation
    • 用户自定义类型。

当变量被定义为指定类型,则变量将含有该类型的 Member(成员)和Methods(方法)。

可使用用户自定义对象把不同类型的数据成组。以下是两个用户自定义对象的例子:

当 Object 更改后,可使用 pml reload object objectName 动态更新 Object

局部变量与全局变量

    • !localVariable //局部变量
    • !!globalVariable //全局变量

对象的声明:

PML 的变量不需要提前声明,在赋值时同时声明变量。

!name = |Fred|

!!answer = 42

!!flag = TRUE

PML 对象也可以提前声明,但声明后值为 UNSET.

!name = String()

!!answer = object Real()

!array = object Array()

使用对象的成员:

当变量定义成对象类型后,给对象成员赋值及读取对象成员值。

!newPlant = object Factory()

!newPlant.name = |ProcessA|

!newPlant.workers = 451

!newPlant.output = 2000

!numberOfWorkers = !newPlant.workers

PDMS 中特殊的全局对象类型

PDMS 中提前定义了特殊的全局变量类型,这些类型不般不能修改,但可以调用。

!!CE 全局的DBREF 类型,表示当前数据库中元件

!!ERROR 全局的错误对象,成员中包括了最后一个错误的信息

!!PML 包括了获取文件方法.GetPathName()

!!ALERT 提供错误、提示、警告的窗口

!!AIDNUMBERS 用户管理 Aid 显示

!!APPDESMAIN 表示 Design 模块接口

1.4 PML Function 和 Method

Function 和 Method 是 PML 语言的集合。当调用 Function 和 Method,将对命令进行接顺序执行(与 PML1 宏相同)

Function 和Method 基本相同,除了定义的关键字有区别外,调用的方法稍有不同。

函数调用方法: !!exampleFunction()

方法调用方法:!!exampleObject.exampleMethod()

参数在 Function/Method 内部是局部变量,同时可定义 Function/Method 的返回值类型。

调用示例: !area = !!area(12 , 200)

类型为 ANY 的参数

参数类型可定义为 ANY,表示参数任意类型都可以。

1.5 PML Form

在 PDMS 中,每个 Form 都是一个全局变量,同时也是属于 Form 类型(与其它对象类型相同), 包括成员及方法。同时与其它对象类型的区别在于可添加显示的控件。

示例如下:

上面示例代码将保存成文件文件,命名为 nameCE.pmlfrm。

Form 更改后,可使用 pml reload form !!formName 动态更新 Form.

1.6 PDMSUI 环境变量

PML1 宏文件一般存放在 PDMSUI 环境变量指向的路径。该环境变量一般是在 PDMS 安装目录下的 evars.bat 中定义。如下:

把文件放到该环境变量指定目录的目标是可使用$M %PDMSUI%\DES\PIPE\MPIPE 代替输入完整路径。

在标准产品中,将使用 CALLP 代替上述PDMSUI 变量的调用语法

1.7 PMLLIB 环境变量

PML 2 的程序存放在 PMLLIB 环境变量指向的路径下。可在 PDMS 安装目录下的 evars.bat

中设置环境变量。

PMLLIB 目录下存放 pml.index 文件,里面描述该 PMLLIB 目录下的所有程序相对位置。可使用 PML REHASH ALL 更新pml.index。当更新后,程序才可调用 。

1.8 修改 PDMSUI 和 PMLLIB

当 PML 程序开发完成,建议把新开发程序放到独立的 PMLLIB/PDMSUI,代替直接放在系统标准的PDMSUI/PMLLIB 下。这样做有以下好处:

    • 当更新PDMS 标准功能程序时,不需要另外移动开发的程序
    • 如果开发的程序有问题,方便回复系统标准程序
    • 方便引用网络共享盘的程序

PMLLIB/PDMSUI 可以定义指向多个路径,排前面路径的程序优先。路径间以空格或”;”分开。使用的区分符号在一个环境变量中应统一。

示例:

set PDMSUI=C:\tmep\pdmsui %pdmsui%

set PMLLIB=C:\tmep\pmllib %pmllib%

发表回复