一些朋友根据我的 文章《Protel库文件导入设计》进行Protel库的导入实现,发现还有一些情况未能处理。问题反馈给我一看,果然,对不住各位了。
主要现象:导入TI Advanced CMOS Logic (Commercial).lib库时,出现两种异常现象,一是所有的管脚名好象重叠在一起,看不清楚。二是经常弹出Symbol、Junction等提示。
经查,原来如此。
下面以例说明。
Component
2
2
DUAL OCTAL BUS TRANCEIVERS AND REG 3SO
SOICL56
U?
74AC16652
74ACT16652
Part
0 0
Rectangle 0 -150 60 10 0 128 11599871 0 1
Pin 1 0 0 0 1 1 30 0 0 2 0 'G/BA' '56'
Pin 0 0 0 0 1 1 30 0 -10 2 0 'GAB' '1'
Pin 0 1 0 0 1 1 30 0 -20 2 0 'CBA' '55'
Pin 0 0 0 0 1 1 30 0 -30 2 0 'SBA' '54'
Pin 0 1 0 0 1 1 30 0 -40 2 0 'CAB' '2'
Pin 0 0 0 0 1 1 30 0 -50 2 0 'SAB' '3'
Pin 0 0 5 0 1 1 30 0 -70 2 0 'A1' '5'
Pin 0 0 0 0 1 1 30 60 -30 0 0 'B1' '52'
Pin 0 0 5 0 1 1 30 0 -80 2 0 'A2' '6'
Pin 0 0 0 0 1 1 30 60 -40 0 0 'B2' '51'
Pin 0 0 5 0 1 1 30 0 -90 2 0 'A3' '8'
Pin 0 0 0 0 1 1 30 60 -50 0 0 'B3' '49'
Pin 0 0 5 0 1 1 30 0 -100 2 0 'A4' '9'
Pin 0 0 0 0 1 1 30 60 -60 0 0 'B4' '48'
Pin 0 0 5 0 1 1 30 0 -110 2 0 'A5' '10'
Pin 0 0 0 0 1 1 30 60 -70 0 0 'B5' '47'
Pin 0 0 5 0 1 1 30 0 -120 2 0 'A6' '12'
Pin 0 0 0 0 1 1 30 60 -80 0 0 'B6' '45'
Pin 0 0 5 0 1 1 30 0 -130 2 0 'A7' '13'
Pin 0 0 0 0 1 1 30 60 -90 0 0 'B7' '44'
Pin 0 0 5 0 1 1 30 0 -140 2 0 'A8' '14'
Pin 0 0 0 0 1 1 30 60 -100 0 0 'B8' '43'
Pin 0 0 7 1 1 1 30 0 -180 2 0 'VCC' '50'
Pin 0 0 7 1 1 1 30 0 -190 2 0 'VCC' '35'
Pin 0 0 7 1 1 1 30 0 -200 2 0 'VCC' '22'
Pin 0 0 7 1 1 1 30 0 -210 2 0 'VCC' '7'
Pin 0 0 7 1 1 1 30 60 -160 0 0 'GND' '4'
Pin 0 0 7 1 1 1 30 60 -170 0 0 'GND' '11'
Pin 0 0 7 1 1 1 30 60 -180 0 0 'GND' '18'
Pin 0 0 7 1 1 1 30 60 -190 0 0 'GND' '25'
Pin 0 0 7 1 1 1 30 60 -200 0 0 'GND' '53'
Pin 0 0 7 1 1 1 30 60 -210 0 0 'GND' '46'
Pin 0 0 7 1 1 1 30 60 -220 0 0 'GND' '39'
Pin 0 0 7 1 1 1 30 60 -230 0 0 'GND' '32'
EndNormalPart
EndDeMorganPart
Polygon 0 11599871 11599871 1 0 12 0 5 80 5 80 -55 70 -55 70 -65 80 -65 80 -175 0 -175 0 -65 10 -65 10 -55 0 -55
Label 37 -4 0 8388608 2 0 ''
Pin 0 0 0 0 0 1 30 0 0 2 0 'G/BA' '56'
Symbol 4 -10 0 8 0 0 255 0
Label 5 -3 0 8388608 2 0 'EN1 [BA]'
Pin 0 0 0 0 0 1 30 0 -10 2 0 'GAB' '1'
Label 5 -13 0 8388608 2 0 'EN2 [AB]'
Pin 0 0 0 0 0 1 30 0 -20 2 0 'CBA' '55'
Symbol 3 0 -22 6 0 0 255 0
Label 10 -23 0 8388608 2 0 'C4'
Pin 0 0 0 0 0 1 30 0 -30 2 0 'SBA' '54'
Label 5 -33 0 8388608 2 0 'G5'
Pin 0 0 0 0 0 1 30 0 -40 2 0 'CAB' '2'
Symbol 3 0 -42 6 0 0 255 0
Label 10 -43 0 8388608 2 0 'C6'
Pin 0 0 0 0 0 1 30 0 -50 2 0 'SAB' '3'
Label 5 -53 0 8388608 2 0 'G7'
Label 37 -74 0 8388608 2 0 ''
Symbol 19 15 -71 4 0 0 255 0
Label 25 -74 0 8388608 2 0 '1'
Pin 0 0 5 0 0 1 30 0 -80 2 0 'A1' '5'
Symbol 2 -10 -82 6 0 0 255 0
Symbol 10 2 -83 8 0 0 255 0
Label 10 -83 0 8388608 2 0 '1'
Label 57 -74 0 8388608 2 0 ''
Label 45 -73 0 8388608 2 0 '5'
Pin 0 0 0 0 0 1 30 80 -70 0 0 'B1' '52'
Symbol 2 82 -72 6 0 0 255 0
Label 65 -73 0 8388608 2 0 '4D'
Label 57 -84 0 8388608 2 0 '1'
Label 45 -84 0 8388608 2 0 '5/'
Line 80 -80 93 -80 1 0 128 0
Symbol 2 82 -82 6 0 0 255 0
Line 93 -80 93 -70 1 0 128 0
Junction 93 -70 0 128 0
Label 15 -94 0 8388608 2 0 ''
Symbol 19 50 -91 4 0 0 255 0
Label 60 -94 0 8388608 2 0 '1'
Label 17 -94 0 8388608 2 0 ''
Line -13 -90 0 -90 1 0 128 0
Label 5 -93 0 8388608 2 0 '6D'
Line -13 -90 -13 -80 1 0 128 0
Junction -13 -80 0 128 0
Label 30 -93 0 8388608 2 0 '7'
Label 17 -104 0 8388608 2 0 '1'
Line -13 -100 0 -100 1 0 128 0
Line -13 -100 -13 -90 1 0 128 0
Junction -13 -90 0 128 0
Label 30 -103 0 8388608 2 0 '7/'
Line 80 -100 93 -100 1 0 128 0
Label 65 -103 0 8388608 2 0 '2'
Symbol 10 70 -103 8 0 0 255 0
Line 93 -100 93 -80 1 0 128 0
Junction 93 -80 0 128 0
Pin 0 0 5 0 0 1 30 0 -110 2 0 'A2' '6'
Pin 0 0 0 0 0 1 30 80 -110 0 0 'B2' '51'
Pin 0 0 5 0 0 1 30 0 -120 2 0 'A3' '8'
Pin 0 0 0 0 0 1 30 80 -120 0 0 'B3' '49'
Pin 0 0 5 0 0 1 30 0 -130 2 0 'A4' '9'
Pin 0 0 0 0 0 1 30 80 -130 0 0 'B4' '48'
Pin 0 0 5 0 0 1 30 0 -140 2 0 'A5' '10'
Pin 0 0 0 0 0 1 30 80 -140 0 0 'B5' '47'
Pin 0 0 5 0 0 1 30 0 -150 2 0 'A6' '12'
Pin 0 0 0 0 0 1 30 80 -150 0 0 'B6' '45'
Pin 0 0 5 0 0 1 30 0 -160 2 0 'A7' '13'
Pin 0 0 0 0 0 1 30 80 -160 0 0 'B7' '44'
Pin 0 0 5 0 0 1 30 0 -170 2 0 'A8' '14'
Pin 0 0 0 0 0 1 30 80 -170 0 0 'B8' '43'
Label 37 -184 0 8388608 2 0 ''
Pin 0 0 7 1 0 1 30 0 -200 2 0 'VCC' '50'
Pin 0 0 7 1 0 1 30 0 -210 2 0 'VCC' '35'
Pin 0 0 7 1 0 1 30 0 -220 2 0 'VCC' '22'
Pin 0 0 7 1 0 1 30 0 -230 2 0 'VCC' '7'
Pin 0 0 7 1 0 1 30 80 -180 0 0 'GND' '4'
Pin 0 0 7 1 0 1 30 80 -190 0 0 'GND' '11'
Pin 0 0 7 1 0 1 30 80 -200 0 0 'GND' '18'
Pin 0 0 7 1 0 1 30 80 -210 0 0 'GND' '25'
Pin 0 0 7 1 0 1 30 80 -220 0 0 'GND' '53'
Pin 0 0 7 1 0 1 30 80 -230 0 0 'GND' '46'
Pin 0 0 7 1 0 1 30 80 -240 0 0 'GND' '39'
Pin 0 0 7 1 0 1 30 80 -250 0 0 'GND' '32'
Line 10 -65 10 -55 0 0 128 0
Line 10 -55 0 -55 0 0 128 0
Line 0 -55 0 5 0 0 128 0
Line 0 5 80 5 0 0 128 0
Line 80 5 80 -55 0 0 128 0
Line 80 -55 70 -55 0 0 128 0
Line 70 -55 70 -65 0 0 128 0
Line 0 -65 80 -65 0 0 128 0
Line 80 -175 80 -65 0 0 128 0
Line 80 -105 0 -105 0 0 128 0
Line 0 -175 0 -65 0 0 128 0
Line 80 -85 0 -85 0 0 128 0
Line 80 -75 40 -75 0 0 128 0
Line 40 -105 40 -65 0 0 128 0
Line 35 -70 45 -70 0 0 128 0
Line 35 -80 45 -80 0 0 128 0
Line 40 -95 0 -95 0 0 128 0
Line 35 -90 45 -90 0 0 128 0
Line 35 -100 45 -100 0 0 128 0
Line 80 -115 0 -115 0 0 128 0
Line 80 -125 0 -125 0 0 128 0
Line 80 -135 0 -135 0 0 128 0
Line 80 -145 0 -145 0 0 128 0
Line 80 -155 0 -155 0 0 128 0
Line 80 -165 0 -165 0 0 128 0
Line 80 -175 0 -175 0 0 128 0
EndIEEEPart
Part
0 0
Rectangle 0 -150 60 10 0 128 11599871 0 1
Pin 1 0 0 0 1 1 30 0 0 2 0 'G/BA' '29'
Pin 0 0 0 0 1 1 30 0 -10 2 0 'GAB' '28'
Pin 0 1 0 0 1 1 30 0 -20 2 0 'CBA' '30'
Pin 0 0 0 0 1 1 30 0 -30 2 0 'SBA' '31'
Pin 0 1 0 0 1 1 30 0 -40 2 0 'CAB' '27'
Pin 0 0 0 0 1 1 30 0 -50 2 0 'SAB' '26'
Pin 0 0 5 0 1 1 30 0 -70 2 0 'A1' '15'
Pin 0 0 0 0 1 1 30 60 -30 0 0 'B1' '42'
Pin 0 0 5 0 1 1 30 0 -80 2 0 'A2' '16'
Pin 0 0 0 0 1 1 30 60 -40 0 0 'B2' '41'
Pin 0 0 5 0 1 1 30 0 -90 2 0 'A3' '17'
Pin 0 0 0 0 1 1 30 60 -50 0 0 'B3' '40'
Pin 0 0 5 0 1 1 30 0 -100 2 0 'A4' '19'
Pin 0 0 0 0 1 1 30 60 -60 0 0 'B4' '38'
Pin 0 0 5 0 1 1 30 0 -110 2 0 'A5' '20'
Pin 0 0 0 0 1 1 30 60 -70 0 0 'B5' '37'
Pin 0 0 5 0 1 1 30 0 -120 2 0 'A6' '21'
Pin 0 0 0 0 1 1 30 60 -80 0 0 'B6' '36'
Pin 0 0 5 0 1 1 30 0 -130 2 0 'A7' '23'
Pin 0 0 0 0 1 1 30 60 -90 0 0 'B7' '34'
Pin 0 0 5 0 1 1 30 0 -140 2 0 'A8' '24'
Pin 0 0 0 0 1 1 30 60 -100 0 0 'B8' '33'
Pin 0 0 7 1 1 1 30 0 -180 2 0 'VCC' '50'
Pin 0 0 7 1 1 1 30 0 -190 2 0 'VCC' '35'
Pin 0 0 7 1 1 1 30 0 -200 2 0 'VCC' '22'
Pin 0 0 7 1 1 1 30 0 -210 2 0 'VCC' '7'
Pin 0 0 7 1 1 1 30 60 -160 0 0 'GND' '4'
Pin 0 0 7 1 1 1 30 60 -170 0 0 'GND' '11'
Pin 0 0 7 1 1 1 30 60 -180 0 0 'GND' '18'
Pin 0 0 7 1 1 1 30 60 -190 0 0 'GND' '25'
Pin 0 0 7 1 1 1 30 60 -200 0 0 'GND' '53'
Pin 0 0 7 1 1 1 30 60 -210 0 0 'GND' '46'
Pin 0 0 7 1 1 1 30 60 -220 0 0 'GND' '39'
Pin 0 0 7 1 1 1 30 60 -230 0 0 'GND' '32'
EndNormalPart
EndDeMorganPart
Polygon 0 11599871 11599871 1 0 12 0 5 80 5 80 -55 70 -55 70 -65 80 -65 80 -175 0 -175 0 -65 10 -65 10 -55 0 -55
Label 37 -4 0 8388608 2 0 ''
Pin 0 0 0 0 0 1 30 0 0 2 0 'G/BA' '29'
Symbol 4 -10 0 8 0 0 255 0
Label 5 -3 0 8388608 2 0 'EN1 [BA]'
Pin 0 0 0 0 0 1 30 0 -10 2 0 'GAB' '28'
Label 5 -13 0 8388608 2 0 'EN2 [AB]'
Pin 0 0 0 0 0 1 30 0 -20 2 0 'CBA' '30'
Symbol 3 0 -22 6 0 0 255 0
Label 10 -23 0 8388608 2 0 'C4'
Pin 0 0 0 0 0 1 30 0 -30 2 0 'SBA' '31'
Label 5 -33 0 8388608 2 0 'G5'
Pin 0 0 0 0 0 1 30 0 -40 2 0 'CAB' '27'
Symbol 3 0 -42 6 0 0 255 0
Label 10 -43 0 8388608 2 0 'C6'
Pin 0 0 0 0 0 1 30 0 -50 2 0 'SAB' '26'
Label 5 -53 0 8388608 2 0 'G7'
Label 37 -74 0 8388608 2 0 ''
Symbol 19 15 -71 4 0 0 255 0
Label 25 -74 0 8388608 2 0 '1'
Pin 0 0 5 0 0 1 30 0 -80 2 0 'A1' '15'
Symbol 2 -10 -82 6 0 0 255 0
Symbol 10 2 -83 8 0 0 255 0
Label 10 -83 0 8388608 2 0 '1'
Label 57 -74 0 8388608 2 0 ''
Label 45 -73 0 8388608 2 0 '5'
Pin 0 0 0 0 0 1 30 80 -70 0 0 'B1' '42'
Symbol 2 82 -72 6 0 0 255 0
Label 65 -73 0 8388608 2 0 '4D'
Label 57 -84 0 8388608 2 0 '1'
Label 45 -83 0 8388608 2 0 '5/'
Line 80 -80 93 -80 1 0 128 0
Symbol 2 82 -82 6 0 0 255 0
Line 93 -80 93 -70 1 0 128 0
Junction 93 -70 0 128 0
Label 15 -94 0 8388608 2 0 ''
Symbol 19 50 -91 4 0 0 255 0
Label 60 -94 0 8388608 2 0 '1'
Label 17 -94 0 8388608 2 0 ''
Line -13 -90 0 -90 1 0 128 0
Label 5 -93 0 8388608 2 0 '6D'
Line -13 -90 -13 -80 1 0 128 0
Junction -13 -80 0 128 0
Label 30 -93 0 8388608 2 0 '7'
Label 17 -104 0 8388608 2 0 '1'
Line -13 -100 0 -100 1 0 128 0
Line -13 -100 -13 -90 1 0 128 0
Junction -13 -90 0 128 0
Label 30 -103 0 8388608 2 0 '7/'
Line 80 -100 93 -100 1 0 128 0
Label 65 -103 0 8388608 2 0 '2'
Symbol 10 70 -103 8 0 0 255 0
Line 93 -100 93 -80 1 0 128 0
Junction 93 -80 0 128 0
Pin 0 0 5 0 0 1 30 0 -110 2 0 'A2' '16'
Pin 0 0 0 0 0 1 30 80 -110 0 0 'B2' '41'
Pin 0 0 5 0 0 1 30 0 -120 2 0 'A3' '17'
Pin 0 0 0 0 0 1 30 80 -120 0 0 'B3' '40'
Pin 0 0 5 0 0 1 30 0 -130 2 0 'A4' '19'
Pin 0 0 0 0 0 1 30 80 -130 0 0 'B4' '38'
Pin 0 0 5 0 0 1 30 0 -140 2 0 'A5' '20'
Pin 0 0 0 0 0 1 30 80 -140 0 0 'B5' '37'
Pin 0 0 5 0 0 1 30 0 -150 2 0 'A6' '21'
Pin 0 0 0 0 0 1 30 80 -150 0 0 'B6' '36'
Pin 0 0 5 0 0 1 30 0 -160 2 0 'A7' '23'
Pin 0 0 0 0 0 1 30 80 -160 0 0 'B7' '34'
Pin 0 0 5 0 0 1 30 0 -170 2 0 'A8' '24'
Pin 0 0 0 0 0 1 30 80 -170 0 0 'B8' '33'
Label 37 -184 0 8388608 2 0 ''
Pin 0 0 7 1 0 1 30 0 -200 2 0 'VCC' '50'
Pin 0 0 7 1 0 1 30 0 -210 2 0 'VCC' '35'
Pin 0 0 7 1 0 1 30 0 -220 2 0 'VCC' '22'
Pin 0 0 7 1 0 1 30 0 -230 2 0 'VCC' '7'
Pin 0 0 7 1 0 1 30 80 -180 0 0 'GND' '4'
Pin 0 0 7 1 0 1 30 80 -190 0 0 'GND' '11'
Pin 0 0 7 1 0 1 30 80 -200 0 0 'GND' '18'
Pin 0 0 7 1 0 1 30 80 -210 0 0 'GND' '25'
Pin 0 0 7 1 0 1 30 80 -220 0 0 'GND' '53'
Pin 0 0 7 1 0 1 30 80 -230 0 0 'GND' '46'
Pin 0 0 7 1 0 1 30 80 -240 0 0 'GND' '39'
Pin 0 0 7 1 0 1 30 80 -250 0 0 'GND' '32'
Line 10 -65 10 -55 0 0 128 0
Line 10 -55 0 -55 0 0 128 0
Line 0 -55 0 5 0 0 128 0
Line 0 5 80 5 0 0 128 0
Line 80 5 80 -55 0 0 128 0
Line 80 -55 70 -55 0 0 128 0
Line 70 -55 70 -65 0 0 128 0
Line 0 -65 80 -65 0 0 128 0
Line 80 -175 80 -65 0 0 128 0
Line 80 -105 0 -105 0 0 128 0
Line 0 -175 0 -65 0 0 128 0
Line 80 -85 0 -85 0 0 128 0
Line 80 -75 40 -75 0 0 128 0
Line 40 -105 40 -65 0 0 128 0
Line 35 -70 45 -70 0 0 128 0
Line 35 -80 45 -80 0 0 128 0
Line 40 -95 0 -95 0 0 128 0
Line 35 -90 45 -90 0 0 128 0
Line 35 -100 45 -100 0 0 128 0
Line 80 -115 0 -115 0 0 128 0
Line 80 -125 0 -125 0 0 128 0
Line 80 -135 0 -135 0 0 128 0
Line 80 -145 0 -145 0 0 128 0
Line 80 -155 0 -155 0 0 128 0
Line 80 -165 0 -165 0 0 128 0
Line 80 -175 0 -175 0 0 128 0
EndIEEEPart
EndComponent
|
以上为一个元件说明,其中声明了两类元件,即74AC16652和74ACT16652,其定义中相应有两类实现,即两处Part,各Part中还有多个子Part,如NormalPart、EndDeMorganPart和IEEEPart,因之前未处理多个子Part,因此每个子Part均生成相应的多个子图元,导致管脚重复生成以致于重叠。
而Symbol与Junction之类的信息,均为IEEEPart中的标识,以前未处理,以后也不准备处理,因此,应该忽略。
在此思路下,修改程序即可:
void __fastcall TLibEditForm::ReadComponent(TStrings * list, int& index)
{
int count = list->Count;
bool partFlag = false;
TStrings * nameList = new TStringList;
int unitIndex = 0;
AnsiString description = "";
AnsiString caption = "";
for(int i = index; i < count; ++i)
{
AnsiString str = list->Strings[i].Trim();
CBW_CONDITION_CONTINUE(str.Length() == 0);
if(SameText(str, "Part"))
{
if(unitIndex >= nameList->Count) break;
partFlag = true;
NewUnit();
TText * unitName = cCurrentUnit->UnitName;
unitName->Top = 385;
unitName->Left = 400;
unitName->Caption = caption;
cCurrentUnit->TypeName = nameList->Strings[unitIndex++];
TreeView1->Items->Item[TreeView1->Items->Count - 1]->Text = cCurrentUnit->TypeName;
cCurrentUnit->Description = description;
continue;
}
if(SameText(str, "EndNormalPart")) partFlag = false;
int offset = i - index;
if(offset > 19 && SameText(str, "EndComponent"))
{
index = i;
break;
}
if(offset == 4)
description = str;
else if(offset == 17)
caption = str;
else if(offset == 19)
{
nameList->Add(str);
++index;
}
else if(partFlag)
AddProtelLibObject(str);
}
if(cCurrentUnit->MetaNumber == 1)
DeleteUnit();
delete nameList;
}
|
编译测试,一切OK。
感谢MaC、GBChai和HHFeng发现问题并反馈。