Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
Scott
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Scott Sun
Scott
Commits
5352543e
Commit
5352543e
authored
May 14, 2020
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
s
parent
d340fef7
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
534 additions
and
180 deletions
+534
-180
ATS_AIM_customer_data_analysis.js
ats/analysis/ATS_AIM_customer_data_analysis.js
+303
-76
backup.js
ats/analysis/backup.js
+231
-104
No files found.
ats/analysis/ATS_AIM_customer_data_analysis.js
View file @
5352543e
...
...
@@ -82,8 +82,6 @@ try {
console
.
log
(
"=============================================>anaysis_start"
);
var
par
=
PAR
;
if
(
par
.
erf
==
""
){
delete
PAR
.
erf
}
// if(par.erf == ""){par.erf = "GBM_0.50z"}
if
(
_
.
isEmpty
(
Job
))
throw
"没有传入料号名!"
;
var
job
=
Job
.
toLowerCase
();
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"job "
+
job
+
" is not exist"
}
...
...
@@ -132,7 +130,113 @@ try {
}
}
})
GEN
.
clearLayers
()
// * new 钻孔叠构
var
cam_drill_structure
=
[]
var
stack_drills
=
_
.
values
(
matrix
).
filter
(
function
(
item
){
return
item
.
layer_type
==
"drill"
&&
item
.
context
==
"board"
})
var
layerCount
=
GEN
.
getLayerCount
({
job
:
job
})
stack_drills
.
forEach
(
function
(
drill
){
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
var
drill_info
=
{}
var
drl_start_num
=
drill
.
drl_start_num
-
0
var
drl_end_num
=
drill
.
drl_end_num
-
0
drill_info
.
drl_start_num
=
drl_start_num
drill_info
.
drl_end_num
=
drl_end_num
var
drl_side
=
"None"
if
(
layerCount
/
2
>=
drl_start_num
){
drl_side
=
"Top"
}
else
{
drl_side
=
"Bot"
}
drill_info
.
drl_side
=
drl_side
var
drl_filler
=
"None"
if
(
drill
.
type
==
"laser_drill"
){
drill_info
.
drl_type
=
"Laser"
drill_info
.
drl_name
=
"Laser"
+
drl_start_num
+
"-"
+
drl_end_num
drill_info
.
drl_tech
=
"LDD"
// 计算此层的理论 top bot
if
(
drl_side
==
"Top"
){
if
((
drl_start_num
-
1
)
==
0
){
drl_filler
=
"None"
}
else
{
var
top_l
=
"d"
+
(
drl_start_num
-
1
)
+
"-"
+
(
drl_end_num
-
1
)
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
top_l
})){
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
top_l
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
drill
.
name
,
use
:
'filter'
,
mode
:
'touch'
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selClearFeature
()
drl_filler
=
"Via Filling"
}
}
}
var
bot_l
=
"d"
+
(
drl_start_num
+
1
)
+
"-"
+
(
drl_end_num
+
1
)
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
bot_l
})){
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
drill
.
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
bot_l
,
use
:
'filter'
,
mode
:
'touch'
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selClearFeature
()
drill_info
.
drl_overlap
=
"Yes"
}
else
{
drill_info
.
drl_overlap
=
"No"
}
}
else
{
drill_info
.
drl_overlap
=
"No"
}
}
else
if
(
drl_side
==
"Bot"
){
if
((
drl_end_num
-
layerCount
)
==
0
){
drl_filler
=
"None"
}
else
{
var
top_l
=
"d"
+
(
drl_start_num
+
1
)
+
"-"
+
(
drl_end_num
+
1
)
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
top_l
})){
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
top_l
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
drill
.
name
,
use
:
'filter'
,
mode
:
'touch'
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selClearFeature
()
drl_filler
=
"Via Filling"
}
}
}
var
bot_l
=
"d"
+
(
drl_start_num
-
1
)
+
"-"
+
(
drl_end_num
-
1
)
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
bot_l
})){
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
drill
.
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
bot_l
,
use
:
'filter'
,
mode
:
'touch'
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selClearFeature
()
drill_info
.
drl_overlap
=
"Yes"
}
else
{
drill_info
.
drl_overlap
=
"No"
}
}
else
{
drill_info
.
drl_overlap
=
"No"
}
}
}
else
{
GEN
.
workLayer
({
name
:
drill
.
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selectByFilter
({
attribute
:
'.drill'
,
option
:
'plated'
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selClearFeature
()
drill_info
.
drl_type
=
"PTH"
if
(
drl_end_num
-
drl_start_num
==
1
){
drl_filler
=
"Resin Plugin"
}
drill_info
.
drl_name
=
"PTH"
+
drl_start_num
+
"-"
+
drl_end_num
}
else
{
drill_info
.
drl_type
=
"NPTH"
drill_info
.
drl_name
=
"NPTH"
+
drl_start_num
+
"-"
+
drl_end_num
}
}
drill_info
.
drl_filler
=
drl_filler
drill_info
.
drl_zones
=
"{A}"
cam_drill_structure
.
push
(
drill_info
)
// save_stack_info({info:drill_info})
})
save_job_info
({
jobid
:
JobId
,
jobinfohash
:
{
cam_drill_structure
:
JSON
.
stringify
(
cam_drill_structure
)}
})
GEN
.
closeStep
()
console
.
log
(
"===================>steplist:"
+
_
.
toString
(
step_list
))
if
(
step_list
.
indexOf
(
pcs_step
)
<
0
){
throw
"can not find pcsstep"
}
...
...
@@ -158,6 +262,70 @@ try {
}
}
// * profile 和 拼版
var
pandle_step
=
step_list
.
map
(
function
(
v
){
var
type
=
"unknow"
;
if
(
/^cad|^pcs/ig
.
test
(
v
)){
type
=
"pcs"
}
else
if
(
/^arr|^stp/ig
.
test
(
v
))
{
type
=
"array"
}
var
panel_info
=
{
job_id
:
JobId
,
step_name
:
v
,
step_type
:
type
}
GEN
.
openStep
({
job
:
job
,
name
:
v
})
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
var
profileLimits
=
GEN
.
getProfileLimits
({
job
:
job
,
step
:
v
,
units
:
"mm"
})
if
(
profileLimits
){
panel_info
.
size_x
=
Number
(
profileLimits
.
xsize
).
toFixed
(
3
)
panel_info
.
size_y
=
Number
(
profileLimits
.
ysize
).
toFixed
(
3
)
}
panel_info
.
datum_x
=
0
panel_info
.
datum_y
=
0
panel_info
.
margin
=
{
"margin_top"
:
0
,
"margin_left"
:
0
,
"margin_right"
:
0
,
"margin_bottom"
:
0
,
"allow_margin_top"
:
0
,
"allow_margin_left"
:
0
,
"allow_margin_right"
:
0
,
"allow_margin_bottom"
:
0
}
var
profile
=
GEN
.
getProfile
({
job
:
job
,
step
:
v
,
units
:
"mm"
}).
split
(
"
\n
"
)
if
(
profile
.
length
>=
1
){
var
tmp
=
profile
.
slice
(
1
)
tmp
=
tmp
.
map
(
function
(
v
){
if
(
v
[
0
]
===
"#"
){
v
=
v
.
slice
(
1
)}
return
v
})
panel_info
.
profile
=
tmp
.
join
(
"
\n
"
)
}
else
{
profile
=
profile
.
map
(
function
(
v
){
if
(
v
[
0
]
===
"#"
){
v
=
v
.
slice
(
1
)}
return
v
})
panel_info
.
profile
=
profile
.
join
(
"
\n
"
)
}
for
(
var
key
in
profileLimits
){
profileLimits
[
key
]
=
Number
(
profileLimits
[
key
])
}
panel_info
.
profile_limits
=
profileLimits
panel_info
.
attr_data
=
{}
panel_info
.
extra_data
=
{}
var
repeat
=
GEN
.
getSR1
({
job
:
job
,
step
:
v
,
units
:
"mm"
})
var
step_repeat
=
{}
repeat
.
forEach
(
function
(
item
,
i
){
step_repeat
[
String
(
i
)]
=
{
x
:
item
.
xa
,
y
:
item
.
ya
,
dx
:
item
.
dx
,
dy
:
item
.
dy
,
nx
:
item
.
nx
,
ny
:
item
.
ny
,
// gapX:item.xsize,gapY:item.ysize,
step
:
item
.
step
,
angle
:
item
.
angle
,
mirror
:
item
.
mirror
==
"no"
?
0
:
1
,
step_name
:
item
.
step
,
step_type
:
/cad|pcs|card/ig
.
test
(
item
.
step
)?
"pcs"
:
"array"
,
}
})
panel_info
.
step_repeat
=
step_repeat
save_panel_info
({
info
:
panel_info
,
table
:
"pdm_job_panelizer_step"
})
GEN
.
closeStep
()
return
{
name
:
v
,
type
:
type
}})
// glod_finger
var
gold_fingers
=
Object
.
keys
(
tmp_matrix
).
filter
(
function
(
v
){
return
/^top_enig$|^bot_enig$/ig
.
test
(
v
)})
if
(
gold_fingers
.
length
){
...
...
@@ -171,11 +339,12 @@ try {
var
config
=
{
jobInfo
:
{
layer_count
:
[
"signal"
,
"power_ground"
],
// Board属性的signal或者power_ground层
vc_card_size_w
:
{
api
:
"vc_card_size"
,
props
:
"xsize"
},
// card短边尺寸 // ? 保留小数
vc_card_size_l
:
{
api
:
"vc_card_size"
,
props
:
"ysize"
},
// card长边尺寸 // ? 保留小数
vc_array_size_w
:
{
api
:
"vc_array_size"
,
props
:
"xsize"
},
// ! array短边尺寸 需要arr_step // ? 保留小数
vc_array_size_l
:
{
api
:
"vc_array_size"
,
props
:
"ysize"
},
// ! array长边尺寸 需要arr_step // ? 保留小数
pcs_size_x
:
{
api
:
"vc_card_size"
,
props
:
"xsize"
},
// card短边尺寸 // ? 保留小数
pcs_size_y
:
{
api
:
"vc_card_size"
,
props
:
"ysize"
},
// card长边尺寸 // ? 保留小数
array_size_x
:
{
api
:
"vc_array_size"
,
props
:
"xsize"
},
// ! array短边尺寸 需要arr_step // ? 保留小数
array_size_y
:
{
api
:
"vc_array_size"
,
props
:
"ysize"
},
// ! array长边尺寸 需要arr_step // ? 保留小数
vc_pcs_count_on_panel
:
true
,
// array中pcs的数量 ! 需要arr_step
pcs_count_on_array
:
true
,
stack_vias_number
:
true
,
// via孔连续叠加的层数
stack_vias_more
:
{
only_value
:
true
},
// yes|no : 14层板以上时,Stack Vias >=12时,存yes // ! 需要分析完via连续叠加层数
depth_drilling
:
{
api
:
"layer_exist"
,
props
:
"depth_drill"
},
// yes|no :存在 depth_drill 层时 ,存yes
...
...
@@ -183,7 +352,7 @@ try {
laser_via_on_buried_hole
:
true
,
// via孔在埋孔上时,存yes
milling_bit_size
:
true
,
// todo 检查array中pcs的最小间距值
milling_length
:
true
,
// todo 检查array中铣切长度
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
"
01005_pad"
},
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
"
.pth_pad"
},
// 本地使用 .pth_pad
ATS_technology_25dc
:
{
api
:
"layer_exist"
,
props
:[
"bend"
,
"top_coverlay"
]},
// yes|no:存在cavity层别时存yes
ATS_technology_25dr
:
{
api
:
"layer_exist"
,
props
:
"nclegend-1-2"
},
// yes|no:存在cavity层别时存yes
// vc_src_EDGE_PLATING: true, // yes|no:检查线路外形是否存在物件,存在则存yes // !料号需要有rout层
...
...
@@ -255,7 +424,7 @@ try {
GEN
.
COM
(
'sredit_reduce_nesting,mode=one_highest'
)
drill_info
[
step
]
=
drill_info
[
step
]
||
{};
drillLayers
.
forEach
(
function
(
layer
){
var
layer_tool_manager
=
GEN
.
getTool
({
job
:
job
,
step
:
step
,
layer
:
layer
.
name
})
var
layer_tool_manager
=
GEN
.
getTool
({
job
:
job
,
step
:
step
,
layer
:
layer
.
name
,
units
:
"mm"
})
drill_info
[
step
][
layer
.
name
]
=
layer_tool_manager
})
GEN
.
closeStep
()
...
...
@@ -269,27 +438,36 @@ try {
var
tool
=
pcs_tool_manager
[
layer
][
key
];
var
array_count
;
if
(
array_tool_manager
&&
array_tool_manager
[
layer
]
&&
array_tool_manager
[
layer
][
key
]){
array_count
=
array_tool_manager
[
layer
][
key
].
count
}
var
layer_name
=
layer
var
drill_type
=
tool
.
type
var
finish_size
=
tool
.
finish_size
-
0
if
(
matrix
[
layer
].
type
==
"laser_drill"
){
drill_type
=
"laser"
layer_name
=
layer_name
.
replace
(
"d"
,
"l"
)
}
if
(
matrix
[
layer
].
type
==
"bury_drill"
){
drill_type
=
"via"
}
var
data
=
{
job_id
:
JobId
,
layer_name
:
layer
,
layer_name
:
layer
_name
,
tool_num
:
key
,
tool_flag
:
key
,
tool_type
:
tool
.
shape
,
drill_type
:
tool
.
type
,
drill_size
:
tool
.
drill_size
,
drill_slot_length
:
tool
.
slot_len
,
finish_size
:
tool
.
finish_size
,
drill_type
:
drill_
type
,
//
drill_size : tool.drill_size,
//
drill_slot_length: tool.slot_len,
finish_size
:
finish_size
.
toFixed
(
3
)
,
finish_slot_length
:
tool
.
slot_len
,
size_tol_lower
:
tool
.
min_tol
,
size_tol_upper
:
tool
.
max_tol
,
//
size_tol_lower: tool.min_tol,
//
size_tol_upper: tool.max_tol,
pcs_count
:
tool
.
count
,
array_count
:
array_count
,
// todo
attr_data
:
{}
// {"allowance": 2, "org_layer_name": "hhhh"}
array_count
:
array_count
,
attr_data
:
{
"org_layer_name"
:
layer
}
// {"allowance": 2, "org_layer_name": "hhhh"}
}
if
(
!
array_count
){
delete
data
.
array_count
}
var
id
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job_cam_drill'
,
table
:
'pdm_job_cam_drill'
,
field
:
"id"
,
where
:{
job_id
:
JobId
,
layer_name
:
layer
,
tool_num
:
key
}
})
...
...
@@ -316,29 +494,27 @@ try {
})
})
console
.
log
(
"=============================> 6 set smd bga"
)
var
allStep
=
GEN
.
getStepList
({
job
:
job
})
allStep
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
COM
(
"chklist_single,show=yes,action=valor_cleanup_set_smd"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_work_on=SMD
\
;BGA)(pp_delete=No)(pp_types=Square
\
;Rect
\
;Oval)(pp_other_smd=)(pp_sm=No)(pp_drill=)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_bga_types=Round)(pp_other_bga=)(pp_sm_bga=No)(pp_bga_max_pitch=70)(pp_bga_actions=Set attribute)(pp_bga_suffix=_bga)(pp_identify_gf=)),mode=regular"
)
GEN
.
COM
(
"get_user_name"
)
GEN
.
COM
(
"get_job_path,job="
+
job
)
GEN
.
COM
(
"disp_on"
)
GEN
.
COM
(
"origin_on"
)
GEN
.
COM
(
"chklist_cnf_act,chklist=valor_cleanup_set_smd,nact=1,cnf=no"
)
GEN
.
COM
(
"chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile"
)
GEN
.
COM
(
"skip_next_pre_hook"
)
GEN
.
COM
(
"chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile"
)
GEN
.
COM
(
"get_user_name"
)
GEN
.
COM
(
"skip_current_command"
)
GEN
.
COM
(
"disp_on"
)
GEN
.
COM
(
"origin_on"
)
GEN
.
COM
(
"show_tab,tab=Checklists,show=no"
)
GEN
.
closeStep
()
})
// console.log("=============================> 6 set smd bga")
// var allStep = GEN.getStepList({job:job})
// allStep.forEach(function(step){
// GEN.openStep({job:job,name:step})
// GEN.COM("chklist_single,show=yes,action=valor_cleanup_set_smd")
// GEN.COM("chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_work_on=SMD\;BGA)(pp_delete=No)(pp_types=Square\;Rect\;Oval)(pp_other_smd=)(pp_sm=No)(pp_drill=)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_bga_types=Round)(pp_other_bga=)(pp_sm_bga=No)(pp_bga_max_pitch=70)(pp_bga_actions=Set attribute)(pp_bga_suffix=_bga)(pp_identify_gf=)),mode=regular")
// GEN.COM("get_user_name")
// GEN.COM("get_job_path,job="+job)
// GEN.COM("disp_on")
// GEN.COM("origin_on")
// GEN.COM("chklist_cnf_act,chklist=valor_cleanup_set_smd,nact=1,cnf=no")
// GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile")
// GEN.COM("skip_next_pre_hook")
// GEN.COM("chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile")
// GEN.COM("get_user_name")
// GEN.COM("skip_current_command")
// GEN.COM("disp_on")
// GEN.COM("origin_on")
// GEN.COM("show_tab,tab=Checklists,show=no")
// GEN.closeStep()
// })
// GEN.createChklist()
...
...
@@ -437,7 +613,7 @@ try {
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
// 曝光
// 曝光
analysis_obj
.
matrixInfo
.
mOuters
.
forEach
(
function
(
item
){
if
(
ALL
.
gold_fingers
.
length
>
0
){
var
tmp_gold_info
=
{}
...
...
@@ -482,6 +658,36 @@ try {
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
console
.
log
(
"==================================> Drill analysis"
)
// 钻孔
var
drillToSignals
=
drillLayers
.
map
(
function
(
v
){
// 获取到钻孔层对应的顶层和底层
var
simbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
step
:
step
,
layer
:
v
})
var
symbol
=
_
.
values
(
simbols
).
sort
(
function
(
a
,
b
){
return
Number
(
a
.
size
)
-
Number
(
b
.
size
)})
.
reduce
(
function
(
a
,
b
){
if
(
b
.
pad
!=
"0"
){
a
.
push
(
b
.
symbol
)
}
return
a
},[])[
0
]
return
{
layer
:
v
,
symbol
:
symbol
,
start
:
tmp_matrix
[
v
][
"drl_start"
],
end
:
tmp_matrix
[
v
][
"drl_end"
]}
})
console
.
log
(
"==================================> 12 Drill analysis"
)
var
drillRes
=
analysisDrill
(
drillToSignals
,
step
)
// 钻孔分析结果
console
.
log
(
"===============drillRes:"
+
_
.
toString
(
drillRes
));
drillRes
.
forEach
(
function
(
item
){
save_layerinfo
({
jobid
:
JobId
,
layer
:
item
.
layer
,
layerinfohash
:
{
drl_pad_top
:
item
.
drl_pad_top
,
drl_pad_bot
:
item
.
drl_pad_bot
,
}
})
})
// 创建chklist并运行 如果chklist存在先删除
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
oChecklistName
}))
{
GEN
.
COM
(
"chklist_delete"
,
{
chklist
:
oChecklistName
})
...
...
@@ -513,34 +719,6 @@ try {
console
.
log
(
"==================================> 11 signals analysis"
)
// signal层分析结果
var
res
=
analysisChkAttr
({
layers
:
signalLayers
,
info
:
info
,
step
:
step
,
job
:
job
,
oChecklistName
:
oChecklistName
})
console
.
log
(
"==================================> Drill analysis"
)
// 钻孔
var
drillToSignals
=
drillLayers
.
map
(
function
(
v
){
// 获取到钻孔层对应的顶层和底层
var
simbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
step
:
step
,
layer
:
v
})
var
symbol
=
_
.
values
(
simbols
).
sort
(
function
(
a
,
b
){
return
Number
(
a
.
size
)
-
Number
(
b
.
size
)})
.
reduce
(
function
(
a
,
b
){
if
(
b
.
pad
!=
"0"
){
a
.
push
(
b
.
symbol
)
}
return
a
},[])[
0
]
return
{
layer
:
v
,
symbol
:
symbol
,
start
:
tmp_matrix
[
v
][
"drl_start"
],
end
:
tmp_matrix
[
v
][
"drl_end"
]}
})
console
.
log
(
"==================================> 12 Drill analysis"
)
var
drillRes
=
analysisDrill
(
drillToSignals
,
step
)
// 钻孔分析结果
console
.
log
(
"===============drillRes:"
+
_
.
toString
(
drillRes
));
drillRes
.
forEach
(
function
(
item
){
save_layerinfo
({
jobid
:
JobId
,
layer
:
item
.
layer
,
layerinfohash
:
{
drl_pad_top
:
item
.
drl_pad_top
,
drl_pad_bot
:
item
.
drl_pad_bot
,
}
})
})
// 数据入库
Object
.
keys
(
res
).
forEach
(
function
(
key
){
var
val
=
res
[
key
]
...
...
@@ -551,7 +729,6 @@ try {
})
})
GEN
.
closeStep
()
})
...
...
@@ -852,6 +1029,45 @@ function save_layerinfo(props){ // 保存层信息
}
})
}
function
save_stack_info
(
props
){
var
info
=
props
.
info
var
table
=
"pdm_job_stack_drills"
info
.
job_id
=
JobId
var
drl_name
=
info
.
drl_name
db
.
query
(
""
,
function
(
q
){
return
q
.
deleteRow
({
table
:
table
,
where
:{
job_id
:
JobId
,
drl_name
:
drl_name
}
})
});
console
.
log
(
_
.
toString
(
info
))
var
Re
=
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
table
,
data
:
info
,
return_field
:
'job_id'
,
})
});
}
function
save_panel_info
(
props
){
var
info
=
props
.
info
var
table
=
props
.
table
info
.
job_id
=
JobId
var
job_id
=
info
.
job_id
||
JobId
var
step_name
=
info
.
step_name
db
.
query
(
""
,
function
(
q
){
return
q
.
deleteRow
({
table
:
table
,
where
:{
job_id
:
job_id
,
step_name
:
step_name
}
})
});
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
table
,
data
:
info
})
});
}
function
analysis
(
props
){
var
job
=
props
.
job
||
Job
;
var
jobId
=
props
.
jobId
||
JobId
;
...
...
@@ -902,6 +1118,16 @@ function analysis(props){
}
return
"_todo"
}
T_m_p
.
prototype
.
analysis_pcs_count_on_array
=
function
(
props
){
//
if
(
!
this
.
array_step
){
return
"_error"
}
var
has_step
=
has_steps
({
job
:
this
.
job
,
pcs_step
:
this
.
pcs_step
,
array_step
:
this
.
array_step
})
// 有无拼版关系
if
(
has_step
){
// arr 中 pcs数量
var
tmp
=
GEN
.
getRepeat
({
job
:
job
,
step
:
array_step
})
return
tmp
.
length
}
return
"_todo"
}
T_m_p
.
prototype
.
analysis_stack_vias_number
=
function
(
props
){
// via孔连续叠加的层数
var
t
=
this
;
var
res
;
...
...
@@ -1211,7 +1437,7 @@ function smdAnalysis(props){
var
min_smd_pitch
=
smdPitch
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
})
// min_smd_pitch
// console.log('================= =======min_smd_pitch:' + min_smd_pitch);
res
[
layer
.
signalL
][
"min_smd_
pitch
"
]
=
min_smd_pitch
res
[
layer
.
signalL
][
"min_smd_
c2c
"
]
=
min_smd_pitch
// 分析开窗宽高
if
(
layer
.
solderL
){
GEN
.
workLayer
({
name
:
layer
.
solderL
,
display_number
:
2
,
clear_before
:
'yes'
})
...
...
@@ -1224,8 +1450,8 @@ function smdAnalysis(props){
GEN
.
workLayer
({
name
:
solderL_tmp
,
display_number
:
2
,
clear_before
:
"yes"
})
var
symbols_solder
=
GEN
.
getLayerSymsHist
({
job
:
job
,
layer
:
solderL_tmp
,
step
:
step
})
var
symbolInfo_solder
=
symbolAnalysis
({
symbols
:
symbols_solder
,
filterReg
:
/^rect/
})
if
(
symbolInfo_solder
[
"min_width"
]){
res
[
layer
.
signalL
].
min_smd_
opening
_width
=
symbolInfo_solder
[
"min_width"
]}
if
(
symbolInfo_solder
[
"min_length"
]){
res
[
layer
.
signalL
].
min_smd_
opening
_length
=
symbolInfo_solder
[
"min_length"
]}
if
(
symbolInfo_solder
[
"min_width"
]){
res
[
layer
.
signalL
].
min_smd_
sm
_width
=
symbolInfo_solder
[
"min_width"
]}
if
(
symbolInfo_solder
[
"min_length"
]){
res
[
layer
.
signalL
].
min_smd_
sm
_length
=
symbolInfo_solder
[
"min_length"
]}
GEN
.
deleteLayer
({
job
:
job
,
layer
:
solderL_tmp
})
}
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
...
...
@@ -1809,4 +2035,5 @@ function has_steps(props){
var
array_step
=
props
.
array_step
var
res
=
GEN
.
getSubSteps
({
job
:
job
,
step
:
array_step
})
return
res
.
indexOf
(
pcs_step
)
>=
0
}
\ No newline at end of file
}
ats/analysis/backup.js
View file @
5352543e
...
...
@@ -74,6 +74,7 @@ var db = $.db;
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
var
ALL
=
{}
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
...
...
@@ -100,7 +101,6 @@ try {
}
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
GEN
.
openStep
({
job
:
job
,
name
:
pcs_step
})
GEN
.
units
({
type
:
"mm"
})
_
.
values
(
matrix
).
forEach
(
function
(
v
){
if
(
v
.
context
==
"board"
&&
v
.
layer_type
==
"drill"
){
if
(
v
.
type
==
"laser_drill"
){
...
...
@@ -158,6 +158,15 @@ try {
}
}
// glod_finger
var
gold_fingers
=
Object
.
keys
(
tmp_matrix
).
filter
(
function
(
v
){
return
/^top_enig$|^bot_enig$/ig
.
test
(
v
)})
if
(
gold_fingers
.
length
){
gold_fingers
=
gold_fingers
.
map
(
function
(
v
){
var
type
=
(
v
==
"top_enig"
)
?
"top"
:
"bot"
return
{
name
:
v
,
type
:
type
}
})
}
ALL
.
gold_fingers
=
gold_fingers
GEN
.
closeStep
()
var
config
=
{
jobInfo
:
{
...
...
@@ -166,23 +175,24 @@ try {
vc_card_size_l
:
{
api
:
"vc_card_size"
,
props
:
"ysize"
},
// card长边尺寸 // ? 保留小数
vc_array_size_w
:
{
api
:
"vc_array_size"
,
props
:
"xsize"
},
// ! array短边尺寸 需要arr_step // ? 保留小数
vc_array_size_l
:
{
api
:
"vc_array_size"
,
props
:
"ysize"
},
// ! array长边尺寸 需要arr_step // ? 保留小数
vc_pcs_count_on_panel
:
true
,
//
todo
array中pcs的数量 ! 需要arr_step
vc_pcs_count_on_panel
:
true
,
// array中pcs的数量 ! 需要arr_step
stack_vias_number
:
true
,
// via孔连续叠加的层数
stack_vias_more
:
{
only_value
:
true
},
// yes|no : 14层板以上时,Stack Vias >=12时,存yes // ! 需要分析完via连续叠加层数
depth_drilling
:
{
api
:
"layer_exist"
,
props
:
"depth_drill"
},
// yes|no :存在depth_drill 层时 ,存yes
depth_routing
:
{
api
:
"layer_exist"
,
props
:
"depth_routing"
},
// tmp yes|no :存在depth_routing 层时,,存yes
laser_via_on_buried_hole
:
true
,
//
todo
via孔在埋孔上时,存yes
depth_drilling
:
{
api
:
"layer_exist"
,
props
:
"depth_drill"
},
// yes|no :存在
depth_drill 层时 ,存yes
depth_routing
:
{
api
:
"layer_exist"
,
props
:
"depth_routing"
},
// tmp yes|no :存在
depth_routing 层时,,存yes
laser_via_on_buried_hole
:
true
,
// via孔在埋孔上时,存yes
milling_bit_size
:
true
,
// todo 检查array中pcs的最小间距值
milling_length
:
true
,
// todo 检查array中铣切长度
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
"01005_pad"
},
// * yes|no:board 层中检查存在01005属性物件时,存yes 这里先拿.smd代替了
ATS_technology_25dc
:
{
api
:
"layer_exist"
,
props
:
"cavity"
},
// yes|no:存在cavity层别时存yes
ATS_technology_25dr
:
{
api
:
"layer_exist"
,
props
:
"cavity"
},
// yes|no:存在cavity层别时存yes
vc_src_EDGE_PLATING
:
true
,
// yes|no:检查线路外形是否存在物件,存在则存yes // !料号需要有rout层
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
"01005_pad"
},
ATS_technology_25dc
:
{
api
:
"layer_exist"
,
props
:[
"bend"
,
"top_coverlay"
]},
// yes|no:存在cavity层别时存yes
ATS_technology_25dr
:
{
api
:
"layer_exist"
,
props
:
"nclegend-1-2"
},
// yes|no:存在cavity层别时存yes
// vc_src_EDGE_PLATING: true, // yes|no:检查线路外形是否存在物件,存在则存yes // !料号需要有rout层
vc_src_EDGE_PLATING
:
{
api
:
"layer_exist2"
,
props
:[
"fab_page2"
]},
// fab_page2
edge_plating_length
:
true
,
// todo 检查线路外形处物件的长度
g
lod_finger
:
true
,
// todo yes|no:暂无逻辑
glod_finger_area
:
true
,
//
todo 暂无逻辑
solder_mask_side
:
true
,
// top|bot|both:检查防焊层所在面次 solder_mask
_side
silk_screen_side
:
true
,
// top|bot|both:检查文字层所在面次
g
old_finger
:
true
,
//
glod_finger_area
:
true
,
//
ATS_sm_side
:
true
,
// top|bot|both:检查防焊层所在面次 ATS_sm
_side
vc_id_print_side
:
true
,
// top|bot|both:检查文字层所在面次 vc_id_print_side
min_drl_size
:
true
,
// todo 0.5mm 最小圆孔
max_pth_drl_size
:
true
,
// todo 3.5mm 最大pth圆孔
max_npth_drl_size
:
true
,
// todo 6.0mm 最大npth圆孔
...
...
@@ -306,39 +316,26 @@ try {
})
})
console
.
log
(
"=============================> 6 set smd bga"
)
var
allStep
=
GEN
.
getStepList
({
job
:
job
})
allStep
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
console
.
log
(
3
)
GEN
.
COM
(
"chklist_single,show=yes,action=valor_cleanup_set_smd"
)
console
.
log
(
4
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_cleanup_set_smd,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_work_on=SMD
\
;BGA)(pp_delete=No)(pp_types=Square
\
;Rect
\
;Oval)(pp_other_smd=)(pp_sm=No)(pp_drill=)(pp_rotate=No)(pp_ignore_covered=Yes)(pp_bga_types=Round)(pp_other_bga=)(pp_sm_bga=No)(pp_bga_max_pitch=70)(pp_bga_actions=Set attribute)(pp_bga_suffix=_bga)(pp_identify_gf=)),mode=regular"
)
console
.
log
(
5
)
GEN
.
COM
(
"get_user_name"
)
console
.
log
(
6
)
GEN
.
COM
(
"get_job_path,job="
+
job
)
console
.
log
(
7
)
GEN
.
COM
(
"disp_on"
)
console
.
log
(
8
)
GEN
.
COM
(
"origin_on"
)
console
.
log
(
9
)
GEN
.
COM
(
"chklist_cnf_act,chklist=valor_cleanup_set_smd,nact=1,cnf=no"
)
console
.
log
(
10
)
GEN
.
COM
(
"chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile"
)
console
.
log
(
11
)
GEN
.
COM
(
"skip_next_pre_hook"
)
console
.
log
(
12
)
GEN
.
COM
(
"chklist_run,chklist=valor_cleanup_set_smd,nact=1,area=profile"
)
console
.
log
(
13
)
GEN
.
COM
(
"get_user_name"
)
console
.
log
(
14
)
GEN
.
COM
(
"skip_current_command"
)
console
.
log
(
15
)
GEN
.
COM
(
"disp_on"
)
console
.
log
(
16
)
GEN
.
COM
(
"origin_on"
)
console
.
log
(
17
)
GEN
.
COM
(
"show_tab,tab=Checklists,show=no"
)
GEN
.
closeStep
()
})
...
...
@@ -390,6 +387,42 @@ try {
var
oChecklistName
=
"mychecklist"
var
signalLayers
=
analysis_obj
.
matrixInfo
.
mSignals
.
map
(
function
(
v
){
return
v
.
name
})
var
drillLayers
=
analysis_obj
.
matrixInfo
.
mDrills
.
map
(
function
(
v
){
return
v
.
name
})
console
.
log
(
"=============================> 13 save card_copper_distribution"
)
var
copper_distribution_steplist
=
[
pcs_step
,
array_step
];
copper_distribution_steplist
.
forEach
(
function
(
step
){
if
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
// 铜面积 分step
var
copper_percent_tmp
=
signalLayers
.
map
(
function
(
v
){
var
tmp
=
{
layer
:
v
}
tmp
.
copper_percent
=
GEN
.
copperArea
({
layer1
:
v
}).
percent
+
"%"
return
tmp
})
console
.
log
(
"================ ==signalLayers============"
+
_
.
toString
(
signalLayers
));
console
.
log
(
_
.
toString
(
copper_percent_tmp
));
copper_percent_tmp
.
forEach
(
function
(
item
){
var
save_info
=
{
jobid
:
JobId
,
layer
:
item
.
layer
,
}
if
(
/^cad/ig
.
test
(
step
)){
save_info
.
layerinfohash
=
{
card_copper_distribution
:
item
.
copper_percent
}
}
else
if
(
/^stp/ig
.
test
(
step
)){
save_info
.
layerinfohash
=
{
array_copper_distribution
:
item
.
copper_percent
}
}
save_layerinfo
(
save_info
)
})
GEN
.
closeStep
()
}
})
var
info
=
{
min_line_width
:
[
"line"
,
"user_nor_line"
],
min_line_spacing
:
[
"l2l"
],
...
...
@@ -403,8 +436,30 @@ try {
})
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
// 曝光
analysis_obj
.
matrixInfo
.
mOuters
.
forEach
(
function
(
item
){
if
(
ALL
.
gold_fingers
.
length
>
0
){
var
tmp_gold_info
=
{}
ALL
.
gold_fingers
.
forEach
(
function
(
item2
){
tmp_gold_info
[
item2
.
type
]
=
item2
.
name
})
var
layer_gold_type
=
/top/ig
.
test
(
item
.
signalL
)
?
"top"
:
"bot"
if
(
tmp_gold_info
[
layer_gold_type
]){
var
tmp_info
=
GEN
.
exposedArea
({
layer1
:
item
.
signalL
,
mask1
:
tmp_gold_info
[
layer_gold_type
]})
// console.log(_.toString({
// ref_layer: tmp_gold_info[item.type],
// exposed_area: tmp_info
// }));
save_layerinfo
({
jobid
:
JobId
,
layer
:
item
.
signalL
,
layerinfohash
:
{
sf_area_gold_area
:
tmp_info
.
percent
}
})
}
}
if
(
item
.
solderL
){
var
tmp_info
=
GEN
.
exposedArea
({
layer1
:
item
.
signalL
,
mask1
:
item
.
solderL
})
// {"area":"0.73817","percent":"8.986"}
...
...
@@ -459,6 +514,7 @@ try {
// signal层分析结果
var
res
=
analysisChkAttr
({
layers
:
signalLayers
,
info
:
info
,
step
:
step
,
job
:
job
,
oChecklistName
:
oChecklistName
})
console
.
log
(
"==================================> Drill analysis"
)
// 钻孔
var
drillToSignals
=
drillLayers
.
map
(
function
(
v
){
// 获取到钻孔层对应的顶层和底层
var
simbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
step
:
step
,
layer
:
v
})
...
...
@@ -467,26 +523,14 @@ try {
if
(
b
.
pad
!=
"0"
){
a
.
push
(
b
.
symbol
)
}
return
a
return
a
},[])[
0
]
return
{
layer
:
v
,
symbol
:
symbol
,
start
:
matrix
[
v
][
"drl_start"
],
end
:
matrix
[
v
][
"drl_end"
]}
return
{
layer
:
v
,
symbol
:
symbol
,
start
:
tmp_matrix
[
v
][
"drl_start"
],
end
:
tmp_
matrix
[
v
][
"drl_end"
]}
})
console
.
log
(
"==================================> 12 Drill analysis"
)
var
drillRes
=
analysisDrill
(
drillToSignals
,
step
)
// 钻孔分析结果
console
.
log
(
"================drillRes:"
+
_
.
toString
(
drillRes
));
throw
"tmp"
// 数据入库
Object
.
keys
(
res
).
forEach
(
function
(
key
){
var
val
=
res
[
key
]
save_layerinfo
({
jobid
:
JobId
,
layer
:
key
,
layerinfohash
:
val
})
})
console
.
log
(
"===============drillRes:"
+
_
.
toString
(
drillRes
));
drillRes
.
forEach
(
function
(
item
){
save_layerinfo
({
jobid
:
JobId
,
...
...
@@ -497,25 +541,18 @@ try {
}
})
})
// 铜面积
console
.
log
(
"=============================> 13 save copper_percent"
)
var
copper_percent_pcs
=
signalLayers
.
map
(
function
(
v
){
var
tmp
=
{
layer
:
v
}
tmp
.
copper_percent
=
GEN
.
copperArea
({
layer1
:
v
}).
percent
+
"%"
return
tmp
})
console
.
log
(
"================ ==signalLayers============"
+
_
.
toString
(
signalLayers
));
console
.
log
(
_
.
toString
(
copper_percent_pcs
));
GEN
.
closeStep
()
copper_percent_pcs
.
forEach
(
function
(
item
){
// 数据入库
Object
.
keys
(
res
).
forEach
(
function
(
key
){
var
val
=
res
[
key
]
save_layerinfo
({
jobid
:
JobId
,
layer
:
item
.
layer
,
layerinfohash
:
{
copper_percent
:
item
.
copper_percent
}
layer
:
key
,
layerinfohash
:
val
})
})
GEN
.
closeStep
()
})
// 保存
...
...
@@ -784,32 +821,34 @@ function save_layerinfo(props){ // 保存层信息
var
layerinfohash
=
props
.
layerinfohash
;
Object
.
keys
(
layerinfohash
).
forEach
(
function
(
key
){
var
val
=
layerinfohash
[
key
];
var
value
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job_layerattr'
,
field
:
"value"
,
where
:{
job_id
:
jobid
,
attr_name
:
key
,
layer
:
layer
}
})
});
console
.
log
(
"+==========dblayervalue:"
+
value
)
if
(
/done/ig
.
test
(
value
)
||
!
value
){
db
.
query
(
""
,
function
(
q
){
console
.
log
(
"+==========insertRowlayervalue:layer:"
+
layer
+
";attrname:"
+
key
+
";value:"
+
val
)
return
q
.
insertRow
({
table
:
'pdm_job_layerattr'
,
// todo
data
:{
job_id
:
jobid
,
attr_name
:
key
,
value
:
val
,
layer
:
layer
},
// todo
return_field
:
'job_id'
,
})
});
}
else
if
(
value
!==
val
)
{
db
.
query
(
""
,
function
(
q
){
console
.
log
(
"+==========updateRowlayer:layer:"
+
layer
+
";attrname:"
+
key
+
";value:"
+
val
)
return
q
.
updateRow
({
table
:
'pdm_job_layerattr'
,
where
:{
job_id
:
jobid
,
attr_name
:
key
},
data
:{
value
:
val
},
if
(
val
&&
val
!=
""
){
var
value
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job_layerattr'
,
field
:
"value"
,
where
:{
job_id
:
jobid
,
attr_name
:
key
,
layer
:
layer
}
})
});
console
.
log
(
"+==========dblayervalue:"
+
value
)
if
(
/done/ig
.
test
(
value
)
||
!
value
){
db
.
query
(
""
,
function
(
q
){
console
.
log
(
"+==========insertRowlayervalue:layer:"
+
layer
+
";attrname:"
+
key
+
";value:"
+
val
)
return
q
.
insertRow
({
table
:
'pdm_job_layerattr'
,
// todo
data
:{
job_id
:
jobid
,
attr_name
:
key
,
value
:
val
,
layer
:
layer
},
// todo
return_field
:
'job_id'
,
})
});
}
else
if
(
value
!==
val
)
{
db
.
query
(
""
,
function
(
q
){
console
.
log
(
"+==========updateRowlayer:layer:"
+
layer
+
";attrname:"
+
key
+
";value:"
+
val
)
return
q
.
updateRow
({
table
:
'pdm_job_layerattr'
,
where
:{
job_id
:
jobid
,
attr_name
:
key
},
data
:{
value
:
val
},
})
});
}
}
})
}
...
...
@@ -854,6 +893,13 @@ function analysis(props){
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
array_step
,
units
:
"mm"
})[
props
].
toFixed
(
2
)
}
T_m_p
.
prototype
.
analysis_vc_pcs_count_on_panel
=
function
(
props
){
//
if
(
!
this
.
array_step
){
return
"_error"
}
var
has_step
=
has_steps
({
job
:
this
.
job
,
pcs_step
:
this
.
pcs_step
,
array_step
:
this
.
array_step
})
// 有无拼版关系
if
(
has_step
){
// arr 中 pcs数量
var
tmp
=
GEN
.
getRepeat
({
job
:
job
,
step
:
array_step
})
return
tmp
.
length
}
return
"_todo"
}
T_m_p
.
prototype
.
analysis_stack_vias_number
=
function
(
props
){
// via孔连续叠加的层数
...
...
@@ -931,11 +977,67 @@ function analysis(props){
t
.
jobInfo
.
laser_info
=
laser_info
;
return
res
}
T_m_p
.
prototype
.
analysis_layer_exist2
=
function
(
props
){
// 存在某某层? string
var
layers
=
Object
.
keys
(
this
.
matrixInfo
.
matrix
)
if
(
/string/ig
.
test
(
typeof
(
props
))){
return
layers
.
indexOf
(
props
)
>=
0
?
"yes"
:
"no"
}
else
{
var
res
=
"no"
props
.
forEach
(
function
(
v
){
if
(
layers
.
indexOf
(
v
)
>=
0
){
res
=
"yes"
}
})
return
res
}
}
T_m_p
.
prototype
.
analysis_layer_exist
=
function
(
props
){
// 存在某某层? string
return
this
.
matrixInfo
.
matrix
.
hasOwnProperty
(
props
)
?
"yes"
:
"no"
var
layers
=
Object
.
keys
(
this
.
matrixInfo
.
matrix
)
if
(
/string/ig
.
test
(
typeof
(
props
))){
return
layers
.
indexOf
(
props
)
>=
0
?
"yes"
:
"no"
}
else
{
var
res
=
"no"
props
.
forEach
(
function
(
v
){
if
(
layers
.
indexOf
(
v
)
>=
0
){
res
=
"yes"
}
})
return
res
}
}
T_m_p
.
prototype
.
analysis_laser_via_on_buried_hole
=
function
(){
// todo
return
"_todo"
T_m_p
.
prototype
.
analysis_laser_via_on_buried_hole
=
function
(){
// via孔在埋孔上
var
t
=
this
// 找出 镭射孔 机械孔
var
laser_layers
=
[]
var
buried_hole
=
[]
for
(
var
key
in
t
.
matrix
)
{
var
val
=
t
.
matrix
[
key
]
if
(
val
.
type
==
"laser_drill"
){
laser_layers
.
push
(
val
)
}
else
if
(
val
.
type
==
"blind_drill"
||
val
.
type
==
"bury_drill"
){
buried_hole
.
push
(
val
)
}
}
var
res
=
"no"
if
(
buried_hole
.
length
>
0
&&
laser_layers
.
length
){
// 有机械孔 和镭射
GEN
.
openStep
({
job
:
t
.
job
,
name
:
t
.
pcs_step
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
try
{
laser_layers
.
forEach
(
function
(
laser
){
GEN
.
workLayer
({
name
:
laser
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
buried_hole
.
forEach
(
function
(
buried
){
GEN
.
selRefFeat
({
layers
:
buried
,
use
:
'filter'
,
mode
:
'touch'
})
if
(
GEN
.
getSelectCount
()
>
0
){
res
=
"yes"
throw
"yes"
}
})
})
}
catch
(
msg
)
{
}
GEN
.
closeStep
()
}
return
res
}
T_m_p
.
prototype
.
analysis_milling_bit_size
=
function
(){
// todo
return
"_todo"
...
...
@@ -984,41 +1086,59 @@ function analysis(props){
T_m_p
.
prototype
.
analysis_edge_plating_length
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_glod_finger
=
function
(){
// todo
return
"_todo"
T_m_p
.
prototype
.
analysis_gold_finger
=
function
(){
//
if
(
!
ALL
.
gold_fingers
){
return
"no"
}
return
ALL
.
gold_fingers
.
length
>
0
?
"yes"
:
"no"
}
T_m_p
.
prototype
.
analysis_glod_finger_area
=
function
(){
// todo
T_m_p
.
prototype
.
analysis_glod_finger_area
=
function
(){
//
if
(
ALL
.
gold_fingers
.
length
>
0
){
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
var
gold_finger_area
=
{}
var
res
=
0
;
ALL
.
gold_fingers
.
forEach
(
function
(
item
){
var
tmp
=
GEN
.
copperArea
({
layer1
:
item
.
name
}).
percent
res
+=
Number
(
tmp
)
// var tmp = GEN.copperArea({layer1:item.name}).percent + "%"
// var key = item.type == "top" ? "sf_area_gold_area_front" : "sf_area_gold_area_back"
// gold_finger_area[key] = tmp
})
GEN
.
closeStep
()
if
(
res
){
return
String
(
res
.
toFixed
(
4
))
+
"%"
}
}
return
"_todo"
}
T_m_p
.
prototype
.
analysis_
solder_mask
_side
=
function
(){
// 检查防焊层所在面次
T_m_p
.
prototype
.
analysis_
ATS_sm
_side
=
function
(){
// 检查防焊层所在面次
var
solder_paste_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_mask"
})
var
solder_paste_info
=
solder_paste_layers
.
map
(
function
(
v
){
return
v
.
side
}).
reduce
(
function
(
a
,
b
){
if
(
a
.
indexOf
(
b
)
<
0
){
a
.
push
(
b
)
}
return
a
},[])
var
res
=
"
none
"
var
res
=
"
NONE
"
if
(
solder_paste_info
.
length
==
0
){
res
=
"
none
"
res
=
"
NONE
"
}
else
if
(
solder_paste_info
.
length
==
1
)
{
res
=
/top/ig
.
test
(
solder_paste_info
[
0
])
?
"
top"
:
"bot
"
res
=
/top/ig
.
test
(
solder_paste_info
[
0
])
?
"
FRONT1"
:
"BACK1
"
}
else
{
res
=
"
both
"
res
=
"
FRONT1_BACK1
"
}
return
res
}
T_m_p
.
prototype
.
analysis_
silk_screen
_side
=
function
(){
// 检查文字层所在面次
T_m_p
.
prototype
.
analysis_
vc_id_print
_side
=
function
(){
// 检查文字层所在面次
var
solder_mask_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_paste"
})
var
solder_mask_info
=
solder_mask_layers
.
map
(
function
(
v
){
return
v
.
side
}).
reduce
(
function
(
a
,
b
){
if
(
a
.
indexOf
(
b
)
<
0
){
a
.
push
(
b
)
}
return
a
},[])
var
res
=
"
none
"
var
res
=
"
NA
"
if
(
solder_mask_info
.
length
==
0
){
res
=
"
none
"
res
=
"
NA
"
}
else
if
(
solder_mask_info
.
length
==
1
)
{
res
=
/top/ig
.
test
(
solder_mask_info
[
0
])
?
"
top"
:
"bot
"
res
=
/top/ig
.
test
(
solder_mask_info
[
0
])
?
"
FRONT"
:
"BACK
"
}
else
{
res
=
"
both
"
res
=
"
FRONT / BACK
"
}
return
res
}
...
...
@@ -1054,7 +1174,7 @@ function smdAnalysis(props){
var
layers
=
props
.
layers
var
res
=
{}
steplist
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
step
:
step
})
GEN
.
openStep
({
job
:
job
,
name
:
step
})
layers
.
forEach
(
function
(
layer
){
// 计算开窗 数量
if
(
layer
.
solderL
){
...
...
@@ -1257,7 +1377,6 @@ function analysisChkAttr(par) {
job
:
job
,
step
:
par
.
step
,
checklist
:
oChecklistName
,
units
:
"mm"
,
nact
:
1
,
attr
:
v
+
"_min_"
+
type
})
...
...
@@ -1279,11 +1398,11 @@ function analysisDrill(par, step){
// {"layer":"d1-2","symbol":"r3.937","start":"top","end":"isl2"}
// {"layer":"d1-2","symbol":"r35.0394","start":"top","end":"bottom"}
var
job
=
Job
.
toLowerCase
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
var
res
=
par
.
map
(
function
(
drill
){
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
drill
.
layer
})
GEN
.
workLayer
({
name
:
drill
.
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
feat_types
:
"pad"
,
include_syms
:
drill
.
symbol
})
GEN
.
selectByFilter
({
feat_types
:
'pad'
,
include_syms
:
drill
.
symbol
})
if
(
GEN
.
getSelectCount
()
>
0
){
console
.
log
(
"==========================>jinru 111111111"
)
// 拷贝到_tmp
...
...
@@ -1337,7 +1456,7 @@ function bgaAnalysis(props){
}
var
res
=
{}
steplist
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
step
:
step
})
GEN
.
openStep
({
job
:
job
,
name
:
step
})
layers
.
forEach
(
function
(
layer
){
// 找出bga 拷贝到辅助层
GEN
.
workLayer
({
name
:
layer
.
signalL
,
display_number
:
2
,
clear_before
:
'yes'
})
...
...
@@ -1682,4 +1801,12 @@ function createOutline(props){
return
false
}
}
function
has_steps
(
props
){
var
job
=
props
.
job
var
pcs_step
=
props
.
pcs_step
var
array_step
=
props
.
array_step
var
res
=
GEN
.
getSubSteps
({
job
:
job
,
step
:
array_step
})
return
res
.
indexOf
(
pcs_step
)
>=
0
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment