最近陆续在公众号分享了一些PDMS的PML插件源码。
后台收到不少朋友的消息,问得最多的一个问题就是,这些代码到底怎么用。
说实话,这个问题问得特别好。PML这东西不像Python或者JavaScript,网上教程一大堆,PML的生态小得多,很多新人拿到一段源码,真的会一脸懵。
所以今天一边分享一个新工具,一边把PML插件的使用方法彻底讲清楚。
这个工具的功能很简单,快速打开PMLLIB目录下的文件夹。
做PDMS二次开发的朋友都知道,PMLLIB是个环境变量,指向你存放插件代码的目录。有时候PMLLIB下面挂了好几个路径,想进某个文件夹找东西,得一层一层点,烦得要死。
我就写了个小窗体,运行之后自动读取PMLLIB里的所有路径,每个路径生成一个按钮,点哪个就打开哪个文件夹。
先看核心代码。
-- 读取 PMLLIB 环境变量中的所有路径!paths = !!evarSplit('PMLLIB')if (!paths.size() eq 0) then !!alert.warning('PMLLIB environment variable is not set!') returnendif这两行干的事很直接。!!evarSplit('PMLLIB') 是把PMLLIB环境变量的值按路径分隔符拆成一个数组。PMLLIB可以配多个路径,分号隔开,这个函数帮你全拆好。
然后判断一下,如果用户没设这个环境变量,弹个警告就退出了。
接下来是创建窗体。
setup form !!pmllibFolderForm title 'PMLLIB Folder Selection' do !n index !paths button .btn$!n '$!paths[$!n]' at x0 y$!n width 70 callback |syscom 'start $!paths[$!n]' kill !!pmllibFolderForm| enddoexit这里有个地方特别有意思,我想重点讲一下。
看到 button .btn$!n 了吗。
$!n 是个循环计数器,!n index !paths 的意思是把 !paths 数组的索引赋给 !n。假设你有3个路径,!n 就会依次等于1、2、3。
然后 .btn$!n 这行,$ 是PML里的取值符,它会把 !n 的值取出来,拼在 .btn 后面。结果就是,循环第一轮生成 .btn1,第二轮 .btn2,第三轮 .btn3。
每个按钮都有一个独一无二的名字,而这个名字是通过变量的值动态拼出来的。
这个技巧在PML里特别实用。因为PML的form定义里,每个控件的变量名不能重复,你用固定的名字,按钮功能就会被覆盖掉。通过 $ 把另一个变量的值拼进变量名里,等于动态生成了控件标识,这个问题就绕过去了。
按钮上的文字也是一样思路,'$!paths[$!n]' 把当前路径的完整字符串显示在按钮上,你一眼就知道这个按钮对应哪个文件夹。
callback 后面的 syscom 'start $!paths[$!n]' 是调用Windows的start命令打开文件夹,然后 kill !!pmllibFolderForm 关掉窗体。
最后 show !!pmllibFolderForm 把窗体显示出来。
整个工具不到20行,干净利落。
完整源码在这里⬇️⬇️⬇️
--------------------------------------------------------------------- -- 1. 获取 PMLLIB 环境变量路径数组 !paths = !!evarSplit('PMLLIB') -- 防御:如果没有设置 PMLLIB 环境变量,则警告并退出 if (!paths.size() eq 0) then !!alert.warning('PMLLIB environment variable is not set!') return endif -- 2. 清理可能残留的同名表单 kill !!pmllibFolderForm -- 3. 定义表单(最多支持 10 个路径,可根据需要扩展) setup form !!pmllibFolderForm title 'PMLLIB Folder Selection' do !n index !paths button .btn$!n '$!paths[$!n]' at x0 y$!n width 70 callback |syscom 'start $!paths[$!n]' kill !!pmllibFolderForm| enddo exit -- 6. 显示表单 show !!pmllibFolderForm---------------------------------------------------------------------说完了这个工具,接下来是今天的重点,PML插件到底怎么用。
很多朋友在后台问,拿到一段PML源码之后怎么办。这个问题我被问过很多次了,今天写下来,以后直接甩链接。
整个流程四步走。
第一步,复制代码。把上面这段代码内容全部复制。别漏,尤其是开头和最后的收尾,少一行可能就跑不起来。
第二步,在PDMS命令窗口里粘贴。打开PDMS,把代码全部复制之后,在命令窗口里右键,弹出来的菜单里会有两个选项,一个是 Paste,一个是 Paste as Macro。
这里一定一定选 Paste as Macro。

这俩的区别说一下,很重要。Paste as Macro 是把你复制的内容一次性全部加载进程序内存,当成一段完整的宏来执行。而普通的 Paste 呢,是把内容逐行灌进命令窗口,跟你用键盘一行一行敲效果一样。如果你的代码里有循环语句,用普通 Paste 直接就报错了,PDMS会逐行解析,循环体根本拼不起来。所以只要粘贴代码,记住,一律 Paste as Macro。
第三步,选完 Paste as Macro 之后会弹出一个文件夹选择窗口,这个窗口问的是你要把源码存在哪里。如果不是专门搞PML二次开发的话,这里没那么多讲究,你挑一个看着顺眼的文件夹点击打开,然后把你收集到的各种插件,统一复制到这个文件夹中就可以了。

第四步,刷新PML缓存。还是在命令窗口里,输入 PML REHASH ALL,回车。这行命令的作用是让PDMS重新扫描PMLLIB路径下所有的 .pmlfnc 文件,把你刚放进去的新代码加载到内存里。不执行这一步,PDMS不认识你的新命令。
四步做完,你就可以直接在命令窗口里调用新的函数了。
比如说今天这个工具,完整的函数名叫 !!lyopenpmllibfolder(),你把源码下载下来,按照上面的教程放到你的pmllib文件夹中,刷新PML缓存后,下次你直接在命令窗口敲这个名字,回车,窗体就弹出来了,所有PMLLIB路径变成一排按钮,点哪个开哪个。
这个方法不止适用于我今天分享的这一个工具。任何 .pmlfnc 文件,只要你放进PMLLIB目录然后 PML REHASH ALL,里面的函数都能在命令窗口里直接调用。专业做PML开发的人员,一般本地开发用的放一个路径,团队共享的放另一个路径,网上下载的工具再放一个,互不干扰。
我知道很多做PDMS二次开发的朋友都是自学的,跟我一样,刚开始对着代码一脸懵。
但说真的,PML这东西门槛没那么高。它的语法长得跟BASIC有点像,读起来不费劲。你花一个下午,把别人写的插件打开看看,几行几行读,不明白的就查,尤其是现在AI这么强大的背景下,慢慢就上手了。
今天分享的这个工具,代码本身不长,但里面的动态变量名拼接、环境变量读取、form创建,都是PML里很常用的写法。你把这二十行代码吃透,后面写自己的form就很容易了。
代码我已经放出来了,使用方法也讲清楚了。动手试试吧。
完整源码我也放后台了,有需要的朋友关注公众号,回复「配管提效」就能拿到。
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
夜雨聆风