Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16212|回复: 22

[SKILL下载] 有人能帮我合并一下在PCB上直接增加REF 的代码吗?附件为原代码

[复制链接]
发表于 2020-3-23 09:04:10 | 显示全部楼层 |阅读模式
本帖最后由 85654202 于 2020-3-23 09:04 编辑

大家好
有人能帮我合并一下在PCB上直接增加REF 的代码吗?附件为原代码, 我对SKILL 不是很专业,合并了很多次,都是不成功,求大神帮改一下。

功能目的;  在PCB上直接增加REF(因为PCB 从别的软件上转过来,定义的层不一样,所以没有REF)
运行SKILL 先亮亮没有REF 的器件,然后对没有REF 的器件直接在PCB上增加ERF

在PCB 上高亮无REF 的器件代码:

axlCmdRegister( "Check_No_Refdes" 'Check_No_Refdes)
defun( Check_No_Refdes ()
  axlVisibleDesign(nil)
  axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t )
axlVisibleLayer( "PIN/TOP" t )
axlVisibleLayer( "PIN/BOTTOM" t )
axlVisibleLayer( "REF DES/SILKSCREEN_TOP" t )
axlVisibleLayer( "REF DES/SILKSCREEN_BOTTOM" t )
axlVisibleLayer( "PACKAGE GEOMETRY/SILKSCREEN_TOP" t )
axlVisibleLayer( "PACKAGE GEOMETRY/SILKSCREEN_BOTTOM" t )
logfile = axlDMOpenLog("no_refdes.log")
fprintf(logfile "#Check the component without refdes . \n\n")
fprintf(logfile "REF_DES  COORDIRATION\n")
setq(allsym axlDBGetDesign()->symbols)
axlDehighlightObject(allsym)
noref = nil
norefcnt = 0
foreach(symbol allsym
  text= axlDBGetAttachedText(symbol)
  txt = nil
  foreach(find text
   if(find->layer == "REF DES/SILKSCREEN_TOP" ||
   find->layer == "REF DES/SILKSCREEN_BOTTOM" then         
    txt = find   
   )        
  )
  if(txt == nil && symbol->refdes != nil then
   axlHighlightObject(symbol)
   fprintf(logfile "%-8s %L\n" symbol->refdes symbol->xy)
   ;noref = cons(symbol->refdes noref)
   ++norefcnt
  )
);foreach-end
fprintf(logfile "\nTotal of no refdes: %d\n" norefcnt)
axlDMClose(logfile)

axlMsgPut("Total component without refdes: %d\n" norefcnt)
axlMsgPut("Components without refdes , please view logfile.")        
);defun_end

在PCB 上增加REF 的代码:
if(car(n0->violations)->isMirrored then
layer = "BOTTOM"
else
layer = "TOP"
)
textstru = make_axlTextOrientation(?textBlock 1 ?mirrored car(n0->violations)->isMirrored ?justify "center")
tt = setof(x0 axlDBGetAttachedText(car(n0->violations)) rexMatchp("REF DES/SILKSCREEN_+" x0->layer))
unless(tt
axlDBCreateText(car(n0->violations)->refdes car(n0->violations)->xy textstru strcat("REF DES/SILKSCREEN_" layer) car(n0->violations))
)
tt = setof(x0 axlDBGetAttachedText(car(n0->violations)) rexMatchp("REF DES/ASSEMBLY_+" x0->layer))
unless(tt
axlDBCreateText(car(n0->violations)->refdes car(n0->violations)->xy textstru strcat("REF DES/ASSEMBLY_" layer) car(n0->violations))
)

谢谢 大家帮我合并一下。

发表于 2020-3-25 11:40:00 | 显示全部楼层
;############################################################
;Description
roject name:AddRef
;Version: 1.0
;Release date:2020.03.25
;Designer: Ken Wang
;Mail: 6771877@qq.com
;
;----------------------------------------
;Version record:
;
;V1.0
;Original version
;----------------------------------------
;EndDes
;############################################################


;############################################################
;Command
axlCmdRegister( "spm add ref" 'SPM_AddRef)
;EndCom
;############################################################


;############################################################
(defun SPM_AddRef ()
"Add ref"

;**************************************************
;Declare and initialize local variables
let((norefcnt noref txt)
;**************************************************

;==================================================
axlVisibleDesign(nil)
axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t )
axlVisibleLayer( "IN/TOP" t )
axlVisibleLayer( "IN/BOTTOM" t )
axlVisibleLayer( "REF DES/SILKSCREEN_TOP" t )
axlVisibleLayer( "REF DES/SILKSCREEN_BOTTOM" t )
axlVisibleLayer( "ACKAGE GEOMETRY/SILKSCREEN_TOP" t )
axlVisibleLayer( "ACKAGE GEOMETRY/SILKSCREEN_BOTTOM" t )
logfile = axlDMOpenLog("no_refdes.log")
fprintf(logfile "#Check the component without refdes . \n\n")
fprintf(logfile "REF_DES  COORDIRATION\n")
setq(allsym axlDBGetDesign()->symbols)
axlDehighlightObject(allsym)
noref = nil
norefcnt = 0

foreach(symbol allsym
        textstru = make_axlTextOrientation(?textBlock 1 ?mirrored symbol->isMirrored ?justify "center")
        text= axlDBGetAttachedText(symbol)
        txt = nil
        foreach(find text
                if(find->layer == "REF DES/SILKSCREEN_TOP" || find->layer == "REF DES/SILKSCREEN_BOTTOM" then         
                        txt = find   
                )      
        )
       
        if(symbol->isMirrored then
                layer = "BOTTOM"
        else
                layer = "TOP"
        )
        if(txt == nil && symbol->refdes != nil then
                axlHighlightObject(symbol)
                axlDBCreateText(symbol->refdes symbol->xy textstru strcat("REF DES/SILKSCREEN_" layer) symbol)
                fprintf(logfile "%-8s %L\n" symbol->refdes symbol->xy)
                ;noref = cons(symbol->refdes noref)
                ++norefcnt
        )
);foreach-end
fprintf(logfile "\nTotal of no refdes: %d\n" norefcnt)
axlDMClose(logfile)

axlMsgPut("Total component without refdes: %d\n" norefcnt)
axlMsgPut("Components without refdes , please view logfile.")        
;==================================================
);end let
);EndDef SPM_AddRef
;############################################################

SPMAddref.zip

1.02 KB, 下载次数: 35, 下载积分: 贡献 1

评分

参与人数 1SKILL币 +8 收起 理由
vivienluo + 8 很给力!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2020-3-23 12:32:27 | 显示全部楼层
444440.png
发表于 2020-3-23 21:25:58 | 显示全部楼层
你这个第二个程序一看就错了嘛,n0是哪来的?
 楼主| 发表于 2020-3-23 23:15:02 | 显示全部楼层
邓阿斌 发表于 2020-3-23 21:25
你这个第二个程序一看就错了嘛,n0是哪来的?

你可以帮改吗?
发表于 2020-3-25 11:41:11 | 显示全部楼层
为什么我早上回复的会被删掉?
发表于 2020-3-25 11:45:11 | 显示全部楼层
是我搞错了,你在EDA365上也发了
 楼主| 发表于 2020-3-27 21:23:35 | 显示全部楼层
6771877@qq.com 发表于 2020-3-25 11:41
为什么我早上回复的会被删掉?

没有删吧,可能是没通过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-4-27 05:08 , Processed in 0.153356 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表