这个路径吗
本帖最后由 xieeyawen 于 2025-3-19 11:24 编辑这个路径吗 /********************************************************/
/* Title :Add Symbol Value */
/* Execute Command :add_symbol_value */
/* Author :VivienLuo */
/* Creation Date :2013-07-16 */
/* Update : */
/********************************************************/
axlCmdRegister("create_device" 'add_value_device ?cmdType "general")
axlCmdRegister("create_device_batch" 'create_device_batch ?cmdType "general")
defun( create_device_batch ()
libFiles = getDirFiles("./");获得根目录下的directories文件(即封装文件)的列表,文件元素是字符串的形式
;例如("BGA.bsm" "L2.ssm" "msapvia1_6.pad" "1.pcb" "BGA.dra" "L2.dra")
draFiles = nil
foreach(libFile libFiles
when(car(last(parseString(libFile ".")))== "dra"
;parseString(libFile ".") =>("BGA" "dra")
;last(parseString(libFile ".")) =>("dra")
;car(last(parseString(libFile ".")))=>"dra"
draFiles = cons(libFile draFiles);=>draFiles=("BGA.dra") cons在列表开头增加字符串,即在nil列表前加字符串"BGA.bsm"
)
)
foreach(draFile draFiles
axlOpenDesign(?design draFile ?mode "wf")
/******
axlOpenDesign(
?design t_design
?mode t_mode
?noMru g_noMru
)
? t_design/nil
******/
;打开设计,新设计代替旧设计,新设计的名字就是draFile即"BGA.dra".
;"w"或"wf" (see above);加 "l"禁用Allegro文件锁定。例如: "wl" 表示无锁定
add_value_device() ;调用
);end foreach
axlShell("unset noconfirm")
);end defun
defun( add_value_device ()
axlShell("set noconfirm");设置不确认 =>t
;(axlShell "status") PCB的状态栏
;(axlShell "dlib") 导出封装的功能。
;axlShell类似于在command模式下输入函数快捷键,调用allegro的功能函数
designType = axlDesignType(t) ;Allegro的设计软件的模式
case(designType
("PACKAGE";PACKAGE模式下
crete_device_run(strcat(axlCurrentDesign() ".psm"))
;比如axlCurrentDesign()路径下有156um_coupon.dra和156um_coupon.psm就执行crete_device_run (fileName)
axlPadstackToDisk()
)
("MECHANICAL"
crete_device_run(strcat(axlCurrentDesign() ".bsm"))
)
("FORMAT"
crete_device_run(strcat(axlCurrentDesign() ".osm"))
)
("SHAPE"
crete_device_run(strcat(axlCurrentDesign() ".ssm"))
)
("FLASH"
crete_device_run(strcat(axlCurrentDesign() ".fsm"))
)
)
axlShell("replay \"./create_device.scr\"")
;axlSaveDesign(?design axlCurrentDesign()) ;保存PCB文件
axlShell("unset noconfirm") ;不设置不确认 =>t
);end defun
defun( crete_device_run (fileName)
saveScript = outfile("./create_device.scr")
fprintf(saveScript "scriptmode +i +n\n");scriptmode后面,有[- +],"+"来启用选项,"-"用来恢复默认值,如果不设置,默认
;options 选项可以填完整参数名,或者参数的第一个字符。比如"scriptmode +invisible"等效于"scriptmode +i
/***********************************************************************
下面是各个参数的详细说明
-/+ f (flush) :当执行record时,每个命令将写入到磁盘脚本文件中,如果禁用(使用 ”-“ 默认值,会得到更好的性能),当磁盘满时,或脚本终止,会写入内存缓冲区。"+"开,"-" 关(默认).
-/+ b (beep):当脚本执行时,是否开关系统的各种提示音。"+"开,"-" 关(默认).
-/+ c (continue):当遇到脚本文件中的错误时,是否继续执行。"+"开,"-" 关(默认).
-/+ e (echo):在replay过程中,脚本是否回应到相应窗口再执行命令。"+"开,"-" 关(默认).
-/+ i (invisible):在replay过程中,是否显示script脚本中调用到的FORM窗口。"+"不显示FORM,"-" 显示(默认).
-/+ n (noinfo):如果打开,在命令栏窗口中不会打印replay过程的消息。对警告和错误消息无效。"+"开,"-" 关(默认).
-/+ s (step):单步执行script。在replay过程中,每执行完一个命令时,script会暂时中止,然后等待用户单击一下鼠标,或敲下键盘的按键进行下一个命令。"+"开,"-" 关(默认).
-/+ w (warnerror): 是否阻止警告和错误信息。"+"开,"-" 关(默认).
例子:
scriptmode +i replay过程中所有调用到的FORM都不显示
scriptmode +n script执行过程中,不显示所有的提示信息。比如 Script version: xx.x
scriptmode +i+n (推荐) script执行过程中不显示form,也不显示提示信息。
************************************************************************/
fprintf(saveScript "version 15.51\n")
fprintf(saveScript "setwindow pcb\n")
fprintf(saveScript "trapsize 666\n")
fprintf(saveScript "create device\n");Package模式下的Create Device功能
fprintf(saveScript "setwindow form.crdevice\n")
fprintf(saveScript "FORM crdevice done\n")
fprintf(saveScript "create symbol\n")
fprintf(saveScript "fillin %s\n" fileName) ;保存为fileName 目标文件名
close(saveScript)
);end defun把代码研究了下并做了注释,写的非常好,适合学习。但是功能好像用处没看出来。
下面是我写的导出pad封装的代码,总有些问题
procedure(exportvpad()
prog(()
;FormPathXX=strcat((axlGetVariable "cdsroot") "\\share\\pcb\\text\\forms")
;FormPathXX=buildString(parseString(FormPathXX "\\") "/")
;dlib_form_file=sprintf(nil "%s\\dlib.form" FormPathXX)
;dlib_form=axlMiniStatusLoad( (gensym) dlib_form_file 'dlib t)
out = outfile("./export_padstack.scr") ;打开端口,创建一个scr文件在当前的工作目录,令这个文件赋给out
fprintf(out "setwindow pcb\n")
fprintf(out "generaledit\n")
fprintf(out "dlib\n")
fprintf(out "setwindow form.dlib\n")
fprintf(out "FORM dlib none\n") ;
fprintf(out "FORM dlib pad YES\n") ;
fprintf(out "FORM dlib browse_export\n") ;
;fprintf(out "fillin VIA\n");放在根目录的VIA文件夹下
fprintf(out "fillin ./\n");放在根目录文件夹下
fprintf(out "FORM dlib execute\n") ;
fprintf(out "FORM dlib cancel\n") ;
fprintf(out "setwindow pcb\n") ;
fprintf(out "generaledit\n") ;配置完成
close(out);关闭端口
axlShell("replay ./export_padstack.scr")
);endprog
);endprocedure
procedure(_del_pcbfile()
prog(()
shell("
del /f /s /q*.dra
del /f /s /q*.pad
del /f /s /q*.log
del /f /s /q*.scr
rd /s /q Indesign
rd /s /q signoise.run
")
);endprog
);endprocedure 我写的代码调用后总提示找不到界面,就会报错E- Can't find window; form.dlib。请楼主帮忙看看是什么原因啦