Skill加载和管理(设置相对路径与动态菜单)

本文作者原创,因资料来源于EDA365,先发于EDA365,在本网站作一备份。

论坛中大神很多,但小白也不想花时间学怎么开发skill,只要可以加载使用就好了。群中的内容操作多数都可直接拿来使,可当下了一堆skill,如何管理这就是一个问题。
作为强迫症患者,不想把所有的skill文件一股脑全pcbenv文件夹下,这样文件太多太乱,还没有分类。又不想为每一个加载skill时,设置专门的路径,因而必须设定好专用的路径。不想修改candence安装文件中的allegro.mem文件,因为每次这样修改比较麻烦,还要找位置。
因而本文操作分为三块:
1.设置skill文件的加载路径(采用相对路径)。
2.设置菜单(动态菜单,以skill语言加载)。
3.加载skill文件。

测试用的skill是来自论坛的http://www.eda365.com/thread-100913-1-1.html


1.必须要对HOME变量有概念,这个全局变量是cadence加载一些文件的一个关键路径,一般安装时自动会创建。我们的全局pcbenv放在这个路径下,运行过程中如果需要调用这个文件路径以 "~/" 表示即可,这个就是HOME变量的路径。
    它的查阅方法,可右键单击计算机,在菜单中选  属性/高级系统设置/高级/环境变量 中查询到HOME值,这方面网上资料很多。
 
    我的HOME文件路径是 C:\Users\(User)\AppData\Roaming\SPB_Data ,在cadence中等价于 ~\
    为了方便管理,我在该文件夹下建立了skill文件夹,然后在里面建立不同的子文件夹,分类放skill。我在其中建立了文件夹UniNavSkill
 Skill加载和管理(设置相对路径与动态菜单)_第1张图片
    这里需要介绍一下skill中用到的几个文件,他们位于pcbenv下面。allegro.ilinit,这个文件可以自行用记事本创立,然后另存就可以了,注意不要和allegro.ini搞混了,我一开始就搞混了,总是弄不成。
        另一些是以.il为扩展名的文件,是我们的skill文件,我们需要在allegro.ilinit中加载它,这些文件放置在skill文件夹下对应的分类中。
Skill加载和管理(设置相对路径与动态菜单)_第2张图片 
采取这种分类方式,以后我们在其它系统上安装就简便了,只要把skill文件夹复制到HOME路径下,把allegro.ilinit文件复制到HOME\pcbenv\路径下,其它什么都不用做了。如果要合并,自己编辑allegro.ilinit文件就可以了。我们不需要考虑安装的绝对地址是什么。
Skill加载和管理(设置相对路径与动态菜单)_第3张图片
2. 其次,我们需要设置目录,目录的设置我参考了很多文章,但是多数是用修改allegro.mem的方法,很麻烦。动态的方法有,但是不太好找。我们要做的是编写一个skill文件,在其中设置目录,然后我们加载就好了。因为设置了相对路径后,我们需要保证我们命名的skill不能重命,所以要为不同分类的目录取一个不同的名字。
这里我的取名是menu_UniNavSkill.il用记事本编辑它。
其中的原码如下:
defun(loadUniNavMenu (t_menuName)    ; loadUniNavMenu是函数名,建议取独一无二的名字。
        SKILLToolsMenu = '(
                (popup "UniNav")    ;这时是主菜单的名字"UniNav"
                        ("quick_view","quick_view")    ;前面一个"quick_view"是下一级子菜单名,后一个"quick_view"是我们调用skill所用的指令。以下相同不赘述
                        ("conv","conv")
                        ("ch_ref","ch_ref")
                        ("dumplib","dumplib")
                        ("scalpel","scalpel")
                        ("align_symbol","xasym")
                        ("cline2shape","c2s")
                        ("mc_ro_text","mc_ref")
                        ("split_shape","split_shape")        
                        
                        (separator)    ;这里是分割线
                        (popup "Change")  ;需要创建下一级子菜单Change
                                ("replace_via","replace_via")  ;在Change下创建下一级菜单
                                ("change_net_onvias","change_net_onvias")
                                ("change_lw","clw")        
                        (end)  ;返回上一级菜单,每进一级菜单,要返回上一级都要有(end)
                        
                        (popup "Check")
                                ("check_dir","check_dir")
                                ("orphannet","orphannet")
                                ("ch_text_overlap","ch_text_overlap")
                                
                                ("check_line90","line90")
                        (end)
                (end)  ;返回根菜单
        )
        let( (palMenu)
                palMenu = axlUIMenuFind(nil -1)
                axlUIMenuInsert(palMenu SKILLToolsMenu)  
        )
)
axlTriggerSet('menu 'loadUniNavMenu)  ;这里 loadUniNavMenu需要和上边函数名相同。


;是用来作注释的,这段代码我直接测试过,绝对可用。显示效果如下
 Skill加载和管理(设置相对路径与动态菜单)_第4张图片

3. 加载skill文件。
这里全部是写在allegro.ilinit文件的。原码如下:
;Uni skill
setSkillPath(append(getSkillPath() '("~/skill/UniNavSkill")))

load("menu_UniNavSkill.il")
load("ch_ref.il" "")
load("ch_text_overlap.il" "")
load("change_net_onvias.il" "")
load("check_dir.il" "")
load("conv.il" "")
load("dumplib.il" "deargds")
load("orphannet.il" "")
load("quick_view.il" "")
load("x_mc_ro_text.il" "www.eda365.com")
load("replace_via.il" "")
load("scalpel.il" "")
load("x_align_symbol.il" "deargds")
load("x_cline2shape.il" "www.eda365.com")
load("x_split_shape.il" "deargds")
load("fform.il" "")
load("x_check_line90.il" "www.eda365.com")
load("x_change_lw.il" "www.eda365.com")
;UniNav_END


为了区分是哪一组skill,所以前后用注释框住。
第一行是为了加载相对地址,我目前试过只有这个方式好使。网上给的多数方法是setSkillPath(buildString(append1(getSkillPath() "D:/skill")))。但这个方法,我试过,用绝对路径可用,但是相对路径总是报错,我查了半天的资料才发现找到这个加载方法。我们要用'()把路径包上,转换成一个串,然后才能用append函数(不是append1)。将相对路径认为skillpath后,加载sill文件就不需要输入路径了,直接用文件名就可以了。就如上文例子那样。
这里要注意,把菜单加载的skill  menu_UniNavSkill.il要加进去,不然是不会有菜单的。

完成了。本贴给新入门的同行看,高手请指正。

你可能感兴趣的:(Skill加载和管理(设置相对路径与动态菜单))