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
ba8d156b
Commit
ba8d156b
authored
Apr 23, 2020
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
s
parent
1dbd449a
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
3124 additions
and
382 deletions
+3124
-382
ATS_AIM_customer_data_analysis.js
ats/analysis/ATS_AIM_customer_data_analysis.js
+1398
-324
ATS_AIM_data_input.js
ats/input/ATS_AIM_data_input.js
+11
-0
ATS_AIM_data_format.js
ats/rename/ATS_AIM_data_format.js
+29
-1
config_ats.js
config_ats.js
+18
-19
ATS_AIM_customer_data_analysis-422.js
test/ATS_AIM_customer_data_analysis-422.js
+1180
-0
ATS_AIM_customer_data_analysis.js
test/ATS_AIM_customer_data_analysis.js
+488
-38
No files found.
ats/analysis/ATS_AIM_customer_data_analysis.js
View file @
ba8d156b
...
@@ -3,18 +3,6 @@
...
@@ -3,18 +3,6 @@
DESCRIPTION: 客户数据分析
DESCRIPTION: 客户数据分析
PARAMETER:
PARAMETER:
[
[
{
name : 'step_filter',
title : 'Step过滤',
type : 'LineEdit',
property : {tool_tip : '过滤step信息'}
},
{
name : 'erf',
title : 'erf名称',
type : 'LineEdit',
property : {tool_tip : ''}
},
{
{
name : 'auto_save',
name : 'auto_save',
title : '自动保存',
title : '自动保存',
...
@@ -44,79 +32,326 @@
...
@@ -44,79 +32,326 @@
<br>
<br>
</body></html>
</body></html>
*/
*/
console
.
log
(
"=============================================>anaysis_start"
);
// 引入模块 包
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
_
=
require
(
'lodash'
);
var
IKM
=
$
.
ikm
;
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
;
var
Job
=
$
.
job
;
var
JobId
=
$
.
job_id
;
var
JobId
=
$
.
job_id
;
var
database
=
require
(
"topsin.database"
);
var
mode
=
"develop"
// 运行模式 develop 开发模式 方便调试
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
;
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
try
{
IKM
.
crud
(
"insertRow"
,{
var
job
=
Job
;
table
:
'pdm_job_org_drill'
,
var
pcs_step
=
"cad"
,
array_step
=
"stp"
;
data
:{
step_name
:
"cad"
// job_id:"1",step_name:"cad",step_type:"pcs", std_layer_name:"d_1-2",odb_layer_name:"d1-2",
// row_num:"1", drill_size:"r2",finish_size:"r2.1",drill_type:"laser_drill",drill_shape:"s",
// slot_length:"12", count:"231",drill_size_lower_tol:"23",drill_size_upper_tol:"asd"
},
return_field
:
'uid'
,
})
var
job
=
"1"
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
console
.
log
(
"===================================> 1matrix"
)
var
analysis_obj
=
analysis
({
job
:
job
,
jobId
:
JobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
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 // ? 保留小数
vc_pcs_count_on_panel
:
true
,
// todo 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
milling_bit_size
:
true
,
// todo 检查array中pcs的最小间距值
milling_length
:
true
,
// todo 检查array中铣切长度
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
".smd"
},
// * 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层
edge_plating_length
:
true
,
// todo 检查线路外形处物件的长度
glod_finger
:
true
,
// todo yes|no:暂无逻辑
glod_finger_area
:
true
,
// todo 暂无逻辑
solder_mask_side
:
true
,
// top|bot|both:检查防焊层所在面次
silk_screen_side
:
true
,
// top|bot|both:检查文字层所在面次
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圆孔
min_slot_drl_size
:
true
,
// todo 0.8mm 最小槽孔
max_slot_drl_size
:
true
,
// todo 1.2mm 最大槽孔
max_slot_drl_length
:
true
,
// todo 2.0mm 最大槽孔
max_spec_slot_drl_size
:
true
,
// todo 2.1mm 最大异形槽孔
max_spec_slot_drl_length
:
true
,
// todo 3.0mm 最大异形槽孔
},
layerInfo
:
{
}
}
console
.
log
(
"===================================> 2analysis_obj"
)
// 获得镭射层
// 分析料号info
var
jobInfo
=
{}
Object
.
keys
(
config
.
jobInfo
).
forEach
(
function
(
key
){
var
props
=
config
.
jobInfo
[
key
];
if
(
props
){
try
{
if
(
props
.
hasOwnProperty
(
"api"
)
&&
props
.
hasOwnProperty
(
"props"
)){
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
props
.
api
](
props
.
props
)
}
else
if
(
props
.
only_value
){
jobInfo
[
key
]
=
analysis_obj
.
jobInfo
[
key
]
}
else
{
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
key
](
props
)
}
}
catch
(
e
)
{
console
.
log
(
e
);
jobInfo
[
key
]
=
"_error"
}
}
})
console
.
log
(
"===================================> 3 jobinfo"
)
var
laser_drills
=
_
.
values
(
matrix
).
filter
(
function
(
v
){
return
v
.
type
==
"laser_drill"
})
// 过滤掉料号信息的 _todo 和 _error
for
(
var
key
in
jobInfo
)
{
if
(
jobInfo
[
key
]
===
"_todo"
||
jobInfo
[
key
]
===
"_error"
){
delete
jobInfo
[
key
]
}
}
console
.
log
(
"===================================> 4 save job info"
)
laser_drills
.
forEach
(
function
(
layer
){
// 上传jobInfo IKM版本
GEN
.
workLayer
({
name
:
layer
.
name
,
display_number
:
1
,
clear_before
:
"yes"
})
// IKM.save_job_info({
GEN
.
selClearFeature
()
// jobid: JobId,
GEN
.
selAllFeat
()
// jobinfohash:jobInfo
var
count
=
GEN
.
getSelectCount
()
// })
if
(
GEN
.
getSelectCount
()
>
0
){
// 上传jobInfo topjs3版本
// GEN.selAddAttr({attribute:"via"})
save_job_info
({
jobid
:
JobId
,
jobinfohash
:
jobInfo
})
console
.
log
(
"===================================> 5 save drill info"
)
// todo 设置钻孔层孔属性,镭射孔via,无铜孔npth,其余孔pth
// todo 上传钻孔信息
// 获取pcs_step 和 array_step的钻孔信息
var
drill_info
=
{};
var
drillLayers
=
analysis_obj
.
matrixInfo
.
mDrills
;
[
pcs_step
,
array_step
].
forEach
(
function
(
step
){
drill_info
[
step
]
=
drill_info
[
step
]
||
{};
drillLayers
.
forEach
(
function
(
layer
){
var
layer_tool_manager
=
GEN
.
getTool
({
job
:
job
,
step
:
step
,
layer
:
layer
.
name
})
drill_info
[
step
][
layer
.
name
]
=
layer_tool_manager
})
})
var
pcs_tool_manager
=
drill_info
[
pcs_step
];
var
array_tool_manager
=
drill_info
[
array_step
];
Object
.
keys
(
pcs_tool_manager
).
forEach
(
function
(
layer
){
Object
.
keys
(
pcs_tool_manager
[
layer
]).
forEach
(
function
(
key
){
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
data
=
{
var
data
=
{
job_id
:
JobId
,
job_id
:
JobId
,
step_name
:
"cad"
,
layer_name
:
layer
,
odb_layer_name
:
layer
.
odb_name
,
tool_num
:
key
,
row_num
:
layer
.
row_num
,
tool_flag
:
key
,
drill_type
:
layer
.
type
,
tool_type
:
tool
.
shape
,
count
:
count
drill_type
:
tool
.
type
,
drill_size
:
tool
.
drill_size
,
drill_slot_length
:
tool
.
slot_len
,
finish_size
:
tool
.
finish_size
,
finish_slot_length
:
tool
.
slot_len
,
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"}
}
}
if
(
!
array_count
){
delete
data
.
array_count
}
}
var
id
=
db
.
query
(
""
,
function
(
q
){
GEN
.
selClearFeature
()
return
q
.
selectValue
({
GEN
.
clearLayers
()
table
:
'pdm_job_cam_drill'
,
field
:
"id"
,
where
:{
job_id
:
JobId
,
layer_name
:
layer
,
tool_num
:
key
}
})
});
if
(
/done/ig
.
test
(
id
)){
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
'pdm_job_cam_drill'
,
data
:
data
,
return_field
:
'id'
,
})
});
}
else
{
db
.
query
(
""
,
function
(
q
){
return
q
.
updateRow
({
table
:
'pdm_job_cam_drill'
,
where
:
{
id
:
id
},
data
:
data
,
update_policy
:{
tags
:
'array_append'
,
attr_data
:
'json_merge'
}
})
});
}
})
})
})
var
laser_drills_info
=
laser_drills
// 获取钻孔信息
console
.
log
(
"===================================> 6 layer info"
)
// 分析layer info
var
stepList
=
[
pcs_step
];
var
oChecklistName
=
"mychecklist"
var
signalLayers
=
analysis_obj
.
matrixInfo
.
mSignal
.
map
(
function
(
v
){
return
v
.
name
})
var
drillLayers
=
analysis_obj
.
matrixInfo
.
mDrill
.
map
(
function
(
v
){
return
v
.
name
})
var
info
=
{
min_line_width
:
[
"line"
],
min_line_spacing
:
[
"l2l"
],
min_line2pad
:
[
"p2line"
],
min_pad2pad
:
[
"p2p"
,
"smd2smd"
,
"smd2pad"
],
min_ar
:
[
"ar"
,
"pth_ar"
]
}
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
// 创建chklist并运行 如果chklist存在先删除
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
oChecklistName
}))
{
GEN
.
COM
(
"chklist_delete"
,
{
chklist
:
oChecklistName
})
}
createChklistAndRun
({
// 创建checklist并运行
layers
:
signalLayers
,
items
:
[{
name
:
"signal_layer_checks"
,
nact
:
1
,
action
:
"valor_analysis_signal"
,
erf
:
"S2_conductor_Check"
,
params
:
{
// ?
pp_layer
:
".affected"
,
pp_spacing
:
20
,
pp_selected
:
"All"
,
pp_r2c
:
10
,
pp_d2c
:
15
,
pp_sliver
:
8
,
pp_min_pad_overlap
:
5
,
pp_check_missing_pads_for_drills
:
"Yes"
,
pp_use_compensated_rout
:
"Skeleton"
,
pp_sm_spacing
:
"Yes"
}
}]
})
// signal层分析结果
var
res
=
analysisChkAttr
({
layers
:
signalLayers
,
info
:
info
,
step
:
step
,
job
:
job
,
oChecklistName
:
oChecklistName
})
// 铜面积
var
copper_percent_pcs
=
signalLayers
.
map
(
function
(
v
){
var
tmp
=
{
layer
:
v
}
tmp
.
copper_percent
=
GEN
.
copperArea
({
layer1
:
v
}).
percent
+
"%"
return
tmp
})
// 钻孔
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
:
matrix
[
v
][
"drl_start"
],
end
:
matrix
[
v
][
"drl_end"
]}
})
var
drillRes
=
analysisDrill
(
drillToSignals
,
step
)
// 钻孔分析结果
// 数据入库
Object
.
keys
(
res
).
forEach
(
function
(
key
){
var
val
=
res
[
key
]
save_layerinfo
({
jobid
:
JobId
,
layer
:
key
,
layerinfohash
:
val
})
})
copper_percent_pcs
.
forEach
(
function
(
item
){
save_layerinfo
({
jobid
:
JobId
,
layer
:
item
.
layer
,
layerinfohash
:
{
copper_percent
:
item
.
copper_percent
}
})
})
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
,
}
})
})
})
// smd
var
smdInfo
=
smdAnalysis
({
job
:
job
,
steplist
:[
pcs_step
],
layers
:
analysis_obj
.
matrixInfo
.
mOuters
,
attr
:
".smd"
})
var
save_info
=
[
smdInfo
,
analysis_obj
.
jobInfo
.
laser_info
];
// 保存 smd 和 bga数据
// 保存
console
.
log
(
"===================================> save layer info"
)
save_info
.
forEach
(
function
(
item
){
Object
.
keys
(
item
).
forEach
(
function
(
key
){
var
val
=
item
[
key
]
save_layerinfo
({
jobid
:
JobId
,
layer
:
key
,
layerinfohash
:
val
})
})
})
GUI
.
msg
(
"Done"
)
QDfm
.
updateRow
({
return
'Done'
;
table
:
"pdm_aimdfm_task"
,
data
:
{
progress
:
33.33
},
where
:
{
id
:
$
.
task_id
}
});
if
(
GEN
.
hasError
())
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"GEN错误!"
,
detail
:
[{
desc
:
_
.
join
(
GEN
.
STATUS
,
"
\n
"
)
}]
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
}
catch
(
error
)
{
catch
(
e
)
{
GUI
.
msg
(
error
);
Status
=
'error'
;
return
'Error'
;
console
.
log
(
"====================================>error"
);
console
.
log
(
_
.
toString
(
e
));
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
function
UPLOAD_LAYER_MATRIX
(
props
){
function
UPLOAD_LAYER_MATRIX
(
props
){
...
@@ -273,271 +508,1110 @@ function ANALYSIS_STACKUP(props){
...
@@ -273,271 +508,1110 @@ function ANALYSIS_STACKUP(props){
})
})
return
matrix
;
return
matrix
;
}
}
function
getMatrixInfo
(
props
){
// 获取matrix各种信息
var
job
=
props
.
job
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
res
=
{
matrix
:
matrix
,
// matrix
matrixVal
:
[],
// matrix 的 value数组
mSignal
:
{},
// board的signal层 {}
mSignals
:
[],
// board的signal层 []
mDrill
:
{},
// board的drill层
mDrills
:
[],
// board的drill层
mSolderMask
:
{},
// 防焊层
mSolderMasks
:
[],
// 防焊层
mOuters
:
[],
// 外层和对于的防旱
mBoardLayer
:
[]
// board层
}
for
(
var
key
in
matrix
)
{
var
value
=
matrix
[
key
]
res
.
matrixVal
.
push
(
value
)
if
(
value
.
context
==
"board"
){
res
.
mBoardLayer
.
push
(
key
)
switch
(
value
.
layer_type
)
{
case
"signal"
:
res
.
mSignal
[
key
]
=
value
res
.
mSignals
.
push
(
value
)
break
;
case
"drill"
:
res
.
mDrill
[
key
]
=
value
res
.
mDrills
.
push
(
value
)
break
;
case
"solder_mask"
:
res
.
mSolderMask
[
key
]
=
value
res
.
mSolderMasks
.
push
(
value
)
break
;
}
}
}
res
.
matrixVal
=
res
.
matrixVal
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
res
.
mSignals
=
res
.
mSignals
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
res
.
mDrills
=
res
.
mDrills
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
// 找出外层 以及外层对应的防焊层 [{signalL:"top", solderL:"smt"}]
res
.
mOuters
=
res
.
mSignals
.
reduce
(
function
(
a
,
b
){
if
(
b
.
tl_type
==
"outer"
){
var
solderLayers
=
res
.
mSolderMasks
.
filter
(
function
(
v
){
return
v
.
side
==
b
.
side
})
a
.
push
({
signalL
:
b
.
name
,
solderL
:
solderLayers
.
length
>
0
?
solderLayers
[
0
][
"name"
]
:
null
})
}
return
a
},[])
return
res
}
function
selCopyLayer
(
props
){
// 拷贝选择的到辅助层
var
layer
=
props
.
layer
var
job
=
props
.
job
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
layer
})
}
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
})
}
function
save_job_info
(
props
){
// todo 保存料号信息
var
jobid
=
props
.
jobid
;
var
jobinfohash
=
props
.
jobinfohash
;
Object
.
keys
(
jobinfohash
).
forEach
(
function
(
key
){
var
val
=
jobinfohash
[
key
];
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
'sys_user'
,
// todo
data
:{
jobid
:
jobid
,
todo
:
key
,
value
:
val
},
// todo
return_field
:
'id'
,
})
});
})
}
function
save_layerinfo
(
props
){
// todo 保存层信息
var
jobid
=
props
.
jobid
;
var
layer
=
props
.
layer
;
var
layerinfohash
=
props
.
layerinfohash
;
Object
.
keys
(
layerinfohash
).
forEach
(
function
(
key
){
var
val
=
layerinfohash
[
key
];
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
'sys_user'
,
// todo
data
:{
jobid
:
jobid
,
layer
:
layer
,
key
:
key
,
value
:
val
},
// todo
return_field
:
'id'
,
})
});
})
function
tmp
(){
return
{
}
"sst"
:
{
function
analysis
(
props
){
"row"
:
"1"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
job
=
props
.
job
||
Job
;
"tl_num"
:
-
1000
,
"tl_name"
:
"sp_fr"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"sst"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
var
jobId
=
props
.
jobId
||
JobId
;
"row_num"
:
-
1000
,
"odb_row_num"
:
"1"
var
pcs_step
=
props
.
pcs_step
||
false
;
},
var
array_step
=
props
.
array_step
||
false
;
"spt"
:
{
var
matrix
=
props
.
matrix
;
"row"
:
"2"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
function
T_m_p
(
props
){
"tl_num"
:
-
999
,
"tl_name"
:
"sp_fr(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
this
.
job
=
props
.
job
;
"row_num"
:
-
999
,
"odb_row_num"
:
"2"
this
.
jobInfo
=
{};
},
this
.
jobId
=
props
.
jobId
;
"smt"
:
{
if
(
props
.
pcs_step
){
this
.
pcs_step
=
props
.
pcs_step
;
}
"row"
:
"3"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
if
(
props
.
matrix
){
this
.
matrix
=
props
.
matrix
;
}
"tl_num"
:
-
998
,
"tl_name"
:
"sm_fr"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
if
(
props
.
array_step
){
this
.
array_step
=
props
.
array_step
;
}
"row_num"
:
-
998
,
"odb_row_num"
:
"3"
this
.
matrixInfo
=
getMatrixInfo
({
job
:
this
.
job
})
},
this
.
init
();
"top"
:
{
}
"row"
:
"4"
,
"type"
:
"outer"
,
"name"
:
"top"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
T_m_p
.
prototype
.
init
=
function
(){
"tl_num"
:
1
,
"tl_name"
:
"top"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"top"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
var
init_checking
=
[
"job"
,
"jobId"
,
"pcs_step"
,
"matrix"
];
"row_num"
:
1
,
"odb_row_num"
:
"4"
var
t
=
this
;
},
init_checking
.
forEach
(
function
(
v
){
if
(
!
t
[
v
]){
t
.
e
(
v
+
" is undefined"
)}
})
"isl2"
:
{
}
"row"
:
"5"
,
"type"
:
"inner"
,
"name"
:
"l2"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
T_m_p
.
prototype
.
e
=
function
(
e
){
// 处理error
"tl_num"
:
2
,
"tl_name"
:
"l2"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
console
.
log
(
e
)
"row_num"
:
2
,
"odb_row_num"
:
"5"
throw
e
},
}
"isl3"
:
{
T_m_p
.
prototype
.
analysis_layer_count
=
function
(
props
){
// 分析board属性的层数量 []string
"row"
:
"6"
,
"type"
:
"inner"
,
"name"
:
"l3"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
matrix
=
this
.
matrixInfo
.
matrixVal
;
"tl_num"
:
3
,
"tl_name"
:
"l3"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
var
res
=
matrix
.
filter
(
function
(
v
){
return
v
.
context
==
"board"
&&
props
.
indexOf
(
v
.
layer_type
)
>=
0
})
"row_num"
:
3
,
"odb_row_num"
:
"6"
return
res
.
length
},
}
"isl4"
:
{
T_m_p
.
prototype
.
analysis_vc_card_size
=
function
(
props
){
// card短边尺寸 string
"row"
:
"7"
,
"type"
:
"inner"
,
"name"
:
"l4"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
pcs_step
})[
props
].
toFixed
(
3
)
"tl_num"
:
4
,
"tl_name"
:
"l4"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
}
"row_num"
:
4
,
"odb_row_num"
:
"7"
T_m_p
.
prototype
.
analysis_vc_array_size
=
function
(
props
){
// array长边尺寸 string
},
if
(
!
this
.
array_step
){
return
"error"
}
"isl5"
:
{
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
array_step
})[
props
].
toFixed
(
3
)
"row"
:
"8"
,
"type"
:
"inner"
,
"name"
:
"l5"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
}
"tl_num"
:
5
,
"tl_name"
:
"l5"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
T_m_p
.
prototype
.
analysis_vc_pcs_count_on_panel
=
function
(
props
){
//
"row_num"
:
5
,
"odb_row_num"
:
"8"
return
"_todo"
},
}
"isl6"
:
{
T_m_p
.
prototype
.
analysis_stack_vias_number
=
function
(
props
){
// via孔连续叠加的层数
"row"
:
"9"
,
"type"
:
"inner"
,
"name"
:
"l6"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
t
=
this
;
"tl_num"
:
6
,
"tl_name"
:
"l6"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
var
res
;
"row_num"
:
6
,
"odb_row_num"
:
"9"
// 找出 镭射孔
},
var
laser_layers
=
[]
"isl7"
:
{
for
(
var
key
in
t
.
matrix
)
{
"row"
:
"10"
,
"type"
:
"inner"
,
"name"
:
"l7"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
val
=
t
.
matrix
[
key
]
"tl_num"
:
7
,
"tl_name"
:
"l7"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
if
(
val
.
type
==
"laser_drill"
){
"row_num"
:
7
,
"odb_row_num"
:
"10"
laser_layers
.
push
(
val
)
},
}
"isl8"
:
{
}
"row"
:
"11"
,
"type"
:
"inner"
,
"name"
:
"l8"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
if
(
laser_layers
.
length
==
0
){
return
"error"
}
"tl_num"
:
8
,
"tl_name"
:
"l8"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
GEN
.
openStep
({
job
:
t
.
job
,
name
:
t
.
pcs_step
})
"row_num"
:
8
,
"odb_row_num"
:
"11"
laser_layers
=
laser_layers
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
},
var
laser_info
=
{}
"isl9"
:
{
for
(
var
i
=
0
;
i
<
laser_layers
.
length
-
1
;
i
++
){
"row"
:
"12"
,
"type"
:
"inner"
,
"name"
:
"l9"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
start_layer
=
laser_layers
[
i
].
name
"tl_num"
:
9
,
"tl_name"
:
"l9"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
var
cover_layer
=
laser_layers
[
i
+
1
].
name
"row_num"
:
9
,
"odb_row_num"
:
"12"
GEN
.
workLayer
({
name
:
start_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
},
GEN
.
selClearFeature
()
"bottom"
:
{
GEN
.
selRefFeat
({
layers
:
cover_layer
,
use
:
'filter'
,
mode
:
'cover'
})
"row"
:
"13"
,
"type"
:
"outer"
,
"name"
:
"bottom"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
count
=
GEN
.
getSelectCount
()
"tl_num"
:
10
,
"tl_name"
:
"bottom"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"bottom"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
if
(
count
>
0
){
"row_num"
:
10
,
"odb_row_num"
:
"13"
if
(
!
laser_info
[
start_layer
]){
},
laser_info
[
start_layer
]
=
{}
"smb"
:
{
}
"row"
:
"14"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
laser_info
[
start_layer
].
drill_connect_layer
=
cover_layer
"tl_num"
:
1013
,
"tl_name"
:
"sm_ba"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
laser_info
[
start_layer
].
drill_connect_point
=
count
"row_num"
:
1013
,
"odb_row_num"
:
"14"
}
},
}
"spb"
:
{
// via孔连续叠加的层数
"row"
:
"15"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
via_vias_info
=
[]
"tl_num"
:
1014
,
"tl_name"
:
"sp_ba"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
function
analysis_via_number
(
layers
){
"row_num"
:
1014
,
"odb_row_num"
:
"15"
if
(
layers
.
length
<
2
){
return
}
},
var
startlayer
=
layers
[
0
].
name
+
"_cover"
"ssb"
:
{
GEN
.
selClearFeature
()
"row"
:
"16"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
workLayer
({
name
:
layers
[
0
].
name
,
display_number
:
2
,
clear_before
:
'yes'
})
"tl_num"
:
1015
,
"tl_name"
:
"sp_ba(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"ssb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
GEN
.
selAllFeat
()
"row_num"
:
1015
,
"odb_row_num"
:
"16"
selCopyLayer
({
job
:
t
.
job
,
layer
:
startlayer
})
},
var
end_index
=
start_cover_next
(
startlayer
,
layers
,
0
)
"d1-2"
:
{
via_vias_info
.
push
(
end_index
+
1
)
"row"
:
"17"
,
"type"
:
"laser_drill"
,
"name"
:
"d1-2"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
analysis_via_number
(
layers
.
slice
(
end_index
))
"drl_end"
:
"isl2"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"isl2"
,
"drl_start_num"
:
"1"
,
"drl_end_num"
:
"2"
,
"tl_name"
:
"drill1-2"
,
"tl_type"
:
"drill"
,
}
"tl_num"
:
10016
,
"odb_name"
:
"d1-2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
function
start_cover_next
(
start
,
layers
,
end_index
){
"row_num"
:
10016
,
"odb_row_num"
:
"17"
,
"drl_from_num"
:
"1"
,
"drl_to_num"
:
"2"
if
(
layers
.
length
<
2
){
},
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
"d2-3"
:
{
return
end_index
"row"
:
"18"
,
"type"
:
"laser_drill"
,
"name"
:
"d2-3"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl2"
,
"drl_end"
:
"isl3"
,
"gdrl_start"
:
"isl2"
,
"gdrl_end"
:
"isl3"
,
"drl_start_num"
:
"2"
,
"drl_end_num"
:
"3"
,
"tl_name"
:
"drill2-3"
,
"tl_type"
:
"drill"
,
}
"tl_num"
:
10017
,
"odb_name"
:
"d2-3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
layers
=
layers
.
slice
(
1
)
"row_num"
:
10017
,
"odb_row_num"
:
"18"
,
"drl_from_num"
:
"2"
,
"drl_to_num"
:
"3"
GEN
.
workLayer
({
name
:
start
,
display_number
:
2
,
clear_before
:
'yes'
})
},
GEN
.
selClearFeature
()
"d3-4"
:
{
GEN
.
selRefFeat
({
layers
:
layers
[
0
].
name
,
use
:
'filter'
,
mode
:
'cover'
})
"row"
:
"19"
,
"type"
:
"laser_drill"
,
"name"
:
"d3-4"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl3"
,
"drl_end"
:
"isl4"
,
"gdrl_start"
:
"isl3"
,
"gdrl_end"
:
"isl4"
,
"drl_start_num"
:
"3"
,
"drl_end_num"
:
"4"
,
"tl_name"
:
"drill3-4"
,
"tl_type"
:
"drill"
,
var
count
=
GEN
.
getSelectCount
()
"tl_num"
:
10018
,
"odb_name"
:
"d3-4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
if
(
count
<
1
)
{
"row_num"
:
10018
,
"odb_row_num"
:
"19"
,
"drl_from_num"
:
"3"
,
"drl_to_num"
:
"4"
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
},
return
++
end_index
"d4-5"
:
{
}
"row"
:
"20"
,
"type"
:
"laser_drill"
,
"name"
:
"d4-5"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl4"
,
"drl_end"
:
"isl5"
,
"gdrl_start"
:
"isl4"
,
"gdrl_end"
:
"isl5"
,
"drl_start_num"
:
"4"
,
"drl_end_num"
:
"5"
,
"tl_name"
:
"drill4-5"
,
"tl_type"
:
"drill"
,
var
nextstartlayer
=
layers
[
0
].
name
+
"_cover"
"tl_num"
:
10019
,
"odb_name"
:
"d4-5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
selCopyLayer
({
job
:
t
.
job
,
layer
:
nextstartlayer
})
"row_num"
:
10019
,
"odb_row_num"
:
"20"
,
"drl_from_num"
:
"4"
,
"drl_to_num"
:
"5"
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
},
return
start_cover_next
(
nextstartlayer
,
layers
,
++
end_index
)
"d5-6"
:
{
}
"row"
:
"21"
,
"type"
:
"laser_drill"
,
"name"
:
"d5-6"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl5"
,
"drl_end"
:
"isl6"
,
"gdrl_start"
:
"isl5"
,
"gdrl_end"
:
"isl6"
,
"drl_start_num"
:
"5"
,
"drl_end_num"
:
"6"
,
"tl_name"
:
"drill5-6"
,
"tl_type"
:
"drill"
,
analysis_via_number
(
laser_layers
.
slice
())
"tl_num"
:
10020
,
"odb_name"
:
"d5-6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
if
(
via_vias_info
.
length
==
1
){
"row_num"
:
10020
,
"odb_row_num"
:
"21"
,
"drl_from_num"
:
"5"
,
"drl_to_num"
:
"6"
res
=
via_vias_info
[
0
]
},
}
else
{
"d6-7"
:
{
res
=
via_vias_info
.
reduce
(
function
(
a
,
b
){
return
a
-
b
>
0
?
a
:
b
})
"row"
:
"22"
,
"type"
:
"laser_drill"
,
"name"
:
"d6-7"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl6"
,
"drl_end"
:
"isl7"
,
"gdrl_start"
:
"isl6"
,
"gdrl_end"
:
"isl7"
,
"drl_start_num"
:
"6"
,
"drl_end_num"
:
"7"
,
"tl_name"
:
"drill6-7"
,
"tl_type"
:
"drill"
,
}
"tl_num"
:
10021
,
"odb_name"
:
"d6-7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
t
.
jobInfo
.
stack_vias_more
=
"no"
"row_num"
:
10021
,
"odb_row_num"
:
"22"
,
"drl_from_num"
:
"6"
,
"drl_to_num"
:
"7"
if
(
GEN
.
getLayerCount
({
job
:
t
.
job
})
>
14
&&
res
>=
12
){
},
t
.
jobInfo
.
stack_vias_more
=
"yes"
"d7-8"
:
{
}
"row"
:
"23"
,
"type"
:
"laser_drill"
,
"name"
:
"d7-8"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl7"
,
"drl_end"
:
"isl8"
,
"gdrl_start"
:
"isl7"
,
"gdrl_end"
:
"isl8"
,
"drl_start_num"
:
"7"
,
"drl_end_num"
:
"8"
,
"tl_name"
:
"drill7-8"
,
"tl_type"
:
"drill"
,
t
.
jobInfo
.
laser_info
=
laser_info
;
"tl_num"
:
10022
,
"odb_name"
:
"d7-8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
return
res
"row_num"
:
10022
,
"odb_row_num"
:
"23"
,
"drl_from_num"
:
"7"
,
"drl_to_num"
:
"8"
}
},
T_m_p
.
prototype
.
analysis_layer_exist
=
function
(
props
){
// 存在某某层? string
"d8-9"
:
{
return
this
.
matrixInfo
.
matrix
.
hasOwnProperty
(
props
)
?
"yes"
:
"no"
"row"
:
"24"
,
"type"
:
"laser_drill"
,
"name"
:
"d8-9"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl8"
,
"drl_end"
:
"isl9"
,
"gdrl_start"
:
"isl8"
,
"gdrl_end"
:
"isl9"
,
"drl_start_num"
:
"8"
,
"drl_end_num"
:
"9"
,
"tl_name"
:
"drill8-9"
,
"tl_type"
:
"drill"
,
}
"tl_num"
:
10023
,
"odb_name"
:
"d8-9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
T_m_p
.
prototype
.
analysis_laser_via_on_buried_hole
=
function
(){
// todo
"row_num"
:
10023
,
"odb_row_num"
:
"24"
,
"drl_from_num"
:
"8"
,
"drl_to_num"
:
"9"
return
"_todo"
},
}
"d9-10"
:
{
T_m_p
.
prototype
.
analysis_milling_bit_size
=
function
(){
// todo
"row"
:
"25"
,
"type"
:
"laser_drill"
,
"name"
:
"d9-10"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl9"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"isl9"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
"9"
,
"drl_end_num"
:
"10"
,
"tl_name"
:
"drill9-10"
,
"tl_type"
:
"drill"
,
return
"_todo"
"tl_num"
:
10024
,
"odb_name"
:
"d9-10"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
}
"row_num"
:
10024
,
"odb_row_num"
:
"25"
,
"drl_from_num"
:
"9"
,
"drl_to_num"
:
"10"
T_m_p
.
prototype
.
analysis_milling_length
=
function
(){
// todo
},
return
"_todo"
"drill"
:
{
}
"row"
:
"26"
,
"type"
:
"main_drill"
,
"name"
:
"drill"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
1
,
"drl_end_num"
:
10
,
"tl_name"
:
"drill"
,
"tl_type"
:
"drill"
,
T_m_p
.
prototype
.
analysis_board_has_attr
=
function
(
props
){
// board层中检查存在01005属性物件时
"tl_num"
:
10025
,
"odb_name"
:
"drill"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
"row_num"
:
10025
,
"odb_row_num"
:
"26"
,
"drl_from_num"
:
1
,
"drl_to_num"
:
10
GEN
.
clearLayers
()
},
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
this
.
matrixInfo
.
mBoardLayer
,
clear_before
:
'yes'
});
"rout"
:
{
GEN
.
selClearFeature
()
"row"
:
"27"
,
"type"
:
"other"
,
"name"
:
"__rout__"
,
"context"
:
"board"
,
"layer_type"
:
"rout"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"odb_name"
:
"rout"
,
"odb_context"
:
"board"
,
"odb_type"
:
"rout"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"odb_row_num"
:
"27"
GEN
.
selectByFilter
({
attribute
:
props
})
},
var
res
=
GEN
.
getSelectCount
()
>
0
?
"yes"
:
"no"
"nclegend-1-2"
:
{
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
});
"row"
:
"28"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
selClearFeature
()
"tl_num"
:
110027
,
"odb_name"
:
"nclegend-1-2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
closeStep
()
"row_num"
:
110027
,
"odb_row_num"
:
"28"
return
res
},
}
"nclegend-2-3"
:
{
T_m_p
.
prototype
.
analysis_vc_src_EDGE_PLATING
=
function
(
props
){
// ? 检查线路外形是否存在物件,存在则存yes
"row"
:
"29"
,
"type"
:
"other"
,
"name"
:
"__nclegend-2-3__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
res
=
"no"
"tl_num"
:
110028
,
"odb_name"
:
"nclegend-2-3"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
var
rout
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"rout"
})
// 找rout层
"row_num"
:
110028
,
"odb_row_num"
:
"29"
if
(
rout
.
length
==
0
){
},
return
"error:cant find rout layer"
"nclegend-3-4"
:
{
}
"row"
:
"30"
,
"type"
:
"other"
,
"name"
:
"__nclegend-3-4__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
"tl_num"
:
110029
,
"odb_name"
:
"nclegend-3-4"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
"row_num"
:
110029
,
"odb_row_num"
:
"30"
try
{
},
this
.
matrixInfo
.
mSignals
.
forEach
(
function
(
v
){
// 用线路层逐层与rout层touch 找得到说明存在
"nclegend-4-5"
:
{
GEN
.
workLayer
({
name
:
v
.
name
,
display_number
:
2
,
clear_before
:
'yes'
})
"row"
:
"31"
,
"type"
:
"other"
,
"name"
:
"__nclegend-4-5__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
selClearFeature
()
"tl_num"
:
110030
,
"odb_name"
:
"nclegend-4-5"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
selRefFeat
({
layers
:
rout
[
0
].
name
,
mode
:
"touch"
,
use
:
"filter"
})
"row_num"
:
110030
,
"odb_row_num"
:
"31"
if
(
GEN
.
getSelectCount
()
>
0
){
},
throw
"yes"
"nclegend-5-6"
:
{
}
"row"
:
"32"
,
"type"
:
"other"
,
"name"
:
"__nclegend-5-6__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
clearLayers
()
"tl_num"
:
110031
,
"odb_name"
:
"nclegend-5-6"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
})
"row_num"
:
110031
,
"odb_row_num"
:
"32"
}
catch
(
msg
)
{
},
res
=
msg
"nclegend-6-7"
:
{
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
"row"
:
"33"
,
"type"
:
"other"
,
"name"
:
"__nclegend-6-7__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
selClearFeature
()
"tl_num"
:
110032
,
"odb_name"
:
"nclegend-6-7"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
}
"row_num"
:
110032
,
"odb_row_num"
:
"33"
GEN
.
closeStep
()
},
return
res
"nclegend-7-8"
:
{
}
"row"
:
"34"
,
"type"
:
"other"
,
"name"
:
"__nclegend-7-8__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
T_m_p
.
prototype
.
analysis_edge_plating_length
=
function
(){
// todo
"tl_num"
:
110033
,
"odb_name"
:
"nclegend-7-8"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
return
"_todo"
"row_num"
:
110033
,
"odb_row_num"
:
"34"
}
},
T_m_p
.
prototype
.
analysis_glod_finger
=
function
(){
// todo
"nclegend-8-9"
:
{
return
"_todo"
"row"
:
"35"
,
"type"
:
"other"
,
"name"
:
"__nclegend-8-9__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
}
"tl_num"
:
110034
,
"odb_name"
:
"nclegend-8-9"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
T_m_p
.
prototype
.
analysis_glod_finger_area
=
function
(){
// todo
"row_num"
:
110034
,
"odb_row_num"
:
"35"
return
"_todo"
},
}
"nclegend-9-10"
:
{
T_m_p
.
prototype
.
analysis_solder_mask_side
=
function
(){
// 检查防焊层所在面次
"row"
:
"36"
,
"type"
:
"other"
,
"name"
:
"__nclegend-9-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
solder_paste_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_paste"
})
"tl_num"
:
110035
,
"odb_name"
:
"nclegend-9-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
var
solder_paste_info
=
solder_paste_layers
.
map
(
function
(
v
){
return
v
.
side
}).
reduce
(
function
(
a
,
b
){
"row_num"
:
110035
,
"odb_row_num"
:
"36"
if
(
a
.
indexOf
(
b
)
<
0
){
a
.
push
(
b
)
}
},
return
a
"nclegend-1-10"
:
{
},[])
"row"
:
"37"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
res
=
"no"
"tl_num"
:
110036
,
"odb_name"
:
"nclegend-1-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
if
(
solder_paste_info
.
length
==
0
){
"row_num"
:
110036
,
"odb_row_num"
:
"37"
res
=
"no"
},
}
else
if
(
solder_paste_info
.
length
==
1
)
{
"outline"
:
{
res
=
/top/ig
.
test
(
solder_paste_info
[
0
])
?
"top"
:
"bot"
"row"
:
"38"
,
"type"
:
"other"
,
"name"
:
"__outline__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
}
else
{
"tl_num"
:
110037
,
"odb_name"
:
"outline"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
res
=
"both"
"row_num"
:
110037
,
"odb_row_num"
:
"38"
}
},
return
res
"top_assem"
:
{
}
"row"
:
"39"
,
"type"
:
"other"
,
"name"
:
"__top_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
T_m_p
.
prototype
.
analysis_silk_screen_side
=
function
(){
// 检查文字层所在面次
"tl_num"
:
110038
,
"odb_name"
:
"top_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
var
solder_mask_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_mask"
})
"row_num"
:
110038
,
"odb_row_num"
:
"39"
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
)
}
"bot_assem"
:
{
return
a
"row"
:
"40"
,
"type"
:
"other"
,
"name"
:
"__bot_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
},[])
"tl_num"
:
110039
,
"odb_name"
:
"bot_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
var
res
=
"no"
"row_num"
:
110039
,
"odb_row_num"
:
"40"
if
(
solder_mask_info
.
length
==
0
){
},
res
=
"no"
"top_testpoint"
:
{
}
else
if
(
solder_mask_info
.
length
==
1
)
{
"row"
:
"41"
,
"type"
:
"other"
,
"name"
:
"__top_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
res
=
/top/ig
.
test
(
solder_mask_info
[
0
])
?
"top"
:
"bot"
"tl_num"
:
110040
,
"odb_name"
:
"top_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
}
else
{
"row_num"
:
110040
,
"odb_row_num"
:
"41"
res
=
"both"
},
}
"bot_testpoint"
:
{
return
res
"row"
:
"42"
,
"type"
:
"other"
,
"name"
:
"__bot_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
}
"tl_num"
:
110041
,
"odb_name"
:
"bot_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
T_m_p
.
prototype
.
analysis_min_drl_size
=
function
(){
// todo
"row_num"
:
110041
,
"odb_row_num"
:
"42"
return
"_todo"
},
}
"top_osp"
:
{
T_m_p
.
prototype
.
analysis_max_pth_drl_size
=
function
(){
// todo
"row"
:
"43"
,
"type"
:
"other"
,
"name"
:
"__top_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
return
"_todo"
"tl_num"
:
110042
,
"odb_name"
:
"top_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
}
"row_num"
:
110042
,
"odb_row_num"
:
"43"
T_m_p
.
prototype
.
analysis_max_npth_drl_size
=
function
(){
// todo
},
return
"_todo"
"bot_osp"
:
{
}
"row"
:
"44"
,
"type"
:
"other"
,
"name"
:
"__bot_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
T_m_p
.
prototype
.
analysis_min_slot_drl_size
=
function
(){
// todo
"tl_num"
:
110043
,
"odb_name"
:
"bot_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
return
"_todo"
"row_num"
:
110043
,
"odb_row_num"
:
"44"
}
},
T_m_p
.
prototype
.
analysis_max_slot_drl_size
=
function
(){
// todo
"top_enig"
:
{
return
"_todo"
"row"
:
"45"
,
"type"
:
"other"
,
"name"
:
"__top_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
}
"tl_num"
:
110044
,
"odb_name"
:
"top_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
T_m_p
.
prototype
.
analysis_max_slot_drl_length
=
function
(){
// todo
"row_num"
:
110044
,
"odb_row_num"
:
"45"
return
"_todo"
},
}
"bot_enig"
:
{
T_m_p
.
prototype
.
analysis_max_spec_slot_drl_size
=
function
(){
// todo
"row"
:
"46"
,
"type"
:
"other"
,
"name"
:
"__bot_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
return
"_todo"
"tl_num"
:
110045
,
"odb_name"
:
"bot_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
}
"row_num"
:
110045
,
"odb_row_num"
:
"46"
T_m_p
.
prototype
.
analysis_max_spec_slot_drl_length
=
function
(){
// todo
},
return
"_todo"
"fab_page2"
:
{
}
"row"
:
"47"
,
"type"
:
"other"
,
"name"
:
"__fab_page2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
return
new
T_m_p
({
job
:
job
,
jobId
:
jobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
"tl_num"
:
110046
,
"odb_name"
:
"fab_page2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
}
"row_num"
:
110046
,
"odb_row_num"
:
"47"
function
smdAnalysis
(
props
){
},
var
job
=
props
.
job
"tmp_top_shorts"
:
{
var
steplist
=
props
.
steplist
"row"
:
"48"
,
"type"
:
"other"
,
"name"
:
"__tmp_top_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
layers
=
props
.
layers
"tl_num"
:
110047
,
"odb_name"
:
"tmp_top_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
var
res
=
{}
"row_num"
:
110047
,
"odb_row_num"
:
"48"
steplist
.
forEach
(
function
(
step
){
},
GEN
.
openStep
({
job
:
job
,
step
:
step
})
"tmp_bot_shorts"
:
{
layers
.
forEach
(
function
(
layer
){
"row"
:
"49"
,
"type"
:
"other"
,
"name"
:
"__tmp_bot_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
// 计算开窗 数量
"tl_num"
:
110048
,
"odb_name"
:
"tmp_bot_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
workLayer
({
name
:
layer
.
solderL
,
display_number
:
2
,
clear_before
:
'yes'
})
"row_num"
:
110048
,
"odb_row_num"
:
"49"
if
(
!
res
.
hasOwnProperty
(
layer
.
solderL
)){
},
res
[
layer
.
solderL
]
=
{}
"bot_assy_mate"
:
{
}
"row"
:
"50"
,
"type"
:
"other"
,
"name"
:
"__bot_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
selectByFilter
({
profile
:
'in'
})
"tl_num"
:
110049
,
"odb_name"
:
"bot_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
selAllFeat
()
"row_num"
:
110049
,
"odb_row_num"
:
"50"
res
[
layer
.
solderL
].
sm_opening_count
=
GEN
.
getSelectCount
()
},
GEN
.
selClearFeature
()
"outline+1"
:
{
// 分析最小smd宽高
"row"
:
"51"
,
"type"
:
"other"
,
"name"
:
"__outline+1__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
GEN
.
workLayer
({
name
:
layer
.
signalL
,
display_number
:
2
,
clear_before
:
'yes'
})
"tl_num"
:
110050
,
"odb_name"
:
"outline+1"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
GEN
.
selClearFeature
()
"row_num"
:
110050
,
"odb_row_num"
:
"51"
GEN
.
selectByFilter
({
attribute
:
props
.
attr
})
},
var
selCount
=
GEN
.
getSelectCount
()
"top_assy_mate"
:
{
if
(
selCount
>
0
){
"row"
:
"52"
,
"type"
:
"other"
,
"name"
:
"__top_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
var
tmp_layer
=
layer
.
signalL
+
"_tmp"
"tl_num"
:
110051
,
"odb_name"
:
"top_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
selCopyLayer
({
job
:
job
,
layer
:
tmp_layer
})
"row_num"
:
110051
,
"odb_row_num"
:
"52"
var
symbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
layer
:
tmp_layer
,
step
:
step
})
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
var
symbolInfo
=
symbolAnalysis
({
symbols
:
symbols
,
filterReg
:
/^rect/
})
if
(
!
res
.
hasOwnProperty
(
layer
.
signalL
)){
res
[
layer
.
signalL
]
=
{}
}
res
[
layer
.
signalL
][
"min_smd_width"
]
=
symbolInfo
[
"min_width"
]
res
[
layer
.
signalL
][
"min_smd_length"
]
=
symbolInfo
[
"min_length"
]
// 分析最小smd间距
// 创建一个checklist并且分析
var
min_smd_pitch
=
smdPitch
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
})
res
[
layer
.
signalL
][
"min_smd_pitch"
]
=
min_smd_pitch
// 分析开窗宽高
GEN
.
workLayer
({
name
:
layer
.
solderL
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
tmp_layer
,
use
:
'filter'
,
mode
:
'include'
})
GEN
.
selRefFeat
({
layers
:
tmp_layer
,
use
:
'filter'
,
mode
:
'cover'
})
var
solderL_tmp
=
layer
.
solderL
+
"_tmp"
selCopyLayer
({
job
:
job
,
layer
:
solderL_tmp
})
GEN
.
selClearFeature
()
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/
})
res
[
layer
.
signalL
].
min_smd_opening_width
=
symbolInfo_solder
[
"min_width"
]
res
[
layer
.
signalL
].
min_smd_opening_length
=
symbolInfo_solder
[
"min_length"
]
GEN
.
deleteLayer
({
job
:
job
,
layer
:
solderL_tmp
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
}
})
GEN
.
closeStep
()
})
return
res
}
function
symbolAnalysis
(
props
){
var
symbols
=
Object
.
keys
(
props
.
symbols
).
reduce
(
function
(
a
,
b
){
if
(
props
.
filterReg
.
test
(
b
)){
var
res
=
/^rect
(\d
+
\.\d
+|
\d
+
)
x
(\d
+
\.\d
+|
\d
+
)
/ig
.
exec
(
b
).
slice
(
1
)
var
num1
=
res
[
0
],
num2
=
res
[
1
]
if
(
num1
<=
num2
){
a
.
width
.
push
(
num1
)
a
.
length
.
push
(
num2
)
}
else
{
a
.
width
.
push
(
num2
)
a
.
length
.
push
(
num1
)
}
}
return
a
},{
width
:[],
length
:[]})
return
{
min_width
:
symbols
.
width
.
reduce
(
function
(
a
,
b
){
return
b
-
a
>
0
?
a
:
b
}),
min_length
:
symbols
.
length
.
reduce
(
function
(
a
,
b
){
return
b
-
a
>
0
?
a
:
b
})
}
}
function
smdPitch
(
props
){
var
job
=
props
.
job
var
step
=
props
.
step
var
layer
=
props
.
layer
var
ck
=
"tmp_chk"
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
ck
})){
GEN
.
COM
(
"chklist_delete"
,
{
chklist
:
ck
})
}
}
// 创建并运行
GEN
.
createChklist
({
// 创建checklist
chklist
:
ck
,
items
:
[{
name
:
"smdPitch"
,
nact
:
1
,
action
:
"valor_analysis_signal"
,
erf
:
"S2_conductor_Check"
,
params
:
{
pp_layer
:
".affected"
,
pp_spacing
:
20
,
pp_selected
:
"All"
,
pp_r2c
:
10
,
pp_d2c
:
15
,
pp_sliver
:
8
,
pp_min_pad_overlap
:
5
,
pp_check_missing_pads_for_drills
:
"Yes"
,
pp_use_compensated_rout
:
"Skeleton"
,
pp_sm_spacing
:
"Yes"
,
pp_tests
:
"Spacing
\\
;SMD"
,
pp_check_missing_pads_for_drills
:
"Yes"
}
}]
})
GEN
.
chklistShow
({
chklist
:
ck
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
layer
,
clear_before
:
"yes"
})
GEN
.
chklistRun
({
chklist
:
ck
,
nact
:
1
,
area
:
'profile'
})
var
tmp_layer1
=
"mk_1_"
+
layer
+
"_pitch"
var
tmp_layer2
=
"ms_1_"
+
layer
+
"_pitch"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer1
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer1
})
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer2
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer2
})
}
GEN
.
COM
(
"chklist_create_lyrs,chklist="
+
ck
+
",severity=3,suffix=pitch"
);
GEN
.
workLayer
({
name
:
tmp_layer2
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
attribute
:[{
attribute
:
".string"
,
text
:
"smd_pitch"
}]})
var
tmp_layer
=
tmp_layer2
+
"_tmp"
selCopyLayer
({
job
:
job
,
layer
:
tmp_layer
})
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
var
symbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
layer
:
tmp_layer
,
step
:
step
})
// 获取最小smd间距
var
res
=
_
.
values
(
symbols
).
sort
(
function
(
a
,
b
){
return
Number
(
a
.
size
)
-
Number
(
b
.
size
)})[
0
].
size
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer1
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer2
})
return
res
}
function
createChklistAndRun
(
par
)
{
var
checkLayers
=
par
.
layers
var
items
=
par
.
items
GEN
.
createChklist
({
// 创建checklist
chklist
:
oChecklistName
,
items
:
items
})
GEN
.
chklistShow
({
chklist
:
oChecklistName
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
checkLayers
,
clear_before
:
"yes"
})
items
.
forEach
(
function
(
v
){
GEN
.
chklistRun
({
chklist
:
oChecklistName
,
nact
:
v
.
nact
,
area
:
'profile'
})
})
}
}
function
analysisChkAttr
(
par
)
{
var
layers
=
par
.
layers
;
var
hash
=
{};
var
info
=
par
.
info
;
var
job
=
par
.
job
;
var
oChecklistName
=
par
.
oChecklistName
layers
.
forEach
(
function
(
v
)
{
hash
[
v
]
=
{}
Object
.
keys
(
info
).
forEach
(
function
(
key
)
{
var
val
=
info
[
key
]
hash
[
v
][
key
]
=
val
.
reduce
(
function
(
a
,
type
)
{
var
tmp
=
GEN
.
getCheckAttr
({
job
:
job
,
step
:
par
.
step
,
checklist
:
oChecklistName
,
nact
:
1
,
attr
:
v
+
"_min_"
+
type
})
if
(
a
===
"N/A"
&&
/
\d
+/
.
test
(
tmp
))
{
a
=
tmp
}
if
(
/
\d
+/
.
test
(
a
)
&&
/
\d
+/
.
test
(
tmp
)
&&
Number
(
tmp
)
<
Number
(
a
))
{
a
=
tmp
}
return
a
},
"N/A"
)
})
})
return
hash
}
}
function
analysisDrill
(
par
,
step
){
// {"layer":"d1-2","symbol":"r3.937","start":"top","end":"isl2"}
var
res
=
par
.
map
(
function
(
drill
){
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
drill
.
layer
,
clear_before
:
"yes"
,
mode
:
"all"
})
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
feat_types
:
"pad"
,
include_syms
:
drill
.
symbol
})
// 拷贝到_tmp
var
tmplayer
=
drill
.
layer
+
"_tmp"
if
(
GEN
.
isLayerExists
({
job
:
Job
,
layer
:
tmplayer
})){
GEN
.
deleteLayer
({
job
:
Job
,
step
:
step
,
layer
:
tmplayer
})}
GEN
.
selCopyOther
({
dest
:
"layer_name"
,
target_layer
:
tmplayer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
GEN
.
affectedLayer
({
affected
:
"no"
,
mode
:
"all"
})
GEN
.
selClearFeature
();
[
drill
.
start
,
drill
.
end
].
forEach
(
function
(
item
,
i
){
GEN
.
workLayer
({
name
:
item
,
display_number
:
1
,
clear_before
:
"yes"
})
GEN
.
selRefFeat
({
layers
:
tmplayer
,
use
:
"filter"
,
mode
:
"include"
,
f_types
:
"pad"
,
pads_as
:
"shape"
,
polarity
:
"positive"
,
include_syms
:
drill
.
symbol
,
filter
:
{
feat_types
:
'pad'
}
})
var
res
=
""
var
pads
=
GEN
.
getFeatures
({
job
:
Job
,
step
:
step
,
layer
:
item
,
options
:
"select"
})
if
(
pads
&&
pads
.
length
)
{
pads
=
pads
.
filter
(
function
(
item
){
return
/^r
\d
+/
.
test
(
item
.
symbol
)
})
pads
=
pads
.
sort
(
function
(
a
,
b
){
return
parseInt
(
a
.
symbol
)
-
parseInt
(
b
.
symbol
)
})
res
=
pads
[
0
].
symbol
.
slice
(
1
)
}
if
(
i
==
0
)
{
drill
.
drl_pad_top
=
res
}
else
if
(
i
==
1
){
drill
.
drl_pad_bot
=
res
}
})
GEN
.
deleteLayer
({
job
:
Job
,
step
:
step
,
layer
:
tmplayer
})
return
drill
})
return
res
}
function
tmp
(){
return
{
"sst"
:
{
"row"
:
"1"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
1000
,
"tl_name"
:
"sp_fr"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"sst"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
1000
,
"odb_row_num"
:
"1"
},
"spt"
:
{
"row"
:
"2"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
999
,
"tl_name"
:
"sp_fr(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
999
,
"odb_row_num"
:
"2"
},
"smt"
:
{
"row"
:
"3"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
998
,
"tl_name"
:
"sm_fr"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
998
,
"odb_row_num"
:
"3"
},
"top"
:
{
"row"
:
"4"
,
"type"
:
"outer"
,
"name"
:
"top"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1
,
"tl_name"
:
"top"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"top"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
1
,
"odb_row_num"
:
"4"
},
"isl2"
:
{
"row"
:
"5"
,
"type"
:
"inner"
,
"name"
:
"l2"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
2
,
"tl_name"
:
"l2"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
2
,
"odb_row_num"
:
"5"
},
"isl3"
:
{
"row"
:
"6"
,
"type"
:
"inner"
,
"name"
:
"l3"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
3
,
"tl_name"
:
"l3"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
3
,
"odb_row_num"
:
"6"
},
"isl4"
:
{
"row"
:
"7"
,
"type"
:
"inner"
,
"name"
:
"l4"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
4
,
"tl_name"
:
"l4"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
4
,
"odb_row_num"
:
"7"
},
"isl5"
:
{
"row"
:
"8"
,
"type"
:
"inner"
,
"name"
:
"l5"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
5
,
"tl_name"
:
"l5"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
5
,
"odb_row_num"
:
"8"
},
"isl6"
:
{
"row"
:
"9"
,
"type"
:
"inner"
,
"name"
:
"l6"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
6
,
"tl_name"
:
"l6"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
6
,
"odb_row_num"
:
"9"
},
"isl7"
:
{
"row"
:
"10"
,
"type"
:
"inner"
,
"name"
:
"l7"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
7
,
"tl_name"
:
"l7"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
7
,
"odb_row_num"
:
"10"
},
"isl8"
:
{
"row"
:
"11"
,
"type"
:
"inner"
,
"name"
:
"l8"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
8
,
"tl_name"
:
"l8"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
8
,
"odb_row_num"
:
"11"
},
"isl9"
:
{
"row"
:
"12"
,
"type"
:
"inner"
,
"name"
:
"l9"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
9
,
"tl_name"
:
"l9"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
9
,
"odb_row_num"
:
"12"
},
"bottom"
:
{
"row"
:
"13"
,
"type"
:
"outer"
,
"name"
:
"bottom"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
10
,
"tl_name"
:
"bottom"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"bottom"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
10
,
"odb_row_num"
:
"13"
},
"smb"
:
{
"row"
:
"14"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1013
,
"tl_name"
:
"sm_ba"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1013
,
"odb_row_num"
:
"14"
},
"spb"
:
{
"row"
:
"15"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1014
,
"tl_name"
:
"sp_ba"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1014
,
"odb_row_num"
:
"15"
},
"ssb"
:
{
"row"
:
"16"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1015
,
"tl_name"
:
"sp_ba(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"ssb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1015
,
"odb_row_num"
:
"16"
},
"d1-2"
:
{
"row"
:
"17"
,
"type"
:
"laser_drill"
,
"name"
:
"d1-2"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"isl2"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"isl2"
,
"drl_start_num"
:
"1"
,
"drl_end_num"
:
"2"
,
"tl_name"
:
"drill1-2"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10016
,
"odb_name"
:
"d1-2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10016
,
"odb_row_num"
:
"17"
,
"drl_from_num"
:
"1"
,
"drl_to_num"
:
"2"
},
"d2-3"
:
{
"row"
:
"18"
,
"type"
:
"laser_drill"
,
"name"
:
"d2-3"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl2"
,
"drl_end"
:
"isl3"
,
"gdrl_start"
:
"isl2"
,
"gdrl_end"
:
"isl3"
,
"drl_start_num"
:
"2"
,
"drl_end_num"
:
"3"
,
"tl_name"
:
"drill2-3"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10017
,
"odb_name"
:
"d2-3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10017
,
"odb_row_num"
:
"18"
,
"drl_from_num"
:
"2"
,
"drl_to_num"
:
"3"
},
"d3-4"
:
{
"row"
:
"19"
,
"type"
:
"laser_drill"
,
"name"
:
"d3-4"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl3"
,
"drl_end"
:
"isl4"
,
"gdrl_start"
:
"isl3"
,
"gdrl_end"
:
"isl4"
,
"drl_start_num"
:
"3"
,
"drl_end_num"
:
"4"
,
"tl_name"
:
"drill3-4"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10018
,
"odb_name"
:
"d3-4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10018
,
"odb_row_num"
:
"19"
,
"drl_from_num"
:
"3"
,
"drl_to_num"
:
"4"
},
"d4-5"
:
{
"row"
:
"20"
,
"type"
:
"laser_drill"
,
"name"
:
"d4-5"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl4"
,
"drl_end"
:
"isl5"
,
"gdrl_start"
:
"isl4"
,
"gdrl_end"
:
"isl5"
,
"drl_start_num"
:
"4"
,
"drl_end_num"
:
"5"
,
"tl_name"
:
"drill4-5"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10019
,
"odb_name"
:
"d4-5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10019
,
"odb_row_num"
:
"20"
,
"drl_from_num"
:
"4"
,
"drl_to_num"
:
"5"
},
"d5-6"
:
{
"row"
:
"21"
,
"type"
:
"laser_drill"
,
"name"
:
"d5-6"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl5"
,
"drl_end"
:
"isl6"
,
"gdrl_start"
:
"isl5"
,
"gdrl_end"
:
"isl6"
,
"drl_start_num"
:
"5"
,
"drl_end_num"
:
"6"
,
"tl_name"
:
"drill5-6"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10020
,
"odb_name"
:
"d5-6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10020
,
"odb_row_num"
:
"21"
,
"drl_from_num"
:
"5"
,
"drl_to_num"
:
"6"
},
"d6-7"
:
{
"row"
:
"22"
,
"type"
:
"laser_drill"
,
"name"
:
"d6-7"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl6"
,
"drl_end"
:
"isl7"
,
"gdrl_start"
:
"isl6"
,
"gdrl_end"
:
"isl7"
,
"drl_start_num"
:
"6"
,
"drl_end_num"
:
"7"
,
"tl_name"
:
"drill6-7"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10021
,
"odb_name"
:
"d6-7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10021
,
"odb_row_num"
:
"22"
,
"drl_from_num"
:
"6"
,
"drl_to_num"
:
"7"
},
"d7-8"
:
{
"row"
:
"23"
,
"type"
:
"laser_drill"
,
"name"
:
"d7-8"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl7"
,
"drl_end"
:
"isl8"
,
"gdrl_start"
:
"isl7"
,
"gdrl_end"
:
"isl8"
,
"drl_start_num"
:
"7"
,
"drl_end_num"
:
"8"
,
"tl_name"
:
"drill7-8"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10022
,
"odb_name"
:
"d7-8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10022
,
"odb_row_num"
:
"23"
,
"drl_from_num"
:
"7"
,
"drl_to_num"
:
"8"
},
"d8-9"
:
{
"row"
:
"24"
,
"type"
:
"laser_drill"
,
"name"
:
"d8-9"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl8"
,
"drl_end"
:
"isl9"
,
"gdrl_start"
:
"isl8"
,
"gdrl_end"
:
"isl9"
,
"drl_start_num"
:
"8"
,
"drl_end_num"
:
"9"
,
"tl_name"
:
"drill8-9"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10023
,
"odb_name"
:
"d8-9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10023
,
"odb_row_num"
:
"24"
,
"drl_from_num"
:
"8"
,
"drl_to_num"
:
"9"
},
"d9-10"
:
{
"row"
:
"25"
,
"type"
:
"laser_drill"
,
"name"
:
"d9-10"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl9"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"isl9"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
"9"
,
"drl_end_num"
:
"10"
,
"tl_name"
:
"drill9-10"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10024
,
"odb_name"
:
"d9-10"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10024
,
"odb_row_num"
:
"25"
,
"drl_from_num"
:
"9"
,
"drl_to_num"
:
"10"
},
"drill"
:
{
"row"
:
"26"
,
"type"
:
"main_drill"
,
"name"
:
"drill"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
1
,
"drl_end_num"
:
10
,
"tl_name"
:
"drill"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10025
,
"odb_name"
:
"drill"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10025
,
"odb_row_num"
:
"26"
,
"drl_from_num"
:
1
,
"drl_to_num"
:
10
},
"rout"
:
{
"row"
:
"27"
,
"type"
:
"other"
,
"name"
:
"__rout__"
,
"context"
:
"board"
,
"layer_type"
:
"rout"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"odb_name"
:
"rout"
,
"odb_context"
:
"board"
,
"odb_type"
:
"rout"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"odb_row_num"
:
"27"
},
"nclegend-1-2"
:
{
"row"
:
"28"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110027
,
"odb_name"
:
"nclegend-1-2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110027
,
"odb_row_num"
:
"28"
},
"nclegend-2-3"
:
{
"row"
:
"29"
,
"type"
:
"other"
,
"name"
:
"__nclegend-2-3__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110028
,
"odb_name"
:
"nclegend-2-3"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110028
,
"odb_row_num"
:
"29"
},
"nclegend-3-4"
:
{
"row"
:
"30"
,
"type"
:
"other"
,
"name"
:
"__nclegend-3-4__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110029
,
"odb_name"
:
"nclegend-3-4"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110029
,
"odb_row_num"
:
"30"
},
"nclegend-4-5"
:
{
"row"
:
"31"
,
"type"
:
"other"
,
"name"
:
"__nclegend-4-5__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110030
,
"odb_name"
:
"nclegend-4-5"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110030
,
"odb_row_num"
:
"31"
},
"nclegend-5-6"
:
{
"row"
:
"32"
,
"type"
:
"other"
,
"name"
:
"__nclegend-5-6__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110031
,
"odb_name"
:
"nclegend-5-6"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110031
,
"odb_row_num"
:
"32"
},
"nclegend-6-7"
:
{
"row"
:
"33"
,
"type"
:
"other"
,
"name"
:
"__nclegend-6-7__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110032
,
"odb_name"
:
"nclegend-6-7"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110032
,
"odb_row_num"
:
"33"
},
"nclegend-7-8"
:
{
"row"
:
"34"
,
"type"
:
"other"
,
"name"
:
"__nclegend-7-8__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110033
,
"odb_name"
:
"nclegend-7-8"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110033
,
"odb_row_num"
:
"34"
},
"nclegend-8-9"
:
{
"row"
:
"35"
,
"type"
:
"other"
,
"name"
:
"__nclegend-8-9__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110034
,
"odb_name"
:
"nclegend-8-9"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110034
,
"odb_row_num"
:
"35"
},
"nclegend-9-10"
:
{
"row"
:
"36"
,
"type"
:
"other"
,
"name"
:
"__nclegend-9-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110035
,
"odb_name"
:
"nclegend-9-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110035
,
"odb_row_num"
:
"36"
},
"nclegend-1-10"
:
{
"row"
:
"37"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110036
,
"odb_name"
:
"nclegend-1-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110036
,
"odb_row_num"
:
"37"
},
"outline"
:
{
"row"
:
"38"
,
"type"
:
"other"
,
"name"
:
"__outline__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110037
,
"odb_name"
:
"outline"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110037
,
"odb_row_num"
:
"38"
},
"top_assem"
:
{
"row"
:
"39"
,
"type"
:
"other"
,
"name"
:
"__top_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110038
,
"odb_name"
:
"top_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110038
,
"odb_row_num"
:
"39"
},
"bot_assem"
:
{
"row"
:
"40"
,
"type"
:
"other"
,
"name"
:
"__bot_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110039
,
"odb_name"
:
"bot_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110039
,
"odb_row_num"
:
"40"
},
"top_testpoint"
:
{
"row"
:
"41"
,
"type"
:
"other"
,
"name"
:
"__top_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110040
,
"odb_name"
:
"top_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110040
,
"odb_row_num"
:
"41"
},
"bot_testpoint"
:
{
"row"
:
"42"
,
"type"
:
"other"
,
"name"
:
"__bot_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110041
,
"odb_name"
:
"bot_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110041
,
"odb_row_num"
:
"42"
},
"top_osp"
:
{
"row"
:
"43"
,
"type"
:
"other"
,
"name"
:
"__top_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110042
,
"odb_name"
:
"top_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110042
,
"odb_row_num"
:
"43"
},
"bot_osp"
:
{
"row"
:
"44"
,
"type"
:
"other"
,
"name"
:
"__bot_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110043
,
"odb_name"
:
"bot_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110043
,
"odb_row_num"
:
"44"
},
"top_enig"
:
{
"row"
:
"45"
,
"type"
:
"other"
,
"name"
:
"__top_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110044
,
"odb_name"
:
"top_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110044
,
"odb_row_num"
:
"45"
},
"bot_enig"
:
{
"row"
:
"46"
,
"type"
:
"other"
,
"name"
:
"__bot_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110045
,
"odb_name"
:
"bot_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110045
,
"odb_row_num"
:
"46"
},
"fab_page2"
:
{
"row"
:
"47"
,
"type"
:
"other"
,
"name"
:
"__fab_page2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110046
,
"odb_name"
:
"fab_page2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110046
,
"odb_row_num"
:
"47"
},
"tmp_top_shorts"
:
{
"row"
:
"48"
,
"type"
:
"other"
,
"name"
:
"__tmp_top_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110047
,
"odb_name"
:
"tmp_top_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110047
,
"odb_row_num"
:
"48"
},
"tmp_bot_shorts"
:
{
"row"
:
"49"
,
"type"
:
"other"
,
"name"
:
"__tmp_bot_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110048
,
"odb_name"
:
"tmp_bot_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110048
,
"odb_row_num"
:
"49"
},
"bot_assy_mate"
:
{
"row"
:
"50"
,
"type"
:
"other"
,
"name"
:
"__bot_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110049
,
"odb_name"
:
"bot_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110049
,
"odb_row_num"
:
"50"
},
"outline+1"
:
{
"row"
:
"51"
,
"type"
:
"other"
,
"name"
:
"__outline+1__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110050
,
"odb_name"
:
"outline+1"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110050
,
"odb_row_num"
:
"51"
},
"top_assy_mate"
:
{
"row"
:
"52"
,
"type"
:
"other"
,
"name"
:
"__top_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110051
,
"odb_name"
:
"top_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110051
,
"odb_row_num"
:
"52"
}
}
}
function
tmp_2
(){
return
{
"cad"
:
{
"d1-2"
:
{
"1"
:
{
"count"
:
"06896"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d2-3"
:
{
"1"
:
{
"count"
:
"07430"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d3-4"
:
{
"1"
:
{
"count"
:
"06866"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d4-5"
:
{
"1"
:
{
"count"
:
"06413"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d5-6"
:
{
"1"
:
{
"count"
:
"08938"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d6-7"
:
{
"1"
:
{
"count"
:
"09057"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d7-8"
:
{
"1"
:
{
"count"
:
"07818"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d8-9"
:
{
"1"
:
{
"count"
:
"09126"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d9-10"
:
{
"1"
:
{
"count"
:
"08498"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"drill"
:
{
"1"
:
{
"count"
:
"05"
,
"num"
:
"1"
,
"type"
:
"non_plated"
,
"min_tol"
:
"3.15"
,
"max_tol"
:
"3.15"
,
"finish_size"
:
"15.748"
,
"drill_size"
:
"15.748"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"2"
:
{
"count"
:
"01"
,
"num"
:
"2"
,
"type"
:
"non_plated"
,
"min_tol"
:
"0"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"35.039"
,
"drill_size"
:
"35.039"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"3"
:
{
"count"
:
"01"
,
"num"
:
"3"
,
"type"
:
"non_plated"
,
"min_tol"
:
"3.15"
,
"max_tol"
:
"3.15"
,
"finish_size"
:
"35.039"
,
"drill_size"
:
"35.039"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"4"
:
{
"count"
:
"01"
,
"num"
:
"4"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"47.244"
,
"drill_size"
:
"47.244"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"5"
:
{
"count"
:
"05"
,
"num"
:
"5"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"59.055"
,
"drill_size"
:
"59.055"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"6"
:
{
"count"
:
"01"
,
"num"
:
"6"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"70.866"
,
"drill_size"
:
"70.866"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"7"
:
{
"count"
:
"01"
,
"num"
:
"7"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"74.803"
,
"drill_size"
:
"74.803"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
}
}
},
"stp"
:
{
"d1-2"
:
{},
"d2-3"
:
{},
"d3-4"
:
{},
"d4-5"
:
{},
"d5-6"
:
{},
"d6-7"
:
{},
"d7-8"
:
{},
"d8-9"
:
{},
"d9-10"
:
{},
"drill"
:
{
"1"
:
{
"count"
:
"08"
,
"num"
:
"1"
,
"type"
:
"non_plated"
,
"min_tol"
:
"0"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"118.11"
,
"drill_size"
:
"118.11"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
}
}
}
}
}
\ No newline at end of file
ats/input/ATS_AIM_data_input.js
View file @
ba8d156b
...
@@ -75,6 +75,7 @@ if ($.conf.product_type == "aimdfm") {
...
@@ -75,6 +75,7 @@ if ($.conf.product_type == "aimdfm") {
}
}
var
GEN
=
$
.
gen
;
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
Job
=
$
.
job_name
;
var
JobId
=
$
.
job_id
;
var
db
=
$
.
db
;
var
db
=
$
.
db
;
var
Status
=
'ok'
;
var
Status
=
'ok'
;
var
resultData
=
[];
var
resultData
=
[];
...
@@ -95,6 +96,16 @@ try {
...
@@ -95,6 +96,16 @@ try {
console
.
log
(
"========================db"
);
console
.
log
(
"========================db"
);
par
.
db
=
"genesis"
par
.
db
=
"genesis"
};
};
var
db_customer
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job'
,
field
:
'customer_code'
,
where
:{
id
:
JobId
}
})
});
if
(
db_customer
&&
!
(
/^done$/ig
.
test
(
db_customer
))
&&
db_customer
!=
""
){
par
.
customer
=
db_customer
}
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
var
cfg
=
db
.
query
(
""
,
function
(
q
){
var
cfg
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
return
q
.
selectValue
({
...
...
ats/rename/ATS_AIM_data_format.js
View file @
ba8d156b
...
@@ -58,7 +58,8 @@ if ($.conf.product_type == "aimdfm") {
...
@@ -58,7 +58,8 @@ if ($.conf.product_type == "aimdfm") {
}
}
var
GEN
=
$
.
gen
;
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
db
=
$
.
db
;
var
JobId
=
$
.
job_id
;
var
Status
=
'ok'
;
var
Status
=
'ok'
;
var
resultData
=
[];
var
resultData
=
[];
var
PAR
=
{};
var
PAR
=
{};
...
@@ -74,6 +75,16 @@ try {
...
@@ -74,6 +75,16 @@ try {
console
.
log
(
"========================cfg"
);
console
.
log
(
"========================cfg"
);
par
.
config_path
=
"cam/input_data"
par
.
config_path
=
"cam/input_data"
};
};
var
db_customer
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job'
,
field
:
'customer_code'
,
where
:{
id
:
JobId
}
})
});
if
(
db_customer
&&
!
(
/^done$/ig
.
test
(
db_customer
))
&&
db_customer
!=
""
){
par
.
customer
=
db_customer
}
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
var
cfg
=
db
.
query
(
""
,
function
(
q
){
var
cfg
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
return
q
.
selectValue
({
...
@@ -117,6 +128,23 @@ try {
...
@@ -117,6 +128,23 @@ try {
// 改名
// 改名
err
=
reName
({
job
:
job
,
matrix
:
after_sort_matrix
,
cfg
:
format_cfg
})
err
=
reName
({
job
:
job
,
matrix
:
after_sort_matrix
,
cfg
:
format_cfg
})
if
(
err
){
throw
err
}
if
(
err
){
throw
err
}
// 创建profile
var
new_martix
=
GEN
.
getMatrix
({
job
:
job
})
var
profileLayer
=
Object
.
keys
(
new_martix
).
filter
(
function
(
v
){
return
new_martix
[
v
].
layer_type
==
"rout"
})
if
(
profileLayer
.
length
){
var
tmp
=
profileLayer
[
0
]
if
(
profileLayer
.
indexOf
(
"outline"
)
>=
0
){
tmp
=
"outline"
}
var
step
=
GEN
.
getStepList
({
job
:
job
})[
0
];
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
workLayer
({
name
:
tmp
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selCreateProfile
()
GEN
.
closeStep
()
}
// end
// end
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
saveJob
({
job
:
job
});
...
...
config_ats.js
View file @
ba8d156b
...
@@ -150,7 +150,6 @@
...
@@ -150,7 +150,6 @@
"customer"
:
{
"customer"
:
{
"Customer_1"
:
{
"Customer_1"
:
{
"path"
:
"/opt/resource/customer_1"
,
"path"
:
"/opt/resource/customer_1"
,
"db"
:
"genesis"
,
"step"
:
"cad"
,
"step"
:
"cad"
,
"rules"
:
[
"rules"
:
[
{
{
...
@@ -190,15 +189,16 @@
...
@@ -190,15 +189,16 @@
}
}
],
],
"tl_name"
:
[
"tl_name"
:
[
{
"orig_name"
:
"^spt$"
,
"tl_name"
:
"spt
"
},
{
"orig_name"
:
[
"^sst$"
,
"^past_top$"
],
"tl_name"
:
"past_top
"
},
{
"orig_name"
:
"^smt$"
,
"tl_name"
:
"smt
"
},
{
"orig_name"
:
[
"^ssb$"
,
"^past_botm$"
],
"tl_name"
:
"past_botm
"
},
{
"orig_name"
:
"^smb$"
,
"tl_name"
:
"smb
"
},
{
"orig_name"
:
[
"^spt$"
,
"^silk_top$"
],
"tl_name"
:
"silk_top
"
},
{
"orig_name"
:
"^spb$"
,
"tl_name"
:
"spb
"
},
{
"orig_name"
:
[
"^spb$"
,
"^silk_bot$"
],
"tl_name"
:
"silk_bot
"
},
{
"orig_name"
:
"^ssb$"
,
"tl_name"
:
"ssb
"
},
{
"orig_name"
:
[
"^smt$"
,
"^sm_top$"
],
"tl_name"
:
"sm_top
"
},
{
"orig_name"
:
"^sst$"
,
"tl_name"
:
"sst
"
},
{
"orig_name"
:
[
"^smb$"
,
"^sm_botm$"
],
"tl_name"
:
"sm_botm
"
},
{
"orig_name"
:
"^top$"
,
"tl_name"
:
"top"
},
{
"orig_name"
:
"^top$"
,
"tl_name"
:
"top"
},
{
"orig_name"
:
"^drill$"
,
"tl_name"
:
"drill"
},
{
"orig_name"
:
"^drill$"
,
"tl_name"
:
"drill"
},
{
"orig_name"
:
"^rout$"
,
"tl_name"
:
"rout"
},
{
"orig_name"
:
[
"outline.art"
,
"^outline$"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"^rout$"
,
"
\\
.rou$"
],
"tl_name"
:
"rout"
},
{
"orig_name"
:
"^bottom$"
,
"tl_name"
:
"bottom"
},
{
"orig_name"
:
"^bottom$"
,
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"^isl(
\\
d+)$"
,
"^layer_(
\\
d+)$"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"^isl(
\\
d+)$"
,
"^layer_(
\\
d+)$"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"_isl(
\\
d+)_isl(
\\
d+)"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
},
{
"orig_name"
:
[
"_isl(
\\
d+)_isl(
\\
d+)"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
},
...
@@ -208,7 +208,6 @@
...
@@ -208,7 +208,6 @@
},
},
"Customer_2"
:
{
"Customer_2"
:
{
"path"
:
"/opt/resource/customer_2"
,
"path"
:
"/opt/resource/customer_2"
,
"db"
:
"genesis"
,
"step"
:
"cad"
,
"step"
:
"cad"
,
"rules"
:
[
"rules"
:
[
{
{
...
@@ -337,7 +336,7 @@
...
@@ -337,7 +336,7 @@
{
"orig_name"
:
[
"^0(
\\
d+).*ccp_ms"
,
"^s(
\\
d+)
\
.art"
,
"lay(
\\
d+)
\\
.art"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"^0(
\\
d+).*ccp_ms"
,
"^s(
\\
d+)
\
.art"
,
"lay(
\\
d+)
\\
.art"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"^bottom$"
,
"^bottom.art$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"^bottom$"
,
"^bottom.art$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"-(
\\
d+)-(
\\
d+)
\
.drl$"
,
"(
\\
d+)-(
\\
d+)-laser
\
.drl$"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
},
{
"orig_name"
:
[
"-(
\\
d+)-(
\\
d+)
\
.drl$"
,
"(
\\
d+)-(
\\
d+)-laser
\
.drl$"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
},
{
"orig_name"
:
[
"
\\
.rou$"
,
"
rout
"
],
"tl_name"
:
"rout"
},
{
"orig_name"
:
[
"
\\
.rou$"
,
"
^rout$
"
],
"tl_name"
:
"rout"
},
{
"orig_name"
:
"fab.art"
,
"tl_name"
:
"fab.art"
},
{
"orig_name"
:
"fab.art"
,
"tl_name"
:
"fab.art"
},
{
"orig_name"
:
[
"multipack.art"
,
"^array$"
],
"tl_name"
:
"array"
},
{
"orig_name"
:
[
"multipack.art"
,
"^array$"
],
"tl_name"
:
"array"
},
{
"orig_name"
:
[
"outline.art"
,
"^outline$"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"outline.art"
,
"^outline$"
],
"tl_name"
:
"outline"
},
...
@@ -348,7 +347,6 @@
...
@@ -348,7 +347,6 @@
},
},
"New_data"
:
{
"New_data"
:
{
"path"
:
"/opt/resource/new_data"
,
"path"
:
"/opt/resource/new_data"
,
"db"
:
"genesis"
,
"step"
:
"cad"
,
"step"
:
"cad"
,
"rules"
:
[
"rules"
:
[
{
{
...
@@ -451,17 +449,18 @@
...
@@ -451,17 +449,18 @@
}
}
],
],
"tl_name"
:
[
"tl_name"
:
[
{
"orig_name"
:
"pasttop.art"
,
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"pasttop.art"
,
"^past_top$"
,
"top_solderpaste"
]
,
"tl_name"
:
"past_top"
},
{
"orig_name"
:
"pleg.art"
,
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
[
"pleg.art"
,
"^silk_top$"
,
"top_silkscreen"
]
,
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
"soldtop.art"
,
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
[
"soldtop.art"
,
"^sm_top$"
,
"top_soldermask"
]
,
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
[
"top.art"
,
"^top$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"top.art"
,
"^top$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"inner_(
\\
d+)
\\
.art"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"inner_(
\\
d+)
\\
.art"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"bottom.art"
,
"^bottom$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"bottom.art"
,
"^bottom$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
"soldbotm.art"
,
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
[
"soldbotm.art"
,
"^sm_botm$"
,
"bot_soldermask"
]
,
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
"sleg.art"
,
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
[
"sleg.art"
,
"^silk_bot$"
,
"bot_silkscreen"
]
,
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
"pastbotm.art"
,
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"pastbotm.art"
,
"^past_botm$"
,
"bot_solderpaste"
]
,
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
"multipack.art"
,
"tl_name"
:
"array"
},
{
"orig_name"
:
"multipack.art"
,
"tl_name"
:
"array"
},
{
"orig_name"
:
[
"outline.art"
,
"outline"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"
\\
.rou$"
,
"^rout$"
],
"tl_name"
:
"rout"
},
{
"orig_name"
:
[
"outline.art"
,
"^outline$"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"fab.art"
,
"fab"
],
"tl_name"
:
"fab"
},
{
"orig_name"
:
[
"fab.art"
,
"fab"
],
"tl_name"
:
"fab"
},
{
"orig_name"
:
"top-enig"
,
"tl_name"
:
"top-enig"
},
{
"orig_name"
:
"top-enig"
,
"tl_name"
:
"top-enig"
},
{
"orig_name"
:
"bot-enig"
,
"tl_name"
:
"bot-enig"
},
{
"orig_name"
:
"bot-enig"
,
"tl_name"
:
"bot-enig"
},
...
@@ -483,8 +482,8 @@
...
@@ -483,8 +482,8 @@
{
"tl_name"
:
"d_(
\\
d+)-(
\\
d+)"
,
"new_name"
:
"d($1)-($2)"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
{
"tl_name"
:
"d_(
\\
d+)-(
\\
d+)"
,
"new_name"
:
"d($1)-($2)"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
{
"tl_name"
:
"drill"
,
"new_name"
:
"drill"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
{
"tl_name"
:
"drill"
,
"new_name"
:
"drill"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
{
"tl_name"
:
"rout"
,
"new_name"
:
"rout"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"rout"
}},
{
"tl_name"
:
"rout"
,
"new_name"
:
"rout"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"rout"
}},
{
"tl_name"
:
"outline"
,
"new_name"
:
"outline"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"rout"
}},
{
"tl_name"
:
"array"
,
"new_name"
:
"array"
,
"attr"
:{
"context"
:
"misc"
}},
{
"tl_name"
:
"array"
,
"new_name"
:
"array"
,
"attr"
:{
"context"
:
"misc"
}},
{
"tl_name"
:
"outline"
,
"new_name"
:
"outline"
,
"attr"
:{
"context"
:
"misc"
}},
{
"tl_name"
:
"fab.art"
,
"new_name"
:
"fab.art"
,
"attr"
:{
"context"
:
"misc"
}}
{
"tl_name"
:
"fab.art"
,
"new_name"
:
"fab.art"
,
"attr"
:{
"context"
:
"misc"
}}
],
],
"delSameJob"
:
"no"
"delSameJob"
:
"no"
...
...
test/ATS_AIM_customer_data_analysis-422.js
0 → 100644
View file @
ba8d156b
/*
NAME:
DESCRIPTION: 客户数据分析
PARAMETER:
[
{
name : 'step_filter',
title : 'Step过滤',
type : 'LineEdit',
property : {tool_tip : '过滤step信息'}
},
{
name : 'erf',
title : 'erf名称',
type : 'LineEdit',
property : {tool_tip : ''}
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020 3-30 Scott
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 客户数据分析</p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 客户参数 </p>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> ● 无 </p>
<br>
</body></html>
*/
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
IKM
=
$
.
ikm
;
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
;
var
Job
=
$
.
job
;
var
JobId
=
$
.
job_id
;
var
mode
=
"develop"
// 运行模式 develop 开发模式 方便调试
try
{
var
job
=
"1"
var
pcs_step
=
"cad"
,
array_step
=
"stp"
;
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
var
analysis_obj
=
analysis
({
job
:
job
,
jobId
:
JobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
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 // ? 保留小数
vc_pcs_count_on_panel
:
true
,
// todo 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
milling_bit_size
:
true
,
// todo 检查array中pcs的最小间距值
milling_length
:
true
,
// todo 检查array中铣切长度
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
".smd"
},
// * 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层
edge_plating_length
:
true
,
// todo 检查线路外形处物件的长度
glod_finger
:
true
,
// todo yes|no:暂无逻辑
glod_finger_area
:
true
,
// todo 暂无逻辑
solder_mask_side
:
true
,
// top|bot|both:检查防焊层所在面次
silk_screen_side
:
true
,
// top|bot|both:检查文字层所在面次
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圆孔
min_slot_drl_size
:
true
,
// todo 0.8mm 最小槽孔
max_slot_drl_size
:
true
,
// todo 1.2mm 最大槽孔
max_slot_drl_length
:
true
,
// todo 2.0mm 最大槽孔
max_spec_slot_drl_size
:
true
,
// todo 2.1mm 最大异形槽孔
max_spec_slot_drl_length
:
true
,
// todo 3.0mm 最大异形槽孔
}
}
// 分析料号info
var
jobInfo
=
{}
Object
.
keys
(
config
.
jobInfo
).
forEach
(
function
(
key
){
var
props
=
config
.
jobInfo
[
key
];
if
(
props
){
try
{
if
(
props
.
hasOwnProperty
(
"api"
)
&&
props
.
hasOwnProperty
(
"props"
)){
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
props
.
api
](
props
.
props
)
}
else
if
(
props
.
only_value
){
jobInfo
[
key
]
=
analysis_obj
[
key
]
}
else
{
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
key
](
props
)
}
}
catch
(
e
)
{
console
.
log
(
e
);
jobInfo
[
key
]
=
"_error"
}
}
})
// 过滤掉料号信息的 _todo 和 _error
for
(
var
key
in
jobInfo
)
{
if
(
jobInfo
[
key
]
===
"_todo"
||
jobInfo
[
key
]
===
"_error"
){
delete
jobInfo
[
key
]
}
}
// 上传jobInfo IKM版本
IKM
.
save_job_info
({
jobid
:
JobId
,
jobinfohash
:
jobInfo
})
// todo 上传jobInfo topjs3版本
// save_job_info({
// jobid: JobId,
// jobinfohash: jobInfo
// })
// todo 设置钻孔层孔属性,镭射孔via,无铜孔npth,其余孔pth
// todo 上传钻孔信息
// 获取pcs_step 和 array_step的钻孔信息
var
drill_info
=
{};
var
drillLayers
=
analysis_obj
.
matrixInfo
.
mDrills
;
[
pcs_step
,
array_step
].
forEach
(
function
(
step
){
drill_info
[
step
]
=
drill_info
[
step
]
||
{};
drillLayers
.
forEach
(
function
(
layer
){
var
layer_tool_manager
=
GEN
.
getTool
({
job
:
job
,
step
:
step
,
layer
:
layer
.
name
})
drill_info
[
step
][
layer
.
name
]
=
layer_tool_manager
})
})
var
pcs_tool_manager
=
drill_info
[
pcs_step
];
var
array_tool_manager
=
drill_info
[
array_step
];
Object
.
keys
(
pcs_tool_manager
).
forEach
(
function
(
layer
){
Object
.
keys
(
pcs_tool_manager
[
layer
]).
forEach
(
function
(
key
){
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
data
=
{
job_id
:
JobId
,
layer_name
:
layer
,
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
,
finish_slot_length
:
tool
.
slot_len
,
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"}
}
if
(
!
array_count
){
delete
data
.
array_count
}
var
id
=
IKM
.
crud
(
"selectValue"
,{
table
:
'pdm_job_cam_drill'
,
field
:
"id"
,
where
:{
job_id
:
JobId
,
layer_name
:
layer
,
tool_num
:
key
}
})
if
(
/done/ig
.
test
(
id
)){
IKM
.
crud
(
"insertRow"
,{
table
:
'pdm_job_cam_drill'
,
data
:
data
,
return_field
:
'id'
,
})
}
else
{
IKM
.
crud
(
"updateRow"
,{
table
:
'pdm_job_cam_drill'
,
where
:
{
id
:
id
},
data
:
data
,
update_policy
:{
tags
:
'array_append'
,
attr_data
:
'json_merge'
}
})
}
})
})
GUI
.
msg
(
"Done"
)
return
'Done'
;
}
catch
(
error
)
{
GUI
.
msg
(
error
);
return
'Error'
;
}
function
UPLOAD_LAYER_MATRIX
(
props
){
var
job
=
props
.
job
props
.
jobcategory
=
props
.
jobcategory
||
"work"
var
matrix
=
ANALYSIS_STACKUP
({
job
:
job
,
jobcategory
:
props
.
jobcategory
});
var
func
=
'function(ARGV)
\
{
\
var jobId = ARGV["job_id"];
\
var tableName = "pdm_job_" + ARGV["jobcategory"] + "_layer";
\
//GUI.msgbox({text: TDataParse.variant2JsonStr(tableName)});
\
var db = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
\
db.begin();
\
try{
\
var oLayers = db.selectMapMap({table:tableName, field:["odb_name","release_status"], where:{job_id:jobId}, uniquefield:"odb_name"});
\
if (db.lastError().isValid()) throw db.lastError();
\
//GUI.msgbox({text: TDataParse.variant2JsonStr(oLayers)});
\
\
db.deleteRow({table:tableName, where:{job_id:jobId}});
\
if (db.lastError().isValid()) throw db.lastError();
\
\
var fieldLst = ["name", "odb_context", "odb_type", "odb_polarity", "odb_side", "drl_start", "drl_end",
\
"row_num", "type", "drl_start_num", "drl_end_num", "drl_from_num", "drl_to_num", "drl_connect_to",
\
"odb_name", "side", "stackup_num", "customer_field", "input_file_name", "odb_row_num"];
\
\
for (var i=0;i<ARGV["layers"].length;i++)
\
{
\
layerName = ARGV["layers"][i];
\
var layerInfo = ARGV["matrix"][layerName];
\
var tmpData = {"job_id":jobId, "name": layerInfo["name"]};
\
if (ARGV["releasestatus"] != undefined && ARGV["releasestatus"] != null && ARGV["releasestatus"].length>0
\
&& ARGV["releasestatus"][layerInfo["odb_name"]] != undefined && ARGV["releasestatus"][layerInfo["odb_name"]] != null )
\
{
\
tmpData["release_status"] = ARGV["releasestatus"];
\
}
\
else
\
{
\
tmpData["release_status"] = oLayers.hasOwnProperty(layerInfo["odb_name"]) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;
\
}
\
for (n = 0; n < fieldLst.length; n++)
\
{
\
tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];
\
}
\
//GUI.msgbox({text: TDataParse.variant2JsonStr(tmpData)});
\
db.insertRow({table:tableName, data:tmpData});
\
if (db.lastError().isValid()) throw db.lastError();
\
}
\
db.commit();
\
return new TDataResponse();
\
}
\
catch (err)
\
{
\
print(err.text());
\
db.rollback();
\
return new TDataResponse(err, "");
\
}
\
}'
;
// var ret = IKM.command( func, // ?? =========================> tmp
// { job_id :JobId,
// matrix:matrix,
// layers: Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]}),
// jobcategory:props.jobcategory}, 1);
// if (ret.errText) {
// return {
// jobcategory:props.jobcategory,
// errText :ret.errText,
// errCode :ret.errCode,
// };
// }
return
matrix
}
function
ANALYSIS_STACKUP
(
props
){
var
job
=
props
.
job
if
(
!
props
.
hasOwnProperty
(
"jobcategory"
)){
props
.
jobcategory
=
'work'
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
layer_count
=
IKM
.
get_jobinfo
({
jobname
:
JobId
,
jobcategory
:
props
.
jobcategory
,
jobinfo
:
'layer_count'
});
if
(
!
layer_count
){
layer_count
=
GEN
.
getLayerCount
({
job
:
job
})
}
IKM
.
save_job_info
({
jobid
:
JobId
,
jobcategory
:
props
.
jobcategory
,
jobinfohash
:{
TL_layer_count
:
layer_count
}});
_
.
values
(
matrix
).
sort
(
function
(
a
,
b
){
return
a
.
row
-
b
.
row
}).
forEach
(
function
(
layer
){
layer
.
odb_name
=
layer
.
name
;
layer
.
name
=
layer
.
tl_name
;
layer
.
odb_context
=
layer
.
context
;
layer
.
odb_type
=
layer
.
layer_type
;
layer
.
odb_polarity
=
layer
.
polarity
;
layer
.
odb_side
=
layer
.
side
;
layer
.
row_num
=
layer
.
tl_num
;
layer
.
type
=
layer
.
tl_type
;
layer
.
side
=
layer
.
enum_tl_side
;
layer
.
input_file_name
=
layer
.
file_name
;
layer
.
odb_row_num
=
layer
.
row
;
if
(
layer
.
odb_name
==
'drill'
){
layer
.
name
=
'drill'
;
layer
.
drl_start_num
=
1
;
layer
.
drl_end_num
=
layer_count
;
layer
.
drl_from_num
=
1
;
layer
.
drl_to_num
=
layer_count
;
layer
.
type
=
'main_drill'
;
}
else
if
(
/^d_
(\d
+
)\-(\d
+
)
$/
.
test
(
layer
.
odb_name
)){
var
tmp
=
/^d
(\d
+
)\-(\d
+
)
$/
.
exec
(
layer
.
odb_name
)
var
drl_star
=
tmp
[
1
];
var
drl_end
=
tmp
[
2
];
layer
.
name
=
'drill'
+
drl_star
+
'-'
+
drl_end
;
layer
.
drl_start_num
=
drl_star
;
layer
.
drl_end_num
=
drl_end
;
layer
.
drl_from_num
=
drl_star
;
layer
.
drl_to_num
=
drl_end
;
if
(
drl_star
==
1
||
drl_end
==
layer_count
){
layer
.
type
=
'blind_drill'
;
// 埋孔
}
else
{
layer
.
type
=
'bury_drill'
;
// 盲孔
}
}
else
if
(
/^d
(\d
+
)\-(\d
+
)
$/
.
test
(
layer
.
odb_name
)){
var
tmp
=
/^d
(\d
+
)\-(\d
+
)
$/
.
exec
(
layer
.
odb_name
)
var
drl_star
=
tmp
[
1
];
var
drl_end
=
tmp
[
2
];
layer
.
name
=
'd'
+
drl_star
+
'-'
+
drl_end
;
layer
.
drl_start_num
=
drl_star
;
layer
.
drl_end_num
=
drl_end
;
layer
.
drl_from_num
=
drl_star
;
layer
.
drl_to_num
=
drl_end
;
layer
.
type
=
'laser_drill'
;
// 镭射孔
}
else
if
(
/
\-
a$/
.
test
(
layer
.
odb_name
)){
layer
.
side
=
'top'
;
if
(
!
layer
.
name
){
layer
.
name
=
'__'
+
layer
.
odb_name
+
'__'
}
if
(
!
layer
.
type
){
layer
.
type
=
'other'
}
}
else
if
(
/
\-
b$/
.
test
(
layer
.
odb_name
)){
layer
.
side
=
'bottom'
;
if
(
!
layer
.
name
){
layer
.
name
=
'__'
+
layer
.
odb_name
+
'__'
}
if
(
!
layer
.
type
){
layer
.
type
=
'other'
}
}
else
{
if
(
!
layer
.
name
){
layer
.
name
=
'__'
+
layer
.
odb_name
+
'__'
}
if
(
!
layer
.
type
){
layer
.
type
=
'other'
}
}
})
return
matrix
;
}
function
getMatrixInfo
(
props
){
// 获取matrix各种信息
var
job
=
props
.
job
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
res
=
{
matrix
:
matrix
,
// matrix
matrixVal
:
[],
// matrix 的 value数组
mSignal
:
{},
// board的signal层 {}
mSignals
:
[],
// board的signal层 []
mDrill
:
{},
// board的drill层
mDrills
:
[],
// board的drill层
mSolderMask
:
{},
// 防焊层
mSolderMasks
:
[],
// 防焊层
mOuters
:
[],
// 外层和对于的防旱
mBoardLayer
:
[]
// board层
}
for
(
var
key
in
matrix
)
{
var
value
=
matrix
[
key
]
res
.
matrixVal
.
push
(
value
)
if
(
value
.
context
==
"board"
){
res
.
mBoardLayer
.
push
(
key
)
switch
(
value
.
layer_type
)
{
case
"signal"
:
res
.
mSignal
[
key
]
=
value
res
.
mSignals
.
push
(
value
)
break
;
case
"drill"
:
res
.
mDrill
[
key
]
=
value
res
.
mDrills
.
push
(
value
)
break
;
case
"solder_mask"
:
res
.
mSolderMask
[
key
]
=
value
res
.
mSolderMasks
.
push
(
value
)
break
;
}
}
}
res
.
matrixVal
=
res
.
matrixVal
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
res
.
mSignals
=
res
.
mSignals
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
res
.
mDrills
=
res
.
mDrills
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
// 找出外层 以及外层对应的防焊层 [{signalL:"top", solderL:"smt"}]
res
.
mOuters
=
res
.
mSignals
.
reduce
(
function
(
a
,
b
){
if
(
b
.
tl_type
==
"outer"
){
var
solderLayers
=
res
.
mSolderMasks
.
filter
(
function
(
v
){
return
v
.
side
==
b
.
side
})
a
.
push
({
signalL
:
b
.
name
,
solderL
:
solderLayers
.
length
>
0
?
solderLayers
[
0
][
"name"
]
:
null
})
}
return
a
},[])
return
res
}
function
selCopyLayer
(
props
){
// 拷贝选择的到辅助层
var
layer
=
props
.
layer
var
job
=
props
.
job
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
layer
})
}
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
})
}
function
save_job_info
(
props
){
// todo 保存料号信息
}
function
analysis
(
props
){
var
job
=
props
.
job
||
Job
;
var
jobId
=
props
.
jobId
||
JobId
;
var
pcs_step
=
props
.
pcs_step
||
false
;
var
array_step
=
props
.
array_step
||
false
;
var
matrix
=
props
.
matrix
;
function
T_m_p
(
props
){
this
.
job
=
props
.
job
;
this
.
jobInfo
=
{};
this
.
jobId
=
props
.
jobId
;
if
(
props
.
pcs_step
){
this
.
pcs_step
=
props
.
pcs_step
;
}
if
(
props
.
matrix
){
this
.
matrix
=
props
.
matrix
;
}
if
(
props
.
array_step
){
this
.
array_step
=
props
.
array_step
;
}
this
.
matrixInfo
=
getMatrixInfo
({
job
:
this
.
job
})
this
.
init
();
}
T_m_p
.
prototype
.
init
=
function
(){
var
init_checking
=
[
"job"
,
"jobId"
,
"pcs_step"
,
"matrix"
];
var
t
=
this
;
init_checking
.
forEach
(
function
(
v
){
if
(
!
t
[
v
]){
t
.
e
(
v
+
" is undefined"
)}
})
}
T_m_p
.
prototype
.
e
=
function
(
e
){
// 处理error
console
.
log
(
e
)
throw
e
}
T_m_p
.
prototype
.
analysis_layer_count
=
function
(
props
){
// 分析board属性的层数量 []string
var
matrix
=
this
.
matrixInfo
.
matrixVal
;
var
res
=
matrix
.
filter
(
function
(
v
){
return
v
.
context
==
"board"
&&
props
.
indexOf
(
v
.
layer_type
)
>=
0
})
return
res
.
length
}
T_m_p
.
prototype
.
analysis_vc_card_size
=
function
(
props
){
// card短边尺寸 string
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
pcs_step
})[
props
].
toFixed
(
3
)
}
T_m_p
.
prototype
.
analysis_vc_array_size
=
function
(
props
){
// array长边尺寸 string
if
(
!
this
.
array_step
){
return
"error"
}
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
array_step
})[
props
].
toFixed
(
3
)
}
T_m_p
.
prototype
.
analysis_vc_pcs_count_on_panel
=
function
(
props
){
//
return
"_todo"
}
T_m_p
.
prototype
.
analysis_stack_vias_number
=
function
(
props
){
// via孔连续叠加的层数
var
t
=
this
;
var
res
;
// 找出 镭射孔
var
laser_layers
=
[]
for
(
var
key
in
t
.
matrix
)
{
var
val
=
t
.
matrix
[
key
]
if
(
val
.
type
==
"laser_drill"
){
laser_layers
.
push
(
val
)
}
}
if
(
laser_layers
.
length
==
0
){
return
"error"
}
GEN
.
openStep
({
job
:
t
.
job
,
name
:
t
.
pcs_step
})
laser_layers
=
laser_layers
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
var
laser_info
=
{}
for
(
var
i
=
0
;
i
<
laser_layers
.
length
-
1
;
i
++
){
var
start_layer
=
laser_layers
[
i
].
name
var
cover_layer
=
laser_layers
[
i
+
1
].
name
GEN
.
workLayer
({
name
:
start_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
cover_layer
,
use
:
'filter'
,
mode
:
'cover'
})
var
count
=
GEN
.
getSelectCount
()
if
(
count
>
0
){
if
(
!
laser_info
[
start_layer
]){
laser_info
[
start_layer
]
=
{}
}
laser_info
[
start_layer
].
drill_connect_layer
=
cover_layer
laser_info
[
start_layer
].
drill_connect_point
=
count
}
}
// via孔连续叠加的层数
var
via_vias_info
=
[]
function
analysis_via_number
(
layers
){
if
(
layers
.
length
<
2
){
return
}
var
startlayer
=
layers
[
0
].
name
+
"_cover"
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
layers
[
0
].
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
selCopyLayer
({
job
:
t
.
job
,
layer
:
startlayer
})
var
end_index
=
start_cover_next
(
startlayer
,
layers
,
0
)
via_vias_info
.
push
(
end_index
+
1
)
analysis_via_number
(
layers
.
slice
(
end_index
))
}
function
start_cover_next
(
start
,
layers
,
end_index
){
if
(
layers
.
length
<
2
){
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
return
end_index
}
layers
=
layers
.
slice
(
1
)
GEN
.
workLayer
({
name
:
start
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
layers
[
0
].
name
,
use
:
'filter'
,
mode
:
'cover'
})
var
count
=
GEN
.
getSelectCount
()
if
(
count
<
1
)
{
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
return
++
end_index
}
var
nextstartlayer
=
layers
[
0
].
name
+
"_cover"
selCopyLayer
({
job
:
t
.
job
,
layer
:
nextstartlayer
})
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
return
start_cover_next
(
nextstartlayer
,
layers
,
++
end_index
)
}
analysis_via_number
(
laser_layers
.
slice
())
if
(
via_vias_info
.
length
==
1
){
res
=
via_vias_info
[
0
]
}
else
{
res
=
via_vias_info
.
reduce
(
function
(
a
,
b
){
return
a
-
b
>
0
?
a
:
b
})
}
t
.
jobInfo
.
stack_vias_more
=
"no"
if
(
GEN
.
getLayerCount
({
job
:
t
.
job
})
>
14
&&
res
>=
12
){
t
.
jobInfo
.
stack_vias_more
=
"yes"
}
t
.
jobInfo
.
laser_info
=
laser_info
;
return
res
}
T_m_p
.
prototype
.
analysis_layer_exist
=
function
(
props
){
// 存在某某层? string
return
this
.
matrixInfo
.
matrix
.
hasOwnProperty
(
props
)
?
"yes"
:
"no"
}
T_m_p
.
prototype
.
analysis_laser_via_on_buried_hole
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_milling_bit_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_milling_length
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_board_has_attr
=
function
(
props
){
// board层中检查存在01005属性物件时
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
this
.
matrixInfo
.
mBoardLayer
,
clear_before
:
'yes'
});
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
attribute
:
props
})
var
res
=
GEN
.
getSelectCount
()
>
0
?
"yes"
:
"no"
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
});
GEN
.
selClearFeature
()
GEN
.
closeStep
()
return
res
}
T_m_p
.
prototype
.
analysis_vc_src_EDGE_PLATING
=
function
(
props
){
// ? 检查线路外形是否存在物件,存在则存yes
var
res
=
"no"
var
rout
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"rout"
})
// 找rout层
if
(
rout
.
length
==
0
){
return
"error:cant find rout layer"
}
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
try
{
this
.
matrixInfo
.
mSignals
.
forEach
(
function
(
v
){
// 用线路层逐层与rout层touch 找得到说明存在
GEN
.
workLayer
({
name
:
v
.
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
rout
[
0
].
name
,
mode
:
"touch"
,
use
:
"filter"
})
if
(
GEN
.
getSelectCount
()
>
0
){
throw
"yes"
}
GEN
.
clearLayers
()
})
}
catch
(
msg
)
{
res
=
msg
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
selClearFeature
()
}
GEN
.
closeStep
()
return
res
}
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_glod_finger_area
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_solder_mask_side
=
function
(){
// 检查防焊层所在面次
var
solder_paste_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_paste"
})
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
=
"no"
if
(
solder_paste_info
.
length
==
0
){
res
=
"no"
}
else
if
(
solder_paste_info
.
length
==
1
)
{
res
=
/top/ig
.
test
(
solder_paste_info
[
0
])
?
"top"
:
"bot"
}
else
{
res
=
"both"
}
return
res
}
T_m_p
.
prototype
.
analysis_silk_screen_side
=
function
(){
// 检查文字层所在面次
var
solder_mask_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_mask"
})
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
=
"no"
if
(
solder_mask_info
.
length
==
0
){
res
=
"no"
}
else
if
(
solder_mask_info
.
length
==
1
)
{
res
=
/top/ig
.
test
(
solder_mask_info
[
0
])
?
"top"
:
"bot"
}
else
{
res
=
"both"
}
return
res
}
T_m_p
.
prototype
.
analysis_min_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_pth_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_npth_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_min_slot_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_slot_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_slot_drl_length
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_spec_slot_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_spec_slot_drl_length
=
function
(){
// todo
return
"_todo"
}
return
new
T_m_p
({
job
:
job
,
jobId
:
jobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
}
function
tmp
(){
return
{
"sst"
:
{
"row"
:
"1"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
1000
,
"tl_name"
:
"sp_fr"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"sst"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
1000
,
"odb_row_num"
:
"1"
},
"spt"
:
{
"row"
:
"2"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
999
,
"tl_name"
:
"sp_fr(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
999
,
"odb_row_num"
:
"2"
},
"smt"
:
{
"row"
:
"3"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
998
,
"tl_name"
:
"sm_fr"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
998
,
"odb_row_num"
:
"3"
},
"top"
:
{
"row"
:
"4"
,
"type"
:
"outer"
,
"name"
:
"top"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1
,
"tl_name"
:
"top"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"top"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
1
,
"odb_row_num"
:
"4"
},
"isl2"
:
{
"row"
:
"5"
,
"type"
:
"inner"
,
"name"
:
"l2"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
2
,
"tl_name"
:
"l2"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
2
,
"odb_row_num"
:
"5"
},
"isl3"
:
{
"row"
:
"6"
,
"type"
:
"inner"
,
"name"
:
"l3"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
3
,
"tl_name"
:
"l3"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
3
,
"odb_row_num"
:
"6"
},
"isl4"
:
{
"row"
:
"7"
,
"type"
:
"inner"
,
"name"
:
"l4"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
4
,
"tl_name"
:
"l4"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
4
,
"odb_row_num"
:
"7"
},
"isl5"
:
{
"row"
:
"8"
,
"type"
:
"inner"
,
"name"
:
"l5"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
5
,
"tl_name"
:
"l5"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
5
,
"odb_row_num"
:
"8"
},
"isl6"
:
{
"row"
:
"9"
,
"type"
:
"inner"
,
"name"
:
"l6"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
6
,
"tl_name"
:
"l6"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
6
,
"odb_row_num"
:
"9"
},
"isl7"
:
{
"row"
:
"10"
,
"type"
:
"inner"
,
"name"
:
"l7"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
7
,
"tl_name"
:
"l7"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
7
,
"odb_row_num"
:
"10"
},
"isl8"
:
{
"row"
:
"11"
,
"type"
:
"inner"
,
"name"
:
"l8"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
8
,
"tl_name"
:
"l8"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
8
,
"odb_row_num"
:
"11"
},
"isl9"
:
{
"row"
:
"12"
,
"type"
:
"inner"
,
"name"
:
"l9"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
9
,
"tl_name"
:
"l9"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
9
,
"odb_row_num"
:
"12"
},
"bottom"
:
{
"row"
:
"13"
,
"type"
:
"outer"
,
"name"
:
"bottom"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
10
,
"tl_name"
:
"bottom"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"bottom"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
10
,
"odb_row_num"
:
"13"
},
"smb"
:
{
"row"
:
"14"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1013
,
"tl_name"
:
"sm_ba"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1013
,
"odb_row_num"
:
"14"
},
"spb"
:
{
"row"
:
"15"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1014
,
"tl_name"
:
"sp_ba"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1014
,
"odb_row_num"
:
"15"
},
"ssb"
:
{
"row"
:
"16"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1015
,
"tl_name"
:
"sp_ba(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"ssb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1015
,
"odb_row_num"
:
"16"
},
"d1-2"
:
{
"row"
:
"17"
,
"type"
:
"laser_drill"
,
"name"
:
"d1-2"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"isl2"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"isl2"
,
"drl_start_num"
:
"1"
,
"drl_end_num"
:
"2"
,
"tl_name"
:
"drill1-2"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10016
,
"odb_name"
:
"d1-2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10016
,
"odb_row_num"
:
"17"
,
"drl_from_num"
:
"1"
,
"drl_to_num"
:
"2"
},
"d2-3"
:
{
"row"
:
"18"
,
"type"
:
"laser_drill"
,
"name"
:
"d2-3"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl2"
,
"drl_end"
:
"isl3"
,
"gdrl_start"
:
"isl2"
,
"gdrl_end"
:
"isl3"
,
"drl_start_num"
:
"2"
,
"drl_end_num"
:
"3"
,
"tl_name"
:
"drill2-3"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10017
,
"odb_name"
:
"d2-3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10017
,
"odb_row_num"
:
"18"
,
"drl_from_num"
:
"2"
,
"drl_to_num"
:
"3"
},
"d3-4"
:
{
"row"
:
"19"
,
"type"
:
"laser_drill"
,
"name"
:
"d3-4"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl3"
,
"drl_end"
:
"isl4"
,
"gdrl_start"
:
"isl3"
,
"gdrl_end"
:
"isl4"
,
"drl_start_num"
:
"3"
,
"drl_end_num"
:
"4"
,
"tl_name"
:
"drill3-4"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10018
,
"odb_name"
:
"d3-4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10018
,
"odb_row_num"
:
"19"
,
"drl_from_num"
:
"3"
,
"drl_to_num"
:
"4"
},
"d4-5"
:
{
"row"
:
"20"
,
"type"
:
"laser_drill"
,
"name"
:
"d4-5"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl4"
,
"drl_end"
:
"isl5"
,
"gdrl_start"
:
"isl4"
,
"gdrl_end"
:
"isl5"
,
"drl_start_num"
:
"4"
,
"drl_end_num"
:
"5"
,
"tl_name"
:
"drill4-5"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10019
,
"odb_name"
:
"d4-5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10019
,
"odb_row_num"
:
"20"
,
"drl_from_num"
:
"4"
,
"drl_to_num"
:
"5"
},
"d5-6"
:
{
"row"
:
"21"
,
"type"
:
"laser_drill"
,
"name"
:
"d5-6"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl5"
,
"drl_end"
:
"isl6"
,
"gdrl_start"
:
"isl5"
,
"gdrl_end"
:
"isl6"
,
"drl_start_num"
:
"5"
,
"drl_end_num"
:
"6"
,
"tl_name"
:
"drill5-6"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10020
,
"odb_name"
:
"d5-6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10020
,
"odb_row_num"
:
"21"
,
"drl_from_num"
:
"5"
,
"drl_to_num"
:
"6"
},
"d6-7"
:
{
"row"
:
"22"
,
"type"
:
"laser_drill"
,
"name"
:
"d6-7"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl6"
,
"drl_end"
:
"isl7"
,
"gdrl_start"
:
"isl6"
,
"gdrl_end"
:
"isl7"
,
"drl_start_num"
:
"6"
,
"drl_end_num"
:
"7"
,
"tl_name"
:
"drill6-7"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10021
,
"odb_name"
:
"d6-7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10021
,
"odb_row_num"
:
"22"
,
"drl_from_num"
:
"6"
,
"drl_to_num"
:
"7"
},
"d7-8"
:
{
"row"
:
"23"
,
"type"
:
"laser_drill"
,
"name"
:
"d7-8"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl7"
,
"drl_end"
:
"isl8"
,
"gdrl_start"
:
"isl7"
,
"gdrl_end"
:
"isl8"
,
"drl_start_num"
:
"7"
,
"drl_end_num"
:
"8"
,
"tl_name"
:
"drill7-8"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10022
,
"odb_name"
:
"d7-8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10022
,
"odb_row_num"
:
"23"
,
"drl_from_num"
:
"7"
,
"drl_to_num"
:
"8"
},
"d8-9"
:
{
"row"
:
"24"
,
"type"
:
"laser_drill"
,
"name"
:
"d8-9"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl8"
,
"drl_end"
:
"isl9"
,
"gdrl_start"
:
"isl8"
,
"gdrl_end"
:
"isl9"
,
"drl_start_num"
:
"8"
,
"drl_end_num"
:
"9"
,
"tl_name"
:
"drill8-9"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10023
,
"odb_name"
:
"d8-9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10023
,
"odb_row_num"
:
"24"
,
"drl_from_num"
:
"8"
,
"drl_to_num"
:
"9"
},
"d9-10"
:
{
"row"
:
"25"
,
"type"
:
"laser_drill"
,
"name"
:
"d9-10"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl9"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"isl9"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
"9"
,
"drl_end_num"
:
"10"
,
"tl_name"
:
"drill9-10"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10024
,
"odb_name"
:
"d9-10"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10024
,
"odb_row_num"
:
"25"
,
"drl_from_num"
:
"9"
,
"drl_to_num"
:
"10"
},
"drill"
:
{
"row"
:
"26"
,
"type"
:
"main_drill"
,
"name"
:
"drill"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
1
,
"drl_end_num"
:
10
,
"tl_name"
:
"drill"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10025
,
"odb_name"
:
"drill"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10025
,
"odb_row_num"
:
"26"
,
"drl_from_num"
:
1
,
"drl_to_num"
:
10
},
"rout"
:
{
"row"
:
"27"
,
"type"
:
"other"
,
"name"
:
"__rout__"
,
"context"
:
"board"
,
"layer_type"
:
"rout"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"odb_name"
:
"rout"
,
"odb_context"
:
"board"
,
"odb_type"
:
"rout"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"odb_row_num"
:
"27"
},
"nclegend-1-2"
:
{
"row"
:
"28"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110027
,
"odb_name"
:
"nclegend-1-2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110027
,
"odb_row_num"
:
"28"
},
"nclegend-2-3"
:
{
"row"
:
"29"
,
"type"
:
"other"
,
"name"
:
"__nclegend-2-3__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110028
,
"odb_name"
:
"nclegend-2-3"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110028
,
"odb_row_num"
:
"29"
},
"nclegend-3-4"
:
{
"row"
:
"30"
,
"type"
:
"other"
,
"name"
:
"__nclegend-3-4__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110029
,
"odb_name"
:
"nclegend-3-4"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110029
,
"odb_row_num"
:
"30"
},
"nclegend-4-5"
:
{
"row"
:
"31"
,
"type"
:
"other"
,
"name"
:
"__nclegend-4-5__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110030
,
"odb_name"
:
"nclegend-4-5"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110030
,
"odb_row_num"
:
"31"
},
"nclegend-5-6"
:
{
"row"
:
"32"
,
"type"
:
"other"
,
"name"
:
"__nclegend-5-6__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110031
,
"odb_name"
:
"nclegend-5-6"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110031
,
"odb_row_num"
:
"32"
},
"nclegend-6-7"
:
{
"row"
:
"33"
,
"type"
:
"other"
,
"name"
:
"__nclegend-6-7__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110032
,
"odb_name"
:
"nclegend-6-7"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110032
,
"odb_row_num"
:
"33"
},
"nclegend-7-8"
:
{
"row"
:
"34"
,
"type"
:
"other"
,
"name"
:
"__nclegend-7-8__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110033
,
"odb_name"
:
"nclegend-7-8"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110033
,
"odb_row_num"
:
"34"
},
"nclegend-8-9"
:
{
"row"
:
"35"
,
"type"
:
"other"
,
"name"
:
"__nclegend-8-9__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110034
,
"odb_name"
:
"nclegend-8-9"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110034
,
"odb_row_num"
:
"35"
},
"nclegend-9-10"
:
{
"row"
:
"36"
,
"type"
:
"other"
,
"name"
:
"__nclegend-9-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110035
,
"odb_name"
:
"nclegend-9-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110035
,
"odb_row_num"
:
"36"
},
"nclegend-1-10"
:
{
"row"
:
"37"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110036
,
"odb_name"
:
"nclegend-1-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110036
,
"odb_row_num"
:
"37"
},
"outline"
:
{
"row"
:
"38"
,
"type"
:
"other"
,
"name"
:
"__outline__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110037
,
"odb_name"
:
"outline"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110037
,
"odb_row_num"
:
"38"
},
"top_assem"
:
{
"row"
:
"39"
,
"type"
:
"other"
,
"name"
:
"__top_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110038
,
"odb_name"
:
"top_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110038
,
"odb_row_num"
:
"39"
},
"bot_assem"
:
{
"row"
:
"40"
,
"type"
:
"other"
,
"name"
:
"__bot_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110039
,
"odb_name"
:
"bot_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110039
,
"odb_row_num"
:
"40"
},
"top_testpoint"
:
{
"row"
:
"41"
,
"type"
:
"other"
,
"name"
:
"__top_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110040
,
"odb_name"
:
"top_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110040
,
"odb_row_num"
:
"41"
},
"bot_testpoint"
:
{
"row"
:
"42"
,
"type"
:
"other"
,
"name"
:
"__bot_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110041
,
"odb_name"
:
"bot_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110041
,
"odb_row_num"
:
"42"
},
"top_osp"
:
{
"row"
:
"43"
,
"type"
:
"other"
,
"name"
:
"__top_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110042
,
"odb_name"
:
"top_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110042
,
"odb_row_num"
:
"43"
},
"bot_osp"
:
{
"row"
:
"44"
,
"type"
:
"other"
,
"name"
:
"__bot_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110043
,
"odb_name"
:
"bot_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110043
,
"odb_row_num"
:
"44"
},
"top_enig"
:
{
"row"
:
"45"
,
"type"
:
"other"
,
"name"
:
"__top_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110044
,
"odb_name"
:
"top_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110044
,
"odb_row_num"
:
"45"
},
"bot_enig"
:
{
"row"
:
"46"
,
"type"
:
"other"
,
"name"
:
"__bot_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110045
,
"odb_name"
:
"bot_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110045
,
"odb_row_num"
:
"46"
},
"fab_page2"
:
{
"row"
:
"47"
,
"type"
:
"other"
,
"name"
:
"__fab_page2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110046
,
"odb_name"
:
"fab_page2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110046
,
"odb_row_num"
:
"47"
},
"tmp_top_shorts"
:
{
"row"
:
"48"
,
"type"
:
"other"
,
"name"
:
"__tmp_top_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110047
,
"odb_name"
:
"tmp_top_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110047
,
"odb_row_num"
:
"48"
},
"tmp_bot_shorts"
:
{
"row"
:
"49"
,
"type"
:
"other"
,
"name"
:
"__tmp_bot_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110048
,
"odb_name"
:
"tmp_bot_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110048
,
"odb_row_num"
:
"49"
},
"bot_assy_mate"
:
{
"row"
:
"50"
,
"type"
:
"other"
,
"name"
:
"__bot_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110049
,
"odb_name"
:
"bot_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110049
,
"odb_row_num"
:
"50"
},
"outline+1"
:
{
"row"
:
"51"
,
"type"
:
"other"
,
"name"
:
"__outline+1__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110050
,
"odb_name"
:
"outline+1"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110050
,
"odb_row_num"
:
"51"
},
"top_assy_mate"
:
{
"row"
:
"52"
,
"type"
:
"other"
,
"name"
:
"__top_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110051
,
"odb_name"
:
"top_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110051
,
"odb_row_num"
:
"52"
}
}
}
function
tmp_2
(){
return
{
"cad"
:
{
"d1-2"
:
{
"1"
:
{
"count"
:
"06896"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d2-3"
:
{
"1"
:
{
"count"
:
"07430"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d3-4"
:
{
"1"
:
{
"count"
:
"06866"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d4-5"
:
{
"1"
:
{
"count"
:
"06413"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d5-6"
:
{
"1"
:
{
"count"
:
"08938"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d6-7"
:
{
"1"
:
{
"count"
:
"09057"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d7-8"
:
{
"1"
:
{
"count"
:
"07818"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d8-9"
:
{
"1"
:
{
"count"
:
"09126"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d9-10"
:
{
"1"
:
{
"count"
:
"08498"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"drill"
:
{
"1"
:
{
"count"
:
"05"
,
"num"
:
"1"
,
"type"
:
"non_plated"
,
"min_tol"
:
"3.15"
,
"max_tol"
:
"3.15"
,
"finish_size"
:
"15.748"
,
"drill_size"
:
"15.748"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"2"
:
{
"count"
:
"01"
,
"num"
:
"2"
,
"type"
:
"non_plated"
,
"min_tol"
:
"0"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"35.039"
,
"drill_size"
:
"35.039"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"3"
:
{
"count"
:
"01"
,
"num"
:
"3"
,
"type"
:
"non_plated"
,
"min_tol"
:
"3.15"
,
"max_tol"
:
"3.15"
,
"finish_size"
:
"35.039"
,
"drill_size"
:
"35.039"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"4"
:
{
"count"
:
"01"
,
"num"
:
"4"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"47.244"
,
"drill_size"
:
"47.244"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"5"
:
{
"count"
:
"05"
,
"num"
:
"5"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"59.055"
,
"drill_size"
:
"59.055"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"6"
:
{
"count"
:
"01"
,
"num"
:
"6"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"70.866"
,
"drill_size"
:
"70.866"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"7"
:
{
"count"
:
"01"
,
"num"
:
"7"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"74.803"
,
"drill_size"
:
"74.803"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
}
}
},
"stp"
:
{
"d1-2"
:
{},
"d2-3"
:
{},
"d3-4"
:
{},
"d4-5"
:
{},
"d5-6"
:
{},
"d6-7"
:
{},
"d7-8"
:
{},
"d8-9"
:
{},
"d9-10"
:
{},
"drill"
:
{
"1"
:
{
"count"
:
"08"
,
"num"
:
"1"
,
"type"
:
"non_plated"
,
"min_tol"
:
"0"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"118.11"
,
"drill_size"
:
"118.11"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
}
}
}
}
}
\ No newline at end of file
test/ATS_AIM_customer_data_analysis.js
View file @
ba8d156b
...
@@ -45,23 +45,38 @@
...
@@ -45,23 +45,38 @@
</body></html>
</body></html>
*/
*/
console
.
log
(
"=============================================>anaysis_start"
);
// 引入模块 包
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
_
=
require
(
'lodash'
);
var
IKM
=
$
.
ikm
;
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
;
var
Job
=
$
.
job
;
var
JobId
=
$
.
job_id
;
var
JobId
=
$
.
job_id
;
var
database
=
require
(
"topsin.database"
);
var
mode
=
"develop"
// 运行模式 develop 开发模式 方便调试
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
;
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
try
{
var
job
=
"1"
var
job
=
Job
;
var
pcs_step
=
"cad"
,
array_step
=
"stp"
;
var
pcs_step
=
"cad"
,
array_step
=
"stp"
;
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
console
.
log
(
"===================================> 1matrix"
)
var
analysis_obj
=
analysis
({
job
:
job
,
jobId
:
JobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
var
analysis_obj
=
analysis
({
job
:
job
,
jobId
:
JobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
var
config
=
{
var
config
=
{
jobInfo
:
{
jobInfo
:
{
...
@@ -95,8 +110,12 @@ try {
...
@@ -95,8 +110,12 @@ try {
max_slot_drl_length
:
true
,
// todo 2.0mm 最大槽孔
max_slot_drl_length
:
true
,
// todo 2.0mm 最大槽孔
max_spec_slot_drl_size
:
true
,
// todo 2.1mm 最大异形槽孔
max_spec_slot_drl_size
:
true
,
// todo 2.1mm 最大异形槽孔
max_spec_slot_drl_length
:
true
,
// todo 3.0mm 最大异形槽孔
max_spec_slot_drl_length
:
true
,
// todo 3.0mm 最大异形槽孔
},
layerInfo
:
{
}
}
}
}
console
.
log
(
"===================================> 2analysis_obj"
)
// 分析料号info
// 分析料号info
var
jobInfo
=
{}
var
jobInfo
=
{}
...
@@ -107,7 +126,7 @@ try {
...
@@ -107,7 +126,7 @@ try {
if
(
props
.
hasOwnProperty
(
"api"
)
&&
props
.
hasOwnProperty
(
"props"
)){
if
(
props
.
hasOwnProperty
(
"api"
)
&&
props
.
hasOwnProperty
(
"props"
)){
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
props
.
api
](
props
.
props
)
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
props
.
api
](
props
.
props
)
}
else
if
(
props
.
only_value
){
}
else
if
(
props
.
only_value
){
jobInfo
[
key
]
=
analysis_obj
[
key
]
jobInfo
[
key
]
=
analysis_obj
.
jobInfo
[
key
]
}
else
{
}
else
{
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
key
](
props
)
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
key
](
props
)
}
}
...
@@ -117,22 +136,27 @@ try {
...
@@ -117,22 +136,27 @@ try {
}
}
}
}
})
})
console
.
log
(
"===================================> 3 jobinfo"
)
// 过滤掉料号信息的 _todo 和 _error
// 过滤掉料号信息的 _todo 和 _error
for
(
var
key
in
jobInfo
)
{
for
(
var
key
in
jobInfo
)
{
if
(
jobInfo
[
key
]
===
"_todo"
||
jobInfo
[
key
]
===
"_error"
){
if
(
jobInfo
[
key
]
===
"_todo"
||
jobInfo
[
key
]
===
"_error"
){
delete
jobInfo
[
key
]
delete
jobInfo
[
key
]
}
}
}
}
console
.
log
(
"===================================> 4 save job info"
)
// 上传jobInfo IKM版本
// 上传jobInfo IKM版本
IKM
.
save_job_info
({
// IKM.save_job_info({
jobid
:
JobId
,
jobinfohash
:
jobInfo
})
// todo 上传jobInfo topjs3版本
// save_job_info({
// jobid: JobId,
// jobid: JobId,
// jobinfohash:
jobInfo
// jobinfohash:jobInfo
// })
// })
// 上传jobInfo topjs3版本
save_job_info
({
jobid
:
JobId
,
jobinfohash
:
jobInfo
})
console
.
log
(
"===================================> 5 save drill info"
)
// todo 设置钻孔层孔属性,镭射孔via,无铜孔npth,其余孔pth
// todo 设置钻孔层孔属性,镭射孔via,无铜孔npth,其余孔pth
...
@@ -172,34 +196,175 @@ try {
...
@@ -172,34 +196,175 @@ try {
attr_data
:
{}
// {"allowance": 2, "org_layer_name": "hhhh"}
attr_data
:
{}
// {"allowance": 2, "org_layer_name": "hhhh"}
}
}
if
(
!
array_count
){
delete
data
.
array_count
}
if
(
!
array_count
){
delete
data
.
array_count
}
var
id
=
IKM
.
crud
(
"selectValue"
,{
var
id
=
db
.
query
(
""
,
function
(
q
){
table
:
'pdm_job_cam_drill'
,
return
q
.
selectValue
({
field
:
"id"
,
table
:
'pdm_job_cam_drill'
,
where
:{
job_id
:
JobId
,
layer_name
:
layer
,
tool_num
:
key
}
field
:
"id"
,
})
where
:{
job_id
:
JobId
,
layer_name
:
layer
,
tool_num
:
key
}
if
(
/done/ig
.
test
(
id
)){
IKM
.
crud
(
"insertRow"
,{
table
:
'pdm_job_cam_drill'
,
data
:
data
,
return_field
:
'id'
,
})
})
});
if
(
/done/ig
.
test
(
id
)){
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
'pdm_job_cam_drill'
,
data
:
data
,
return_field
:
'id'
,
})
});
}
else
{
}
else
{
IKM
.
crud
(
"updateRow"
,{
db
.
query
(
""
,
function
(
q
){
table
:
'pdm_job_cam_drill'
,
return
q
.
updateRow
({
where
:
{
id
:
id
},
table
:
'pdm_job_cam_drill'
,
data
:
data
,
where
:
{
id
:
id
},
update_policy
:{
tags
:
'array_append'
,
attr_data
:
'json_merge'
}
data
:
data
,
})
update_policy
:{
tags
:
'array_append'
,
attr_data
:
'json_merge'
}
})
});
}
}
})
})
})
})
GUI
.
msg
(
"Done"
)
console
.
log
(
"===================================> 6 layer info"
)
return
'Done'
;
// 分析layer info
var
stepList
=
[
pcs_step
];
var
oChecklistName
=
"mychecklist"
var
signalLayers
=
analysis_obj
.
matrixInfo
.
mSignal
.
map
(
function
(
v
){
return
v
.
name
})
var
drillLayers
=
analysis_obj
.
matrixInfo
.
mDrill
.
map
(
function
(
v
){
return
v
.
name
})
var
info
=
{
min_line_width
:
[
"line"
],
min_line_spacing
:
[
"l2l"
],
min_line2pad
:
[
"p2line"
],
min_pad2pad
:
[
"p2p"
,
"smd2smd"
,
"smd2pad"
],
min_ar
:
[
"ar"
,
"pth_ar"
]
}
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
// 创建chklist并运行 如果chklist存在先删除
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
oChecklistName
}))
{
GEN
.
COM
(
"chklist_delete"
,
{
chklist
:
oChecklistName
})
}
createChklistAndRun
({
// 创建checklist并运行
layers
:
signalLayers
,
items
:
[{
name
:
"signal_layer_checks"
,
nact
:
1
,
action
:
"valor_analysis_signal"
,
erf
:
"S2_conductor_Check"
,
params
:
{
// ?
pp_layer
:
".affected"
,
pp_spacing
:
20
,
pp_selected
:
"All"
,
pp_r2c
:
10
,
pp_d2c
:
15
,
pp_sliver
:
8
,
pp_min_pad_overlap
:
5
,
pp_check_missing_pads_for_drills
:
"Yes"
,
pp_use_compensated_rout
:
"Skeleton"
,
pp_sm_spacing
:
"Yes"
}
}]
})
// signal层分析结果
var
res
=
analysisChkAttr
({
layers
:
signalLayers
,
info
:
info
,
step
:
step
,
job
:
job
,
oChecklistName
:
oChecklistName
})
// 铜面积
var
copper_percent_pcs
=
signalLayers
.
map
(
function
(
v
){
var
tmp
=
{
layer
:
v
}
tmp
.
copper_percent
=
GEN
.
copperArea
({
layer1
:
v
}).
percent
+
"%"
return
tmp
})
// 钻孔
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
:
matrix
[
v
][
"drl_start"
],
end
:
matrix
[
v
][
"drl_end"
]}
})
var
drillRes
=
analysisDrill
(
drillToSignals
,
step
)
// 钻孔分析结果
// 数据入库
Object
.
keys
(
res
).
forEach
(
function
(
key
){
var
val
=
res
[
key
]
save_layerinfo
({
jobid
:
JobId
,
layer
:
key
,
layerinfohash
:
val
})
})
copper_percent_pcs
.
forEach
(
function
(
item
){
save_layerinfo
({
jobid
:
JobId
,
layer
:
item
.
layer
,
layerinfohash
:
{
copper_percent
:
item
.
copper_percent
}
})
})
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
,
}
})
})
})
// smd
var
smdInfo
=
smdAnalysis
({
job
:
job
,
steplist
:[
pcs_step
],
layers
:
analysis_obj
.
matrixInfo
.
mOuters
,
attr
:
".smd"
})
var
save_info
=
[
smdInfo
,
analysis_obj
.
jobInfo
.
laser_info
];
// 保存 smd 和 bga数据
// 保存
console
.
log
(
"===================================> save layer info"
)
save_info
.
forEach
(
function
(
item
){
Object
.
keys
(
item
).
forEach
(
function
(
key
){
var
val
=
item
[
key
]
save_layerinfo
({
jobid
:
JobId
,
layer
:
key
,
layerinfohash
:
val
})
})
})
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
progress
:
33.33
},
where
:
{
id
:
$
.
task_id
}
});
if
(
GEN
.
hasError
())
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"GEN错误!"
,
detail
:
[{
desc
:
_
.
join
(
GEN
.
STATUS
,
"
\n
"
)
}]
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
}
catch
(
error
)
{
catch
(
e
)
{
GUI
.
msg
(
error
);
Status
=
'error'
;
return
'Error'
;
console
.
log
(
"====================================>error"
);
console
.
log
(
_
.
toString
(
e
));
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
function
UPLOAD_LAYER_MATRIX
(
props
){
function
UPLOAD_LAYER_MATRIX
(
props
){
...
@@ -419,6 +584,34 @@ function selCopyLayer(props){ // 拷贝选择的到辅助层
...
@@ -419,6 +584,34 @@ function selCopyLayer(props){ // 拷贝选择的到辅助层
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
})
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
})
}
}
function
save_job_info
(
props
){
// todo 保存料号信息
function
save_job_info
(
props
){
// todo 保存料号信息
var
jobid
=
props
.
jobid
;
var
jobinfohash
=
props
.
jobinfohash
;
Object
.
keys
(
jobinfohash
).
forEach
(
function
(
key
){
var
val
=
jobinfohash
[
key
];
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
'sys_user'
,
// todo
data
:{
jobid
:
jobid
,
todo
:
key
,
value
:
val
},
// todo
return_field
:
'id'
,
})
});
})
}
function
save_layerinfo
(
props
){
// todo 保存层信息
var
jobid
=
props
.
jobid
;
var
layer
=
props
.
layer
;
var
layerinfohash
=
props
.
layerinfohash
;
Object
.
keys
(
layerinfohash
).
forEach
(
function
(
key
){
var
val
=
layerinfohash
[
key
];
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
table
:
'sys_user'
,
// todo
data
:{
jobid
:
jobid
,
layer
:
layer
,
key
:
key
,
value
:
val
},
// todo
return_field
:
'id'
,
})
});
})
}
}
function
analysis
(
props
){
function
analysis
(
props
){
...
@@ -653,6 +846,263 @@ function analysis(props){
...
@@ -653,6 +846,263 @@ function analysis(props){
}
}
return
new
T_m_p
({
job
:
job
,
jobId
:
jobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
return
new
T_m_p
({
job
:
job
,
jobId
:
jobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
}
}
function
smdAnalysis
(
props
){
var
job
=
props
.
job
var
steplist
=
props
.
steplist
var
layers
=
props
.
layers
var
res
=
{}
steplist
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
step
:
step
})
layers
.
forEach
(
function
(
layer
){
// 计算开窗 数量
GEN
.
workLayer
({
name
:
layer
.
solderL
,
display_number
:
2
,
clear_before
:
'yes'
})
if
(
!
res
.
hasOwnProperty
(
layer
.
solderL
)){
res
[
layer
.
solderL
]
=
{}
}
GEN
.
selectByFilter
({
profile
:
'in'
})
GEN
.
selAllFeat
()
res
[
layer
.
solderL
].
sm_opening_count
=
GEN
.
getSelectCount
()
GEN
.
selClearFeature
()
// 分析最小smd宽高
GEN
.
workLayer
({
name
:
layer
.
signalL
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
attribute
:
props
.
attr
})
var
selCount
=
GEN
.
getSelectCount
()
if
(
selCount
>
0
){
var
tmp_layer
=
layer
.
signalL
+
"_tmp"
selCopyLayer
({
job
:
job
,
layer
:
tmp_layer
})
var
symbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
layer
:
tmp_layer
,
step
:
step
})
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
var
symbolInfo
=
symbolAnalysis
({
symbols
:
symbols
,
filterReg
:
/^rect/
})
if
(
!
res
.
hasOwnProperty
(
layer
.
signalL
)){
res
[
layer
.
signalL
]
=
{}
}
res
[
layer
.
signalL
][
"min_smd_width"
]
=
symbolInfo
[
"min_width"
]
res
[
layer
.
signalL
][
"min_smd_length"
]
=
symbolInfo
[
"min_length"
]
// 分析最小smd间距
// 创建一个checklist并且分析
var
min_smd_pitch
=
smdPitch
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
})
res
[
layer
.
signalL
][
"min_smd_pitch"
]
=
min_smd_pitch
// 分析开窗宽高
GEN
.
workLayer
({
name
:
layer
.
solderL
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
tmp_layer
,
use
:
'filter'
,
mode
:
'include'
})
GEN
.
selRefFeat
({
layers
:
tmp_layer
,
use
:
'filter'
,
mode
:
'cover'
})
var
solderL_tmp
=
layer
.
solderL
+
"_tmp"
selCopyLayer
({
job
:
job
,
layer
:
solderL_tmp
})
GEN
.
selClearFeature
()
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/
})
res
[
layer
.
signalL
].
min_smd_opening_width
=
symbolInfo_solder
[
"min_width"
]
res
[
layer
.
signalL
].
min_smd_opening_length
=
symbolInfo_solder
[
"min_length"
]
GEN
.
deleteLayer
({
job
:
job
,
layer
:
solderL_tmp
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
}
})
GEN
.
closeStep
()
})
return
res
}
function
symbolAnalysis
(
props
){
var
symbols
=
Object
.
keys
(
props
.
symbols
).
reduce
(
function
(
a
,
b
){
if
(
props
.
filterReg
.
test
(
b
)){
var
res
=
/^rect
(\d
+
\.\d
+|
\d
+
)
x
(\d
+
\.\d
+|
\d
+
)
/ig
.
exec
(
b
).
slice
(
1
)
var
num1
=
res
[
0
],
num2
=
res
[
1
]
if
(
num1
<=
num2
){
a
.
width
.
push
(
num1
)
a
.
length
.
push
(
num2
)
}
else
{
a
.
width
.
push
(
num2
)
a
.
length
.
push
(
num1
)
}
}
return
a
},{
width
:[],
length
:[]})
return
{
min_width
:
symbols
.
width
.
reduce
(
function
(
a
,
b
){
return
b
-
a
>
0
?
a
:
b
}),
min_length
:
symbols
.
length
.
reduce
(
function
(
a
,
b
){
return
b
-
a
>
0
?
a
:
b
})
}
}
function
smdPitch
(
props
){
var
job
=
props
.
job
var
step
=
props
.
step
var
layer
=
props
.
layer
var
ck
=
"tmp_chk"
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
ck
})){
GEN
.
COM
(
"chklist_delete"
,
{
chklist
:
ck
})
}
// 创建并运行
GEN
.
createChklist
({
// 创建checklist
chklist
:
ck
,
items
:
[{
name
:
"smdPitch"
,
nact
:
1
,
action
:
"valor_analysis_signal"
,
erf
:
"S2_conductor_Check"
,
params
:
{
pp_layer
:
".affected"
,
pp_spacing
:
20
,
pp_selected
:
"All"
,
pp_r2c
:
10
,
pp_d2c
:
15
,
pp_sliver
:
8
,
pp_min_pad_overlap
:
5
,
pp_check_missing_pads_for_drills
:
"Yes"
,
pp_use_compensated_rout
:
"Skeleton"
,
pp_sm_spacing
:
"Yes"
,
pp_tests
:
"Spacing
\\
;SMD"
,
pp_check_missing_pads_for_drills
:
"Yes"
}
}]
})
GEN
.
chklistShow
({
chklist
:
ck
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
layer
,
clear_before
:
"yes"
})
GEN
.
chklistRun
({
chklist
:
ck
,
nact
:
1
,
area
:
'profile'
})
var
tmp_layer1
=
"mk_1_"
+
layer
+
"_pitch"
var
tmp_layer2
=
"ms_1_"
+
layer
+
"_pitch"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer1
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer1
})
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer2
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer2
})
}
GEN
.
COM
(
"chklist_create_lyrs,chklist="
+
ck
+
",severity=3,suffix=pitch"
);
GEN
.
workLayer
({
name
:
tmp_layer2
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
attribute
:[{
attribute
:
".string"
,
text
:
"smd_pitch"
}]})
var
tmp_layer
=
tmp_layer2
+
"_tmp"
selCopyLayer
({
job
:
job
,
layer
:
tmp_layer
})
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
var
symbols
=
GEN
.
getLayerSymsHist
({
job
:
job
,
layer
:
tmp_layer
,
step
:
step
})
// 获取最小smd间距
var
res
=
_
.
values
(
symbols
).
sort
(
function
(
a
,
b
){
return
Number
(
a
.
size
)
-
Number
(
b
.
size
)})[
0
].
size
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer1
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer2
})
return
res
}
function
createChklistAndRun
(
par
)
{
var
checkLayers
=
par
.
layers
var
items
=
par
.
items
GEN
.
createChklist
({
// 创建checklist
chklist
:
oChecklistName
,
items
:
items
})
GEN
.
chklistShow
({
chklist
:
oChecklistName
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
checkLayers
,
clear_before
:
"yes"
})
items
.
forEach
(
function
(
v
){
GEN
.
chklistRun
({
chklist
:
oChecklistName
,
nact
:
v
.
nact
,
area
:
'profile'
})
})
}
function
analysisChkAttr
(
par
)
{
var
layers
=
par
.
layers
;
var
hash
=
{};
var
info
=
par
.
info
;
var
job
=
par
.
job
;
var
oChecklistName
=
par
.
oChecklistName
layers
.
forEach
(
function
(
v
)
{
hash
[
v
]
=
{}
Object
.
keys
(
info
).
forEach
(
function
(
key
)
{
var
val
=
info
[
key
]
hash
[
v
][
key
]
=
val
.
reduce
(
function
(
a
,
type
)
{
var
tmp
=
GEN
.
getCheckAttr
({
job
:
job
,
step
:
par
.
step
,
checklist
:
oChecklistName
,
nact
:
1
,
attr
:
v
+
"_min_"
+
type
})
if
(
a
===
"N/A"
&&
/
\d
+/
.
test
(
tmp
))
{
a
=
tmp
}
if
(
/
\d
+/
.
test
(
a
)
&&
/
\d
+/
.
test
(
tmp
)
&&
Number
(
tmp
)
<
Number
(
a
))
{
a
=
tmp
}
return
a
},
"N/A"
)
})
})
return
hash
}
function
analysisDrill
(
par
,
step
){
// {"layer":"d1-2","symbol":"r3.937","start":"top","end":"isl2"}
var
res
=
par
.
map
(
function
(
drill
){
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
drill
.
layer
,
clear_before
:
"yes"
,
mode
:
"all"
})
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
feat_types
:
"pad"
,
include_syms
:
drill
.
symbol
})
// 拷贝到_tmp
var
tmplayer
=
drill
.
layer
+
"_tmp"
if
(
GEN
.
isLayerExists
({
job
:
Job
,
layer
:
tmplayer
})){
GEN
.
deleteLayer
({
job
:
Job
,
step
:
step
,
layer
:
tmplayer
})}
GEN
.
selCopyOther
({
dest
:
"layer_name"
,
target_layer
:
tmplayer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
GEN
.
affectedLayer
({
affected
:
"no"
,
mode
:
"all"
})
GEN
.
selClearFeature
();
[
drill
.
start
,
drill
.
end
].
forEach
(
function
(
item
,
i
){
GEN
.
workLayer
({
name
:
item
,
display_number
:
1
,
clear_before
:
"yes"
})
GEN
.
selRefFeat
({
layers
:
tmplayer
,
use
:
"filter"
,
mode
:
"include"
,
f_types
:
"pad"
,
pads_as
:
"shape"
,
polarity
:
"positive"
,
include_syms
:
drill
.
symbol
,
filter
:
{
feat_types
:
'pad'
}
})
var
res
=
""
var
pads
=
GEN
.
getFeatures
({
job
:
Job
,
step
:
step
,
layer
:
item
,
options
:
"select"
})
if
(
pads
&&
pads
.
length
)
{
pads
=
pads
.
filter
(
function
(
item
){
return
/^r
\d
+/
.
test
(
item
.
symbol
)
})
pads
=
pads
.
sort
(
function
(
a
,
b
){
return
parseInt
(
a
.
symbol
)
-
parseInt
(
b
.
symbol
)
})
res
=
pads
[
0
].
symbol
.
slice
(
1
)
}
if
(
i
==
0
)
{
drill
.
drl_pad_top
=
res
}
else
if
(
i
==
1
){
drill
.
drl_pad_bot
=
res
}
})
GEN
.
deleteLayer
({
job
:
Job
,
step
:
step
,
layer
:
tmplayer
})
return
drill
})
return
res
}
function
tmp
(){
function
tmp
(){
return
{
return
{
...
...
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