本发明涉及电路板技术领域,具体的说,是涉及一种分别输出表底层器件坐标的方法。
背景技术:
作为电子元器件电气连接载体的印制电路板(printedcircuitboard,pcb板),被广泛运用于各种领域。随着高速时代的发展和电子产品的不断更新换代,电子产品实现的功能越来越多,产品上使用的元器件个数也随之增多,使得pcb板的设计越来越复杂。
在pcb板制作过程中,摆放完元器件后进行贴片的时候,需要使用到各个元器件的坐标。而在许多场合,进行pcb设计时需要将表底层元器件的坐标分开。然而进行pcb设计时用到的allegro软件输出的器件坐标报表中,表底层器件是在一起的,这就需要设计人员从输出的报表文件中,利用excel或其他软件进行筛选,才能做出表底层器件坐标分开的文件。然而这种操作方式花费了大量的时间和精力去完成,且容易造成筛选结果误差大的缺陷。
上述缺陷,值得解决。
技术实现要素:
为了克服现有的技术的不足,本发明提供一种分别输出表底层器件坐标的方法。
本发明技术方案如下所述:
分别输出表底层器件坐标的方法,其特征在于,在allegro软件中加载quick_placebytb的执行文件,依次判断每一个元器件的管脚是否被镜像,若该元器件的管脚被镜像,则将该元器件的信息列表输出到底层文件中,反之则输出到表层文件中。
根据上述方案的本发明,其特征在于,通过allegro软件提供的扩展skill接口,将quick_placebytb执行文件写入到allegro软件中。
进一步的,修改d:\cadence\spb_16.6\share\local\pcb\skill下的allegro.ilinit文件,在里面添加load("quick_placebytb.il")的代码,使得allegro软件能够执行分别输出表底层器件坐标的指令。
根据上述方案的本发明,其特征在于,在识别元器件管脚是否被镜像并输出表底层文件的过程中,具体包括:
定义输出文件,并将确定的坐标单位信息输出到定义的输出文件中;
根据整板摆放的元器件获取整板的总元器件信息列表,然后判断元器件管脚的ismirrored信息;
输出元器件列表信息;
所有元器件的信息判断完成后,输出到定义的输出文件上面。
进一步的,在输出元器件列表信息的过程中,
(1)先获取元器件的参考信息,创建列表;
(2)获取元器件的x变量、y变量,通过x变量、y变量分别提取元器件的x坐标值和y坐标值,创建列表;
(3)通过获取元器件的旋转变量,提取元器件的角度,创建列表;
(4)获取元器件的封装信息,创建列表。
根据上述方案的本发明,其有益效果在于,本发明使用allegro软件提供的扩展skill接口,通过skill程序分别输出表底层器件坐标,减少通过利用excel表格或者其它软件,经过筛选后,才能做出表底层器件坐标分开的文件所花的时间,提高效率。
附图说明
图1为本发明的实现流程图。
图2为本发明输出元器件列表的流程图。
具体实施方式
下面结合附图以及实施方式对本发明进行进一步的描述:
一种分别输出表底层器件坐标的方法,通过allegro软件提供的扩展skill接口,对整板的元器件数据库进行编辑操作,通过修改allegro软件的部分配置文件,从而对整板放置的元器件数据库进行直接修改。
在本实施例中,通过allegro软件提供的扩展skill接口,将quick_placebytb执行文件写入到allegro软件中。具体的,修改d:\cadence\spb_16.6\share\local\pcb\skill下的allegro.ilinit文件,在里面添加load("quick_placebytb.il")的代码,使得allegro软件能够执行分别输出表底层器件坐标的指令。该代码含义是在allegro软件中加载此执行文件,文件名为“quick_placebytb”。将文件quick_placebytb.il放到allegro设计文件同一目录下,执行命令将加载此目录下的执行文件并运行,该目录为skill文件的存放目录。
打开要输出坐标的pcb,在allegro的command栏中敲入quick_tb,然后点击enter,place_bot.txt和place_top.txt就会在该pcb的文件夹下生成。本实施例通过判断每一个元器件的管脚是否被镜像来判断该元器件为表层和底层区分开来。若该元器件的管脚被镜像,则将该元器件的信息列表输出到底层文件place_bot.txt中,反之则输出到表层文件place_top.txt中。
如图1所示,在识别元器件管脚是否被镜像并输出表底层文件的过程中,具体包括:
1、定义输出文件,并将确定的坐标单位信息(如“uunits=mils”),并输出到定义的输出文件中。
部分代码如下:
defun(quick_placebytb()/*定义主函数quick_placebytb*/
cur_units=axlgetparam("paramdesign")->units/*通过获取指定paramdesign参数的dbid获取单位值*/
outputtitle=strcat("uunits="uppercase(cur_units))/*将单位值由小写转化为大写字母*/
writep1=outfile("./place_bot.txt")
writep2=outfile("./place_top.txt")
fprintf(writep1,outputtitle)/*将单位信息分别在两个文件中打印输出*/
fprintf(writep2,outputtitle)
fprintf(writep1,"\n")
fprintf(writep2,"\n")
close(writep1)
close(writep2)
2、(1)根据整板摆放的元器件获取整板的总元器件信息列表。
部分代码如下:
allcomdb=axldbgetdesign()->components/*获取所有components的dbid*/
foreach(comdballcomdb/*循环创建pin_dbid的链表及输出到文件*/
(2)判断元器件管脚的ismirrored信息。
部分代码如下:
cur_compinslist=comdb->pins/*创建获取pinsbdid的链表cur_compinslist*/
cur_compin=car(cur_compinslist)/*获取链表cur_compinslist第一个参数*/
cur_comtb=cur_compin->ismirrored/*判断此pin是否镜像即是在top层还是bot层,调用子函数outputloc分别打印输出到两个文件*/
if(equal(cur_comtbt);bottom
then
outputloc(comdb"./place_bot.txt")
else
outputloc(comdb"./place_top.txt")
)
3、输出元器件列表信息。
如图2所示,在输出元器件列表信息的过程中,根据pcb文件上面的元器件数据库信息(元器件的reference;x坐标、y坐标;元器件在板上的摆放角度;元器件封装信息等),定义输出函数outputloc(compdbidloctiontxt),然后通过此函数去查找和获取相应的元器件数据库信息,创建列表。具体的:
(1)先获取元器件的参考信息(如r1),创建列表;
(2)获取元器件的x变量、y变量,通过x变量、y变量分别提取元器件的x坐标值和y坐标值,创建列表;
(3)通过获取元器件的旋转变量,提取元器件的角度(如0,90度等),创建列表;
(4)获取元器件的封装信息(如r0402),创建列表。
部分代码如下:
defun(outputloc(compdbidloctiontxt)/*定义子函数outputloc,通过pin_dbid查找相关信息,输出*/
cur_comref=compdbid->name;string"u52"/*获取器件位号,创建链表cur_comref*/
cur_comloc=compdbid->symbol->xy;list'(xy)flonum/*获取器件的x和y坐标,创建链表cur_comloc*/
comrot=compdbid->symbol->rotation;flonum90/*获取器件是否旋转,创建器件旋转角度链表comrot*/
cur_comnam=compdbid->symbol->name;string"so-8"/*获取器件封装名创建链表cur_comnam(封装名字母如sc0402)*/
xloc=sprintf(nil"%f"car(cur_comloc))/*获取链表cur_comloc第一元素即所有x坐标值*/
yloc=sprintf(nil"%f"nth(1cur_comloc))/*获取链表cur_comloc第二元素即所有y坐标值*/
cur_comrot=sprintf(nil"%f"comrot)/*获取链表cur_comrot中所有的角度值*/
4、所有元器件的信息判断完成后,输出到定义的输出文件上面。
部分代码如下:
writep=outfile(loctiontxt"a")/*定义变量writep将相关信息通过此变量打印输出*/
fprintf(writep,cur_comref)
fprintf(writep,"")
fprintf(writep,xloc)
fprintf(writep,"")
fprintf(writep,yloc)
fprintf(writep,"")
fprintf(writep,cur_comrot)
fprintf(writep,"")
fprintf(writep,cur_comnam)
fprintf(writep,"\n")
close(writep)
本发明使用allegro软件提供的扩展skill接口,同样可以输出器件坐标文件,而且可以分别输出表底层器件坐标文件,缩短时间,提高效率。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
上面结合附图对本发明专利进行了示例性的描述,显然本发明专利的实现并不受上述方式的限制,只要采用了本发明专利的方法构思和技术方案进行的各种改进,或未经改进将本发明专利的构思和技术方案直接应用于其它场合的,均在本发明的保护范围内。