Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13911|回复: 17

BRD导出单个symbol(大家来挑错版)!

[复制链接]
发表于 2013-6-12 21:38:28 | 显示全部楼层 |阅读模式
网络传的BRD导出单个symbol的skill代码,一时兴起,下午写个类似的,但执行起来感觉怪怪的,大家来挑挑错。
  1. ;  load("dump_lib.il")
  2. ;  by chen_ck
  3. ;  
  4. axlCmdRegister("E_lib" , 'dump_lib ?cmdType "general" )
  5. defun(dump_lib ()
  6.         type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Dump Lib")
  7.         if(type_symbol == 0
  8.                 then
  9.                         lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
  10.                 else if(type_symbol == 1
  11.                         then
  12.                                 lib_db = axlUIDataBrowse( 'BOARD_SYMBOL  '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
  13.                         );else if
  14.         );if
  15.         pad_db = cadr(lib_db)->pins
  16.         ref    = car(cadr(lib_db)->instances)->refdes
  17.         name_list = nil
  18.         foreach(db pad_db
  19.                 unless(member( db->name name_list)
  20.                         name_list = tconc(name_list db->name)
  21.                 );unless
  22.         );foreach
  23.         foreach(db1 car(name_list)
  24.                 system(sprintf( nil "dump_libraries -b %s -b %s -b %s %s"  ref car(lib_db) db1 axlCurrentDesign()))
  25.         );
  26. );defun
复制代码
发表于 2014-9-29 10:16:30 | 显示全部楼层
为什么大家整得这么复杂呢?我都是随便一个命令选中器件,然后用下面这个skill,就可以导出了
axlWritePackageFile(car(axlGetSelSet())->definition)
如果导出的库没有焊盘的那是因为库里没这个焊盘,要把导出的焊盘放到焊盘库路径下,然后再执行一次上面这行skill,就搞定了.
发表于 2013-6-18 10:14:24 | 显示全部楼层

  1. ;  load("dump_lib.il")
  2. ;  by chen_ck
  3. ;  
  4. axlCmdRegister("E_lib" , 'dump_lib ?cmdType "general" )
  5. defun(dump_lib ()
  6.      ;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
  7.      if(axlVersion( 'version ) > 16.0 then
  8.           type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Dump Lib")
  9.      else
  10.           type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ))
  11.      )
  12.      if(type_symbol == 0 then
  13.           lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
  14.      else if(type_symbol == 1 then
  15.            lib_db = axlUIDataBrowse( 'BOARD_SYMBOL  '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
  16.         );else if
  17.      );if
  18.      pad_db = cadr(lib_db)->pins
  19.      ref    = car(cadr(lib_db)->instances)->refdes
  20.      name_list = nil
  21.      foreach(db pad_db
  22.           unless(member( db->name name_list)
  23.                name_list = tconc(name_list db->name)
  24.           );unless
  25.      );foreach
  26.      foreach(db1 car(name_list)
  27.           system(sprintf( nil "dump_libraries -b %s -b %s -b %s %s"  ref car(lib_db) db1 axlCurrentDesign()))
  28.      );
  29. );defun

复制代码
;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
還有一個問題就是"Mechanical" symbol 沒有ref時,代碼會error
 楼主| 发表于 2013-6-18 12:15:02 | 显示全部楼层
XYX365 发表于 2013-6-18 10:14
;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
還有一個問題就是"Mechanical" sy ...

您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗,如何避免dos的弹出窗口呢。
发表于 2013-6-18 14:29:44 | 显示全部楼层
chuankay 发表于 2013-6-18 12:15
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗,如何避免 ...

您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗
=> 還可以使用這幾個函數來取資料
axlUIDataBrowse()
axlPadstackToDisk()
axlSelectByName()
axlWritePackageFile()

如何避免dos的弹出窗口呢
=> 可以使用axlRunBatchDBProgram() 函數,以下試試看
tCmd = sprintf( nil "dump_libraries -b %s -b %s -b %s %s" ref car(lib_db) db1 axlCurrentDesign())
axlRunBatchDBProgram("dump_lib" tCmd ?silent t)
 楼主| 发表于 2013-6-18 15:30:35 | 显示全部楼层
XYX365 发表于 2013-6-18 14:29
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗
=> 還可以 ...

HI    XYX365 :
      非常感谢耐心解答!
      你提供的解决办法可以有效解决问题,axlWritePackageFile()可以代替dump_libraries命令,那么就不存在dos弹窗了。另批处理函数不会出现dos弹窗。
发表于 2014-1-8 15:21:52 | 显示全部楼层
chuankay 发表于 2013-6-18 15:30
HI    XYX365 :
      非常感谢耐心解答!
      你提供的解决办法可以有效解决问题,axlWritePackage ...

Hi chuankay,

能把修改后的代码贴出来共享学习吗?
 楼主| 发表于 2014-1-8 22:41:57 | 显示全部楼层
bavol 发表于 2014-1-8 15:21
Hi chuankay,

能把修改后的代码贴出来共享学习吗?

可以 ,导出的器件貌似不是那么理想哦。
 楼主| 发表于 2014-1-10 15:52:38 | 显示全部楼层
根据XYX365提供的建议,贴上改正后的代码(但导出后还是有问题,看来单纯的导出貌似不能很好的工作,要想别的办法了)
;  load("dump_lib.il")
;  by chen_ck
;  
axlCmdRegister("E_lib" , 'dump_lib ?cmdType "general" )
defun(dump_lib ()
    if(axlVersion( 'version ) > 16.0 then
                        type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Dump Lib")
                else
                        type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ))
     )
        if(type_symbol == 0
                then
                        lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
                else if(type_symbol == 1
                        then
                                lib_db = axlUIDataBrowse( 'BOARD_SYMBOL  '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
                        );else if
        );if
        pad_db = cadr(lib_db)->pins
        ;ref    = car(cadr(lib_db)->instances)->refdes
        name_list = nil
        foreach(db pad_db
                unless(member( db->name name_list)
                        name_list = tconc(name_list db->name)
                );unless
        );foreach
        if(name_list
                then
                        export_sym(lib_db name_list)
        )
);defun
defun( export_sym (lib_db name_list)
        axlWritePackageFile(cadr(lib_db))
        foreach(db1 car(name_list)
                axlPadstackToDisk(db1)
                ;system(sprintf( nil "dump_libraries -b %s -b %s -b %s %s"  ref car(lib_db) db1 axlCurrentDesign()))
        );
)

发表于 2014-1-12 15:42:39 | 显示全部楼层
chuankay 发表于 2014-1-10 15:52
根据XYX365提供的建议,贴上改正后的代码(但导出后还是有问题,看来单纯的导出貌似不能很好的工作,要想别 ...

谢谢,我试试
发表于 2014-5-13 18:22:02 | 显示全部楼层
bavol 发表于 2014-1-12 15:42
谢谢,我试试

axlCmdRegister("lib"  'extract_lib)
procedure(extract_lib()
        let( (type_symbol lib_db pad_db db name_list )
         type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Extract Lib")                ;Displays a dialog box
                cond(
                        (type_symbol == 0                                                                                                                                                               
                         lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Lib" t )
                           )
                    (type_symbol == 1
                            lib_db = axlUIDataBrowse( 'BOARD_SYMBOL  '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Lib" t )
                )
                         );end cond
         pad_db = cadr(lib_db)->pins                                                                                ;Returns the tail of the list->dbid
         name_list = nil
         foreach(db pad_db
                 unless(member( db->name name_list)                                                        ;exclude same PAD
                         name_list = tconc(name_list db->name)
                 );unless
         );foreach
         if(name_list        then
                 export_sym(lib_db name_list)
         )
        );end let
);end procedure
;--------------------------------------------------------------------------------------------------------------------------------
defun( export_sym (lib_db name_list)
         axlWritePackageFile(cadr(lib_db) "D:\\SPB_Data\\extract_pcb_lib")
         foreach(db1 car(name_list)
                 axlPadstackToDisk(db1)
         );end foreach
);end defun

学习临摹了一下,感觉还可以。缺点是只能每次只能导出1个器件。如何能导出多个器件?高手指点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-25 08:52 , Processed in 0.141100 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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