yixin0929 发表于 2019-3-11 11:47:44

这个要怎么用,输入create_device_batch回车后没有导出来,是怎么回事?还要框选所有器件吗?框选了以后也还是不行呀?急用呢

Joyi 发表于 2022-2-7 18:44:33

不错这东西,谢谢

清枫罄影 发表于 2022-2-14 14:51:56

感谢分享

candy 发表于 2022-3-22 19:46:43

很方便,谢谢

tusli2022 发表于 2023-2-9 10:13:24

学习一下

tusli2022 发表于 2023-2-9 10:17:02

学习一下

allegro小王子 发表于 2023-12-20 17:14:20

这个两个命令都试了,都不能连续的运行下去处理整个文件见内的封装,只能复制,粘贴回车,

xieeyawen 发表于 2025-3-19 11:21:04

这个路径吗

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

这个路径吗

xieeyawen 发表于 2025-3-19 12:20:44

/********************************************************/
/*               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。请楼主帮忙看看是什么原因啦
页: 1 2 3 [4]
查看完整版本: 自动导出封装焊盘、DEVICE、SYMBOL的SKILL