removed dead code
This commit is contained in:
parent
16c7bc6926
commit
803f946c7e
@ -582,10 +582,6 @@ Refresh:
|
|||||||
|
|
||||||
If @WINDOW EQ 'RDS_UNLOAD' then
|
If @WINDOW EQ 'RDS_UNLOAD' then
|
||||||
|
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
|
|
||||||
If (DevelopmentFlag EQ True$) then
|
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.EDT_QA_MET'
|
CtrlName = @WINDOW:'.EDT_QA_MET'
|
||||||
Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
|
Set_Property(@Window : '.MET_TEST', 'VISIBLE', False$)
|
||||||
Set_Property(CtrlName, 'VISIBLE', True$)
|
Set_Property(CtrlName, 'VISIBLE', True$)
|
||||||
@ -709,42 +705,6 @@ Refresh:
|
|||||||
END ELSE
|
END ELSE
|
||||||
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
|
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
end else
|
|
||||||
|
|
||||||
CtrlName = @WINDOW:'.MET_TEST'
|
|
||||||
Set_Property(@Window : '.EDT_QA_MET', 'VISIBLE', False$)
|
|
||||||
Set_Property(CtrlName, 'VISIBLE', True$)
|
|
||||||
MetList = Get_Property(CtrlName,'LIST')
|
|
||||||
|
|
||||||
MLCnt = COUNT(MetList,@FM) + (MetList NE '')
|
|
||||||
FOR Line = 1 TO MLCnt
|
|
||||||
IF MetList<Line,COL$MET_TEST> NE '' THEN
|
|
||||||
BEGIN CASE
|
|
||||||
CASE MetList<Line,COL$MET_RESULT> = ''
|
|
||||||
Color = YELLOW$
|
|
||||||
CASE MetList<Line,COL$MET_RESULT> < MetList<Line,COL$MET_MIN> OR MetList<Line,COL$MET_RESULT> > MetList<Line,COL$MET_MAX>
|
|
||||||
Color = RED$
|
|
||||||
CASE 1
|
|
||||||
Color = GREEN$
|
|
||||||
END CASE
|
|
||||||
|
|
||||||
END ELSE
|
|
||||||
Color = GREEN$
|
|
||||||
END;* End of check for Met Test on the current line
|
|
||||||
|
|
||||||
stat = Send_Message(CtrlName,'COLOR_BY_POS',0,Line,Color)
|
|
||||||
NEXT Line
|
|
||||||
|
|
||||||
Set_Property(@WINDOW:'.BUTTON_11','ENABLED',EnableUnloadButton)
|
|
||||||
|
|
||||||
IF MemberOf(@USER4, 'OI_ADMIN') THEN
|
|
||||||
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',1)
|
|
||||||
END ELSE
|
|
||||||
Set_Property(@WINDOW:'.CLEAR_EPI_UNLOAD','VISIBLE',0)
|
|
||||||
END
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
* End of check for Unload OR Post_Epi windows
|
* End of check for Unload OR Post_Epi windows
|
||||||
|
|
||||||
@ -2669,9 +2629,8 @@ MetTestDC:
|
|||||||
Lines = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
|
Lines = Get_Property(@WINDOW:'.MET_TEST', 'LIST')
|
||||||
TestLine = Lines<CurrRow>
|
TestLine = Lines<CurrRow>
|
||||||
LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
|
LWRHOTest = Indexc(TestLine, 'LW_RHO', 1)
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
|
|
||||||
If (DevelopmentFlag EQ True$) and (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$) then
|
If (@Window EQ 'RDS_UNLOAD') and (LWRHOTest EQ False$) then
|
||||||
Ctrls := @WINDOW:'.EDT_QA_MET':@RM ; Props := 'SELPOS':@RM
|
Ctrls := @WINDOW:'.EDT_QA_MET':@RM ; Props := 'SELPOS':@RM
|
||||||
Ctrls := @WINDOW:'.EDT_QA_MET' ; Props := 'LIST'
|
Ctrls := @WINDOW:'.EDT_QA_MET' ; Props := 'LIST'
|
||||||
end else
|
end else
|
||||||
@ -2708,8 +2667,7 @@ MetTestDC:
|
|||||||
BEGIN CASE
|
BEGIN CASE
|
||||||
CASE MetTest EQ ''
|
CASE MetTest EQ ''
|
||||||
Null
|
Null
|
||||||
|
CASE (@WINDOW = 'RDS_UNLOAD') and (LWRHOTest EQ False$)
|
||||||
CASE (@WINDOW = 'RDS_UNLOAD') and (DevelopmentFlag EQ True$) and (LWRHOTest EQ False$)
|
|
||||||
ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
|
ReturnVal = Dialog_Box('NDW_QA_MET_RESULT', @WINDOW, CassID)
|
||||||
Send_Event(@Window, "READ")
|
Send_Event(@Window, "READ")
|
||||||
CASE Otherwise$
|
CASE Otherwise$
|
||||||
@ -2863,9 +2821,6 @@ return
|
|||||||
|
|
||||||
RefreshWaferCounterData:
|
RefreshWaferCounterData:
|
||||||
|
|
||||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
|
||||||
If WCCheckEnabled then
|
|
||||||
|
|
||||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||||
QtyBackColor = GREEN$
|
QtyBackColor = GREEN$
|
||||||
@ -2908,12 +2863,5 @@ RefreshWaferCounterData:
|
|||||||
end
|
end
|
||||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
||||||
|
|
||||||
end else
|
|
||||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
|
||||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
|
||||||
end
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1107,9 +1107,6 @@ SignSupVer:
|
|||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
|
||||||
If WCCheckEnabled then
|
|
||||||
|
|
||||||
****************************************
|
****************************************
|
||||||
* Verify the Wafer Counter information *
|
* Verify the Wafer Counter information *
|
||||||
****************************************
|
****************************************
|
||||||
@ -1129,7 +1126,6 @@ SignSupVer:
|
|||||||
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
||||||
RETURN 0
|
RETURN 0
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
**************************
|
**************************
|
||||||
* Verify user's password *
|
* Verify user's password *
|
||||||
@ -2294,9 +2290,6 @@ return
|
|||||||
|
|
||||||
RefreshWaferCounterData:
|
RefreshWaferCounterData:
|
||||||
|
|
||||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
|
||||||
If WCCheckEnabled then
|
|
||||||
|
|
||||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', True$)
|
||||||
QtyBackColor = GREEN$
|
QtyBackColor = GREEN$
|
||||||
@ -2341,10 +2334,5 @@ RefreshWaferCounterData:
|
|||||||
|
|
||||||
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
Set_Property(@WINDOW:'.EDL_WAFER_COUNTER_QTY','BACKCOLOR', QtyBackColor)
|
||||||
|
|
||||||
end else
|
|
||||||
Set_Property(@Window:'.LBL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
|
||||||
Set_Property(@Window:'.EDL_WAFER_COUNTER_QTY', 'VISIBLE', False$)
|
|
||||||
end
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -881,10 +881,6 @@ Event SIGN_BUTTON.CLICK()
|
|||||||
******************************************
|
******************************************
|
||||||
* Verify Unload Stage QA Metrology Tests *
|
* Verify Unload Stage QA Metrology Tests *
|
||||||
******************************************
|
******************************************
|
||||||
|
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
|
|
||||||
If (DevelopmentFlag EQ True$) then
|
|
||||||
WOMatQAKey = WONo : '*' : CassNo
|
WOMatQAKey = WONo : '*' : CassNo
|
||||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||||
@ -898,7 +894,6 @@ Event SIGN_BUTTON.CLICK()
|
|||||||
ErrMsg(ErrorMsg)
|
ErrMsg(ErrorMsg)
|
||||||
Return
|
Return
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
*******************************************
|
*******************************************
|
||||||
* Verify if all steps have been completed *
|
* Verify if all steps have been completed *
|
||||||
@ -1965,7 +1960,3 @@ ClearForm:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -388,6 +388,7 @@ end service
|
|||||||
// Looks for available Metrology files that are ready to be imported into the MES system.
|
// Looks for available Metrology files that are ready to be imported into the MES system.
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ImportMetrologyFiles(Machine)
|
Service ImportMetrologyFiles(Machine)
|
||||||
|
|
||||||
If Machine NE '' then
|
If Machine NE '' then
|
||||||
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
|
||||||
Lock hSysLists, ServiceKeyID:'*':Machine then
|
Lock hSysLists, ServiceKeyID:'*':Machine then
|
||||||
@ -935,14 +936,8 @@ Service ImportBioRadData(RunData, FileName)
|
|||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
WorkOrderNo = RDSRec<RDS_WO$>
|
WorkOrderNo = RDSRec<RDS_WO$>
|
||||||
|
|
||||||
// HgCV Project Development Code -------------------------------------------------------------------------------
|
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
If (DevelopmentFlag EQ True$) then
|
|
||||||
IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
|
IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
|
||||||
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
|
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
|
||||||
end
|
|
||||||
// -------------------------------------------------------------------------------------------------------------
|
|
||||||
CassNo = RDSRec<RDS_CASS_NO$>
|
CassNo = RDSRec<RDS_CASS_NO$>
|
||||||
WorkOrder = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$)
|
WorkOrder = Work_Order_Services('GetWorkOrder', WorkOrderNo, False$)
|
||||||
GoSub ParseWorkOrder
|
GoSub ParseWorkOrder
|
||||||
@ -1289,13 +1284,8 @@ Service ImportCDEData(RunData, FileName)
|
|||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKeyID)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
|
|
||||||
// HgCV Project Development Code -------------------------------------------------------------------------------
|
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
If (DevelopmentFlag EQ True$) then
|
|
||||||
IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
|
IsProdTest = ( Indexc(ScanRecipe, 'PROD', 1) GT 0 )
|
||||||
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
|
If IsProdTest EQ True$ then Metrology_Services('LogResults',RDSKeyID,Machine,'HgCV','Product test recognized. Recipe name: ':ScanRecipe)
|
||||||
end
|
|
||||||
// -------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
WorkOrderNo = RDSRec<RDS_WO$>
|
WorkOrderNo = RDSRec<RDS_WO$>
|
||||||
CassNo = RDSRec<RDS_CASS_NO$>
|
CassNo = RDSRec<RDS_CASS_NO$>
|
||||||
@ -3253,5 +3243,3 @@ LoadRunDataToDatabase:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -229,12 +229,6 @@ Service CalculateHgCVData(Datapoints)
|
|||||||
Min = Min(Min, DataPoint)
|
Min = Min(Min, DataPoint)
|
||||||
Max = Max(Max, DataPoint)
|
Max = Max(Max, DataPoint)
|
||||||
// Edge Mean Delta
|
// 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
|
end
|
||||||
// Range %
|
// Range %
|
||||||
Locate Index in RangePoints using ',' setting unusedIndex then
|
Locate Index in RangePoints using ',' setting unusedIndex then
|
||||||
@ -256,25 +250,15 @@ Service CalculateHgCVData(Datapoints)
|
|||||||
EdgeMean4mm = Edge4mmSum / 4
|
EdgeMean4mm = Edge4mmSum / 4
|
||||||
EdgeMean10mm = Edge10mmSum / 4
|
EdgeMean10mm = Edge10mmSum / 4
|
||||||
If EdgeMean10mm GT 0 then
|
If EdgeMean10mm GT 0 then
|
||||||
* Delta1Avg = Delta1/4
|
|
||||||
* Delta2Avg = Delta2/4
|
|
||||||
EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum) / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
|
EdgeMeanDelta = ( (Edge4mmSum - Edge10mmSum) / Edge10mmSum) * 100 ; // Changed divisor to Delta2Avg to match SPC - DJS
|
||||||
|
|
||||||
// Range %
|
// Range %
|
||||||
Range = RangeMax - RangeMin
|
Range = RangeMax - RangeMin
|
||||||
NumRangePoints = DCount(RangePoints, ',')
|
NumRangePoints = DCount(RangePoints, ',')
|
||||||
RangeAvg = RangeAvg / NumRangePoints
|
RangeAvg = RangeAvg / NumRangePoints
|
||||||
RangePct = (Range / RangeAvg) * 100
|
RangePct = (Range / RangeAvg) * 100
|
||||||
|
|
||||||
* EdgeMeanDelta = OConv(IConv(EdgeMeanDelta, 'MD3L'), 'MD3L')
|
|
||||||
* RangePct = OConv(IConv(RangePct, 'MD3L'), 'MD3L')
|
|
||||||
end
|
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 = ''
|
FullAvg = ''
|
||||||
TotalDataPoints = DCount(DataPoints, @VM)
|
TotalDataPoints = DCount(DataPoints, @VM)
|
||||||
If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
|
If TotalDataPoints GT 0 then FullAvg = Sum(DataPoints)/DCount(DataPoints, @VM)
|
||||||
@ -361,10 +345,6 @@ Service PostROTRRequest(RDSNo)
|
|||||||
If Flag EQ 0 then
|
If Flag EQ 0 then
|
||||||
If RequestKeyID EQ '' then
|
If RequestKeyID EQ '' then
|
||||||
WOMatKey = Xlate('RDS', RDSNo, 'WO_MAT_KEY', 'X')
|
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()
|
RequestDate = Date()
|
||||||
RequestTime = Time()
|
RequestTime = Time()
|
||||||
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
|
RequestKeyID = RDSNo:'*':RequestDate :'*':RequestTime
|
||||||
@ -377,9 +357,6 @@ Service PostROTRRequest(RDSNo)
|
|||||||
end else
|
end else
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
end
|
end
|
||||||
end else
|
|
||||||
ErrorMessage = 'FQA signed for RDS ':RDSNo:' ignoring ROTR request.'
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
|
ErrorMessage = 'Duplicate request found for RDS ':RDSNo:'. Request ignored.'
|
||||||
end
|
end
|
||||||
@ -510,13 +487,6 @@ Service ProcessROTRRequest(RDSNo)
|
|||||||
Swap @FM with ',' in ResponseCopy
|
Swap @FM with ',' in ResponseCopy
|
||||||
LogData<3> = 'ROTR Status response: ':Response
|
LogData<3> = 'ROTR Status response: ':Response
|
||||||
Logging_Services('AppendLog', objErrorLog, LogData, @RM, @FM)
|
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$)
|
|
||||||
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$> = Response<1>
|
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS$> = Response<1>
|
||||||
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$> = Response<2>
|
CIRec<CLEAN_INSP_ROTR_REACTOR_STATUS_REASON$> = Response<2>
|
||||||
CIRec<CLEAN_INSP_ROTR_REACTOR_NCR_COUNT$> = Response<3>
|
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>
|
CIRec<CLEAN_INSP_ROTR_REACTOR_UCL_EXCEEDED_RUN_COUNT$> = Response<5>
|
||||||
// Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
|
// Set ROTR Update Flag to trigger CLEAN_INSP_ACTIONS routine (via BASE_MFS).
|
||||||
// That routine will recalculate the final ROTR status.
|
// 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$)
|
Database_Services('WriteDataRow', 'CLEAN_INSP', LWICINo, CIRec, True$, False$, True$)
|
||||||
end else
|
end else
|
||||||
ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
|
ErrorMessage = 'Error in service ':Service:'. Failed to retrieve ROTR status. Error message: ':Error_Services('GetMessage')
|
||||||
@ -569,6 +538,7 @@ end service
|
|||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service GetROTRStatus(RDSKey)
|
Service GetROTRStatus(RDSKey)
|
||||||
|
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSKey)
|
||||||
WONo = RDSRec<RDS_WO$>
|
WONo = RDSRec<RDS_WO$>
|
||||||
RDSCassNo = RDSRec<RDS_CASS_NO$>
|
RDSCassNo = RDSRec<RDS_CASS_NO$>
|
||||||
@ -1287,100 +1257,6 @@ Service ProcessWaferImageRequests()
|
|||||||
end service
|
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
|
// PostToWaferImageQueue
|
||||||
//
|
//
|
||||||
@ -1748,9 +1624,7 @@ Service ROTRImpactReport()
|
|||||||
column = OleGetProperty( xlSht, 'Range' , 'K:K' )
|
column = OleGetProperty( xlSht, 'Range' , 'K:K' )
|
||||||
OlePutProperty( column , 'ColumnWidth' , '15' )
|
OlePutProperty( column , 'ColumnWidth' , '15' )
|
||||||
OlePutProperty( column , 'NumberFormat' , '0.0%' )
|
OlePutProperty( column , 'NumberFormat' , '0.0%' )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
@ -1962,8 +1836,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
|||||||
|
|
||||||
PreEpiSig = RDSRec<RDS_PRE_EPI_SIG$>
|
PreEpiSig = RDSRec<RDS_PRE_EPI_SIG$>
|
||||||
ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE', 'X')
|
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
|
IF ReactorType NE 'EPP' THEN
|
||||||
|
|
||||||
@ -1989,7 +1861,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
|||||||
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
|
SigTime = RDSRec<RDS_PRE_EPI_SIG_TIME$>
|
||||||
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
owmParms = WONo:@RM:CassNo:@RM:WOStep:@RM:'VER':@RM:RDSSig:@RM:SigDate:' ':SigTime
|
||||||
* Sets VER signature
|
* Sets VER signature
|
||||||
* obj_WO_Mat('SetSignature',owmParms)
|
|
||||||
errCode = ''
|
errCode = ''
|
||||||
IF Get_Status(errCode) THEN
|
IF Get_Status(errCode) THEN
|
||||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||||
@ -2026,8 +1897,6 @@ Service SignPreEpiStage(RDSNo, Username, WaferQty, Reactor, ScanEntry)
|
|||||||
|
|
||||||
END ;* End of check for Reactor Type
|
END ;* End of check for Reactor Type
|
||||||
|
|
||||||
* END
|
|
||||||
|
|
||||||
SigDate = OCONV( Date(), 'D2/' )
|
SigDate = OCONV( Date(), 'D2/' )
|
||||||
SigTime = OCONV( Time(), 'MTS' )
|
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
|
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
|
IF Get_Status(errCode) THEN
|
||||||
ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
|
ErrorMessage = 'Process Error: Error calling obj_WO_Mat("SetSignature"). Error code: ':errCode
|
||||||
Error_Services('Set', ErrorMessage)
|
Error_Services('Set', ErrorMessage)
|
||||||
@ -2205,18 +2073,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
|||||||
return
|
return
|
||||||
end
|
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
|
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.'
|
ErrorMsg = 'Process Error: Recipe parameters are out of spec and no supplement has been set.'
|
||||||
Error_Services('Set', ErrorMsg)
|
Error_Services('Set', ErrorMsg)
|
||||||
Response = False$
|
Response = False$
|
||||||
@ -2230,13 +2089,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
|||||||
return
|
return
|
||||||
end
|
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
|
//Added JRO 3/16/2021
|
||||||
//Load Lock Required Check
|
//Load Lock Required Check
|
||||||
LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');
|
LoadLockReq = Xlate('REACTOR', Reactor, REACTOR_PICK_PLACE$, 'X');
|
||||||
@ -2310,8 +2162,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
|||||||
Return
|
Return
|
||||||
END
|
END
|
||||||
|
|
||||||
* IF ReactorType NE 'EPP' THEN
|
|
||||||
|
|
||||||
If PreFlag EQ True$ then
|
If PreFlag EQ True$ then
|
||||||
// PRE and LOAD stages are being signed together. This is usually because the operator is loading a reactor
|
// 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.
|
// using the barcode scanner, which attempts to sign both stages at once to save time.
|
||||||
@ -2333,27 +2183,6 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
|||||||
Return
|
Return
|
||||||
end
|
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
|
|
||||||
|
|
||||||
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
SigDate = RDSRec<RDS_PRE_EPI_SIG_DATE$>
|
||||||
SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
|
SigTime = RDSrec<RDS_PRE_EPI_SIG_TIME$>
|
||||||
PreCINo = Xlate('RDS', RDSNo, 'PRE_CI_NO', 'X')
|
PreCINo = Xlate('RDS', RDSNo, 'PRE_CI_NO', 'X')
|
||||||
@ -2400,7 +2229,9 @@ Service LoadSignatureReady(RDSNo, Username, WaferQty, LLSide, PreFlag, ReactNoOp
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service LoadExtra1stReady(RDSNo)
|
Service LoadExtra1stReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
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
|
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature EQ '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||||
Response = True$
|
Response = True$
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignLoadExtra1stReady(RDSNo)
|
Service UnsignLoadExtra1stReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
@ -2431,7 +2265,9 @@ Service UnsignLoadExtra1stReady(RDSNo)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service LoadExtra2ndReady(RDSNo)
|
Service LoadExtra2ndReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
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
|
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' AND UnloadExtra2Signature NE '' And LoadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||||
Response = True$
|
Response = True$
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignLoadExtra2ndReady(RDSNo)
|
Service UnsignLoadExtra2ndReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
@ -2459,8 +2298,10 @@ Service UnsignLoadExtra2ndReady(RDSNo)
|
|||||||
Response = True$
|
Response = True$
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// SignLoadStage
|
// SignLoadStage
|
||||||
//
|
//
|
||||||
@ -2745,10 +2586,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
|||||||
end
|
end
|
||||||
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
|
ReactorType = XLATE('RDS',RDSNo,'REACTOR_TYPE','X')
|
||||||
|
|
||||||
|
|
||||||
* IF ReactorType NE 'EPP' THEN
|
|
||||||
|
|
||||||
|
|
||||||
If ReactorType EQ 'EPP' then
|
If ReactorType EQ 'EPP' then
|
||||||
WOMatKey = ''
|
WOMatKey = ''
|
||||||
end else
|
end else
|
||||||
@ -2761,24 +2598,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
|||||||
return
|
return
|
||||||
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
|
|
||||||
|
|
||||||
LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
|
LWIInstAckReq = Xlate('RDS', RDSNo, 'LWI_INST_ACK_REQ', 'X')
|
||||||
If LWIInstAckReq EQ True$ then
|
If LWIInstAckReq EQ True$ then
|
||||||
ErrorMsg = 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.'
|
ErrorMsg = 'The LWI stage engineering instructions must be acknowledged before the load operation can be signed.'
|
||||||
@ -2795,7 +2614,6 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
|||||||
return
|
return
|
||||||
end
|
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
|
* Check for extra unloads without corresponding extra load
|
||||||
IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
|
IF RDSRec<RDS_OP_OUT_EX1_DATE$> <> '' THEN
|
||||||
IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
|
IF RDSRec<RDS_OP_IN_EX2_DATE$> = '' THEN
|
||||||
@ -2867,7 +2685,9 @@ Service UnloadSignatureReady(RDSNo, Username, Reactor)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnloadExtra1stReady(RDSNo)
|
Service UnloadExtra1stReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
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
|
If StandardLoadSignature NE '' AND UnloadExtra1Signature EQ '' AND LoadExtra1Signature EQ '' AND UnloadExtra2Signature EQ '' And LoadExtra2Signature eq '' and StandardUnloadSignature EQ '' then
|
||||||
Response = True$
|
Response = True$
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnloadExtra2ndReady(RDSNo)
|
Service UnloadExtra2ndReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
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
|
If StandardLoadSignature NE '' AND UnloadExtra1Signature NE '' AND LoadExtra1Signature NE '' And LoadExtra2Signature EQ ''AND UnloadExtra2Signature EQ '' and StandardUnloadSignature EQ '' then
|
||||||
Response = True$
|
Response = True$
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignUnloadExtra1stReady(RDSNo)
|
Service UnsignUnloadExtra1stReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
@ -2912,7 +2738,9 @@ Service UnsignUnloadExtra1stReady(RDSNo)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service UnsignUnloadExtra2ndReady(RDSNo)
|
Service UnsignUnloadExtra2ndReady(RDSNo)
|
||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo)
|
||||||
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
StandardLoadSignature = RDSRec<RDS_OPERATOR_IN$>
|
||||||
@ -2926,6 +2754,7 @@ Service UnsignUnloadExtra2ndReady(RDSNo)
|
|||||||
Response = True$
|
Response = True$
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
@ -3012,7 +2841,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
|||||||
|
|
||||||
* 4/30/2013 JCH added parms for merging of two methods
|
* 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
|
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
|
IF Get_Status(errCode) THEN
|
||||||
ErrorMsg = 'Process Error: Error calling Obj_WO_Mat("SetSignature") within the ':Service:' service'
|
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)
|
obj_React_Status('CassUnload',Reactor:@RM:WONo:@RM:CassNo:@RM:UnloadDTM:@RM:RDSNo)
|
||||||
IF Get_Status(errCode) THEN
|
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 = ''
|
||||||
LogData<1> = LoggingDTM
|
LogData<1> = LoggingDTM
|
||||||
LogData<2> = @User4
|
LogData<2> = @User4
|
||||||
@ -3064,7 +2889,6 @@ Service SignUnloadStage(RDSNo, Username, ScanEntry)
|
|||||||
InCassettes = RDSRec<RDS_IN_CASS_NO$>
|
InCassettes = RDSRec<RDS_IN_CASS_NO$>
|
||||||
InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
|
InCassettes = SRP_Array('Clean', InCassettes, 'TrimAndMakeUnique', @VM)
|
||||||
obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
|
obj_React_Status('ReactorUnload',Reactor:@RM:WONo:@RM:InCassettes:@RM:UnloadDTM:@RM:RDSNo)
|
||||||
//Reactor_Services('IncrementWfrMetrics', RDSNo)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RDSRec<RDS_OPERATOR_OUT$> = SigBy
|
RDSRec<RDS_OPERATOR_OUT$> = SigBy
|
||||||
@ -3471,97 +3295,9 @@ Service SignFQAStage(RDSNo, Username)
|
|||||||
NEXT Index
|
NEXT Index
|
||||||
END
|
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 *
|
* 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}
|
CassSchedWafers = {CASS_SHIP_QTY}
|
||||||
WafersOut = {WFRS_OUT}
|
WafersOut = {WFRS_OUT}
|
||||||
|
|
||||||
@ -3581,13 +3317,9 @@ Service SignFQAStage(RDSNo, Username)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
*********************************
|
*********************************
|
||||||
* Verify NCR total >= USL Fails *
|
* 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)
|
NCRStatus = QA_Services('GetNCRStatus', RDSNo)
|
||||||
If NCRStatus EQ False$ then
|
If NCRStatus EQ False$ then
|
||||||
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
|
If NOT( MemberOf(Username, 'LEAD') OR MemberOf(Username, 'SUPERVISOR') ) then
|
||||||
@ -3597,7 +3329,6 @@ Service SignFQAStage(RDSNo, Username)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
*************************
|
*************************
|
||||||
* Verify if Shift exist *
|
* Verify if Shift exist *
|
||||||
@ -3659,9 +3390,8 @@ Service SignFQAStage(RDSNo, Username)
|
|||||||
Next Test
|
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}
|
WONo = {WO}
|
||||||
CassNo = {CASS_NO}
|
CassNo = {CASS_NO}
|
||||||
WOMatQAKey = WONo : '*' : CassNo
|
WOMatQAKey = WONo : '*' : CassNo
|
||||||
@ -3673,7 +3403,6 @@ Service SignFQAStage(RDSNo, Username)
|
|||||||
Error_Services('Add', ErrorMsg)
|
Error_Services('Add', ErrorMsg)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
*******************************************
|
*******************************************
|
||||||
* Verify if all steps have been completed *
|
* 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
|
;* 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
|
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
|
IF Get_Status(errCode) THEN
|
||||||
ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
ErrorMsg = 'Error calling Obj_WO_Mat("SetSignature") within ':Service:'. Error code: ':errCode
|
||||||
Error_Services('Add', ErrorMsg)
|
Error_Services('Add', ErrorMsg)
|
||||||
|
@ -254,8 +254,6 @@ Event SIGN_BUTTON.CLICK()
|
|||||||
end
|
end
|
||||||
|
|
||||||
RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP')
|
RDSNo = Get_Property(@Window : '.RDS_NO','DEFPROP')
|
||||||
WCCheckEnabled = Xlate('APP_INFO', 'WAFER_COUNTER_CHECK', '', 'X')
|
|
||||||
If WCCheckEnabled then
|
|
||||||
****************************************
|
****************************************
|
||||||
* Verify the Wafer Counter information *
|
* Verify the Wafer Counter information *
|
||||||
****************************************
|
****************************************
|
||||||
@ -274,7 +272,6 @@ Event SIGN_BUTTON.CLICK()
|
|||||||
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
ErrMsg('Unable to sign FQA because the Wafer Counter quantity is missing.')
|
||||||
RETURN 0
|
RETURN 0
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
***********************************
|
***********************************
|
||||||
* Verify Scheduled Wafer Quantity *
|
* Verify Scheduled Wafer Quantity *
|
||||||
@ -446,10 +443,6 @@ Event SIGN_BUTTON.CLICK()
|
|||||||
******************************************
|
******************************************
|
||||||
* Verify Unload Stage QA Metrology Tests *
|
* Verify Unload Stage QA Metrology Tests *
|
||||||
******************************************
|
******************************************
|
||||||
|
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
|
|
||||||
If (DevelopmentFlag EQ True$) then
|
|
||||||
WONo = Get_Property(@WINDOW:'.WO','DEFPROP')
|
WONo = Get_Property(@WINDOW:'.WO','DEFPROP')
|
||||||
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP')
|
||||||
WOMatQAKey = WONo : '*' : CassNo
|
WOMatQAKey = WONo : '*' : CassNo
|
||||||
@ -465,7 +458,6 @@ Event SIGN_BUTTON.CLICK()
|
|||||||
ErrMsg(ErrorMsg)
|
ErrMsg(ErrorMsg)
|
||||||
Return
|
Return
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
*******************************************
|
*******************************************
|
||||||
* Verify if all steps have been completed *
|
* Verify if all steps have been completed *
|
||||||
|
@ -2010,8 +2010,6 @@ Service QASigReady(RDSNo)
|
|||||||
* Verify Unload Stage QA Metrology Tests *
|
* Verify Unload Stage QA Metrology Tests *
|
||||||
******************************************
|
******************************************
|
||||||
If ErrorMessage EQ '' then
|
If ErrorMessage EQ '' then
|
||||||
DevelopmentFlag = Xlate('DEVELOPMENT', 'HGCV', 'STATUS', 'X')
|
|
||||||
If (DevelopmentFlag EQ True$) then
|
|
||||||
WOMatQAKey = WOMatKey
|
WOMatQAKey = WOMatKey
|
||||||
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAKey)
|
||||||
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
OutOfSpec = WOMatQARec<WO_MAT_QA_OUT_OF_SPEC$>
|
||||||
@ -2024,7 +2022,6 @@ Service QASigReady(RDSNo)
|
|||||||
Next FailReason
|
Next FailReason
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
************************************************************************
|
************************************************************************
|
||||||
* Prompt user to validate the Process Specification Stage Instructions *
|
* Prompt user to validate the Process Specification Stage Instructions *
|
||||||
@ -2844,4 +2841,3 @@ GetMostRecentSig:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user