Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: vivienluo

[原创] 自动导出封装焊盘、DEVICE、SYMBOL的SKILL

[复制链接]
发表于 2019-3-11 11:47:44 | 显示全部楼层
这个要怎么用,输入create_device_batch回车后没有导出来,是怎么回事?还要框选所有器件吗?框选了以后也还是不行呀?急用呢
发表于 2022-2-7 18:44:33 | 显示全部楼层
不错这东西,谢谢
发表于 2022-3-22 19:46:43 | 显示全部楼层
很方便,谢谢
发表于 2023-12-20 17:14:20 | 显示全部楼层
这个两个命令都试了,都不能连续的运行下去处理整个文件见内的封装,只能复制,粘贴回车,
发表于 2025-3-19 11:21:04 | 显示全部楼层

这个路径吗

本帖最后由 xieeyawen 于 2025-3-19 11:24 编辑

这个路径吗
E59A1EE5-6738-4dd3-B26C-D979A5442F29.png
发表于 2025-3-19 12:20:44 | 显示全部楼层
  1. /********************************************************/
  2. /*               Title :  Add Symbol Value                                */
  3. /*     Execute Command :  add_symbol_value                               */
  4. /*              Author :  VivienLuo                                */
  5. /*       Creation Date :  2013-07-16                        */
  6. /*                       Update :                                    */
  7. /********************************************************/

  8. axlCmdRegister("create_device" 'add_value_device ?cmdType "general")
  9. axlCmdRegister("create_device_batch" 'create_device_batch ?cmdType "general")

  10. defun( create_device_batch ()
  11.         libFiles = getDirFiles("./")  ;获得根目录下的directories文件(即封装文件)的列表,文件元素是字符串的形式
  12.         ;例如("BGA.bsm" "L2.ssm" "msapvia1_6.pad" "1.pcb" "BGA.dra" "L2.dra")
  13.         draFiles = nil  
  14.         foreach(libFile libFiles
  15.                 when(car(last(parseString(libFile ".")))== "dra"
  16.                 ;parseString(libFile ".")             =>("BGA" "dra")
  17.                 ;last(parseString(libFile "."))       =>("dra")
  18.                 ;car(last(parseString(libFile ".")))  =>"dra"
  19.                         draFiles = cons(libFile draFiles);  =>draFiles=("BGA.dra")   cons在列表开头增加字符串,即在nil列表前加字符串"BGA.bsm"
  20.                 )
  21.         )
  22.         foreach(draFile draFiles
  23.                 axlOpenDesign(?design draFile ?mode "wf")
  24.                 /******
  25. axlOpenDesign(
  26. ?design t_design
  27. ?mode t_mode
  28. ?noMru g_noMru
  29. )
  30. ? t_design/nil
  31.     ******/
  32.                 ;打开设计,新设计代替旧设计,新设计的名字就是draFile即"BGA.dra".
  33.                 ;"w"或"wf" (see above);加 "l"禁用Allegro文件锁定。例如: "wl" 表示无锁定
  34.                 add_value_device() ;调用
  35.         );end foreach       
  36.         axlShell("unset noconfirm")
  37. );end defun

  38. defun( add_value_device ()
  39.         axlShell("set noconfirm");设置不确认 =>t
  40.         ;(axlShell "status") PCB的状态栏
  41.         ;(axlShell "dlib") 导出封装的功能。
  42.         ;axlShell类似于在command模式下输入函数快捷键,调用allegro的功能函数
  43.        
  44.         designType = axlDesignType(t) ;Allegro的设计软件的模式
  45.         case(designType
  46.                 ("PACKAGE"  ;PACKAGE模式下
  47.                         crete_device_run(strcat(axlCurrentDesign() ".psm"))
  48.                         ;比如axlCurrentDesign()路径下有156um_coupon.dra和156um_coupon.psm就执行crete_device_run (fileName)
  49.                         axlPadstackToDisk()
  50.                 )
  51.                 ("MECHANICAL"
  52.                         crete_device_run(strcat(axlCurrentDesign() ".bsm"))
  53.                 )
  54.                 ("FORMAT"
  55.                         crete_device_run(strcat(axlCurrentDesign() ".osm"))
  56.                 )
  57.                 ("SHAPE"
  58.                         crete_device_run(strcat(axlCurrentDesign() ".ssm"))
  59.                 )
  60.                 ("FLASH"
  61.                         crete_device_run(strcat(axlCurrentDesign() ".fsm"))
  62.                 )
  63.         )               
  64.         axlShell("replay "./create_device.scr"")               
  65.         ;axlSaveDesign(?design axlCurrentDesign())        ;保存PCB文件
  66.         axlShell("unset noconfirm") ;不设置不确认 =>t
  67. );end defun

  68. defun( crete_device_run (fileName)
  69.         saveScript = outfile("./create_device.scr")
  70.         fprintf(saveScript "scriptmode +i +n\n")  ;scriptmode后面,有[- +]  ,"+"来启用选项,"-"用来恢复默认值,如果不设置,默认
  71.         ;options 选项可以填完整参数名,或者参数的第一个字符。比如"scriptmode +invisible"等效于"scriptmode +i
  72. /***********************************************************************
  73. 下面是各个参数的详细说明
  74. -/+ f (flush) :当执行record时,每个命令将写入到磁盘脚本文件中,如果禁用(使用 ”-“ 默认值,会得到更好的性能),当磁盘满时,或脚本终止,会写入内存缓冲区。"+"开,"-" 关(默认).
  75. -/+ b (beep):当脚本执行时,是否开关系统的各种提示音。"+"开,"-" 关(默认).
  76. -/+ c (continue):当遇到脚本文件中的错误时,是否继续执行。"+"开,"-" 关(默认).
  77. -/+ e (echo):在replay过程中,脚本是否回应到相应窗口再执行命令。"+"开,"-" 关(默认).
  78. -/+ i (invisible):在replay过程中,是否显示script脚本中调用到的FORM窗口。"+"不显示FORM,"-" 显示(默认).
  79. -/+ n (noinfo):如果打开,在命令栏窗口中不会打印replay过程的消息。对警告和错误消息无效。"+"开,"-" 关(默认).
  80. -/+ s (step):单步执行script。在replay过程中,每执行完一个命令时,script会暂时中止,然后等待用户单击一下鼠标,或敲下键盘的按键进行下一个命令。"+"开,"-" 关(默认).
  81. -/+ w (warnerror): 是否阻止警告和错误信息。"+"开,"-" 关(默认).
  82. 例子:
  83. scriptmode +i                    replay过程中所有调用到的FORM都不显示
  84. scriptmode +n                    script执行过程中,不显示所有的提示信息。比如 Script version: xx.x
  85. scriptmode +i  +n (推荐)       script执行过程中不显示form,也不显示提示信息。
  86. ************************************************************************/       
  87.         fprintf(saveScript "version 15.51\n")
  88.         fprintf(saveScript "setwindow pcb\n")
  89.         fprintf(saveScript "trapsize 666\n")
  90.         fprintf(saveScript "create device\n")  ;Package模式下的Create Device功能
  91.         fprintf(saveScript "setwindow form.crdevice\n")
  92.         fprintf(saveScript "FORM crdevice done\n")
  93.         fprintf(saveScript "create symbol\n")
  94.         fprintf(saveScript "fillin %s\n" fileName) ;保存为fileName 目标文件名
  95.         close(saveScript)
  96. );end defun
复制代码
把代码研究了下并做了注释,写的非常好,适合学习。但是功能好像用处没看出来。

下面是我写的导出pad封装的代码,总有些问题
  1. procedure(exportvpad()
  2. prog(()
  3.                 ;FormPathXX=strcat((axlGetVariable "cdsroot") "\\share\\pcb\\text\\forms")
  4.                 ;FormPathXX=buildString(parseString(FormPathXX "\") "/")
  5.                 ;dlib_form_file=sprintf(nil "%s\\dlib.form" FormPathXX)
  6.                 ;dlib_form=axlMiniStatusLoad( (gensym) dlib_form_file 'dlib t)
  7.                 out = outfile("./export_padstack.scr") ;打开端口,创建一个scr文件在当前的工作目录,令这个文件赋给out
  8.                 fprintf(out "setwindow pcb\n")
  9.                 fprintf(out "generaledit\n")
  10.                 fprintf(out "dlib\n")
  11.                 fprintf(out "setwindow form.dlib\n")
  12.                 fprintf(out "FORM dlib none\n") ;
  13.                 fprintf(out "FORM dlib pad YES\n") ;
  14.                 fprintf(out "FORM dlib browse_export\n") ;
  15.    ;fprintf(out "fillin VIA\n")  ;放在根目录的VIA文件夹下
  16.           fprintf(out "fillin ./\n")  ;放在根目录文件夹下
  17.                 fprintf(out "FORM dlib execute\n") ;
  18.                 fprintf(out "FORM dlib cancel\n") ;
  19.                 fprintf(out "setwindow pcb\n") ;
  20.                 fprintf(out "generaledit\n") ;配置完成
  21.                 close(out)  ;关闭端口
  22.                 axlShell("replay ./export_padstack.scr")       
  23. );endprog
  24. );endprocedure

  25. procedure(_del_pcbfile()
  26. prog(()
  27. shell("
  28.                 del /f /s /q  *.dra
  29.                 del /f /s /q  *.pad
  30.                 del /f /s /q  *.log
  31.                 del /f /s /q  *.scr
  32.                 rd /s /q Indesign
  33.                 rd /s /q signoise.run
  34.         ")       
  35. );endprog
  36. );endprocedure
复制代码
我写的代码调用后总提示找不到界面,就会报错E- Can't find window; form.dlib。请楼主帮忙看看是什么原因啦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-4 10:37 , Processed in 0.284386 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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