Fixed an issue preventing surfscan sort pass fail values from being evaluated for multiple scans. Updated CLEAN_INSP_ACTIONS to be able to retrieve UCL values from SPC for records related to WM_OUT records.
This commit is contained in:
@ -77,6 +77,7 @@ $Insert IFX_EQUATES
|
|||||||
Equ Comma$ to ','
|
Equ Comma$ to ','
|
||||||
|
|
||||||
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
|
Declare function Error_Services, Database_Services, Environment_Services, QA_Services, RDS_Services, MemberOf
|
||||||
|
Declare function SRP_Array
|
||||||
Declare subroutine Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log, Service_Services
|
Declare subroutine Error_Services, Database_Services, Post_Metrology_Manual_Data_Entry_Log, Service_Services
|
||||||
Declare subroutine Qa_Services
|
Declare subroutine Qa_Services
|
||||||
|
|
||||||
@ -467,7 +468,7 @@ WRITE_RECORD_PRE:
|
|||||||
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
||||||
NumFailedWafers = 0
|
NumFailedWafers = 0
|
||||||
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
||||||
WaferSort = ScanSortPerWafer<0, ScanRecipeIndex, WaferIndex>
|
WaferSort = ScanSortPerWafer<0, 0, WaferIndex>
|
||||||
If ( (WaferSOD NE '') or (WaferSort NE '') ) then
|
If ( (WaferSOD NE '') or (WaferSort NE '') ) then
|
||||||
// We have SOD data for this wafer so check if it is < SOD Max
|
// We have SOD data for this wafer so check if it is < SOD Max
|
||||||
If ( (WaferSOD LE SpecDefect) and (WaferSort NE 'FAIL') ) then
|
If ( (WaferSOD LE SpecDefect) and (WaferSort NE 'FAIL') ) then
|
||||||
@ -633,22 +634,29 @@ WRITE_RECORD_PRE:
|
|||||||
Case Stage _EQC 'POST'
|
Case Stage _EQC 'POST'
|
||||||
|
|
||||||
If SpecRecipes NE '' then
|
If SpecRecipes NE '' then
|
||||||
|
|
||||||
// Check each scan recipe.
|
// Check each scan recipe.
|
||||||
For each ScanRecipeName in ScanRecipes using @VM setting ScanRecipeIndex
|
For each ScanRecipeName in ScanRecipes using @VM setting ScanRecipeIndex
|
||||||
Locate ScanRecipeName in SpecRecipes using @VM setting SpecRecipeIndex then
|
Locate ScanRecipeName in SpecRecipes using @VM setting SpecRecipeIndex then
|
||||||
// Get UCL value from SPC for each spec recipe if they have not yet been retrieved.
|
// Get UCL value from SPC for each spec recipe if they have not yet been retrieved.
|
||||||
UCL = Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex>
|
UCL = Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex>
|
||||||
If (UCL EQ '') or (UCL EQ 0) then
|
If ( (UCL EQ '') or (UCL EQ 0) ) then
|
||||||
// The UCL has not yet been retrieved from SPC or an error could have
|
If IsWmOut then
|
||||||
// occurred when the last attempt to retrieve it, so try to get it now.
|
WMOutKey = Record<CLEAN_INSP_WO_NO$>:'*':Record<CLEAN_INSP_WO_STEP$>:'*':Record<CLEAN_INSP_CASS_NO$>
|
||||||
UCL = QA_Services('PostUCLRequest', RDSKey, ScanRecipeName)
|
RDSKeys = Xlate('WM_OUT', WMOutKey, WM_OUT_RDS$, 'X')
|
||||||
If (UCL NE '') and (UCL NE 0) then
|
RDSKeys = SRP_Array('Clean', RDSKeys, 'TrimAndMakeUnique', 'X')
|
||||||
Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex> = UCL
|
If RDSKeys NE '' then RDSKey = RDSKeys<0, 1>
|
||||||
end else
|
end
|
||||||
ErrorMessage = 'Error retrieving UCL value from QA_Services in CLEAN_INSP_ACTIONS'
|
If (RDSKey NE '') then
|
||||||
Error_Services('Add', ErrorMessage)
|
// The UCL has not yet been retrieved from SPC or an error could have
|
||||||
end
|
// occurred when the last attempt to retrieve it, so try to get it now.
|
||||||
|
UCL = QA_Services('PostUCLRequest', RDSKey, ScanRecipeName)
|
||||||
|
If (UCL NE '') and (UCL NE 0) then
|
||||||
|
Record<CLEAN_INSP_SPEC_SUM_OF_DEF_AVG$, SpecRecipeIndex> = UCL
|
||||||
|
end else
|
||||||
|
ErrorMessage = 'Error retrieving UCL value from QA_Services in CLEAN_INSP_ACTIONS'
|
||||||
|
Error_Services('Add', ErrorMessage)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
SpecSampleQty = Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$, SpecRecipeIndex>
|
SpecSampleQty = Record<CLEAN_INSP_SPEC_SS_SAMP_QTY$, SpecRecipeIndex>
|
||||||
SpecDefect = Oconv(SpecDefects<0, SpecRecipeIndex>, 'MD0')
|
SpecDefect = Oconv(SpecDefects<0, SpecRecipeIndex>, 'MD0')
|
||||||
@ -666,7 +674,7 @@ WRITE_RECORD_PRE:
|
|||||||
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
SODAvg = OConv(ScanDefectsAvg<0, ScanRecipeIndex>, 'MD3')
|
||||||
NumFailedWafers = 0
|
NumFailedWafers = 0
|
||||||
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
For each WaferSOD in ScanSODPerWafer using @SVM setting WaferIndex
|
||||||
WaferSort = ScanSortPerWafer<0, ScanRecipeIndex, WaferIndex>
|
WaferSort = ScanSortPerWafer<0, 0, WaferIndex>
|
||||||
If ( (WaferSOD NE '') or (WaferSort NE '') ) then
|
If ( (WaferSOD NE '') or (WaferSort NE '') ) then
|
||||||
// We have SOD data for this wafer so check if it is < SOD Max
|
// We have SOD data for this wafer so check if it is < SOD Max
|
||||||
If ( (WaferSOD LE SpecDefect) and (WaferSort NE 'FAIL') ) then
|
If ( (WaferSOD LE SpecDefect) and (WaferSort NE 'FAIL') ) then
|
||||||
@ -700,10 +708,7 @@ WRITE_RECORD_PRE:
|
|||||||
Case (SigRequired EQ True$) AND (ScanSig EQ '')
|
Case (SigRequired EQ True$) AND (ScanSig EQ '')
|
||||||
ROTRAction = 'F'
|
ROTRAction = 'F'
|
||||||
ROTRActionReason = 'SurfScan signature is missing.'
|
ROTRActionReason = 'SurfScan signature is missing.'
|
||||||
Case (ScanDefect GT SpecDefect)
|
Case (ScanDefect GT SpecDefect) or ( Not(ROTREnabled) and (NumFailedWafers GT 0) ) or ( ROTREnabled and (NumFailedWafers GE ROTRFailLimit) )
|
||||||
ROTRAction = 'F'
|
|
||||||
ROTRActionReason = 'SurfScan data out of bounds.'
|
|
||||||
Case ROTREnabled and (NumFailedWafers GE ROTRFailLimit)
|
|
||||||
ROTRAction = 'F'
|
ROTRAction = 'F'
|
||||||
ROTRActionReason = 'SurfScan data out of bounds.'
|
ROTRActionReason = 'SurfScan data out of bounds.'
|
||||||
Case (ScanHaze GT SpecHaze)
|
Case (ScanHaze GT SpecHaze)
|
||||||
|
|||||||
Reference in New Issue
Block a user