乐于分享
好东西不私藏

网上扒了一堆PDMS插件,结果不会用?今天一次讲清楚

网上扒了一堆PDMS插件,结果不会用?今天一次讲清楚

最近陆续在公众号分享了一些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就很容易了。

代码我已经放出来了,使用方法也讲清楚了。动手试试吧。

完整源码我也放后台了,有需要的朋友关注公众号,回复「配管提效」就能拿到。


以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标

谢谢你看我的文章,我们,下次再见。

封面由 AI 生成,经本人二次原创修改,仅用于技术交流,如有侵权请联系删除