pre cutover push

This commit is contained in:
Infineon\StieberD
2024-09-04 20:33:41 -07:00
parent 6ea6969f4b
commit 7762b129af
2072 changed files with 130000 additions and 95295 deletions

View File

@ -83,6 +83,7 @@ Function QA_Services(@Service, @Params)
Updated wafer image related services to require a tencor recipe to be specified. This allows
the application to store and view wafer images for separate tencor recipes
(e.g. 8IN_THIN ROTR vs. 8IN100_ROTR).
06/13/24 djm Add new stage-specific supplement system.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
@ -149,6 +150,7 @@ Declare function Min, Max, SRPSendMail, Btree.Extract, GetTickCount, HTTPClie
Declare function SRP_Encode, SRP_Decode, SRP_COM, QA_Services, RDS_Services, Obj_NCR, Logging_Services, Obj_Reactor
Declare function Get_Status, Set_Status, obj_WO_Mat, NextKey, MemberOf, FieldCount, obj_React_Status, Obj_Clean_Insp
Declare function Schedule_Services, Signature_Services, Date, Time, Datetime, Date_Services, SRP_Array, Math_Services
Declare function Supplement_Services, Reactor_Services
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
@ -1866,6 +1868,7 @@ Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
END
Query = 'SELECT REACT_STATE WITH SCHED_WO CONTAINING ':WONo
ClearSelect
Set_Status(0)
RList(Query, TARGET_ACTIVELIST$, '', '' '')
SchedReactors = ''
@ -1884,6 +1887,15 @@ Service PreEpiSignatureReady(RDSNo, Username, WaferQty, Reactor)
return
end
// Add check for supplement signatures
UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'VER')
If UnacknowledgedSupp NE FALSE$ then
ErrorMessage = 'The pre epi stage supplements must be acknowledged before the load operation can be signed.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
If Error_Services('NoError') then
Response = True$
end else
@ -2100,12 +2112,14 @@ end service
// Username - LSL Username of the operator signing the stage.
// WaferQty - User supplied wafer quantity to verify against the schedule.
// LLSide - Load lock side to be saved within the RDS record.
// PreFlag - Optional parameter. Skip pre-stage check(Used in Scanner)
// ReactNoOpt - Used in conjunction with above Pre-Flag. If skipping pre-stage check ReactorNo not saved to RDS record so need to pass it through
//
// Output:
// Response - True$ if LOAD stage is ready to be signed (all preconditions met and no errors encountered),
// False$ otherwise.
//----------------------------------------------------------------------------------------------------------------------
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOpt)
Error_Services('Clear')
If (RDSNo EQ '') or (Username EQ '') or (WaferQty EQ '') then
@ -2125,6 +2139,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
WONo = RDSRec<RDS_WO$>
CassNo = RDSRec<RDS_CASS_NO$>
Reactor = RDSRec<RDS_REACTOR$>
If Reactor EQ '' AND Assigned(ReactNoOpt) AND PreFlag EQ True$ then
Reactor = ReactNoOpt
end
PSN = RDSRec<RDS_PROD_SPEC_ID$>
LoadSig = RDSRec<RDS_OPERATOR_IN$>
WOStep = Xlate('RDS', RDSNo, 'WO_STEP', 'X')
@ -2135,7 +2152,16 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
SchedQty = RDSRec<RDS_CASS_WAFER_QTY$>
ParamOutOfSpec = Xlate('RDS', RDSNo, 'PARAM_OUT_OF_SPEC', 'X')
Supplement = RDSRec<RDS_SUPPLEMENT$>
ReactorCapacity = Reactor_Services('GetReactorAvailChamberCount', Reactor)
If ReactorCapacity LE 0 then
ErrorMessage = 'Process Error: Reactor ' : Reactor : ' does not have the capacity for this lot.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
If WaferQty NE SchedQty then
ErrorMessage = 'Process Error: Verified wafer quantity does not match the scheduled quantity.'
Error_Services('Set', ErrorMessage)
@ -2163,16 +2189,29 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
Response = False$
return
end
end
end
// Ensure recipe parameters (RDS Layer parameters) have been manually entered or automatically applied.
LSParmsComp = Xlate('RDS', RDSNo, 'LS_PARMS_COMP', 'X')
FirstParmsComp = LSParmsComp<1,1>
IF (FirstParmsComp EQ False$) THEN
ErrorMsg = 'Process Error: Recipe parameters have not been entered.'
LSParmsComp = Xlate('RDS', RDSNo, 'LS_PARMS_COMP', 'X')
Buf1 = DCount(LSParmsComp, @VM)
Buf2 = Sum(LSParmsComp)
If DCount(LSParmsComp, @VM) NE Sum(LSParmsComp) then
ErrorMsg = 'Process Error: Recipe parameters for layer(s) '
RDSLSKeys = Xlate('RDS', RDSNo, 'RDS_LS_SORTED', 'X')
For each LSParmFlag in LSParmsComp using @VM setting vPos
If Not(LSParmFlag) then
LayerNo = RDSLSKeys<0, vPos>
LayerNo = LayerNo[-1, 'B*']
ErrorMsg := LayerNo : ','
end
Next LSParmsComp
ErrorMsg[-1, 1] = ''
ErrorMsg := ' have not been entered.'
Error_Services('Set', ErrorMsg)
Response = False$
Response = False$
return
end
//Added 8/18/2021 JRO - checks to make sure recipe limits aren't oos
* IF ParamOutOfSpec then
* IF Supplement NE True$ then
@ -2277,7 +2316,7 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
Return
END
IF ReactorType NE 'EPP' THEN
* IF ReactorType NE 'EPP' THEN
If PreFlag EQ True$ then
// PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor
@ -2287,8 +2326,14 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
Stage = 'LOAD'
end
WOMatKey = WONo:'*':CassNo
Signature_Services('CheckSigOrder', WOMatKey, Stage)
If ReactorType EQ 'EPP' then
WOMatKey = ''
end else
WOMatKey = WONo:'*':CassNo
end
Signature_Services('CheckSigOrder', WOMatKey, Stage, False$, RDSNo)
If Error_Services('HasError') then
Response = False$
Return
@ -2304,15 +2349,16 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
* RETURN
* END
END ;* End of check for Epi Pro
* END ;* End of check for Epi Pro
SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
IF (SupplAckReq EQ True$) then
ErrorMsg = 'The RDS Supplement must be acknowledged before the load operation can be signed.'
Error_Services('Set', ErrorMsg)
Response = False$
Return
END
// Deprecated in favor of stage specific supplements
* SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X')
* IF (SupplAckReq EQ True$) then
* ErrorMsg = 'The RDS Supplement must be acknowledged before the load operation can be signed.'
* Error_Services('Set', ErrorMsg)
* Response = False$
* Return
* END
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
@ -2341,7 +2387,16 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
Error_Services('Set', ErrorMsg)
Response = False$
Return
END
END
// Add check for supplement signatures
UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD')
If UnacknowledgedSupp NE FALSE$ then
ErrorMessage = 'The LOAD stage supplements must be acknowledged before the load operation can be signed.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
If Error_Services('NoError') then
Response = True$
@ -2351,6 +2406,66 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag)
end service
Service LoadExtra1stReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$
end
end service
Service UnsignLoadExtra1stReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If LoadExtra1Signature NE '' then
If UnloadExtra2Signature EQ '' AND LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$
end
end
end service
Service LoadExtra2ndReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$
end
end service
Service UnsignLoadExtra2ndReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If LoadExtra2Signature NE '' then
If StandardUnloadSignature EQ '' then
Response = True$
end
end
end service
//----------------------------------------------------------------------------------------------------------------------
// SignLoadStage
@ -2395,7 +2510,15 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
TWAllSigned = Xlate('RDS', RDSNo, 'TW_ALL_SIGNED', 'X')
RunOrderNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
SchedQty = RDSRec<RDS_CASS_WAFER_QTY$>
CurrReactorLoadCapacity = Reactor_Services('GetReactorAvailChamberCount', Reactor)
If CurrReactorLoadCapacity LE 0 then
ErrorMsg = 'Error: Reactor load limit has been reached.'
Error_Services('Set', ErrorMsg)
Response = False$
return
end
IF ReactorType NE 'EPP' THEN
WOMatRec = XLATE('WO_MAT',WONo:'*':CassNo,'','X')
@ -2560,6 +2683,7 @@ Service SignLoadStage(RDSNo, Username, WaferQty, LLSide, ScanEntry)
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Load Stage signed onto Reactor ' : Reactor, Username)
If ReactorType EQ 'EPP' then
Reactor_Services('IncrementWfrMetrics', RDSNo)
end
@ -2632,41 +2756,39 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
end
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
IF ReactorType NE 'EPP' THEN
WOMatKey = WONo:'*':CassNo
Signature_Services('CheckSigOrder', WOMatKey, 'UNLOAD')
* IF ReactorType NE 'EPP' THEN
If ReactorType EQ 'EPP' then
WOMatKey = ''
end else
WOMatKey = WONo:'*':CassNo
end
Signature_Services('CheckSigOrder', WOMatKey, 'UNLOAD', RDSNo)
If Error_Services('HasError') then
Response = False$
return
end
! Deprecated 11/20/2019
* Set_Status(0)
* obj_WO_Mat('CheckSigOrder',WONo:'*':CassNo:@RM:WOStep:'UNLOAD')
*
* IF Get_Status(errCode) THEN
* ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("CheckSigOrder") within the ':Service:' service'
* Response = False$
* Error_Services('Set', ErrorMsg)
* return
* END ELSE
*
* ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')
* LOCATE 'LWI' IN ReactRunRec<REACT_RUN_CI_STAGE$> USING @VM SETTING Pos THEN
* CINo = ReactRunRec<REACT_RUN_CI_NO$>
* Actions = obj_Clean_Insp('GetActions',CINo)
* LOCATE 'Inspection' IN Actions<ACTION$ACTIONS> USING @FM SETTING Pos THEN
* IF Actions<ACTION$SIGS,1> = '' THEN
* ErrorMsg = 'Process Error: A Wafer Inspection is required and has not been completed.'
* Error_Services('Set', ErrorMsg)
* Response = False$
* return
* END
* END
* END
END ELSE
ReactRunRec = XLATE('REACT_RUN',RDSNo,'','X')
LOCATE 'LWI' IN ReactRunRec<REACT_RUN_CI_STAGE$> USING @VM SETTING Pos THEN
CINo = ReactRunRec<REACT_RUN_CI_NO$>
Actions = obj_Clean_Insp('GetActions',CINo)
LOCATE 'Inspection' IN Actions<ACTION$ACTIONS> USING @FM SETTING Pos THEN
IF Actions<ACTION$SIGS,1> = '' THEN
ErrorMsg = 'Process Error: A Wafer Inspection is required and has not been completed.'
Error_Services('Set', ErrorMsg)
Response = False$
return
END
END
END
END ;* End of check for EpiPRO (EPP) reactor type
*
* END ;* End of check for EpiPRO (EPP) reactor type
LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
If LWIInstAckReq EQ True$ then
@ -2739,6 +2861,15 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
Override_Services('SetOverride', 'RDS', RDSNo, 'UNLOAD_DTM', @User4)
end
// Add check for supplement signatures
UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'UNLOAD')
If UnacknowledgedSupp NE FALSE$ then
ErrorMessage = 'The UNLOAD stage supplements must be acknowledged before the unload operation can be signed.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
If Error_Services('NoError') then
Response = True$
end else
@ -2747,6 +2878,67 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
end service
Service UnloadExtra1stReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then
Response = True$
end
end service
Service UnloadExtra2ndReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$
end
end service
Service UnsignUnloadExtra1stReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If UnloadExtra1Signature NE '' then
If LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' AND LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$
end
end
end service
Service UnsignUnloadExtra2ndReady(RDSNo)
Response = False$
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
UnloadExtra1Signature = RDSRec<RDS_OP_OUT_EX1$>
LoadExtra1Signature = RDSRec<RDS_OP_IN_EX2$>
UnloadExtra2Signature = RDSRec<RDS_OP_OUT_EX2$>
LoadExtra2Signature = RDSRec<RDS_OP_IN_EX3$>
StandardUnloadSignature = RDSRec<RDS_OPERATOR_OUT$>
If UnloadExtra2Signature NE '' then
If LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
Response = True$
end
end
end service
//----------------------------------------------------------------------------------------------------------------------
// SignUnloadStage
@ -2950,6 +3142,7 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
end
If Error_Services('NoError') then
Rds_Services('AddComment', RDSNo, 'Unload Stage signed onto Reactor ' : Reactor, Username)
Response = True$
end else
Response = False$
@ -2976,14 +3169,6 @@ Service PostEpiSignatureReady(RDSNo, User)
return
end
PostEpiSig = RDSRec<RDS_POST_EPI_SIG$>
IF PostEpiSig NE '' then
ErrorMsg = 'Error in ':Service:' service. POST stage has already been signed.'
Error_Services('Add', ErrorMsg)
Response = False$
return
END
WONo = RDSRec<RDS_WO$>
CassNo = RDSRec<RDS_CASS_NO$>
Reactor = RDSRec<RDS_REACTOR$>
@ -3028,6 +3213,15 @@ Service PostEpiSignatureReady(RDSNo, User)
return
end
// Add check for supplement signatures
UnacknowledgedSupp = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'POST')
If UnacknowledgedSupp NE FALSE$ then
ErrorMessage = 'The post epi stage supplements must be acknowledged before the post epi operation can be signed.'
Error_Services('Set', ErrorMessage)
Response = False$
return
end
end service
@ -3261,20 +3455,13 @@ Service SignFQAStage(RDSNo, Username)
Response = False$
Return
end
! Deprecated 11/20/2019
* Set_Status(0)
* obj_WO_Mat('CheckSigOrder',WONo:'*':CassNo:@RM:WOStep:'QA')
* IF Get_Status(errCode) THEN
* ErrorMsg = 'Error calling Obj_WO_Mat("CheckSigOrder") within ':Service:'. Error code: ':errCode
* Error_Services('Add', ErrorMsg)
* END
Signature_Services('FQAReady', WOMatKey)
If Error_Services('HasError') then
Response = False$
Return
end
! Deprecated 11/20/2019
WOMatRec = ''
WOMatKey = WONo:'*':CassNo:@RM:WOStep
WOMatRec = XLATE('WO_MAT', WOMatKey, '', 'X')
@ -3701,9 +3888,11 @@ end service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors:
For counter = 0 to 8
ClearSelect counter
Next counter
return
@ -3712,3 +3901,6 @@ return