ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ALLEGRO SKILL学习

2026/8/25 14:29:52 拓冰建站 浏览量
ALLEGRO SKILL学习 认识SkillSKILL 语言是Cadence 提供给用户的一个开发接口利用其本身提供的接口函数和SKILL语言完成自动化操作的功能。可为PCB 工程师们提高工作效率缩短工程图面开发周期减少出错率等品质保证等各方面都有一定的帮助。Skill 是嵌入式的高级开发语言支持一套类似C 语言的语法大大降低了初学者学习的难度同时高水平的编程者可以选择使用类似Lisp 语言的全部功能。所以SKILL 语言既可以用作最简单的工具语言也可以作为开发任何应用的、强大的编程语言。SKILL 可以与底层系统交互也提供了访问Cadence 各个工具的丰富接口。在Cadence 环境下允许Skill 自定义用户界面并包含强大的跟踪、调试和分析工具。Skill 还可以让你访问和控制所有的工具、配置用户环境、设计数据库。用户可以通过Skill 语言来访问并且可以开发自己的基于Cadence 平台的快捷、实用工具。Cadence 提供二次开发的SKILL 语言它是一种基于通用人工智能语言——Lisp 的交互式高级编程语言(LISP 即List Processing表处理是最早和最重要的符号处理编程语言之一它于1958 年由美国的J. McCarthy 提出LISP 在人工智能AI 方面获得广泛应用)。在Allegro 菜单栏调用skill本小结介绍如何编辑菜单文件.men文件。使得可以通过Allegro菜单栏上的命令调用skillC:\Cadence\SPB_17.4\share\pcb\text\cuimenus\allegro.men为文件路径认识了解编辑菜单栏先看一下men文件里的内容一行一行来进行了解之后就可以知道从哪里下手了。BEGIN与END菜单定义的开始与结束所有菜单项都包含在这对关键字之间。POPUP File定义一个下拉菜单显示文本为File其中表示后面的字符串可以被作为快捷键打开菜单。MENUITEM New..., new菜单项显示New...定义快捷键N。点击后发送命令字符串new该命令对应 Allegro 内部的“新建”功能。MENUITEM Open, open菜单项显示Open点击后执行命令open打开文件。MENUITEM Open Project..., open project菜单项显示Open Project...执行命令open project打开项目。#ifndef _ORCAD_STANDARD || _ORCAD_PROFESSIONAL || _ALLEGRO_ARTIST条件编译指令如果没有定义_ORCAD_STANDARD、_ORCAD_PROFESSIONAL或_ALLEGRO_ARTIST这些宏即当前不是 OrCAD Standard / Professional / Allegro Artist 版本则编译后续代码直到对应的#endif。#ifdef allegro_pulse_enable如果定义了宏allegro_pulse_enable通常表示启用了 Pulse 功能Pulse 是 Cadence 的云协作平台则包含下面的菜单项。MENUITEM Open from Pulse..., pulse_designs菜单项显示Open from Pulse...执行命令pulse_designs用于从 Pulse 云平台打开设计。两个#endif分别结束#ifdef和#ifndef条件块。#ifdef _allegro_option_multiuser如果定义了多用户选项宏表示当前版本支持 Symphony 多用户协同设计则包含以下两个菜单项。MENUITEM Symphony Connect..., muconnect显示Symphony Connect...执行命令muconnect连接到 Symphony 服务器。MENUITEM Start Symphony Server..., muserver显示Start Symphony Server...执行命令muserver启动 Symphony 服务器。#endif结束条件块。MENUITEM SEPARATOR添加一个水平分隔线用于将菜单项分组。MENUITEM Save, save菜单项Save执行命令save。MENUITEM Save As..., save_as菜单项Save As...执行命令save_as。同样仅在非 OrCAD 版本且启用 Pulse 时显示这些菜单项。菜单项分别执行pulse_copy_as另存为到 Pulse、pulse_commit提交、pulse_version_control版本控制。MENUITEM Update Layout..., design sync eco显示Update Layout...执行命令design sync eco用于从原理图同步 ECO 到 PCB。MENUITEM Update Schematic..., design sync back_annotate显示Update Schematic...执行命令design sync back_annotate将 PCB 更改反向标注到原理图。OPUP Import定义一个名为Import的子菜单I作为快捷键。内容在BEGIN与END之间。菜单栏调用skill步骤分为以下1创建文件夹把所有.il放到该文件夹下后续所有skill都可以放在其中。2修改allegro.ilinit文件内容对自定义存放.il文件进行统一的注册并调用。3修改MEN文件来调用skill文件。skill_函数 通过菜单栏点击跳转到对应的网站; 打开公司或常用网站defun( OpenMyWebsite ()axlHttp(https://www.example.com)); 注册为 Allegro 命令axlCmdRegister(open_my_website OpenMyWebsite)修改men文件在菜单栏可以直接跳转POPUP My LinksBEGINMENUITEM Visit My Website, open_my_websiteENDSKILL命令的使用1 查看skill文件的路径skill getSkillPath()会返回一个地址例如(. C:/Users/name/pcbenv C:/Cadence/SPB_17.4/share/local/pcb/skill ...)2 修改skill路径在allegro.ilinit文件中动态添加最灵活推荐开发时使用allegro.ilinit是 Allegro 启动时自动加载的 SKILL 初始化文件。如果没有allegro.ilinit这个文件可以创建一个通过以下命令修改文件内容添加路径。; 1. 设置SKILL搜索路径将你的专属文件夹添加进去setSkillPath(buildString(append1(getSkillPath() C:/Allegro-Skill-Files))); 2. (可选) 自动加载新路径下的所有 .il 文件foreach(dir getSkillPath()when(isDir(dir)foreach(file rexMatchList(\\.il$ getDirFiles(dir))load(file))))最后进行在使用查看路径命令验证一下如果被正确添加那么就ok。3 检查所有通过注册的skill命令skill axlCmdList()4 注册命令行axlCmdRegister(open_my_website OpenMyWebsite)1-SKILL_输入层数并切换到指定层; change_layer.il; 层显示切换脚本适用于 Allegro 17.4; 用法; l 1 2 3 - 仅显示指定 ETCH 层相关对象; l - 清空所有显示; lt 1 2 3 - 显示指定 ETCH 层同时显示 TOP 层丝印、板框等; lt - 显示 TOP 层 ETCH 及 TOP 非电气层; lb 1 2 3 - 显示指定 ETCH 层同时显示 BOTTOM 层丝印、板框等; lb - 显示 BOTTOM 层 ETCH 及 BOTTOM 非电气层;; 加载方式; 1. 将本文件放入 SKILL 搜索路径如 $HOME/pcbenv; 2. 在 allegro.ilinit 中添加 load(change_layer.il); 3. 或临时在命令行执行 skill load(change_layer.il); 注册命令axlCmdRegister(l l_cmd)axlCmdRegister(lt lt_cmd)axlCmdRegister(lb lb_cmd); 主命令l只显示 ETCH 层相关defun(l_cmd (rest args); 清空显示axlVisibleDesign(nil); 如果有层号参数则显示对应 ETCH 层when(argsforeach(item argslayerNum evalstring(item)when(numberp(layerNum)showlayer_etch(layerNum)))); 刷新显示axlVisibleUpdate(t)); lt 命令显示指定 ETCH 层默认 TOP并显示 TOP 非电气层defun(lt_cmd (rest args); 清空显示axlVisibleDesign(nil); 如果没给层号默认使用 TOP 层if(args nil then; 查找 TOP 层在 ETCH 层列表中的位置allLayer axlGetParam(paramLayerGroup:ETCH)-groupMemberstopIndex 1 ; 默认第一个层for(i 1 length(allLayer)when(upperCase(nthelem(i allLayer)) TOPtopIndex i))showlayer_etch(topIndex)else; 有参数则显示指定层号foreach(item argslayerNum evalstring(item)when(numberp(layerNum)showlayer_etch(layerNum)))); 显示 TOP 非电气层和板框等show_top_extra(); 刷新显示axlVisibleUpdate(t)); lb 命令显示指定 ETCH 层默认 BOTTOM并显示 BOTTOM 非电气层defun(lb_cmd (rest args); 清空显示axlVisibleDesign(nil); 如果没给层号默认使用 BOTTOM 层if(args nil thenallLayer axlGetParam(paramLayerGroup:ETCH)-groupMembersbottomIndex length(allLayer) ; 默认最后一个层for(i 1 length(allLayer)when(upperCase(nthelem(i allLayer)) BOTTOMbottomIndex i))showlayer_etch(bottomIndex)else; 有参数则显示指定层号foreach(item argslayerNum evalstring(item)when(numberp(layerNum)showlayer_etch(layerNum)))); 显示 BOTTOM 非电气层和板框等show_bottom_extra(); 刷新显示axlVisibleUpdate(t)); 显示指定 ETCH 层相关的对象不包含全局参考层defun(showlayer_etch (layerNum); 获取所有 ETCH 层成员按顺序排列allLayer axlGetParam(paramLayerGroup:ETCH)-groupMembers; 检查层号是否有效when(layerNum 1 layerNum length(allLayer); 获取层名layerName nthelem(layerNum allLayer)etchlayer strcat(ETCH/ layerName); 显示该层的走线、引脚、过孔、边界、DRC 等axlVisibleLayer(etchlayer t)axlVisibleLayer(strcat(PIN/ layerName) t)axlVisibleLayer(strcat(VIA CLASS/ layerName) t)axlVisibleLayer(strcat(BOUNDARY/ layerName) t)axlVisibleLayer(strcat(DRC ERROR CLASS/ layerName) t)axlVisibleLayer(strcat(route keepout/ layerName) t)axlVisibleLayer(strcat(via keepout/ layerName) t)axlVisibleLayer(strcat(CONSTRAINT REGION/ layerName) t); 如果是平面层额外显示反焊盘层when(axlDBGetLayerType(etchlayer) PLANEaxlVisibleLayer(ANTI ETCH/ALL t)); 显示 PLAN 层如果存在planlayer strcat(PLAN/ layerName)when(axlLayerGet(planlayer)axlVisibleLayer(planlayer t)); 激活该 ETCH 层为当前层axlSetActiveLayer(etchlayer))); 显示 TOP 面非电气层及板框等全局层defun(show_top_extra (); 板框全局axlVisibleLayer(BOARD GEOMETRY/Design_Outline t); 布线允许/禁止区域axlVisibleLayer(route keepout/all t)axlVisibleLayer(route keepin/all t)axlVisibleLayer(CONSTRAINT REGION/ALL t); TOP 丝印axlVisibleLayer(PACKAGE GEOMETRY/SILKSCREEN_TOP t)axlVisibleLayer(REF DES/SILKSCREEN_TOP t) ; 如果存在该层; TOP 阻焊axlVisibleLayer(SOLDERMASK_TOP t); TOP 钢网axlVisibleLayer(PASTEMASK_TOP t); TOP 装配层axlVisibleLayer(PACKAGE GEOMETRY/ASSEMBLY_TOP t)axlVisibleLayer(MANUFACTURING/ASSEMBLY_TOP t); TOP 禁止测试点层可选axlVisibleLayer(MANUFACTURING/NO_PROBE_TOP t)); 显示 BOTTOM 面非电气层及板框等全局层defun(show_bottom_extra (); 板框全局axlVisibleLayer(BOARD GEOMETRY/Design_Outline t); 布线允许/禁止区域axlVisibleLayer(route keepout/all t)axlVisibleLayer(route keepin/all t)axlVisibleLayer(CONSTRAINT REGION/ALL t); BOTTOM 丝印axlVisibleLayer(PACKAGE GEOMETRY/SILKSCREEN_BOTTOM t)axlVisibleLayer(REF DES/SILKSCREEN_BOTTOM t); BOTTOM 阻焊axlVisibleLayer(SOLDERMASK_BOTTOM t); BOTTOM 钢网axlVisibleLayer(PASTEMASK_BOTTOM t); BOTTOM 装配层axlVisibleLayer(PACKAGE GEOMETRY/ASSEMBLY_BOTTOM t)axlVisibleLayer(MANUFACTURING/ASSEMBLY_BOTTOM t); BOTTOM 禁止测试点层axlVisibleLayer(MANUFACTURING/NO_PROBE_BOTTOM t))