PDMS二次开发调试等

站在巨人的肩上——PDMS二次开发之借鸡下蛋(转载)

    技术讨论,难免有贻笑大方之处,仅供参考,谢绝转载,如有引用,请注明出处。

    与Microsoft相比,AVEVA公司要大方的多,PDMS已经做到了半开源,虽然PDMS本身的程序源代码仍不可见,但是它的功能实现部分已经开源,用户可以方便的在安装目录下的pmllib下查看相关窗体、函数和对象的PML源代码。

    这一点对用户来说,好处有二:

   (1)更深入、更贴近实用的学习PML。PDMS Manual所提供的教程只是PML最基础的东西,其作用只是PML扫盲和入门。要想学到二次开发真本事,阅读那些开源代码很有帮助。

   (2)直接使用或抽取开源代码,为我所用。用户在手动操作PDMS的过程中,可以使用$R6命令追踪命令执行过程。这样可以方便的观察到执行某一操作时,PDMS所执行的代码。而这些代码又可以在二次开发时直接引用,因此,通过调用这些代码,可以实现“模拟操作”,将复杂的操作过程,以命令流的方式快速执行,提高设计效率,这也是二次开发的一种方向。

    使用上述方法进行二次开发时,有下面几个技巧可以使用:

   (1)为控件赋值

    通过代码追踪可以方便查取窗体的名称,在pmllib下找到并用文本编辑软件查看其代码,即可找到相应代码的名称,然后即可通过该控件的属性或方法为其赋值了。比如,为名称为cutpipe的窗体上的branchname文本框赋值,即可使用语句:

    !!cutpipe.branchname.val=astring

来实现了。如果有为option 或者list控件选择一个值,则可以使用这些控件的select方法来实现了,比如:

   !!componentCreation..componentList.select('Dtext','Bend')

这样即为componentList控件选择了Bend项。

  (2)执行响应动作

   需要注意,很多时候,通过代码为控件赋值并不能完全实现手动操作所实现的功能。这是因为,在手动操作时,除了为控件指定或选择值之外,还会执行该控件的callback所指定的动作。所以,要完全模拟手动操作还必须调用该控件的callback动作。比如:

    !!componentCreation..componentList.select('Dtext','Bend')

    !!componentCreation.setTask(|selectComponent|)

    这样就既为空间赋了值,有执行了其相应动作,即完整了模拟了手动操作。至于控件的callback动作,大家可以方便的从其源代码中查取到。

   读者可以测试下面代码并观察它所模拟的操作。

   KILL !!componentCreation
   show !!componentCreation
   !!componentCreation.setBranch(!bran)
   !!componentCreation.componentList.select('Dtext','Bend')
   !!componentCreation.setTask(|selectComponent|)
   !!componentCreation.bendRadiusOption.select('DText','Define')
   !!componentCreation.selectRadius()
   --!!componentCreation.bendRadius.val=0
   !!componentCreation.setFlow(true)
   !!componentCreation.create()
   ANGLE 0
   kill !!componentCreation
   show !!componentCreation
   !!ce=!curBran
   !!componentCreation.setBranch(!bran)
   !!componentCreation.componentList.select('Dtext','Bend')
   !!componentCreation.setTask(|selectComponent|)
   !!componentCreation.bendRadiusOption.select('DText','Define')
   !!componentCreation.selectRadius()
   !!componentCreation.setFlow(false)
   !!componentCreation.create()
   ANGLE 0
   !!directComponent()
   KILL !!componentCreation

posted @ 2011-11-04 14:30  houlinbo  阅读(2777)  评论(1)    收藏  举报