PDMS二次开发培训PML开发课程内容•PML语言基础知识•通过实例,一步步介绍PML程序编写/调试/移植技巧•PDMS12与.net的接口简介•dars接口简介PML基本概念•ProgrammableMacroLanguage可编程宏语言.•PML脚本语言•PML2面向对象的编程语言.支持窗体/菜单一段简单的PML宏(Macro)Var!subscollectcememDo!subvalues!subs$!sub$p$!!ce.fullnameenddo如何运行宏•宏,就是一系列PML命令的集合•执行格式为:$mfilename[param1param2….]一个简单的窗体程序SETUPFORM!!FirstFormTITLE'自定义对话框’Text.text1‘点击按钮’Button.ok‘OK’callback‘!this.OK()’ExitDefinemethod.OK()!!alert.message(‘OK’)Endmethod如何调用窗体•保存文件,扩展名为pmlfrm•放在%pdmsexe%\pmllib文件夹下•pmlrehashall•pmlreloadform!!FirstForm•show!!FirstFormPML语言基础•变量的定义与类型•结构控制语句循环/条件•用户自定义方法/函数•异常处理•文件I/O变量•变量命名•全局变量与局部变量•特殊的全局变量!!ce常用的变量类型•Real实数•String字符串•Boolean布尔类型(逻辑)•Position位置•Direction方向每种类型(对象)都有自己的方法(Method)变量的查看/创建/删除•查看qvar•用类型创建!str=string()•直接赋值!str=‘abc123’•删除!str.delete()•特殊的变量!!ce字符串(String)与数组•类型与对象•方法(Method)•.String()字符串(String)的常用方法•字符串长度Length()•类型转换Real(),Position(),Boolean()•大小写转换LowCase(),UpCase()•两端截取After(str2),Before(str2),Substring(index)•中间截取Substring(index,nchars)•替换Replace(str2,str3)•匹配Match(str2),MatchWild(str2)•分割(返回数组)Split()•修剪Trim()数组常用方法•元素数量Size()•追加元素Append(value)•追加数组AppendArray(Array)•删除全部元素Clear()•倒序Invert()•搜索Find(value),FindFirst(value)•和并重复项Unique()方法(Method)和函数(Function)•Method是对象的子程序!strNum=‘123’!num=!strNum.Real()•方法可以有参数和返回值•函数与方法类似,但独立存在,且全局有效循环语句•Do!xfrom1to10by1$p$!xEnddo•Do!xvaluescemem$p$!xEnddo中断跳过•skip[if...]跳过当此循环•break跳出当前最里层的循环条件语句•IF...Then...[ElseIf...Then...][Else...]Endif•条件语句可以嵌套异常处理•异常:意料之中的错误•捕捉指定的错误Site/TEST_SITEHandle(2,109)$p节点不存在Endhandle连续捕捉异常Site/TEST_SITEHandle(2,109)$p节点不存在Elsehandle(2,108)$p/TEST_SITE节点存在,但不是SITE类型elsehandlenone$pSite/TEST_SITE节点存在endhandle表达式•算术运算符+-*/•字符串连接符&•比较运算符EQNELTLEGTGE•布尔运算符NOTANDOR•括号.注释•整行注释–例如--这一行是注释•行末注释$*!elm=!!ce$*注释写在后面•多行注释$(中间加若干行注释$)自定义方法/自定义函数•函数定义•参数•全局函数存放位置•调用文件处理•File对象•读打开•两种写入方式•常见的IO异常•文件读写的限制(行列)版本差异(11.6/12.0)•几乎完全兼容•字符串/控件/读文件每行长度,11.6长度限制为255,12.0可达1000•控件属性,有少量差异对话框•Form对象•通用的方法/属性几个简单系统对话框•!!alert.message()!!alert.error()!!alert.confirm()•!!fileBrowser(!directoryisSTRING,!seedFileisSTRING,!titleisSTRING,!existFlagisBOOLEAN,!callbackisSTRING)自定义对话框•对话框唯一标识•标题/位置/大小•可停靠/不可停靠•构造方法/初始化•关闭对话框界面的消息响应•callback•关联命令•关联方法•参数与消息自定义菜单(Menu)•新建%pdmsexe%\pdmsui\DES\addins\customMenu•内容name:tempMenudirectory:tempMenushowOnMenu:TRUEobject:tempMenuObjecttitle:tempMenu常用控件•Button按钮•Text文本框•option下拉列表•List列表框•rgroup单选框•toggle复选框PML实例1:EQUI缩放创建Form•创建.pmlfrm文件•Form基本代码•初始化•显示Form基本的界面•按钮:选择当前EQUI•文本框:输入倍数•下拉列表:选择缩放倍数•更新界面提示信息遍历EQUI子节点•找到当前的EQUI•遍历基本体•遍历管嘴•生成列表•List显示更新位置信息•Position类型•相对位置/绝对位置•修改位置信息•负实体(相对父节点调整)基本体缩放•如何遍历属性•生成修改属性的代码封装为函数•定义Function•文件存放位置•调用方式•提取参数•封装缩放的代码PML文本编辑器•Ultraedit•缩进/制表符设置•语法高亮基本调试方法•跟踪代码•跟踪变量•手工断点•日志文件编码规范•缩进•变量/方法命名•空格/间距•注释•方法的长度•全局变量PML实例2:属性批量编辑器设计基本界面•member•List节点列表•属性列表•属性编辑框属性列表•遍历属性•去掉不能修改的属性•筛选:类型/名字相同•进一步筛选:值相同PML与其他语言配合:PML与C#解除文件读写长度的限制Dars接口简介PDMS12的.net接口简介