主题位置:论坛首页>>论坛大类>>Allegro  发布新贴 版 主:linelayout
楼 主
·网名:pcblayout
·头衔:初级守卫
·级别:
·资历:40630
·经验:4585
·注册:2009/10/6
·发送短信 加为好友
主 题:skill学习笔记

skill的加载方法:

1、新建一个SKILL文件夹,如:D:\home\skill

2、在ALLEGRO安装目录下找到“PCBENV文件夹”,里面有一个"allegro.ilinit"文件,添加:

load("D:/home/skill/test.il" "")

3.在env文件中定义快捷键:(注意:快捷键不要使用关键字 比如:skill)

alias F12 test

[此贴子已经被cold10于2022/3/13 11:15:54编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 编辑 取消
 2009/9/23 11:37:38 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
    
skill专有函数.doc
    
YEPEDA:
[此贴子已经被cold10于2021/9/10 16:36:47编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2018/7/14 20:32:21 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
SKILL什么语句能调用外部.exe或.bat程序,怎么打开一个EXCEL文件
=================================
axlHttp函数或者调用system命令
system d:\home\skill\gerber_dos.bat
alias ad2 system d:\home\skill\OR2AGUI.exe
    
2021年12月10号:
   
1.去掉3个FILM显示层
D:\Cadence\SPB_16.6\share\local\pcb\views
        
2.
复制16.6这2个目录到17.2的相同目录中
D:\Cadence\SPB_16.6\share\local\pcb\icons
D:\Cadence\SPB_16.6\share\local\pcb\skill
    
3.在allegro.ilinit的中定义快捷键 
使用axlSetAlias和axlSetFunckey函数 
axlSetAlias("F2" "oops")
axlSetFunckey( "m" "move" t)
axlSetFunckey( "m" nil)
4.undefined variable - \357\273\277错误
================================
这是编码错误,可以用记事本保存为ANSI格式就可以了。
[此贴子已经被cold10于2023/1/29 21:29:28编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2018/7/17 13:53:22 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
#alias F1     help        ## Read-Only
#funckey "\t" tab        ## Read-Only
#funckey C         ctab        ## Read-Only
#funckey CS        sctab        ## Read-Only
#funckey S         stab        ## Read-Only
alias 0      replay d:/home/scr/0
alias 00     replay change_0_0_pin
alias 0402   replay 0402_thermal
alias 0r     replay 0R
alias 1      cmppgv101
alias 10     fiber_weave
alias 11     PlaceByHDLSch
alias 1616   downrev_import
alias 1616a  replay 1616
alias 17     system d:\Program Files\DownRev\DownRev.exe
alias 1717   downrev_export
alias 1717a  replay 1717
alias 2      system d:\Router Solutions\Omninet For Windows\Omniwin.exe
alias 22     system d:\home\skill\bin\Omninet2cadence.exe
alias 22bak  system d:\home\skill\bin\Pads_AD_Cadence
alias 3      align_clines
alias 33     Distribute_Cline
alias 3d     replay 3d
alias 9      replay big_size
alias 90     replay small_size
alias 900    AutoResizeExtent_wjb
alias CF1    replay move_top
alias CF2    replay move_bottom
alias Down   roam y $roamInc
alias Esc    cancel
alias F10    zoom out
alias F11    replay finish
alias F12    test
alias F2     Slide
alias F3     pop swap
alias F5     replay save_file
alias F6     replay cut
alias F7     oops
alias F9     zoom in
alias Left   roam x -$roamInc
alias Right  roam x $roamInc
alias SF1    replay silk_top
alias SF2    replay silk_bottom
alias Up     roam y -$roamInc
alias a      replay dehilight_all
alias ad22   AllegroToProtel_wjb
alias add1   cln
alias alg    Allegro2Altium
alias arc    replay arc_line
alias arc2   replay arc_fillet
alias b      replay type_bus
alias bb1    addsilkkpt
alias bb2    symshaperko
alias bga    replay bga_area
alias biao   system d:\home\skill\biao.bat
alias brd2   cs
alias brd22  cn
alias c      replay c
alias c1     replay constraint_on
alias c11    replay constraint_off_diff_uncouple
alias c12    replay constraint_off_diff
alias c13    replay constraint_off_via_at_smd
alias c14    replay move_top_bottom_drc
alias c2     replay constraint_off_relative
alias c22    replay constraint_off
alias c3     replay check_all
alias c4     system d:\HQDFM\HQDFM.exe
alias c9     system d:\home\skill\bin\checklist.exe
alias cc1    replay cline_to_line
alias cc2    change_line_layer
alias cs2    c2s
alias ct     check_text_overlap
alias cw     cwidth
alias cw2    clw
alias d      scalpel
alias d1     CutShape
alias d2     lnDelOutShape
alias dang   replay dangling_lines
alias dang1  quick_dangling
alias db     replay db
alias dc     auto_create_matchgroup
alias dcf1   replay dcf_out
alias dcf2   replay dcf_in
alias dd     replay create_device_batch
alias de     replay type_device
alias debug  skill_debuger
alias del1   system d:\home\skill\del_all_dos.bat
alias del2   replay del_duoyu_text
alias der    replay derive_connectivity
alias diff0  system d:\home\skill\bin\diff\diff.exe
alias diffo  system d:\home\skill\bin\diff\diff.exe
alias dim1   replay dim_delete
alias dip    replay dip_symbols
alias dl     replay dianlujl
alias dl0    replay dianlujl_0
alias dos    system d:\home\skill\gerber_dos.bat
alias drill1 al
alias duan   replay constraint_off_diff_short
alias dummy  replay dummy
alias dump   dumplib
alias dxf1   replay dxf1
alias f      replay filled_pads_display
alias f1     replay fanout1
alias f11    replay unmark_fanout
alias ff     replay filled_pads_display_NO
alias form   FForm
alias gap    resize_respace_dp
alias gerber replay gerber
alias gerber0 replay gerber0
alias gerbero replay gerber0
alias h      hck
alias hanzi  acn
alias hanzi2 system d:\home\skill\bin\Unicode_CN-8.exe
alias hi     creatListByHighlight
alias hu1    replay compose_shape
alias hu11   replay decompose
alias hu2    replay dao_hu
alias hu3    replay dao_45_line
alias ix     ipick
alias iy     ipick 0
alias key    alias
alias lei    replay teardrop
alias lib    replay lib
alias lib2   zpinfo
alias m      replay move_pdf
alias md     system d:\home\skill\md.bat
alias mi     replay x_mirror_sym
alias mil4   mil_4
alias mm     system d:\home\skill\bin\unit.exe
alias n      replay type_net
alias n1     find_pin_no_solder
alias n2     find_pin_no_past
alias n3     check_no_place_bound
alias n4     find_symbol_no_refdes
alias net    replay net_list
alias new1   replay copy_new1_F
alias nopad  replay nopad
alias nor    replay No_Rat_GND
alias o      replay d:/home/scr/0
alias oo     replay change_0_0_pin
alias or     replay 0R
alias p      replay swap_pin
alias p1     align_pin
alias pad    replay pad
alias pad1   hl_vp
alias pads2  replay pads2
alias pads20 replay pads20
alias pads22 AllegroToPads_wjb
alias padsin system d:\Cadence\SPB_16.6\tools\pcb\bin\pads_in.exe
alias pdf1   replay ass_pdf
alias pdf2   system d:\pdf2cad\pdf2cad.exe
alias pin    replay pin_number_Enable
alias pin1   rpn
alias pinban replay Panel
alias pn     replay diff_auto_assign
alias pp     replay swap_components
alias pw     colorp
alias r      replay d:/home/scr/r
alias r1     replay route_auto
alias rename1 replay rename
alias reopen open -q $module
alias rf     replay rf_updata_symbols
alias rfbb   clear_RF
alias rm     replay type_room
alias rr     aidt
alias s      changeshape
alias s2     replay move_top_bottom
alias s4     outline_shape_create
alias same   replay constraint_on_same
alias shizi  replay shizi
alias ss     replay spin_component
alias sw0    replay wjb_0
alias sw1    replay wjb
alias sw11   system d:\home\skill\wjb_lenove_1.bat
alias sw22   system d:\home\skill\wjb_lenove_2.bat
alias swl    SwapStackup_wjb
alias sy     replay type_symbols
alias t0     replay setup_text
alias t1     replay ro_text
alias t12    text_out_in
alias t2     replay mc_ref
alias t3     AutoPlaceRefDes_wjb
alias t33    auto_text
alias tt     replay tt
alias ty     replay type_footprint
alias unfix1 replay unfix
alias unnet  replay Unconnected_pin
alias v      cvia
alias vcc1   replay plane
alias vcc2   highlight sov
alias via    replay via_sum
alias via3   replay place_via_arrays
alias vv     replace via
alias x      pick
alias x1     xasym
alias x2     align_via
alias x3     replay equal_space_symbols
alias x4     align_text
alias xx     replay xnet
alias ~N     new
alias ~O     open
alias ~S     replay save_file
funckey " " iangle 90
funckey +      subclass -+
funckey -      subclass --
funckey e      replay edit_shape
funckey w      delay tune
funckey z      replay z
[此贴子已经被cold10于2023/1/29 21:39:08编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2020/6/18 0:48:31 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
Cadence17.2 下不同板子的script脚本不能通用原因及解决方案?
# Allegro script
# file: F:/del2.scr
# start time: Sat Aug 22 19:35:01 2020
# Version: 17.2-2016 S054 (3784118) Windows SPB 64-bit Edition
version 17.2
setwindow pcb
trapsize 569096
# Macro file: coordinates are relative to pick on replay.
zoom fit 
trapsize 569572
color192 
QtSignal ColorVisibilityDialog CVDTabs currentChanged Layers
QtSignal CVDLayerContainer CVDVisibilityOff clicked
QtSignal CVDLayerSplitter CVDLayersTree itemSelectionChanged Geometry
QtSignal CVDLayerTable VertHeader clickedCheckBox 25
QtSignal CVDLayerSplitter CVDLayerTable dataChanged 25 0
=====================================================================
零时解决方案:用记事本打开你的script,打开要使用的pcb文件,打开COLOR dialog,直接数出(从0开始)你要控制的元素在第几行,然后修改script脚本中数字即可。
然后在之后的设计中,保持使用同一个PCB 模板设计,就不用反复去修改了。
为什么16.6没有这个问题呢?
因为16.6的script记录方式不是用坐标,而是直接用元素名字。
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2020/8/22 19:51:13 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
Cadence Allegro SKILL语言,附实例,问题
下面是在其他网站上看到一个帖子,供初学者学习,后面附我的问题,请高手作答。
1、如何理解Cadence Allegro SKILL程序设计语言?
    SKILL语言是Cadence提供给用户的一个开发接口,利用其本身提供的接口函数和SKILL语言完成自动化操作的功能。例如:自动化检查,出报告、布局,布线等(在此只讨论PCB Editor的自动化操作)。
2、什么样的人适合使用SKILL语言进行自动化操作?
    PCB工程师(具有需求的人,通过编程来实现),EDA二次开发工程师(熟悉编程的人,实现特定的业务需求)
3、SKILL语言能使得PCB设计提高多少效率?
  举个很简单的例子,FPM这个自动化建库工具,可以自动生成几千个封装库, 如果一个库需要5分钟,那么,我们建这么多的封装库就需要10000多分钟,利用工具仅仅需要1个小时左右,看到这些,我想大家应该明白了,自动化的操作至少为我们提高效率5倍,当然,质量的保证更是潜在的价值。(LP Wizard 10.5 和 FPM 搭配,实在异形的就自己动手。pad,shape,flash分门别类管理好,等积累到一定规模,做封装就非常容易了。
4、如何在PCB Editor环境下启动SKILL命令行解释器界面?
  直接输入set  telskill , 然后你就会看到一个新的界面, 这个界面就是用来运行SKILL函数和命令的解释器。当然,如果你不觉得界面太小,可以直接在命令行中输入skill , 然后运行SKILL函数和命令, 也可以正常执行,退出可以直接输入exit。
5、如何执行写在文件中的SKILL函数和命令?
  首先,我们按照上面的方法运行SKILL命令行解释器,然后输入getSkillPath(), 回车后,可以看到返回一个路径的列表,如果我们的SKILL文件放在这些路径下,就可以直接使用load()函数加载使用,如果你的SKILL文件没有在其中的一个路径下,就需要带上绝对路径,这个地方大家需要注意‘/’和‘\’的区别,我不想做什么理论描述,看看下面的例子:
假如你有一个文件放在C:下,名字为test.il, 一般SKILL文件都以.il为后缀
使用Ultra-Editor打开文件,输入如下内容:
procedure( tr_Example_1()
prog( ()                      
;打印一串字符
printf("Let's go today.\n")
;弹出一个对话框
axlUIConfirm("Hello, SKILL...\n")
return(t)
))
然后在SKILL解释器界面下加载SKILL文件如下:
load("C:/test.il") 或者 load("C:\\test.il")
接下来运行 tr_Example_1() , 回车,看看结果吧。
总结上面的例子
一、SKILL文件的扩展名一般为.il,通过load()函数可以加载SKILL文件
二、SKILL文件放在一些特定的路径下可以直接加载,不需要输入绝对路径,直接输入文件名即可, load("test.il")
三、带绝对路径加载SKILL文件,一般输入一个/来隔开路径, 如果需要使用\,则需要输入两个,\代表转义,\\表示一个\。
四、使用procedure可以定义一个SKILL函数,上面的例子, 函数名为tr_Example_1,注意函数名后的括号和函数名之间不要有空格。
五、我们可以很方便的在SKILL解释器中单步调试SKILL语句,例如:上面函数体中的printf("Let's go today.\n")可以直接在SKILL解释器下运行,当然axlUIConfirm("Hello, SKILL...\n")也可以,其中函数体中的注释为以分号开始的行,此为单行注释。
六、我们还可以使用像C语言的注释一样/* */来进行模块注释,但是不要出现两个/* */注释的嵌套。
[此贴子已经被cold10于2021/1/2 11:38:05编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2021/1/1 22:22:30 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
Allegro skill中添加菜单:
===========================================
解答:可以自定义allegro菜单,将自己添加的skill加入菜单中方便使用。
在安装路径d:\Cadence\SPB_16.6\share\pcb\text\cuimenus中找到allegro.men文件,该文件为加载目录文件。在目录的最后一个end前加入如下代码:
POPUP "&chen_skill"
    BEGIN
        MENUITEM "placement_fengye",           "1"
        MENUITEM "mm",           "mm"
    END
[此贴子已经被cold10于2021/1/2 21:50:25编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2021/1/2 21:21:21 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
设置快捷键时funckey与alias的区别
============================
早期定义快捷键只能用Alias,FUNCKEY是Cadence后来推出的,因此在Env里面是共存的。
二者各有优缺点,例如Alias对于字母、数字类快捷键需要回车才会执行,Funckey则无需回车,但是如果用Funckey定义的单字符快捷键容易与其他多字符的快捷键冲突,例如,用Funckey定义了c和ck两个快捷键,则按下字母c后,就会直接执行对应的操作,而输入不了ck的快捷键。
一个是字符串别名,一个是快捷键。
所以简单的快捷键funckey是比较方便的,但是较长的用alias更加方便,
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2021/1/20 12:28:52 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
1.
    
    
2.生成临时script文件:
3.
[此贴子已经被cold10于2021/3/18 13:11:53编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2021/3/16 23:05:27 
Re:skill学习笔记
·网名:cold10
·头衔:咕噜队长
·级别:
·资历:36580
·经验:2850
·注册:2012/11/14
·发送短信 加为好友
;axlCmdRegister("test",'test) 
;defun( test ()
    ;axlUIConfirm("Hello")
    ;axlMsgPut("Hello")
    ; 移动坐标原点
    ;axlDBChangeDesignOrigin(0:0)
    ; 当前目录下创建目录
    ;createDir("./test")
    ;axlHttp("http://www.linelayout.com/bbs")
    ;axlHttp("F:/OR2AGUI.exe")
    ;axlHttp("F:/11.txt")
;if(axlVersion('version) >16.9
;then
;axlMsgPut("version: 17.2")
;axlHttp("d:/home/skill/switch_17_2.bat")
;else
;axlMsgPut("version: 16.6")
;axlHttp("d:/home/skill/switch_16_6.bat")
    
if(car(unit)=="millimeters" then  
;car是字符串,必须加上才能比较
axlHttp("d:/home/skill/gerber_mm.bat")
    
    
    
;;获取以D开头的器件,并打印出来。
procedure(myGetCompName()
prog(
(myDesign myComponent item compName compNameList)
        ;获取顶层设计ID并赋值给Design
        myDesign = axlDBGetDesign()
        ;获取设计中的所有器件
        myComponent = myDesign->components
        ;遍历所有器件
        foreach(item myComponent
                ;获取器件的名称
                compName = item->name
                ;当器件名满足条件
                if(rexMatchp("^D[0-9]+$" upperCase(compName)) then
                        compNameList = cons(compName compNameList)
                )
        )
        ;翻转所有元素
        compNameList = reverse(compNameList)
        
        ;控制台打印所有元素
        foreach(item compNameList
                printf("位号:%L,器件名:%L" item->name item->??)
        )
        
        return(compNameList)
))
;;v1.0 初稿
axlCmdRegister("laytop" 'dbSetTopLayer ?cmdType "general")
axlCmdRegister("laybtm" 'dbSetBtmLayer ?cmdType "general")
;;---------------------------------------------------------
;;set_layer_visible.il
;;指令:laytop 和 laybtm
;;功能:只显示TOP层或者BOTTOM层
;;描述:v1.0
;;  可自行修改代码中的CLASS/SUBCLASS
;;  15.2未测试
;;---------------------------------------------------------                
                
procedure(dbSetTopLayer()
(let ()
        ;;清空所有层
        axlVisibleDesign(nil)
        ;;设置层可见
        axlVisibleLayer("via class/soldermask_top" t)
        axlVisibleLayer("pin/top" t)
        axlVisibleLayer("via class/top" t)
        axlVisibleLayer("drc error class/top" t)
        axlVisibleLayer("etch/top" t)
        ;;设置层可见
        axlVisibleLayer("board geometry/soldermask_top" t)
        axlVisibleLayer("board geometry/silkscreen_top" t)
        axlVisibleLayer("board geometry/outline" t)
        axlVisibleLayer("board geometry/design_outline" t)
        axlVisibleLayer("package geometry/silkscreen_top" t)
        axlVisibleLayer("package geometry/soldermask_top" t)
        ;;生效
        axlVisibleUpdate(nil)
))
procedure(dbSetBtmLayer()
(let ()
        ;;清空所有层
        axlVisibleDesign(nil)
        ;;设置层可见
        axlVisibleLayer("via class/soldermask_bottom" t)
        axlVisibleLayer("pin/bottom" t)
        axlVisibleLayer("via class/bottom" t)
        axlVisibleLayer("drc error class/bottom" t)
        axlVisibleLayer("etch/bottom" t)
        ;;设置层可见
        axlVisibleLayer("board geometry/soldermask_bottom" t)
        axlVisibleLayer("board geometry/silkscreen_bottom" t)
        axlVisibleLayer("board geometry/outline" t)
        axlVisibleLayer("board geometry/design_outline" t)
        axlVisibleLayer("package geometry/silkscreen_bottom" t)
        axlVisibleLayer("package geometry/soldermask_bottom" t)
        ;;生效
        axlVisibleUpdate(nil)
))
;;v1.2 添加注释
;;v1.1 整理结构
;;v1.0 初稿
axlCmdRegister("nextlayer" 'dbNextLayer)
axlCmdRegister("lastlayer" 'dbLastLayer)
;;---------------------------------------------------------
;;change_layer.il
;;指令:nextlayer 和 lastlayer
;;功能:从第一层开始,让所有的非地层轮流显示。
;;描述:v1.2
;;  系统默认的+和-是用来轮循当前激活层(Active Class and Subclass),可以改成这个。
;;  该命令不改变当前激活层,而是改变可见层。
;;  15.2未测试
;;---------------------------------------------------------
temp_curLayer = nil        ;全局变量,
procedure(dbNextLayer()
(let ()
        _dbSetLayerVisible("Next")
))
procedure(dbLastLayer()
(let ()
        _dbSetLayerVisible("Last")
))
;;设置层显示
procedure(_dbSetLayerVisible(direction)
(let (item allLayers itemClass)
        foreach(item axlSubclasses("etch")        ;获取etch class下的的所有subclass的字符串
                unless(index(item "GND")        ;把字符串不含GND的层先收集起来
                        allLayers = cons(item allLayers)        ;收集
                )
        )
        allLayers = reverse(allLayers)        ;因为cons是在list开头增加,所有颠倒一下
        when(allLayers
                temp_curLayer = _dbSearchLayer(allLayers direction)        ;获取下一个要显示的层
                axlVisibleDesign(nil)        ;关闭所有层显示
                foreach(itemClass '("pin" "via class" "drc error class" "etch")
                        axlVisibleLayer(strcat(itemClass "/" temp_curLayer) t)        ;打开这些层
                )
                axlVisibleUpdate(nil)        ;刷新层显示
        )
))
;;寻找下一个要显示的层
procedure(_dbSearchLayer(allLayers direction)
(let (curIndex nextIndex)
        
        if(temp_curLayer then
                curIndex = lindex(allLayers temp_curLayer)        ;计算当前层在所有层中的序号
                if(direction == "Next" then                ;如果是NEXT,序号就+1
                        nextIndex = curIndex + 1
                        when(nextIndex > length(allLayers)        ;当序号超出list的长度,自动恢复到list
开头
                                nextIndex = 1
                        )
                else
                        nextIndex = curIndex - 1        ;如果是LAST,序号就-1
                        when(nextIndex < 1
                                nextIndex = length(allLayers)        ;当序号小于1,自动恢复到list尾
                        )
                )
                temp_curLayer = nthelem(nextIndex allLayers)        ;根据序号,计算下一个层的层名
        else
                temp_curLayer = car(allLayers)        ;如果第一次运行,就显示第一层
        )
        temp_curLayer                ;运行的最后一行表示返回值。这一行写不写都行,if和else里面最后一行本
来就返回temp_curLayer了。
))
       
[此贴子已经被cold10于2022/6/30 22:40:24编辑过]
个人签名档还未设置,请点击这里进行设置
  删除 置顶 推荐 精华 加锁 引用 编辑
 2022/3/12 8:49:02 
 
回 复:skill学习笔记
回复内容: