Дипломна работа стр. 1 съдържание


PartLength=20,PartWidth=14



страница39/40
Дата29.10.2022
Размер0.94 Mb.
#115412
ТипДиплом
1   ...   32   33   34   35   36   37   38   39   40
DIPLOMNA

PartLength=20,PartWidth=14,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",PartWidth," мм"),nl,
Area =(PartLength/100*PartWidth/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Coef)).
body_count(_,Type):-
Type="flatpack4",!,retract(package_type(Type,Coef)),
PartLength=20,PartWidth=14,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",PartWidth," мм"),nl,
Area =(PartLength/100*PartWidth/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Coef)).
body_count(_,Type):-
Type="flatpack5",!,retract(package_type(Type,Coef)),
PartLength=20,PartWidth=14,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",PartWidth," мм"),nl,
Area =(PartLength/100*PartWidth/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Coef)).

body_count(Pins,Type):-


Type="soic1",!,retract(package_type(Type,Width)),
InLine=Pins/2,PartLength=InLine*1.27,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",Width," мм"),nl,
Area =(PartLength/100*Width/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Width)).
body_count(Pins,Type):-
Type="soic2",!,retract(package_type(Type,Width)),
InLine=Pins/2,PartLength=InLine*1.27,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",Width," мм"),nl,
Area =(PartLength/100*Width/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Width)).
body_count(Pins,Type):-
Type="soic3",!,retract(package_type(Type,Width)),
InLine=Pins/2,PartLength=InLine*1.27,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",Width," мм"),nl,
Area =(PartLength/100*Width/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Width)).
body_count(Pins,Type):-
Type="soic4",!,retract(package_type(Type,Width)),
InLine=Pins/2,PartLength=InLine*1.27,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",Width," мм"),nl,
Area =(PartLength/100*Width/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Width)).

body_count(Pins,Type):-


Type="soj",!,retract(package_type(Type,Width)),
InLine=Pins/2,PartLength=InLine*1.27,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",Width," мм"),nl,
Area =(PartLength/100*Width/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Width)).

body_count(Pins,Type):-


Type="plcc",!,retract(package_type(Type,Width)),
InLine=Pins/4,PartLength=InLine*1.27,PartWidth=InLine*1.27,
write("дължина корпус на компонент :",PartLength," мм"),nl,
write("ширина корпус на компонент :",PartWidth," мм"),nl,
Area =(PartLength/100*Width/100),
chain_insertz(part_db,"area",real,Area,_),
assert(package_type(Type,Width)).
count_area():-
chain_first(part_db,"area",Ref),
ref_term(part_db,real,Ref,Term),
area_count(Ref,Term).

area_count(Ref,NewArea):-


not(chain_next(part_db,Ref,_)),!,nl,
ACount = NewArea,
asserta(bufferA(ACount)).

area_count(Ref,NewArea):-


chain_next(part_db,Ref,NextRef),
ref_term(part_db,real,NextRef,Term),
Coun=Term+NewArea,
area_count(NextRef,Coun).

count_pins():-


chain_first(part_db,"pins",Ref),
ref_term(part_db,integer,Ref,Pins),
pins_count(Ref,Pins).

pins_count(Ref,Pin):-


not(chain_next(part_db,Ref,_)),!,nl,
CountP = Pin,
asserta(bufferP(CountP)).

pins_count(Ref,Pin):-


chain_next(part_db,Ref,NextPRef),
ref_term(part_db,integer,NextPRef,Pins),
CountP=Pins+Pin,
pins_count(NextPRef,CountP).

board_description():-


write("Въведете техническите характеристики на печатната платка"),nl,
add_boardLengthWidthThickness().
add_boardLengthWidthThickness():-
write("дължина (в мм) :"),nl,readint(BoardLength),!,nl,
write("ширина (в мм) :"),nl,readint(BoardWidth),!,nl,
board_limitation(BoardLength,BoardWidth),
area_limitation(BoardLength,BoardWidth).
add_boardLengthWidthThickness():-
write("некоректни данни"),nl,
add_boardLengthWidthThickness().
board_limitation(BoardLength,_):-
not(BoardLength<0),not(BoardLength<500),!,
write(" : дължината на платката е ограничена до 500 мм"),nl,
add_boardLengthWidthThickness().

board_limitation(_,BoardWidth):-


not(BoardWidth<0),not(BoardWidth<450),!,
write(" : ширината на платката е ограничена до 450 мм"),nl,
add_boardLengthWidthThickness().

board_limitation(_,_):-


!.
area_limitation(BoardLength,BoardWidth):-
S = (BoardWidth/100*BoardLength/100),count_area(),
retract(bufferA(Count)),HalfArea=(Count/2),
not(S>HalfArea),!,
write("некоректни данни :площта на платката е с недостатъчна големина"),nl,
write("необходимо е големината да е минимум ",HalfArea," dm^2"),nl,
add_boardLengthWidthThickness().

area_limitation(BoardLength,BoardWidth):-


add_Leyer(BoardLength,BoardWidth).

add_Leyer(BoardLength,BoardWidth):-


add_lineWidth(),
add_boardParameters(BoardLength,BoardWidth).
add_lineWidth():-
write("ширина на проводниците в мм :"),nl,
readreal(LineWidth),!,
%assert(temp(LineWidth)),
line_limitation(LineWidth).

add_lineWidth():-


write("невалидни данни"),nl,
add_lineWidth().

line_limitation(LineWidth):-


retract(tex(Tex)),
Tex = "regid",!,
regidline_limitation(LineWidth).

line_limitation(LineWidth):-


flexline_limitation(LineWidth).
regidline_limitation(LineWidth):-
retract(regid_limitation(StepTrasse,L,G,LineWidth,Fi,M)),!,
assert(regid_limitation(StepTrasse,L,G,LineWidth,Fi,M)),
assert(line(LineWidth)),
assert(tex("regid")),!.

regidline_limitation(_):-


write("за релефните печатни платки е необходимо\nда изберете 0.31 ; 0.25 ; 0.2 ; 0.16 мм "),nl,
asserta(tex("regid")),
add_lineWidth().

flexline_limitation(LineWidth):-


retract(gap(CopperThickness,LineWidth,GapWidth)),!,
assert(gap(CopperThickness,LineWidth,GapWidth)),
assert(line(LineWidth)),
assert(tex("flex")),!.
flexline_limitation(_):-
write("некоректни данни за дебелина на линия"),nl,
write("коректни стойности са 0.115;0.130;0.145;0.160;0.175;0.190;0.205;0.220"),nl,
assert(tex("flex")),
add_lineWidth().
add_boardParameters(BoardLength,BoardWidth):-
stepTrasse_limitation(BoardLength,BoardWidth).

stepTrasse_limitation(BoardLength,BoardWidth):-


retract(tex(Tex)),
Tex = "regid",!,
regidStepTrasse_limitation(BoardLength,BoardWidth).

stepTrasse_limitation(BoardLength,BoardWidth):-


add_thickness(),
flexStepTrasse_limitation(BoardLength,BoardWidth).
add_thickness():-
write("въведете дебелина на платката :"),nl,readreal(BoardThickness),!,
flex_board_thickness(BoardThickness).
add_thickness():-
write("невалидни данни"),nl,assert(tex("flex")),
add_thickness().
test_L(BoardLength,LineWidth,TotalLineWidth):-
TotalLineWidthtest_W(BoardLength,LineWidth,TotalLineWidth).
test_L(BoardLength,LineWidth,TotalLineWidth):-
test_W(BoardLength,LineWidth,TotalLineWidth).
test_W(_,BoardWidth,TotalLineWidth):-
TotalLineWidth>BoardWidth,!, write("слоевете са 2"),nl.
test_W(_,_,_):-
write("слоевете са 1 "),nl.

regidStepTrasse_limitation(BoardLength,BoardWidth):-


retract(line(LineW)),
count_pins(),retract(bufferP(CountPins)),Tes = LineW*2,TotalLineWidth=Tes*CountPins,
test_L(BoardLength,BoardWidth,TotalLineWidth),
retract(regid_limitation(StepTrasse,L,G,LineW,Fi,M)),
write("стъпка на трасиране :",StepTrasse," мм"),nl,
write("дебелина на платката : ",L," мм"),nl,
write("ширина на проводника :",LineW,"мм"),nl,
write("разстояние между проводниците :",StepTrasse," мм"),nl,
write("дебелина на проводящия слой :",G," мм"),nl,
write("минимален диаметър на междуслойните отвори :",Fi," мм"),nl,nl,nl,
assert(regid_limitation(StepTrasse,L,G,LineW,Fi,M)).

flexStepTrasse_limitation(BoardLength,BoardWidth):-


