apply abort metrology when specific sub modes are selected
This commit is contained in:
parent
bff81f70c4
commit
3c2a50af24
@ -45,7 +45,7 @@ Declare function Admin_User, Database_Services, Error_Services, Active_Directo
|
|||||||
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
|
Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg
|
||||||
|
|
||||||
GoToEvent Event for CtrlEntId else
|
GoToEvent Event for CtrlEntId else
|
||||||
// Event not implemented
|
// Event not implemented
|
||||||
end
|
end
|
||||||
|
|
||||||
Return EventFlow or 1
|
Return EventFlow or 1
|
||||||
@ -69,7 +69,7 @@ Event WINDOW.CREATE(CreateParam)
|
|||||||
Send_Message(@Window:'.EDT_LSL_USERS', "COLOR_BY_POS", 2, 0, ColorArray)
|
Send_Message(@Window:'.EDT_LSL_USERS', "COLOR_BY_POS", 2, 0, ColorArray)
|
||||||
Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 1, 0, ColorArray)
|
Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 1, 0, ColorArray)
|
||||||
Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 2, 0, ColorArray)
|
Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 2, 0, ColorArray)
|
||||||
Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 3, 0, ColorArray)
|
Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 3, 0, ColorArray)
|
||||||
end
|
end
|
||||||
|
|
||||||
End Event
|
End Event
|
||||||
@ -98,7 +98,7 @@ Event WINDOW.READ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
If EventFlow EQ EVENT_CONTINUE$ then
|
If EventFlow EQ EVENT_CONTINUE$ then
|
||||||
|
|
||||||
GoSub UnlockRec
|
GoSub UnlockRec
|
||||||
|
|
||||||
Key = Get_Property(@Window:'.EDL_NOTIFICATION_ID', 'TEXT')
|
Key = Get_Property(@Window:'.EDL_NOTIFICATION_ID', 'TEXT')
|
||||||
@ -172,7 +172,7 @@ end event
|
|||||||
|
|
||||||
|
|
||||||
Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus)
|
Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus)
|
||||||
|
|
||||||
EventFlow = EVENT_CONTINUE$
|
EventFlow = EVENT_CONTINUE$
|
||||||
OrigRec = Get_Property(@Window, '@RECORD')
|
OrigRec = Get_Property(@Window, '@RECORD')
|
||||||
EditRec = Get_Property(@Window, '@EDIT_RECORD')
|
EditRec = Get_Property(@Window, '@EDIT_RECORD')
|
||||||
@ -193,7 +193,7 @@ Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus)
|
|||||||
end
|
end
|
||||||
|
|
||||||
If EventFlow EQ EVENT_CONTINUE$ then
|
If EventFlow EQ EVENT_CONTINUE$ then
|
||||||
|
|
||||||
Set_Property(@Window, '@NEW_REC', False$)
|
Set_Property(@Window, '@NEW_REC', False$)
|
||||||
GoSub UnlockRec
|
GoSub UnlockRec
|
||||||
Forward_Event()
|
Forward_Event()
|
||||||
@ -305,7 +305,7 @@ Event PUB_LU_ID.CLICK()
|
|||||||
end
|
end
|
||||||
|
|
||||||
If EventFlow EQ EVENT_CONTINUE$ then
|
If EventFlow EQ EVENT_CONTINUE$ then
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PSELECT$> = 1
|
TypeOver<PSELECT$> = 1
|
||||||
NotifyID = Popup(@WINDOW,TypeOver,'NOTIFICATION')
|
NotifyID = Popup(@WINDOW,TypeOver,'NOTIFICATION')
|
||||||
@ -342,7 +342,7 @@ Event EDL_NOTIFICATION_ID.OPTIONS()
|
|||||||
end
|
end
|
||||||
|
|
||||||
If EventFlow EQ EVENT_CONTINUE$ then
|
If EventFlow EQ EVENT_CONTINUE$ then
|
||||||
|
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PSELECT$> = 1
|
TypeOver<PSELECT$> = 1
|
||||||
NotifyID = Popup(@WINDOW,TypeOver,'NOTIFICATION')
|
NotifyID = Popup(@WINDOW,TypeOver,'NOTIFICATION')
|
||||||
@ -352,7 +352,7 @@ Event EDL_NOTIFICATION_ID.OPTIONS()
|
|||||||
Set_Property(CtrlEntId, 'TEXT', NotifyID)
|
Set_Property(CtrlEntId, 'TEXT', NotifyID)
|
||||||
Post_Event(@Window, 'READ')
|
Post_Event(@Window, 'READ')
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end event
|
end event
|
||||||
@ -373,7 +373,7 @@ end event
|
|||||||
|
|
||||||
|
|
||||||
Event EDL_NOTIFICATION_ID.LOSTFOCUS(Flag, FocusID)
|
Event EDL_NOTIFICATION_ID.LOSTFOCUS(Flag, FocusID)
|
||||||
|
|
||||||
If Flag EQ 1 then
|
If Flag EQ 1 then
|
||||||
GoSub UnlockRec
|
GoSub UnlockRec
|
||||||
Post_Event(@Window, 'READ')
|
Post_Event(@Window, 'READ')
|
||||||
@ -396,7 +396,7 @@ Event PUB_ADD_USERS.CLICK()
|
|||||||
NewUserIDs = Popup(@WINDOW,'','SHOW_USERS')
|
NewUserIDs = Popup(@WINDOW,'','SHOW_USERS')
|
||||||
|
|
||||||
If ( (NewUserIDs NE '') and (NewUserIDs NE CHAR(27)) ) then
|
If ( (NewUserIDs NE '') and (NewUserIDs NE CHAR(27)) ) then
|
||||||
|
|
||||||
For I = 1 TO COUNT(NewUserIDs,@VM) + (NewUserIDs NE '')
|
For I = 1 TO COUNT(NewUserIDs,@VM) + (NewUserIDs NE '')
|
||||||
NewUserID = NewUserIDs<1,I>
|
NewUserID = NewUserIDs<1,I>
|
||||||
Locate NewUserID in CurrUserIDs by 'AL' using @VM setting POS else
|
Locate NewUserID in CurrUserIDs by 'AL' using @VM setting POS else
|
||||||
@ -449,7 +449,7 @@ Event PUB_ADD_GROUPS.CLICK()
|
|||||||
|
|
||||||
GroupArray = Get_Property(@Window:'.EDT_AD_GROUPS', 'ARRAY')
|
GroupArray = Get_Property(@Window:'.EDT_AD_GROUPS', 'ARRAY')
|
||||||
GroupIds = GroupArray<1>
|
GroupIds = GroupArray<1>
|
||||||
|
|
||||||
LSLUserNames = ''
|
LSLUserNames = ''
|
||||||
LSLNames = ''
|
LSLNames = ''
|
||||||
If GroupIds NE '' then
|
If GroupIds NE '' then
|
||||||
@ -457,7 +457,7 @@ Event PUB_ADD_GROUPS.CLICK()
|
|||||||
MemberList = Active_Directory_Services('GetADGroupMembersByGroupName', GroupId, 'INFINEON')
|
MemberList = Active_Directory_Services('GetADGroupMembersByGroupName', GroupId, 'INFINEON')
|
||||||
MemberList = SRP_Array('Rotate', MemberList, @FM, @VM)
|
MemberList = SRP_Array('Rotate', MemberList, @FM, @VM)
|
||||||
ADUserNames = MemberList<1>
|
ADUserNames = MemberList<1>
|
||||||
|
|
||||||
Open 'DICT.LSL_USERS' to hDict then
|
Open 'DICT.LSL_USERS' to hDict then
|
||||||
For each ADUserName in ADUserNames using @VM setting vPos
|
For each ADUserName in ADUserNames using @VM setting vPos
|
||||||
Query = 'DOMAIN_USERNAME':@VM:ADUserName:@FM
|
Query = 'DOMAIN_USERNAME':@VM:ADUserName:@FM
|
||||||
@ -642,3 +642,4 @@ UnlockRec:
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1055,7 +1055,6 @@ end service
|
|||||||
Service ConvertRecordToJSON(KeyID, Record, itemURL)
|
Service ConvertRecordToJSON(KeyID, Record, itemURL)
|
||||||
|
|
||||||
jsonRecord = ''
|
jsonRecord = ''
|
||||||
|
|
||||||
If KeyID NE '' then
|
If KeyID NE '' then
|
||||||
|
|
||||||
If Record EQ '' then Record = Database_Services('ReadDataRow', 'RDS', KeyID)
|
If Record EQ '' then Record = Database_Services('ReadDataRow', 'RDS', KeyID)
|
||||||
@ -1231,7 +1230,9 @@ Service ConvertRecordToJSON(KeyID, Record, itemURL)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service GetRDSMoves(ReportDTM)
|
Service GetRDSMoves(ReportDTM)
|
||||||
|
|
||||||
DatesToSearch = ''
|
DatesToSearch = ''
|
||||||
ReportDTM = FIELD(ReportDTM, ' ', 1)
|
ReportDTM = FIELD(ReportDTM, ' ', 1)
|
||||||
query = 'SELECT RDS WITH DATE_OUT EQ ': QUOTE(ReportDTM)
|
query = 'SELECT RDS WITH DATE_OUT EQ ': QUOTE(ReportDTM)
|
||||||
@ -1261,7 +1262,9 @@ Service GetRDSMoves(ReportDTM)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SignUnloadExtra1(RDSNo, LSLUserName)
|
Service SignUnloadExtra1(RDSNo, LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1288,7 +1291,9 @@ Service SignUnloadExtra1(RDSNo, LSLUserName)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignUnloadExtra1(RDSNo, LSLUserName)
|
Service UnsignUnloadExtra1(RDSNo, LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1323,9 +1328,12 @@ Service UnsignUnloadExtra1(RDSNo, LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Unsign Load Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Unsign Load Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SignLoadExtra1(RDSNo,LSLUserName)
|
Service SignLoadExtra1(RDSNo,LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1359,9 +1367,12 @@ Service SignLoadExtra1(RDSNo,LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignLoadExtra1(RDSNo, LSLUserName)
|
Service UnsignLoadExtra1(RDSNo, LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1385,10 +1396,12 @@ Service UnsignLoadExtra1(RDSNo, LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Unsign Load Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Unsign Load Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SignUnloadExtra2(RDSNo,LSLUserName)
|
Service SignUnloadExtra2(RDSNo,LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1412,9 +1425,12 @@ Service SignUnloadExtra2(RDSNo,LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignUnloadExtra2(RDSNo, LSLUserName)
|
Service UnsignUnloadExtra2(RDSNo, LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1449,9 +1465,12 @@ Service UnsignUnloadExtra2(RDSNo, LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Unsign Unload Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Unsign Unload Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SignLoadExtra2(RDSNo,LSLUserName)
|
Service SignLoadExtra2(RDSNo,LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1484,9 +1503,12 @@ Service SignLoadExtra2(RDSNo,LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignLoadExtra2(RDSNo, LSLUserName)
|
Service UnsignLoadExtra2(RDSNo, LSLUserName)
|
||||||
|
|
||||||
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then
|
||||||
If RowExists('RDS', RDSNo) then
|
If RowExists('RDS', RDSNo) then
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
@ -1510,17 +1532,109 @@ Service UnsignLoadExtra2(RDSNo, LSLUserName)
|
|||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid user passed to Unsign Unload Extra 1 routine')
|
Error_Services('Add', 'Invalid user passed to Unsign Unload Extra 1 routine')
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
|
Service ApplyAbortMetrology(RdsKeys)
|
||||||
|
|
||||||
|
Result = False$
|
||||||
|
ErrorMsg = ''
|
||||||
|
If RdsKeys NE '' then
|
||||||
|
Convert @VM to @FM in RdsKeys
|
||||||
|
If RowExists('RDS', RdsKeys) then
|
||||||
|
For each RdsKey in RdsKeys using @FM
|
||||||
|
|
||||||
|
WoNo = Xlate('RDS', RdsKey, RDS_WO$, 'X')
|
||||||
|
// Set a flag on the CI record indicating the run was aborted
|
||||||
|
CleanInspKey = Xlate('RDS', RdsKey, '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$)
|
||||||
|
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then
|
||||||
|
// Change the QA metrology requirements to all wafers
|
||||||
|
CassNo = Xlate('RDS', RdsKey, '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$>
|
||||||
|
WoMatQaProfiles = WoMatQaRec<WO_MAT_QA_PROFILE$>
|
||||||
|
WoMatQaSlots = WoMatQaRec<WO_MAT_QA_SLOT$>
|
||||||
|
WoMatQaWfrQtys = WoMatQaRec<WO_MAT_QA_WFR_QTY$>
|
||||||
|
WoMatQaProps = WoMatQaRec<WO_MAT_QA_PROP$>
|
||||||
|
WoMatQaToolClasses = WoMatQaRec<WO_MAT_QA_TOOL_CLASS$>
|
||||||
|
WoMatQaRecipes = WoMatQaRec<WO_MAT_QA_RECIPE$>
|
||||||
|
WoMatQaRecipePatterns = WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$>
|
||||||
|
WoMatQaMin = WoMatQaRec<WO_MAT_QA_MIN$>
|
||||||
|
WoMatQaMax = WoMatQaRec<WO_MAT_QA_MAX$>
|
||||||
|
WoMatQaOOS = WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||||
|
StageCount = DCount(WoMatQaStages, @VM)
|
||||||
|
For stageIdx = 1 to StageCount
|
||||||
|
If (WoMatQaStages<0, stageIdx> _EQC 'QA') and (WoMatQaProfiles<0, stageIdx> _EQC '1ADE') then
|
||||||
|
Slot = WoMatQaSlots<0, stageIdx>
|
||||||
|
If (Slot _NEC 'L') then
|
||||||
|
WoMatQaSlots<0, stageIdx> = 'A'
|
||||||
|
WoMatQaWfrQtys<0, stageIdx> = WoWaferQty
|
||||||
|
end
|
||||||
|
If (Slot _EQC 'L') then
|
||||||
|
WoMatQaStages<0, stageIdx> = ''
|
||||||
|
WoMatQaProfiles<0, stageIdx> = ''
|
||||||
|
WoMatQaSlots<0, stageIdx> = ''
|
||||||
|
WoMatQaWfrQtys<0, stageIdx> = ''
|
||||||
|
WoMatQaProps<0, stageIdx> = ''
|
||||||
|
WoMatQaToolClasses<0, stageIdx> = ''
|
||||||
|
WoMatQaRecipes<0, stageIdx> = ''
|
||||||
|
WoMatQaRecipePatterns<0, stageIdx> = ''
|
||||||
|
WoMatQaMin<0, stageIdx> = ''
|
||||||
|
WoMatQaMax<0, stageIdx> = ''
|
||||||
|
WoMatQaOOS<0, stageIdx> = ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Next stageIdx
|
||||||
|
WoMatQaRec<WO_MAT_QA_STAGE$> = WoMatQaStages
|
||||||
|
WoMatQaRec<WO_MAT_QA_PROFILE$> = WoMatQaProfiles
|
||||||
|
WoMatQaRec<WO_MAT_QA_SLOT$> = WoMatQaSlots
|
||||||
|
WoMatQaRec<WO_MAT_QA_WFR_QTY$> = WoMatQaWfrQtys
|
||||||
|
WoMatQaRec<WO_MAT_QA_PROP$> = WoMatQaProps
|
||||||
|
WoMatQaRec<WO_MAT_QA_TOOL_CLASS$> = WoMatQaToolClasses
|
||||||
|
WoMatQaRec<WO_MAT_QA_RECIPE$> = WoMatQaRecipes
|
||||||
|
WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$> = WoMatQaRecipePatterns
|
||||||
|
WoMatQaRec<WO_MAT_QA_MIN$> = WoMatQaMin
|
||||||
|
WoMatQaRec<WO_MAT_QA_MAX$> = WoMatQaMax
|
||||||
|
WoMatQaRec<WO_MAT_QA_OUT_OF_SPEC$> = WoMatQaOOS
|
||||||
|
Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$)
|
||||||
|
If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage')
|
||||||
|
end
|
||||||
|
|
||||||
|
Next RdsKey
|
||||||
|
end else
|
||||||
|
Convert @FM to ',' in RdsKeys
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. One or more Rds records (':RdsKeys:') do not exist!'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Error in ':Service:' service. Null RdsKeys passed into service!'
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then
|
||||||
|
Error_Services('Add', ErrorMsg)
|
||||||
|
end else
|
||||||
|
Result = True$
|
||||||
|
end
|
||||||
|
|
||||||
|
end service
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Internal GoSubs
|
// Internal GoSubs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ClearCursors:
|
ClearCursors:
|
||||||
|
|
||||||
For counter = 0 to 8
|
For counter = 0 to 8
|
||||||
ClearSelect counter
|
ClearSelect counter
|
||||||
Next counter
|
Next counter
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ Function Reactor_Log_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Rec
|
|||||||
|
|
||||||
#pragma precomp SRP_PreCompiler
|
#pragma precomp SRP_PreCompiler
|
||||||
|
|
||||||
$Insert LOGICAL
|
$Insert APP_INSERTS
|
||||||
$Insert FILE.SYSTEM.EQUATES
|
$Insert FILE.SYSTEM.EQUATES
|
||||||
$Insert ACTION_SETUP
|
$Insert ACTION_SETUP
|
||||||
$Insert RDS_EQUATES
|
$Insert RDS_EQUATES
|
||||||
@ -56,10 +56,11 @@ $Insert REACTOR_EQUATES
|
|||||||
$Insert WO_MAT_EQUATES
|
$Insert WO_MAT_EQUATES
|
||||||
$Insert WO_MAT_QA_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 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
|
If KeyID then GoSub Initialize_System_Variables
|
||||||
|
|
||||||
@ -163,95 +164,44 @@ WRITE_RECORD_PRE:
|
|||||||
end
|
end
|
||||||
|
|
||||||
RdsKeys = Record<REACTOR_LOG_WAFERS_REMOVED_RDS$>
|
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
|
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)
|
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorLog'
|
||||||
|
LogDate = Oconv(Date(), 'D4/')
|
||||||
CurrentRds = ''
|
LogTime = Oconv(Time(), 'MTS')
|
||||||
|
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : 'Wafers Removed Log.csv'
|
||||||
For idx = 1 to Len(RdsKeys)
|
Headers = 'Logging DTM' : @FM : 'ReactorNo' : @FM : 'Notes'
|
||||||
CurrentRds = RdsKeys<idx>
|
objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$, True$)
|
||||||
// Set a flag on the CI record indicating the run was aborted
|
|
||||||
CleanInspKey = Xlate('RDS', CurrentRds, 'LWI_CI_NO', 'X')
|
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
|
||||||
CIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey)
|
|
||||||
CIRec<CLEAN_INSP_WAFERS_REMOVED$> = True$
|
// Log metrology modification attempt
|
||||||
Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, False$)
|
Swap @VM with ',' in RdsKeys
|
||||||
// Change the QA metrology requirements to all wafers
|
LogData = ''
|
||||||
CassNo = Xlate('RDS', CurrentRds, 'CASS_NO', 'X')
|
LogData<1> = LoggingDtm
|
||||||
WoMatQaKey = WoNo : '*' : CassNo
|
LogData<2> = ReactNo
|
||||||
WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X')
|
LogData<3> = 'Wafers removed from reactor, ReactorLog ':Name:'. Attempting to apply abort metrology on RdsKeys ':RdsKeys:'.'
|
||||||
WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X')
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
WoMatQaStages = WoMatQaRec<WO_MAT_QA_STAGE$>
|
|
||||||
Swap @VM with @FM in WoMatQaStages
|
Swap ',' with @FM in RdsKeys
|
||||||
WoMatQaProfiles = WoMatQaRec<WO_MAT_QA_PROFILE$>
|
Rds_Services('ApplyAbortMetrology', RdsKeys)
|
||||||
Swap @VM with @FM in WoMatQaProfiles
|
If Error_Services('HasError') then
|
||||||
WoMatQaSlots = WoMatQaRec<WO_MAT_QA_SLOT$>
|
// Log failure
|
||||||
Swap @VM with @FM in WoMatQaSlots
|
ErrorMsg = Error_Services('GetMessage')
|
||||||
WoMatQaWfrQtys = WoMatQaRec<WO_MAT_QA_WFR_QTY$>
|
LogData = ''
|
||||||
Swap @VM with @FM in WoMatQaWfrQtys
|
LogData<1> = LoggingDtm
|
||||||
WoMatQaProps = WoMatQaRec<WO_MAT_QA_PROP$>
|
LogData<2> = ReactNo
|
||||||
Swap @VM with @FM in WoMatQaProps
|
LogData<3> = 'Error applying abort metrology. Error message: ':ErrorMsg
|
||||||
WoMatQaToolClasses = WoMatQaRec<WO_MAT_QA_TOOL_CLASS$>
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
Swap @VM with @FM in WoMatQaToolClasses
|
end else
|
||||||
WoMatQaRecipes = WoMatQaRec<WO_MAT_QA_RECIPE$>
|
// Log success
|
||||||
Swap @VM with @FM in WoMatQaRecipes
|
LogData = ''
|
||||||
WoMatQaRecipePatterns = WoMatQaRec<WO_MAT_QA_RECIPE_PATTERN$>
|
LogData<1> = LoggingDtm
|
||||||
Swap @VM with @FM in WoMatQaRecipePatterns
|
LogData<2> = ReactNo
|
||||||
WoMatQaMin = WoMatQaRec<WO_MAT_QA_MIN$>
|
LogData<3> = 'Successfully applied abort metrology'
|
||||||
Swap @VM with @FM in WoMatQaMin
|
Logging_Services('AppendLog', objLog, LogData, @RM, @FM)
|
||||||
WoMatQaMax = WoMatQaRec<WO_MAT_QA_MAX$>
|
end
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -373,9 +323,11 @@ return
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ClearCursors:
|
ClearCursors:
|
||||||
|
|
||||||
For counter = 0 to 8
|
For counter = 0 to 8
|
||||||
ClearSelect counter
|
ClearSelect counter
|
||||||
Next counter
|
Next counter
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@ -427,14 +379,3 @@ Restore_System_Variables:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user