removed dead code
This commit is contained in:
@ -229,12 +229,6 @@ Service CalculateHgCVData(Datapoints)
|
||||
Min = Min(Min, DataPoint)
|
||||
Max = Max(Max, DataPoint)
|
||||
// Edge Mean Delta
|
||||
* If Index GE 6 AND Index LE 9 then
|
||||
* Delta1 = Delta1 + DataPoint
|
||||
* end
|
||||
* If Index GE 2 AND Index LE 5 then
|
||||
* Delta2 = Delta2 + DataPoint
|
||||
* end
|
||||
end
|
||||
// Range %
|
||||
Locate Index in RangePoints using ',' setting unusedIndex then
|
||||
@ -256,25 +250,15 @@ Service CalculateHgCVData(Datapoints)
|
||||
EdgeMean4mm = Edge4mmSum / 4
|
||||
EdgeMean10mm = Edge10mmSum / 4
|
||||
If EdgeMean10mm GT 0 then
|
||||
* Delta1Avg = Delta1/4
|
||||
* Delta2Avg = Delta2/4
|
||||
EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum) / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
|
||||
|
||||
// Range %
|
||||
Range = RangeMax - RangeMin
|
||||
NumRangePoints = DCount(RangePoints, ',')
|
||||
RangeAvg = RangeAvg / NumRangePoints
|
||||
RangePct = (Range / RangeAvg) * 100
|
||||
|
||||
* EdgeMeanDelta = OConv(IConv(EdgeMeanDelta, 'MD3L'), 'MD3L')
|
||||
* RangePct = OConv(IConv(RangePct, 'MD3L'), 'MD3L')
|
||||
end
|
||||
// Average
|
||||
Average = Sum / NumDataPoints
|
||||
* Average = OConv(IConv(Average, 'MD3L'), 'MD3L')
|
||||
* Min = OConv(IConv(Min, 'MD3L'), 'MD3L')
|
||||
* Max = OConv(IConv(Max, 'MD3L'), 'MD3L')
|
||||
|
||||
|
||||
Average = Sum / NumDataPoints
|
||||
FullAvg = ''
|
||||
TotalDataPoints = DCount(DataPoints, @VM)
|
||||
If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
|
||||
@ -361,25 +345,18 @@ Service PostROTRRequest(RDSNo)
|
||||
If Flag EQ 0 then
|
||||
If RequestKeyID EQ '' then
|
||||
WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
|
||||
FinalSigComp = False$
|
||||
* FinalSigComp = Signature_Services('FinalSigComp', WOMatKey)
|
||||
If FinalSigComp NE True$ then
|
||||
// This is a new request
|
||||
RequestDate = Date()
|
||||
RequestTime = Time()
|
||||
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
|
||||
RequestRow = ''
|
||||
Database_Services('WriteDataRow', 'ROTR_REQUESTS', RequestKeyID, RequestRow, True$, False$, True$)
|
||||
If Error_Services('NoError') then
|
||||
// Log success
|
||||
LogData<3> = 'Successfully posted ROTR request for ':RDSNo:'.'
|
||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'FQA signed for RDS ':RDSNo:' ignoring ROTR request.'
|
||||
end
|
||||
RequestDate = Date()
|
||||
RequestTime = Time()
|
||||
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
|
||||
RequestRow = ''
|
||||
Database_Services('WriteDataRow', 'ROTR_REQUESTS', RequestKeyID, RequestRow, True$, False$, True$)
|
||||
If Error_Services('NoError') then
|
||||
// Log success
|
||||
LogData<3> = 'Successfully posted ROTR request for ':RDSNo:'.'
|
||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
||||
end else
|
||||
ErrorMessage = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
|
||||
end
|
||||
@ -509,14 +486,7 @@ Service ProcessROTRRequest(RDSNo)
|
||||
ResponseCopy = Response
|
||||
Swap @FM with ',' in ResponseCopy
|
||||
LogData<3> = 'ROTR Status response: ':Response
|
||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
||||
* ROTRRec = ''
|
||||
* ROTRRec<ROTR.REACTOR_STATUS$> = Response<1>
|
||||
* ROTRRec<ROTR.REACTOR_STATUS_REASON$> = Response<2>
|
||||
* ROTRRec<ROTR.REACTOR_NCR_COUNT$> = Response<3>
|
||||
* ROTRRec<ROTR.REACTOR_ZERO_NCR_RUN_COUNT$> = Response<4>
|
||||
* ROTRRec<ROTR.REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
|
||||
* Database_Services('WriteDataRow', 'ROTR', LWICINo, ROTRRec, True$, False$, True$)
|
||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
||||
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$> = Response<1>
|
||||
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$> = Response<2>
|
||||
CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$> = Response<3>
|
||||
@ -524,7 +494,6 @@ Service ProcessROTRRequest(RDSNo)
|
||||
CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
|
||||
// Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
|
||||
// That routine will recalculate the final ROTR status.
|
||||
* CIRec<CLEAN_INSP_ROTR_UPDATE_FLAG$> = True$
|
||||
Database_Services('WriteDataRow', 'CLEAN_INSP', LWICINo, CIRec, True$, False$, True$)
|
||||
end else
|
||||
ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
|
||||
@ -569,6 +538,7 @@ end service
|
||||
//
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service GetROTRStatus(RDSKey)
|
||||
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey)
|
||||
WONo = RDSRec<RDS_WO$>
|
||||
RDSCassNo = RDSRec<RDS_CASS_NO$>
|
||||
@ -1287,100 +1257,6 @@ Service ProcessWaferImageRequests()
|
||||
end service
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// ProcessWaferImageRequests
|
||||
//
|
||||
// Service that attempts to process all wafer map image requests. These requests are queued in the
|
||||
// WAFER_IMAGE_REQUESTS table.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Service ProcessWaferImageRequestsOld()
|
||||
|
||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||
Lock hSysLists, ServiceKeyID then
|
||||
hWaferImageRequests = Database_Services('GetTableHandle', 'WAFER_IMAGE_REQUESTS')
|
||||
If Error_Services('NoError') then
|
||||
Sentence = 'SELECT WAFER_IMAGE_REQUESTS WITH RESPONSE_DATE EQ "" BY REQUEST_DATE BY REQUEST_TIME'
|
||||
Set_Status(0)
|
||||
RList(Sentence, TARGET_ACTIVELIST$, '', '', '')
|
||||
EOF = False$
|
||||
Loop
|
||||
ReadNext RequestKeyID else EOF = True$
|
||||
Until EOF
|
||||
RequestDate = Field(RequestKeyID, '*', 1)
|
||||
RequestTime = Field(RequestKeyID, '*', 2)
|
||||
RequestTime = RequestTime / 86400
|
||||
RequestTime = RequestTime[3, 5]
|
||||
RequestDTM = RequestDate:'.':RequestTime
|
||||
CurrDTM = Datetime()
|
||||
TimeInQueue = CurrDTM - RequestDTM
|
||||
If TimeInQueue LT 1 then
|
||||
Lock hWaferImageRequests, RequestKeyID then
|
||||
EncodedPDF = ''
|
||||
ResponseBody = ''
|
||||
RequestRow = Database_Services('ReadDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID)
|
||||
RDSNo = RequestRow<WAFER_IMAGE_REQUESTS.RDS_NO$>
|
||||
WaferNo = RequestRow<WAFER_IMAGE_REQUESTS.WAFER_NO$>
|
||||
TencorRecipe = RequestRow<WAFER_IMAGE_REQUESTS.TENCOR_RECIPE$>
|
||||
ReturnPDF = RequestRow<WAFER_IMAGE_REQUESTS.RETURN_PDF$>
|
||||
Reactor = Xlate('RDS', RDSNo, 'REACTOR', 'X')
|
||||
PSN = Xlate('RDS', RDSNo, 'PROD_SPEC_ID', 'X')
|
||||
// Format Wafer Number for SQL Query
|
||||
WaferNo = TrimF(WaferNo)
|
||||
If WaferNo < 10 then
|
||||
WaferNo = '*0' : WaferNo
|
||||
end else
|
||||
WaferNo = '*' : WaferNo
|
||||
end
|
||||
Query = "DECLARE @RDS varchar(10) " |
|
||||
: "DECLARE @RECIPE varchar(30) " |
|
||||
: "DECLARE @WFRID varchar(10) " |
|
||||
: "SET @RDS = '":RDSNo:"' " |
|
||||
: "SET @RECIPE = '":TencorRecipe:"' " |
|
||||
: "SET @WFRID = '":WaferNo:"' " |
|
||||
: "SELECT child.AttachmentID " |
|
||||
: "FROM Metrology.dbo.TencorRunHeader header " |
|
||||
: "INNER JOIN Metrology.dbo.TencorRunData child on header.id = child.headerid " |
|
||||
: "WHERE header.rds = @RDS and header.recipe like @RECIPE + '%' and child.slot = @WFRID " |
|
||||
: "ORDER BY header.insertDate DESC, child.slot ASC"
|
||||
|
||||
WaferMapDB = Environment_Services('GetMetrologyProductionPath')
|
||||
AttachmentID = SQL_Services('GetDataRows', 'SPC', Query)
|
||||
AttachmentID = SRP_Trim(AttachmentID, 'FB', '{}')
|
||||
WaferMapRoot = Environment_Services('GetWaferMapProductionPath')
|
||||
PDFPath = WaferMapRoot:'\':AttachmentID:'\image.pdf'
|
||||
Set_Status(0)
|
||||
PDFFile = ''
|
||||
OSRead PDFFile from PDFPath then
|
||||
// "Cache" PDF on app server
|
||||
QA_Services('PostToWaferImageQueue', RDSNo, WaferNo, TencorRecipe, PDFFile)
|
||||
If ReturnPDF EQ True$ then
|
||||
ResponseBody = SRP_Encode(PDFFile)
|
||||
RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_BODY$> = ResponseBody
|
||||
RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_DATE$> = Date()
|
||||
RequestRow<WAFER_IMAGE_REQUESTS.RESPONSE_TIME$> = Time()
|
||||
Database_Services('WriteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, RequestRow, True$)
|
||||
end else
|
||||
Database_Services('DeleteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, True$)
|
||||
end
|
||||
|
||||
end else
|
||||
ErrorCode = Status()
|
||||
Error_Services('Add', 'Error retrieving wafer map image for AttachmentID ':AttachmentID)
|
||||
end
|
||||
Unlock hWaferImageRequests, RequestKeyID else Null
|
||||
end
|
||||
end else
|
||||
// Delete request because wafer image may never become available.
|
||||
Database_Services('DeleteDataRow', 'WAFER_IMAGE_REQUESTS', RequestKeyID, True$)
|
||||
end
|
||||
Repeat
|
||||
end
|
||||
Unlock hSysLists, ServiceKeyID else Null
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// PostToWaferImageQueue
|
||||
//
|
||||
@ -1748,9 +1624,7 @@ Service ROTRImpactReport()
|
||||
column = OleGetProperty( xlSht, 'Range' , 'K:K' )
|
||||
OlePutProperty( column , 'ColumnWidth' , '15' )
|
||||
OlePutProperty( column , 'NumberFormat' , '0.0%' )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end service
|
||||
@ -1962,71 +1836,66 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
|
||||
PreEpiSig = RDSRec<RDS_PRE_EPI_SIG$>
|
||||
ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X')
|
||||
// Removing OI_SUPERUSER wrappers to alleviate signature issues. 11/18/19 djs
|
||||
* IF MemberOf(Username, 'OI_SUPERUSER') THEN
|
||||
|
||||
IF ReactorType NE 'EPP' THEN
|
||||
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
SigAction = WOStep:'VER'
|
||||
IF ReactorType NE 'EPP' THEN
|
||||
|
||||
WOMatKey = WONo:'*':CassNo
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
||||
WOMatSigProfile = WOMatRec<WO_MAT_SIG_PROFILE$>
|
||||
SigAction = WOStep:'VER'
|
||||
|
||||
LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
|
||||
CurrDTM = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
|
||||
END ELSE
|
||||
WOMatSig = ''
|
||||
END
|
||||
|
||||
RDSSig = PreEpiSig
|
||||
|
||||
BEGIN CASE
|
||||
CASE (WOMatSig EQ '') AND (RDSSig NE '')
|
||||
|
||||
* Signature missing on WO_MAT
|
||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||
* Sets VER signature
|
||||
* obj_WO_Mat('SetSignature',owmParms)
|
||||
errCode = ''
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
END else
|
||||
Response = True$
|
||||
end
|
||||
return
|
||||
|
||||
CASE (RDSSig = '') AND (WOMatSig NE '')
|
||||
|
||||
* Signature missing on RDS
|
||||
CurrDate = CurrDTM[1,' ']
|
||||
CurrTime = CurrDTM[COL2()+1,' ']
|
||||
RDSRec<RDS_PRE_EPI_SIG$> = WOMatSig
|
||||
RDSRec<RDS_PRE_EPI_SIG_DATE$> = IConv(CurrDate, 'D')
|
||||
RDSRec<RDS_PRE_EPI_SIG_TIME$> = IConv(CurrTime, 'MT')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Response = True$
|
||||
return
|
||||
|
||||
CASE RDSSig NE '' AND WOMatSig NE ''
|
||||
|
||||
ErrorMessage = 'Process Error: Pre Epi stage has already been signed.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Response = False$
|
||||
return
|
||||
|
||||
CASE Otherwise$
|
||||
Null
|
||||
|
||||
END CASE
|
||||
|
||||
END ;* End of check for Reactor Type
|
||||
|
||||
* END
|
||||
LOCATE SigAction IN WOMatSigProfile USING @VM SETTING Pos THEN
|
||||
WOMatSig = WOMatRec<WO_MAT_SIGNATURE$,Pos>
|
||||
CurrDTM = OCONV(WOMatRec<WO_MAT_SIG_DTM$,Pos>,'DT/4^HS')
|
||||
END ELSE
|
||||
WOMatSig = ''
|
||||
END
|
||||
|
||||
RDSSig = PreEpiSig
|
||||
|
||||
BEGIN CASE
|
||||
CASE (WOMatSig EQ '') AND (RDSSig NE '')
|
||||
|
||||
* Signature missing on WO_MAT
|
||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||
* Sets VER signature
|
||||
errCode = ''
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
END else
|
||||
Response = True$
|
||||
end
|
||||
return
|
||||
|
||||
CASE (RDSSig = '') AND (WOMatSig NE '')
|
||||
|
||||
* Signature missing on RDS
|
||||
CurrDate = CurrDTM[1,' ']
|
||||
CurrTime = CurrDTM[COL2()+1,' ']
|
||||
RDSRec<RDS_PRE_EPI_SIG$> = WOMatSig
|
||||
RDSRec<RDS_PRE_EPI_SIG_DATE$> = IConv(CurrDate, 'D')
|
||||
RDSRec<RDS_PRE_EPI_SIG_TIME$> = IConv(CurrTime, 'MT')
|
||||
Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$)
|
||||
Response = True$
|
||||
return
|
||||
|
||||
CASE RDSSig NE '' AND WOMatSig NE ''
|
||||
|
||||
ErrorMessage = 'Process Error: Pre Epi stage has already been signed.'
|
||||
Error_Services('Set', ErrorMessage)
|
||||
Response = False$
|
||||
return
|
||||
|
||||
CASE Otherwise$
|
||||
Null
|
||||
|
||||
END CASE
|
||||
|
||||
END ;* End of check for Reactor Type
|
||||
|
||||
SigDate = OCONV( Date(), 'D2/' )
|
||||
SigTime = OCONV( Time(), 'MTS' )
|
||||
@ -2040,7 +1909,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
||||
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:Username:@RM:SigDate:' ':SigTime ;* Sets VER signature
|
||||
|
||||
* obj_WO_Mat('SetSignature',owmParms)
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
|
||||
Error_Services('Set', ErrorMessage)
|
||||
@ -2205,18 +2073,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
return
|
||||
end
|
||||
|
||||
//Added 8/18/2021 JRO - checks to make sure recipe limits aren't oos
|
||||
* IF ParamOutOfSpec then
|
||||
* IF Supplement NE True$ then
|
||||
* ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
|
||||
* Error_Services('Set', ErrorMsg)
|
||||
* Response = False$
|
||||
* return
|
||||
* end
|
||||
* end
|
||||
Locate True$ in ParamOutOfSpec using @VM setting oPos then
|
||||
|
||||
IF Supplement NE True$ AND WONo NE '173485' then
|
||||
IF Supplement NE True$ then
|
||||
ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
|
||||
Error_Services('Set', ErrorMsg)
|
||||
Response = False$
|
||||
@ -2229,13 +2088,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
Response = False$
|
||||
return
|
||||
end
|
||||
|
||||
* IF (ReactorType = 'ASM+' OR ReactorType = 'HTR') AND (LoadLockVal EQ '') THEN
|
||||
* ErrorMsg = 'Process Error: Load Lock Side must be set to either Left or Right before signing.'
|
||||
* Error_Services('Set', ErrorMsg)
|
||||
* Response = False$
|
||||
* return
|
||||
* END
|
||||
|
||||
//Added JRO 3/16/2021
|
||||
//Load Lock Required Check
|
||||
@ -2309,50 +2161,27 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
Response = False$
|
||||
Return
|
||||
END
|
||||
|
||||
If PreFlag EQ True$ then
|
||||
// PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor
|
||||
// using the barcode scanner, which attempts to sign both stages at once to save time.
|
||||
Stage = 'VER'
|
||||
end else
|
||||
Stage = 'LOAD'
|
||||
end
|
||||
|
||||
* 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
|
||||
// using the barcode scanner, which attempts to sign both stages at once to save time.
|
||||
Stage = 'VER'
|
||||
end else
|
||||
Stage = 'LOAD'
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
! Deprecated 11/20/2019
|
||||
* Set_Status(0)
|
||||
* obj_WO_Mat('CheckSigOrder',WONo:'*':CassNo:@RM:WOStep:'LOAD')
|
||||
* IF Get_Status(errCode) THEN
|
||||
* ErrorMsg = 'Process Error: Error calling obj_WO_Mat("CheckSigOrder"). Error code: ':errCode
|
||||
* Error_Services('Set', ErrorMsg)
|
||||
* Response = False$
|
||||
* RETURN
|
||||
* END
|
||||
|
||||
* END ;* End of check for Epi Pro
|
||||
|
||||
// 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
|
||||
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
|
||||
end
|
||||
|
||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||
SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
|
||||
@ -2400,7 +2229,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service LoadExtra1stReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2412,9 +2243,12 @@ Service LoadExtra1stReady(RDSNo)
|
||||
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$>
|
||||
@ -2431,7 +2265,9 @@ Service UnsignLoadExtra1stReady(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service LoadExtra2ndReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2443,9 +2279,12 @@ Service LoadExtra2ndReady(RDSNo)
|
||||
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$>
|
||||
@ -2459,8 +2298,10 @@ Service UnsignLoadExtra2ndReady(RDSNo)
|
||||
Response = True$
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// SignLoadStage
|
||||
//
|
||||
@ -2745,39 +2586,17 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
end
|
||||
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
|
||||
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
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
|
||||
|
||||
LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
|
||||
If LWIInstAckReq EQ True$ then
|
||||
@ -2795,7 +2614,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
return
|
||||
end
|
||||
|
||||
! Todo: We will have to define special logic for the barcode application to handle extra loads and unloads.
|
||||
* Check for extra unloads without corresponding extra load
|
||||
IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
|
||||
IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
|
||||
@ -2867,7 +2685,9 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnloadExtra1stReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2879,9 +2699,12 @@ Service UnloadExtra1stReady(RDSNo)
|
||||
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$>
|
||||
@ -2893,9 +2716,12 @@ Service UnloadExtra2ndReady(RDSNo)
|
||||
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$>
|
||||
@ -2912,7 +2738,9 @@ Service UnsignUnloadExtra1stReady(RDSNo)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service UnsignUnloadExtra2ndReady(RDSNo)
|
||||
|
||||
Response = False$
|
||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||
@ -2926,6 +2754,7 @@ Service UnsignUnloadExtra2ndReady(RDSNo)
|
||||
Response = True$
|
||||
end
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
@ -3012,7 +2841,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
|
||||
* 4/30/2013 JCH added parms for merging of two methods
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'UNLOAD':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ReactID:@RM:ReactWH:@RM:ReactLoc:@RM:Tag
|
||||
* obj_WO_Mat('SetSignature',owmParms)
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
|
||||
@ -3046,9 +2874,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
|
||||
obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
|
||||
IF Get_Status(errCode) THEN
|
||||
* ErrorMsg = 'Process Error: Error calling Obj_React_Status("CassUnload") within the ':Service:' service'
|
||||
* Error_Services('Add', ErrorMsg)
|
||||
* Response = False$
|
||||
LogData = ''
|
||||
LogData<1> = LoggingDTM
|
||||
LogData<2> = @User4
|
||||
@ -3064,7 +2889,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
||||
InCassettes = RDSRec<RDS_IN_CASS_NO$>
|
||||
InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
|
||||
obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
|
||||
//Reactor_Services('IncrementWfrMetrics', RDSNo)
|
||||
end
|
||||
|
||||
RDSRec<RDS_OPERATOR_OUT$> = SigBy
|
||||
@ -3470,98 +3294,10 @@ Service SignFQAStage(RDSNo, Username)
|
||||
END
|
||||
NEXT Index
|
||||
END
|
||||
|
||||
|
||||
**********************************************
|
||||
* Verify the FlatFinder information *
|
||||
**********************************************
|
||||
EpiPartNo = {EPI_PART_NO}
|
||||
WaferSize = Xlate('EPI_PART', EpiPartNo, 'SUB_WAFER_SIZE', 'X')
|
||||
WaferSizeInch = Field(WaferSize, ' ', 3, 1)
|
||||
CustNo = {CUST_NO}
|
||||
CompanyRow = Xlate('COMPANY', CustNo, '', 'X')
|
||||
WafersOut = {WFRS_OUT}
|
||||
|
||||
Begin Case
|
||||
|
||||
Case WaferSizeInch = '6'
|
||||
|
||||
WaferFlatSizeInches = CompanyRow<COMPANY_WAFER_FLAT_WAFER_SIZE_INCH$>
|
||||
WaferFlatLengthMins = Oconv(CompanyRow<COMPANY_WAFER_FLAT_LENGTH_MIN$>, 'MD1')
|
||||
WaferFlatLengthMaxes = Oconv(CompanyRow<COMPANY_WAFER_FLAT_LENGTH_MAX$>, 'MD1')
|
||||
|
||||
Locate WaferSizeInch in WaferFlatSizeInches using @VM setting vPos then
|
||||
WaferFlatLengthMin = WaferFlatLengthMins<0, vPos>
|
||||
WaferFlatLengthMax = WaferFlatLengthMaxes<0, vPos>
|
||||
end else
|
||||
WaferFlatLengthMin = ''
|
||||
WaferFlatLengthMax = ''
|
||||
end
|
||||
|
||||
// Get FlatFinder Read Value
|
||||
* FlatFinderWafersQty = {FLATFINDER_WAFER_CNT}
|
||||
FlatFinderWaferLength = {FLATFINDER_FLAT_LENGTH}
|
||||
|
||||
***************************************
|
||||
* FlatFinder - Wafers Quatity Section *
|
||||
***************************************
|
||||
* If (FlatFinderWafersQty NE '') then
|
||||
* If (FlatFinderWafersQty NE WafersOut) then
|
||||
* ErrorMsg = 'Unable to sign FQA because Flat Finder and Wafers Out quantities do not match.'
|
||||
* Error_Services('Add', ErrorMsg)
|
||||
* return
|
||||
* end
|
||||
* end else
|
||||
* ErrorMsg = 'Unable to sign FQA because the Flat Finder quantity is missing.'
|
||||
* Error_Services('Add', ErrorMsg)
|
||||
* return
|
||||
* end
|
||||
************************************
|
||||
* FlatFinder - Flat Length Section *
|
||||
************************************
|
||||
If (WaferFlatLengthMin NE '') AND (WaferFlatLengthMax NE '') then
|
||||
If (FlatFinderWaferLength NE '') then
|
||||
If (FlatFinderWaferLength GE WaferFlatLengthMin) AND (FlatFinderWaferLength LE WaferFlatLengthMax) then
|
||||
end else
|
||||
ErrorMsg = 'Unable to sign FQA because Flat Finder wafer lengths are out of bounds.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Unable to sign FQA because the Flat Finder wafer length is missing.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
Case WaferSizeInch = '8'
|
||||
|
||||
// Get NotchFinder Read Value
|
||||
* NotchFinderWafersQty = {FLATFINDER_WAFER_CNT}
|
||||
*
|
||||
* ***************************************
|
||||
* * NotchFinder - Wafers Quatity Section *
|
||||
* ***************************************
|
||||
* If (NotchFinderWafersQty NE '') then
|
||||
* If (NotchFinderWafersQty NE WafersOut) then
|
||||
* ErrorMsg = 'Unable to sign FQA because Notch Finder and Wafers Out quantities do not match.'
|
||||
* Error_Services('Add', ErrorMsg)
|
||||
* return
|
||||
* end
|
||||
* end else
|
||||
* ErrorMsg = 'Unable to sign FQA because the Notch Finder quantity is missing.'
|
||||
* Error_Services('Add', ErrorMsg)
|
||||
* return
|
||||
* end
|
||||
|
||||
Case 1
|
||||
End Case
|
||||
|
||||
*************************
|
||||
* Verify Wafer Quantity *
|
||||
*************************
|
||||
! The barcode application will need to inform the user that an override is required. We will return an error for
|
||||
! now. Once the user is informed, a LEAD or SUPERVISOR can scan their badge to override and complete the scan.
|
||||
CassSchedWafers = {CASS_SHIP_QTY}
|
||||
WafersOut = {WFRS_OUT}
|
||||
|
||||
@ -3581,23 +3317,18 @@ Service SignFQAStage(RDSNo, Username)
|
||||
|
||||
end
|
||||
|
||||
|
||||
*********************************
|
||||
* Verify NCR total >= USL Fails *
|
||||
*********************************
|
||||
! The barcode application will need to inform the user that an override is required. We will return an error for
|
||||
! now. Once the user is informed, a LEAD or SUPERVISOR can scan their badge to override and complete the scan.
|
||||
If Username EQ 'FRANCOIS_R' then
|
||||
NCRStatus = QA_Services('GetNCRStatus', RDSNo)
|
||||
If NCRStatus EQ False$ then
|
||||
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
|
||||
ErrorMsg = 'Unable to sign FQA because the total quantity of NCR wafers is less than the '|
|
||||
: 'number of wafers above the USL threshold. A lead or supervisor must override.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
NCRStatus = QA_Services('GetNCRStatus', RDSNo)
|
||||
If NCRStatus EQ False$ then
|
||||
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
|
||||
ErrorMsg = 'Unable to sign FQA because the total quantity of NCR wafers is less than the '|
|
||||
: 'number of wafers above the USL threshold. A lead or supervisor must override.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
*************************
|
||||
* Verify if Shift exist *
|
||||
@ -3659,21 +3390,19 @@ Service SignFQAStage(RDSNo, Username)
|
||||
Next Test
|
||||
|
||||
******************************************
|
||||
* Verify Unload Stage QA Metrology Tests * On hold until approved for release to production
|
||||
* Verify Unload Stage QA Metrology Tests *
|
||||
******************************************
|
||||
If Username EQ 'FRANCOIS_R' then
|
||||
WONo = {WO}
|
||||
CassNo = {CASS_NO}
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
ErrorMsg = 'Process Error: One or more Unload QA Metrology results are out of specification.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
end
|
||||
WONo = {WO}
|
||||
CassNo = {CASS_NO}
|
||||
WOMatQAKey = WONo : '*' : CassNo
|
||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||
OutOfSpec = Sum(OutOfSpec)
|
||||
If OutOfSpec GT 0 then
|
||||
ErrorMsg = 'Process Error: One or more Unload QA Metrology results are out of specification.'
|
||||
Error_Services('Add', ErrorMsg)
|
||||
return
|
||||
end
|
||||
|
||||
*******************************************
|
||||
* Verify if all steps have been completed *
|
||||
@ -3746,8 +3475,6 @@ Service SignFQAStage(RDSNo, Username)
|
||||
;* 4/30/2013 JCH added parms for merging of two methods
|
||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'QA':@RM:Username:@RM:SigDt:' ':SigTm:@RM:ToolID:@RM:WHCd:@RM:LocCd:@RM:Tag
|
||||
|
||||
* obj_WO_Mat('SetSignature',owmParms) ; * * * * * S I G N A T U R E * * * * * *
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||
Error_Services('Add', ErrorMsg)
|
||||
|
Reference in New Issue
Block a user