文章目录
- 前言
- 一、临时调用skill
- 二、Allegro软件自启动调用skill
- 三、菜单栏显示skill
- 四、菜单栏可下拉显示skill集
- 总结
前言
Allegro skill对于大部分常用Allegro绘制PCB的工程师来说,是一个比较神秘的存在,但是见到有人利用skill大大提高了效率,非常羡慕,希望拥有。
今天呢,我就为大家层层剥开Allegro skill之谜,四步秒懂该怎么利用该高级语言提高PCB设计效率。
本文已利用快捷键快速抓取网络丝印为例讲解,授人以鱼不如授人以渔,本文起到一个抛砖引玉的作用,如要深入,还需慢慢摸索。
高端操作,来咯!!
一、临时调用skill
1.首先,建立文本,写入以下代码,
代码如下,请自取:
axlCmdRegister("CNS" 'dbCreateNetSilk
?cmdType "interactive"
?doneCmd '_dbCreateNetSilkDone
?cancelCmd '_dbCreateNetSilkCancel
)
procedure(dbCreateNetSilk()
(let (addr)
_dbCreateNetSilkFinish = nil
;创建FORM
addr = "./CreateNetSilk.form"
_dbCreatCreateNetSilkForm(addr)
fm_crtn = axlMiniStatusLoad((gensym) addr `_dbCreateNetSilkCallback t)
when(isFile(addr) errset(deleteFile(addr)))
axlSetActiveLayer("BOARD GEOMETRY/SILKSCREEN_TOP")
axlFormSetField(fm_crtn "mirror" nil)
axlFormSetField(fm_crtn "angle" "0")
axlFormSetField(fm_crtn "text_block" "2")
axlFormSetField(fm_crtn "text_justification" "left")
axlUIPopupSet(axlUIPopupDefine(nil
'(("Done" _dbCreateNetSilkDone)
("Oops" _dbCreateNetSilkOops)
("Cancel" _dbCreateNetSilkCancel)
)))
axlControlRaise('options)
axlClearSelSet()
axlSetFindFilter(?enabled `("NOALL" "PINS" "VIAS" "SHAPES" "CLINESEGS") ?onButtons `("PINS" "VIAS" "SHAPES" "CLINESEGS"))
mk_crtn = axlDBTransactionStart()
while( !_dbCreateNetSilkFinish
when(axlSingleSelectPoint()
axlDBTransactionMark(mk_crtn)
_dbCreateNetSilk(axlLastPick(nil) axlGetSelSet())
)
)
axlUIPopupSet(nil)
))
procedure(_dbCreateNetSilk(pt item)
(let (id layer mir ang blk jst myorient ret ptStrOri ptPlace )
axlClearSelSet()
id = car(item)
layer = axlGetActiveLayer()
mir = case(axlFormGetField(fm_crtn "mirror") ("1" t) ("0" nil))
ang = atof(axlFormGetField(fm_crtn "angle"))
blk = axlFormGetField(fm_crtn "text_block")
jst = axlFormGetField(fm_crtn "text_justification")
myorient = make_axlTextOrientation(?textBlock blk ?rotation ang ?mirrored mir ?justify jst)
if(id->net->name != "" && id->net->name != nil then
ret = caar(axlDBCreateText(id->net->name pt myorient layer nil))
axlVisibleLayer(layer t)
axlVisibleUpdate(nil)
axlEraseObject(ret)
ptStrOri = axlDBAltOrigin('center ret)
axlDynamicsObject(ret ptStrOri)
_dbCreateNetSilkStage = nil
when(ptPlace = axlEnterPoint(?prompts `("Please click to select the point to place"))
_dbCreateNetSilkStage = t
axlTransformObject(ret ?move axlMXYSub(ptPlace ptStrOri))
)
axlClearDynamics()
axlUIWRedraw(nil)
else
printf("315370302347303373316252277325243241
")
)
))
(defun _dbCreateNetSilkCallback (fm_crtn)
(prog ()
case(fm_crtn->curField
("subclass"
t
)
)
return()
))
defun(_dbCreatCreateNetSilkForm (addr)
(let (file)
file = outfile(addr)
fprintf(file "FILE_TYPE=FORM_DEFN VERSION=2
")
fprintf(file "FORM AUTOGREYTEXT
")
fprintf(file "FIXED
")
fprintf(file "PORT 55 20
")
fprintf(file "HEADER "CreateNetSilk"
")
fprintf(file "
")
fprintf(file "POPUP <rotate>"0""0.000","45""45.000","90""90.000","135""135.000",
"180""180.000","225""225.000","270""270.000","315""315.000".
")
fprintf(file "POPUP <justification>"Left""left","Right""right","Center""center".
")
fprintf(file "TILE
")
fprintf(file "
")
fprintf(file "TEXT "Active Class and Subclass:"
")
fprintf(file "TLOC 1 1
")
fprintf(file "ENDTEXT
")
fprintf(file "FIELD class
")
fprintf(file "FLOC 5 3
")
fprintf(file "ENUMSET 19
")
fprintf(file "OPTIONS prettyprint
")
fprintf(file "POP "class"
")
fprintf(file "ENDFIELD
")
fprintf(file "FIELD subcolor
")
fprintf(file "FLOC 2 6
")
fprintf(file "COLOR 2 1
")
fprintf(file "OPTIONS colorchooser
")
fprintf(file "ENDFIELD
")
fprintf(file "FIELD subclass
")
fprintf(file "FLOC 5 6
")
fprintf(file "ENUMSET 19
")
fprintf(file "OPTIONS prettyprint ownerdrawn
")
fprintf(file "POP "subclass"
")
fprintf(file "ENDFIELD
")
fprintf(file "FIELD mirror
")
fprintf(file "FLOC 2 9
")
fprintf(file "CHECKLIST "Mirror"
")
fprintf(file "ENDFIELD
")
fprintf(file "TEXT "Rotate:"
")
fprintf(file "TLOC 5 11
")
fprintf(file "ENDTEXT
")
fprintf(file "FIELD angle
")
fprintf(file "FLOC 18 11
")
fprintf(file "REALFILLIN 6 7
")
fprintf(file "POP "rotate"
")
fprintf(file "DECIMAL 3
")
fprintf(file "ENDFIELD
")
fprintf(file "TEXT "Text block:"
")
fprintf(file "TLOC 5 13
")
fprintf(file "ENDTEXT
")
fprintf(file "FIELD text_block
")
fprintf(file "FLOC 18 13
")
fprintf(file "INTSLIDEBAR 7 7
")
fprintf(file "MIN 1
")
fprintf(file "MAX 64
")
fprintf(file "ENDFIELD
")
fprintf(file "TEXT "Text just:"
")
fprintf(file "TLOC 5 15
")
fprintf(file "ENDTEXT
")
fprintf(file "FIELD text_justification
")
fprintf(file "FLOC 18 15
")
fprintf(file "ENUMSET 8
")
fprintf(file "POP "justification"
")
fprintf(file "ENDFIELD
")
fprintf(file "
")
fprintf(file "ENDTILE
")
fprintf(file "
")
fprintf(file "ENDFORM
")
close(file)
))
procedure( _dbCreateNetSilkDone()
_dbCreateNetSilkFinish = t
axlDBTransactionCommit(mk_crtn)
axlFinishEnterFun()
)
procedure( _dbCreateNetSilkCancel()
_dbCreateNetSilkFinish = t
axlDBTransactionRollback(mk_crtn)
axlCancelEnterFun()
)
procedure( _dbCreateNetSilkOops()
when(!_dbCreateNetSilkStage
axlClearDynamics()
axlCancelEnterFun()
)
axlDBTransactionOops(mk_crtn)
)
2.将文本名字及后缀改为create_net_silk.il,保存;
3.将该文件放入当前使用PCB目录下;
4.Allegro软件Command命令栏输入:skill load(“create_net_silk.il”);
5.Allegro软件Command命令栏输入:CNS;

6.Option栏选择需要的层及字体大小;

7.绘制面板点击需要添加文本的网络,放置合适位置即可

8.看到这么多代码,第一眼就蒙了,硬件写代码,是不是太难了?答案是肯定的,但只要功夫深,铁棒磨成针,当然了,重点来了,网络还是有很多资源可以借鉴的!!!
二、Allegro软件自启动调用skill
很多人要问了,只要每次都要放到PCB目录下,每次都需要加载,是不是太麻烦了。很好,既然软件开放了二次开发功能,肯定是不会这么呆滞的。下面我们来介绍软件自动启skill的方法。
1.找到Allegro安装路路:.Cadence_SPB_XXsharelocalpcbskill,找到allegro.ilinit文件,已文本形式打开。如果没有该文件,就新建文本,修改文件名及后缀即可;
2.输入代码:load(“create_net_silk.il”);

3.将create_net_silk.il文件放置相同目录下;

4.重启Allegro,直接输入CNS即可调用该skill了。
三、菜单栏显示skill
肯定又有人会问,Allegro这么多快捷键,再增加这些skill的,记不住呀。下面,废话不多说,直接来介绍高级操作,菜单栏显示skill。
1.找到Allegro安装路径:.Cadence_SPB_XXsharepcb extcuimenus,找到allegro.men文件,以文本形式打开;
2.在最后一个END之前输入以下代码:MENUITEM “create net silk”, “CNS”;

4.重启Allegro,直接输入CNS即可调用该skill了。
四、菜单栏可下拉显示skill集
肯定有人会问,如果skill过多,那菜单栏不是密密麻麻一片,看不清。下面就来介绍压轴的方式
1.找到Allegro安装路径:.Cadence_SPB_XXsharepcb extcuimenus,找到allegro.men文件,以文本形式打开;
2.在最后一个END之前输入以下代码
POPUP "ZhangZandZhang"
BEGIN
MENUITEM "create net silk", "CNS"
MENUITEM "ZZZ", "xxx"
END

3.重启Allegro,在菜单栏ZhangZandZhang下拉就可以看到create net silk和ZZZ两个命令了,当然,想多写点也是没有关系的,只要能方便操作。
4.内容是层层递进的,不懂得还需要从头开始看。
总结
如果对本文有疑问的地方,可以留言或者私信我!