retract(line(LineWidth)),
retract(gap(CopperThickness,LineWidth,GapWidth)),!,
count_area(),count_pins(),retract(bufferA(PartArea)),retract(bufferP(NumberOf)),
S = (BoardLength/100*BoardWidth/100),
write("дебелина на медния слой :",CopperThickness," мкрм"),nl,
write("ширина на линията :",LineWidth," мм"),nl,
write("разстояние между линиите :",GapWidth," мм"),nl,
assert(gap(CopperThickness,LineWidth,GapWidth)).

flex_board_thickness(BoardThickness):-


retract(board_th(BoardThickness,FlexLeyer,RegidLeyer)),!,nl,nl,
add_drill(BoardThickness),nl,
write("максимален брой гъвкави слоеве: ",FlexLeyer),nl,
write("максимален брой твърди слоеве: ",RegidLeyer),nl,
assert(board_th(BoardThickness,FlexLeyer,RegidLeyer)).
flex_board_thickness(BoardThickness):-
nl,nl,
write("грешни данни\n вeрните стойности са 1;1.4;1.6;2;2.4 мм"),nl,
assert(tex("flex")),
add_thickness().
add_drill(BoardThickness):-
write("въведете диаметър на преходните отвори :"),nl,readreal(DrilHole),!,
drill_limitation(BoardThickness,DrilHole).
add_drill(BoardThickness):-
write("невалидни данни"),nl,
add_drill(BoardThickness).
drill_limitation(BoardThickness,DrilHole):-
DrilHole=BoardThickness/5,!.
drill_limitation(BoardThickness,DrilHole):-
write("некоректни данни\n препоръчва се отношение 1:5 (отвор:дебелина на платка) "),nl,
add_drill(BoardThickness).
type_limitation(Type):-
retract(package_type(Type,Width)),!,
chain_insertz(part_db,"type",string,Type,_),
assert(package_type(Type,Width)),
assert(types(Type)).
type_limitation(_):-
write("коректните стойности са dip1,dip2,dip3,dip4,pingrid,to,flatpack,soic,soj,plcc"),nl,
add_type().
pins_limitation(Pins):-
not(Pins=6),not(Pins=8),not(Pins=14),not(Pins=16),not(Pins=18),not(Pins=20),not(Pins=22),
not(Pins=24),not(Pins=28),not(Pins=40),not(Pins=48),not(Pins=52),not(Pins=64),not(Pins=68),
not(Pins=84),not(Pins=120),not(Pins=180),!,
write("некоректни стоиности"),nl,
add_pins().

pins_limitation(Pins):-


chain_insertz(part_db,"pins",integer,Pins,_),
assert(pin(Pins)).

goal
metodika().


clauses
/*ограничения относно медния проводник (дебелина на проводника,ширина на пътечката,разстояние
между пътечката */
gap(0.10,0.115,0.165).
gap(0.20,0.130,0.180).
gap(0.30,0.145,0.195).
gap(0.40,0.160,0.210).
gap(0.50,0.175,0.225).
gap(0.60,0.190,0.240).
gap(0.70,0.205,0.255).
gap(0.80,0.220,0.270).
/*ограничения за фрезовата технология*/
regid_limitation(0.62,1.5,0.3,0.31,0.15,0.04).
regid_limitation(0.5,1.0,0.25,0.25,0.15,0.04).
regid_limitation(0.4,0.8,0.25,0.2,0.12,0.03).
regid_limitation(0.32,0.6,0.15,0.16,0.1,0.03).
/*тип на корпус*/
package_type(dip1,7.62).
package_type(dip2,10.16).
package_type(dip3,15.24).
package_type(dip4,22.96).
package_type(pingrid,28.4).
package_type(to,2.54).
package_type(flatpack1,6.0).
package_type(flatpack2,8.0).
package_type(flatpack3,0.6).
package_type(flatpack4,0.8).
package_type(flatpack5,0.65).
package_type(soic1,3.75).
package_type(soic2,7.5).
package_type(soic3,9.0).
package_type(soic4,15.0).
package_type(soj,7.62).
package_type(plcc,1.27).
/*дебелина на платката*/
board_th(1.0,2,22).
board_th(1.4,4,20).
board_th(1.6,6,18).
board_th(2.0,8,16).
board_th(2.4,10,14).








Сподели с приятели:
1   ...   32   33   34   35   36   37   38   39   40




©obuch.info 2024
отнасят до администрацията

    Начална страница