贴装加工数据结构设计C系统主要而对*.PCB、*.PCBDOC、*.CSV、*.TXT四种格式的读収解析. 在换作过程中会生成余下三种恪式的文件。
因此对数抓•结构的设计主要是謫足对前四种文件解析后的数据保存的需要。
本文通过对上述文件的格式分析,可归为三种数据类型。
4.1 PCB FILE 6 VERSION2.B 数据结构设计便用Prulel设计的PCB文件,包含了多种国元的昭息,眼抵文件恪式与系统需求分析,只有文件头、元件描述部分、口由图元部分、PCB版而显示伯息部分含有PCB_CNC 系统所盅要的缶息,因此木文迪过直接设计对应的结构体來保存这些们息:1.文件头此部分的数据比较少,只包含一行,关于文件的一些统计数据,本文设计一个结构体Siaiic$Data来保存相关信息。
具体代码如下所示㈢):typcdcf si rue 1(ini conncclionrcmaining;//未完成布纟戈的连接数ini iracks;//连接总数ini drill s://钻孔总数ini neldef;//网络总数int arc;//圆弧总数ini via:〃过孔总数int compcnenls://芫件总数int fills;〃填充区总数int pads;〃焊盘总数int strings;〃字符串总数}StaslicsDala;2.元件部分文件中所有的元件都在包含在此部分屮,由于元件的数量不定,可臥便用一个链表來保存所有元件.对于单个元件可用一个结构W COM Def表示,考虑到需耍解析的CP. CT、CA三种图尤的数口也不定.COMDcf通过保存链表描针来索引这些屈性。
对于元件的综合厲性〈图层、封装型号、X与Y的参考坐标等)放到一个结构体中比较理想。
除了文件中所含的信息,COMDef结构休的设计还要考虑到其它因素,例如料槽号.是否已贴装完,所含的CP、Cl\ CA总数等,因此在结构休中还需要对应的成员属性来表示.最重要的是rti-J—个元件包倉多个焊盘的信息(包括坐标、直径等).但在文件屮却没有指明元件的屮心坐标,当下位机拾収元件时.一般拾収元件的屮心位M13-1,此时必须考虑到元件的中心坐标值,所以木文定文了一个描述矩形区域的结构休SiruciReci,井在COMDef结构体中定义了此类型变量成员.由于此文件恪式中元件包括了图形倍息, 可以用于图片显示,因此COMDef中也缓存了此元件显示时所占矩形区域的大小。
另外一个需要考虑的问题是COMDef写入文件时,只写入非指针类型成员数据,对于指针类型成员,需要写入具指向的链表数据内容,因此会出现数拡对齐的问题,因此成员的排列要按一定的规则排列.考虑到二进制MAN格式文件的读取.COMDcf同时也定义了三个鉴型变虽:.分别对应着兀件所包含的焊盘图元、圆弧罔兀、线段图兀相应的数II-3•自由图元部分本部分需要解析的只有FP、FA两种图元,可分别市链表保存。
对于FP图元.本文定义的结构体名为CompFA, FA图元用结构体CwnpCA來表示。
4.PCB版面显示信息部分这部分包含了protcl显示此文件需要的参数。
木文所需要的是坐标原点倍息,可用GD1+-*-'{«的类PoinlF 來表示。
PCB文件对应的整休数掘•结构示意:图如图4.1所示。
FP 郡J 体CFPsruci一—C■■---GpsmaCompCT 4 *•CorrpCA.m 4」PCBv28数据结构示恿国 Fig. 4.1 The data structure of PCB v284.2 PCBDOC 数据结构设计DOC 格式文件屮焊盘、同弧等忙息是在单独的段中.与PCBV28 式不同,不再被 包含在元件的描述行内.而是通过1D 数来表示其归屈哪个元件卩叫因此对应的数据结 构也不同°本文需要解析的部分包括板描述段(Bzal)第一行、75件描述段(Comp^ncni)、 焊盘描述段Pad.文木推述段Text.1. 板描述段板段包含的信息一般是显示伫息与设计选项的一些参数变虽,其中包括了绘图过程 屮设定的原点坐标值,是B oard 段的第一行“IRE COR D=BoardlOR 1G IN X=xlO RIGIN Y=y ” 中的用x 与y 表示的值lM35,o 本文同样用GDI++中的类PoiniF 来表示。
2. 元件描述段元件段包含了所有元件信息,每个元件占用一行。
Itl 于在元件的表示中启用1D 标 识符來表示,从整数零开始递增,可以统计元件的总体数口,因此木文以整型index 变 址來表示。
行里也包括了元件的中心点、的坐标值,但是这个值是rtl altium 软件中元件库 文件决定的,用户在绘制元件库的时候,理论上是可以随意指定中心点的坐标自曲證世 CompGFA . ft | EP TCBv2Stfr删t拾轉购体 STuc-Bec i线段结呦体 ・| CA | CA.千7-线股崔农 .....t 亘■厂山即|司值,与真实值有出入的(特别是在元件含有奇数个引脚的情况下),丙此不能依赖此坐标來确定元件的拾収点位宜坐标。
考虑到元件有可能没有焊盘,所以术文在设计元件结构体的时候,同时保留了心y和拾収矩形三种变量成员。
由于每个元件的属性描述与PCBv28恪式不同,例如COMDef中由于没有[D值,需要考虑到怎样才能査找到其所包含的基本图元, 因此设计了徒表结构。
基于DOC恪式的元件在其屈性描述行中,并不描述所包含的基本图元值息,而是在每种基木图元中都会有所属的元件的索引值,考虑到读取的效率的问脛,木文在对元件结构体〃倚时使用J‘ CArrayVlype,lyp<i>模板类,除厂和C arrays —佯,对索引元素的访问时间是常值.与数组大小无关.还可以在必要时动态压缩或者扩展数组大小。
另外使用CArray类还有一个重要原因是数组元素在内存中是连续排列的. 方便写入二进制文件(PCB-CNC系统严生的中间文件屮叫对于焊盘所届的元件可匕方便的迪过索引茯得.对于元件中的注释项、设计名称两种属性都在DOC文件中的文木段描述,由于这两种屈性需要写入到*-CFG 文件屮.为了降低读写的复杂度.木文段描述的属性在元件结构体中也设宜了对应的成员变虽。
3•焊盘描述段在DOC格式文件中,所有的焊盘描述都在焊盘段,并且每个焊盘图元备占一行。
焊盘图元的结构体比较简单,其成员变址包括中心点坐标、图层号、大小、形状、孔直径等。
需要注意的是,在*.(2卜9文件中"图元的描述包括贴片类型屈性,在DOC文件屮对兀件描述行并没有提供此屈性.因此可以通过具所包含的焊盘的迪孔直径值来判断元件类型,当值为零时,为贴片元件"非零时则为其它元件。
由于焊盘只是在计算元件中心点坐标、判断贴片类型和图形显示时才会用到,并且元件结构休己包含前两者的成员变虽,丙此•所有焊盘可以独立保存在CArray模恢类屮,在需要时可以迅速的通过ID索引到所属元。
4.文木描述段文本描述段包括了所有元件文木描述信息。
每个文不各占一行,包括两种性质描述, 可以根据行中的注释项(COMMENT)或者设计名称项(DESIGNATOR)屈性来判断. 一般来说,同一个元件对应着连续的两行文木描述。
由于文木所含属性比较简单,定丈的结构体只包含了字符串、坐标、角度等屈性,在文本的读取时直接賦值到对应妁元件PCBDOC文件图兀坐标原点一一埠盘描述段C 1\rray<PadS侔盘结体PidSlru 1成员变园中,不再需耍单独的数组保存。
对应的文木结构如下所示:typedef struct Lao :Slru<?lTexl(ini Index : 〃所属元件的ID float Ri; 〃旋转角度float X; 〃文本的起始点%坐标值 float Y; 〃文木的起始点y 坐标值float Z; 〃文本的起始点z 坐标值,一股为零 UCHAR Label|32|:〃文本字符串}TexlSiruci;DOCPCB 恪式文件对应的整休数据结构如图4.2所示.板描述段__二____________ CAiTa )<lJoinponcnlStfucLCompL )ncnlSLrucl>图4.2 PCBDOC 对应的数拯结构示敢阳Fig. 4.2 The data stiucture of PCBDOC元件尤件描述段"文本描述段…4.3 Pick Place类型文件数据结构设计Proiel生成TXT和CSV恪式文件都叫做PickPlace文件类型。
该文件包含信息较简单,打卄该文件只能填表,不能绘图.不包含图元的怡息。
两种文件恪式大致一样,本文设计的数据结构也比较简单,在P】K■恪式文件解析屮所有的兀件都保存在一个链表中。
元件对应的具体代码如下所示,typedef sti uclUCHAR Designator! FOOTPRINT_L|;〃名称UCHAR Footpnni[F0OTr*RINT_Ll;〃封装float Mid_X:float Mid_Y; float Ref_X; float Ref_Y;float Pad_X; float Pad Y:USHORTSlot;"料措号USHORT Layer;〃图层float Rokition;〃角度UCHAR Commeiitl FOOTPRINT. L|: )ComPi kSLnjGtFromF;4.4 MAN文件格式设计MAN文件是木文口定义的二进制文件,是以上述三种文件洛式对应的结构体为保存对彖进行保存的,里而包括兀件的详细信息,图兀的详细信息,以及当前显示状态的信息(“显示层设置.”,“显示状态设宜”),作为加工的中间文件在加工中断后打开能在原来加工的臺础Z上继续加工。
同此对于MAN文件的格式i殳计必须考虑到怎样合理有效的存储这些操作过程中产生的信息。
本文口定义的MAN文件分为两部分,首先是文件头包含了PCB_CNC系统的相关统计信息,其具体结构如图4.3所示(32位机).43 MANFig. 4.3 The structure of MAN file1.ManuFileHe-ader是一个结构休,共占384个字节,包括两个成员变量:文件标识和SusticsDaia结构体。
文件标识是一个占64个字节宽的字符型数组,用來标识MAN 文件所含的元件及图元信息的数据恪式(上述三种数据格式Z—九因此其值有三种,分别: ** Manufaclurd Pile for PCB \ ' Manufacture:File for Pik”、"Manufacture File for ASCII PcbDoc”。