apply abort metrology when specific sub modes are selected
This commit is contained in:
@ -42,7 +42,7 @@ Function Reactor_Log_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Rec
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert LOGICAL
|
||||
$Insert APP_INSERTS
|
||||
$Insert FILE.SYSTEM.EQUATES
|
||||
$Insert ACTION_SETUP
|
||||
$Insert RDS_EQUATES
|
||||
@ -56,10 +56,11 @@ $Insert REACTOR_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
$Insert WO_MAT_QA_EQUATES
|
||||
|
||||
equ WOCust$ to 2
|
||||
Equ WOCust$ to 2
|
||||
Equ Comma$ to ','
|
||||
|
||||
Declare function Error_Services, Database_Services, Logging_Services, Environment_Services
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_Log_Services
|
||||
Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_Log_Services, Rds_Services
|
||||
|
||||
If KeyID then GoSub Initialize_System_Variables
|
||||
|
||||
@ -163,95 +164,44 @@ WRITE_RECORD_PRE:
|
||||
end
|
||||
|
||||
RdsKeys = Record<REACTOR_LOG_WAFERS_REMOVED_RDS$>
|
||||
Swap @VM with @FM in RdsKeys
|
||||
|
||||
If (Not(OrigWafersRemoved)) and (NewWafersRemoved EQ True$) and (ReactNo NE '') and (RdsKeys NE '') then
|
||||
ReactorConfigKey = 'WO_DAILY_SCHED':ReactNo
|
||||
WoNo = Field(Xlate('CONFIG', ReactorConfigKey, WOCust$, 'X'), ' ', 1)
|
||||
|
||||
CurrentRds = ''
|
||||
|
||||
For idx = 1 to Len(RdsKeys)
|
||||
CurrentRds = RdsKeys<idx>
|
||||
// Set a flag on the CI record indicating the run was aborted
|
||||
CleanInspKey = Xlate('RDS', CurrentRds, 'LWI_CI_NO', 'X')
|
||||
CIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
||||
CIRec<CLEAN_INSP_WAFERS_REMOVED$> = True$
|
||||
Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, False$)
|
||||
// Change the QA metrology requirements to all wafers
|
||||
CassNo = Xlate('RDS', CurrentRds, 'CASS_NO', 'X')
|
||||
WoMatQaKey = WoNo : '*' : CassNo
|
||||
WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X')
|
||||
WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X')
|
||||
WoMatQaStages = WoMatQaRec<WO_MAT_QA_STAGE$>
|
||||
Swap @VM with @FM in WoMatQaStages
|
||||
WoMatQaProfiles = WoMatQaRec<WO_MAT_QA_PROFILE$>
|
||||
Swap @VM with @FM in WoMatQaProfiles
|
||||
WoMatQaSlots = WoMatQaRec<WO_MAT_QA_SLOT$>
|
||||
Swap @VM with @FM in WoMatQaSlots
|
||||
WoMatQaWfrQtys = WoMatQaRec<WO_MAT_QA_WFR_QTY$>
|
||||
Swap @VM with @FM in WoMatQaWfrQtys
|
||||
WoMatQaProps = WoMatQaRec<WO_MAT_QA_PROP$>
|
||||
Swap @VM with @FM in WoMatQaProps
|
||||
WoMatQaToolClasses = WoMatQaRec<WO_MAT_QA_TOOL_CLASS$>
|
||||
Swap @VM with @FM in WoMatQaToolClasses
|
||||
WoMatQaRecipes = WoMatQaRec<WO_MAT_QA_RECIPE$>
|
||||
Swap @VM with @FM in WoMatQaRecipes
|
||||
WoMatQaRecipePatterns = WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$>
|
||||
Swap @VM with @FM in WoMatQaRecipePatterns
|
||||
WoMatQaMin = WoMatQaRec<WO_MAT_QA_MIN$>
|
||||
Swap @VM with @FM in WoMatQaMin
|
||||
WoMatQaMax = WoMatQaRec<WO_MAT_QA_MAX$>
|
||||
Swap @VM with @FM in WoMatQaMax
|
||||
WoMatQaOOS = WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
Swap @VM with @FM in WoMatQaOOS
|
||||
StageCount = DCount(WoMatQaStages, @FM)
|
||||
For stageIdx = 1 to StageCount
|
||||
If (WoMatQaStages<stageIdx> _EQC 'QA') and (WoMatQaProfiles<stageIdx> _EQC '1ADE') then
|
||||
Slot = WoMatQaSlots<stageIdx>
|
||||
If (Slot _NEC 'L') then
|
||||
WoMatQaSlots<stageIdx> = 'A'
|
||||
WoMatQaWfrQtys<stageIdx> = WoWaferQty
|
||||
end
|
||||
If (Slot _EQC 'L') then
|
||||
WoMatQaStages<stageIdx> = ''
|
||||
WoMatQaProfiles<stageIdx> = ''
|
||||
WoMatQaSlots<stageIdx> = ''
|
||||
WoMatQaWfrQtys<stageIdx> = ''
|
||||
WoMatQaProps<stageIdx> = ''
|
||||
WoMatQaToolClasses<stageIdx> = ''
|
||||
WoMatQaRecipes<stageIdx> = ''
|
||||
WoMatQaRecipePatterns<stageIdx> = ''
|
||||
WoMatQaMin<stageIdx> = ''
|
||||
WoMatQaMax<stageIdx> = ''
|
||||
WoMatQaOOS<stageIdx> = ''
|
||||
end
|
||||
end
|
||||
Next stageIdx
|
||||
Swap @FM with @VM in WoMatQaStages
|
||||
WoMatQaRec<WO_MAT_QA_STAGE$> = WoMatQaStages
|
||||
Swap @FM with @VM in WoMatQaProfiles
|
||||
WoMatQaRec<WO_MAT_QA_PROFILE$> = WoMatQaProfiles
|
||||
Swap @FM with @VM in WoMatQaSlots
|
||||
WoMatQaRec<WO_MAT_QA_SLOT$> = WoMatQaSlots
|
||||
Swap @FM with @VM in WoMatQaWfrQtys
|
||||
WoMatQaRec<WO_MAT_QA_WFR_QTY$> = WoMatQaWfrQtys
|
||||
Swap @FM with @VM in WoMatQaProps
|
||||
WoMatQaRec<WO_MAT_QA_PROP$> = WoMatQaProps
|
||||
Swap @FM with @VM in WoMatQaToolClasses
|
||||
WoMatQaRec<WO_MAT_QA_TOOL_CLASS$> = WoMatQaToolClasses
|
||||
Swap @FM with @VM in WoMatQaRecipes
|
||||
WoMatQaRec<WO_MAT_QA_RECIPE$> = WoMatQaRecipes
|
||||
Swap @FM with @VM in WoMatQaRecipePatterns
|
||||
WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$> = WoMatQaRecipePatterns
|
||||
Swap @FM with @VM in WoMatQaMin
|
||||
WoMatQaRec<WO_MAT_QA_MIN$> = WoMatQaMin
|
||||
Swap @FM with @VM in WoMatQaMax
|
||||
WoMatQaRec<WO_MAT_QA_MAX$> = WoMatQaMax
|
||||
Swap @FM with @VM in WoMatQaOOS
|
||||
WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$> = WoMatQaOOS
|
||||
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$)
|
||||
Next idx
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorLog'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
LogTime = Oconv(Time(), 'MTS')
|
||||
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : 'Wafers Removed Log.csv'
|
||||
Headers = 'Logging DTM' : @FM : 'ReactorNo' : @FM : 'Notes'
|
||||
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$, True$)
|
||||
|
||||
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||
|
||||
// Log metrology modification attempt
|
||||
Swap @VM with ',' in RdsKeys
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDtm
|
||||
LogData<2> = ReactNo
|
||||
LogData<3> = 'Wafers removed from reactor, ReactorLog ':Name:'. Attempting to apply abort metrology on RdsKeys ':RdsKeys:'.'
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
|
||||
Swap ',' with @FM in RdsKeys
|
||||
Rds_Services('ApplyAbortMetrology', RdsKeys)
|
||||
If Error_Services('HasError') then
|
||||
// Log failure
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDtm
|
||||
LogData<2> = ReactNo
|
||||
LogData<3> = 'Error applying abort metrology. Error message: ':ErrorMsg
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
end else
|
||||
// Log success
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDtm
|
||||
LogData<2> = ReactNo
|
||||
LogData<3> = 'Successfully applied abort metrology'
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
@ -373,9 +323,11 @@ return
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ClearCursors:
|
||||
|
||||
For counter = 0 to 8
|
||||
ClearSelect counter
|
||||
Next counter
|
||||
|
||||
return
|
||||
|
||||
|
||||
@ -427,14 +379,3 @@ Restore_System_Variables:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user