updated 100% stratus to auto calculate std dev

This commit is contained in:
Infineon\StieberD 2024-09-19 11:43:27 -07:00 committed by Stieber Daniel (IT FI MES)
parent b0b127cd87
commit 2dc8a264c2
8 changed files with 24560 additions and 3666 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ DECLARE SUBROUTINE Start_Window, End_Window, Post_Metrology_Manual_Data_Entry_Lo
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, obj_WM_Out, Datetime, Database_Services, Error_Services
DECLARE FUNCTION Msg, obj_WO_Mat, Send_Message, obj_Tables, Signature_Services, set_WinMsgVal, Start_Window, End_Window
Declare function Wo_Mat_Qa_Services
Declare Function Wo_Mat_Qa_Services, SRP_Array, Math_Services
$INSERT APPCOLORS
$INSERT LSL_USERS_EQU
@ -166,14 +166,10 @@ Create:
IF MetStdMax = '' THEN
IF MetTest = 'ADE' THEN
IF MetSpecSlot = 'A' OR MetWfrQty = 'A' OR MetWfrQty > 5 THEN
* Standard Deviation Required
MetStdMax = ((MetMin + MetMax) / 2) * (0.02)
MetStdMax = ICONV(MetStdMax,'MD3')
Set_Property(@WINDOW:'.MET_STD_MAX','DEFPROP',OCONV(MetStdMax,'MD3'))
END
END ;* End of check for ADE test
END ELSE
@ -193,20 +189,11 @@ Create:
Set_Property(@WINDOW:'.MET_RESULT','DEFPROP',MetResult)
Set_Property(@WINDOW:'.MET_STD_RESULT','DEFPROP',MetStdResult)
*IF MetSpecSlot = 'A' THEN
* Set_Property(@WINDOW:'.TEST_SLOT','ENABLED',0)
* Set_Property(@WINDOW:'.TEST_SLOT','BACKCOLOR',GREY$)
*END ELSE
* Set_Property(@WINDOW:'.TEST_SLOT','ENABLED',1)
* Set_Property(@WINDOW:'.TEST_SLOT','BACKCOLOR',WHITE$)
*END
Set_Property(@WINDOW:'.MET_STD_RESULT', 'ENABLED', False$)
IF MetStdMax = '' THEN
Set_Property(@WINDOW:'.MET_STD_RESULT','ENABLED',0)
Set_Property(@WINDOW:'.MET_STD_RESULT','BACKCOLOR',GREY$)
END ELSE
Set_Property(@WINDOW:'.MET_STD_RESULT','ENABLED',1)
Set_Property(@WINDOW:'.MET_STD_RESULT','BACKCOLOR',WHITE$)
Set_Property(@WINDOW:'.MET_STD_RESULT','BACKCOLOR',GREEN$)
END
IF ((MetResult < MetMin) OR (MetResult > MetMax)) then
@ -323,6 +310,10 @@ Refresh:
MetMin = Get_Property(@WINDOW:'.MET_MIN','DEFPROP',MetMin)
MetMax = Get_Property(@WINDOW:'.MET_MAX','DEFPROP',MetMax)
MetResult = Get_Property(@WINDOW:'.MET_MAX','DEFPROP',MetResult)
MetTest = Get_Property(@Window:'.MET_TEST', 'TEXT')
MetSpecSlot = Get_Property(@Window:'.MET_SPEC_SLOT', 'TEXT')
MetWfrQty = Get_Property(@Window:'.MET_SPEC_WFR_QTY', 'TEXT')
MetStdMax = Get_Property(@Window:'.MET_STD_MAX', 'TEXT')
Set_Property(@WINDOW, '@ADE_WAFER_THK_RANGE_REQ', 1)
Set_Property(@WINDOW, '@ADE_STD_RESULT_REQ', 1)
@ -342,6 +333,33 @@ Refresh:
SlotList = Get_Property(SlotCtrl,'LIST')
CtrlCols = Get_Property(SlotCtrl,'COLUMN')
If MetTest = 'ADE' then
If ( (MetSpecSlot EQ 'A') or (MetWfrQty EQ 'A') or (MetWfrQty GT 5) ) then
* Calculate Standard Deviation
StdDev = ''
SlotArray = Get_Property(SlotCtrl, 'ARRAY')
Vals = SlotArray<COL$MU_WAFER_THK_RESULT>
Vals = SRP_Array('Clean', Vals, 'Trim', @VM)
NumVals = DCount(Vals, @VM)
If NumVals EQ 25 then
StdDevType = 'POPULATION'
end else
StdDevType = 'SAMPLE'
end
If NumVals GT 0 then
StdDev = Math_Services('GetStdDev', Vals, StdDevType)
StdDev = OConv(IConv(StdDev, 'MD3'), 'MD3')
end
Set_Property(@WINDOW:'.MET_STD_RESULT', 'DEFPROP', StdDev)
If StdDev GT MetStdMax then
Backcolor = RED$
end else
Backcolor = GREEN$
end
Set_Property(@WINDOW:'.MET_STD_RESULT', 'BACKCOLOR', Backcolor)
end
end ;* End of check for ADE test
SlotCnt = COUNT(SlotList,@FM) + (SlotList NE '')
ColCnt = COUNT(CtrlCols,@SVM) + (CtrlCols NE '')
@ -428,10 +446,9 @@ Refresh:
IF FormMUWaferThkResult NE '' AND ((FormMUWaferThkResult < MetMin) OR (FormMUWaferThkResult > MetMax)) then
stat = Send_Message(SlotCtrl, 'COLOR_BY_POS', '', Line, RED$)
Set_Property(@WINDOW, '@ADE_WAFER_THK_RANGE_REQ', 0)
end else
stat = Send_Message(SlotCtrl, 'COLOR_BY_POS', '', Line, WHITE$)
end
/*end else
stat = Send_Message(SlotCtrl, 'COLOR_BY_POS', '', Line, GREEN$)
end */
END
END
END
@ -446,6 +463,33 @@ Refresh:
SlotList = Get_Property(SlotCtrl,'LIST')
CtrlCols = Get_Property(SlotCtrl,'COLUMN')
If MetTest = 'ADE' then
If ( (MetSpecSlot EQ 'A') or (MetWfrQty EQ 'A') or (MetWfrQty GT 5) ) then
* Calculate Standard Deviation
StdDev = ''
SlotArray = Get_Property(SlotCtrl, 'ARRAY')
Vals = SlotArray<COL$MU_WAFER_THK_RESULT>
Vals = SRP_Array('Clean', Vals, 'Trim', @VM)
NumVals = DCount(Vals, @VM)
If NumVals EQ 25 then
StdDevType = 'POPULATION'
end else
StdDevType = 'SAMPLE'
end
If NumVals GT 0 then
StdDev = Math_Services('GetStdDev', Vals, StdDevType)
StdDev = OConv(IConv(StdDev, 'MD3'), 'MD3')
end
Set_Property(@WINDOW:'.MET_STD_RESULT', 'DEFPROP', StdDev)
If StdDev GT MetStdMax then
Backcolor = RED$
end else
Backcolor = GREEN$
end
Set_Property(@WINDOW:'.MET_STD_RESULT', 'BACKCOLOR', Backcolor)
end
end ;* End of check for ADE test
SlotCnt = COUNT(SlotList,@FM) + (SlotList NE '')
ColCnt = COUNT(CtrlCols,@SVM) + (CtrlCols NE '')
@ -533,10 +577,9 @@ Refresh:
IF FormMUWaferThkResult NE '' AND ((FormMUWaferThkResult < MetMin) OR (FormMUWaferThkResult > MetMax)) then
stat = Send_Message(SlotCtrl, 'COLOR_BY_POS', '', Line, RED$)
Set_Property(@WINDOW, '@ADE_WAFER_THK_RANGE_REQ', 0)
end else
stat = Send_Message(SlotCtrl, 'COLOR_BY_POS', '', Line, WHITE$)
end
/*end else
stat = Send_Message(SlotCtrl, 'COLOR_BY_POS', '', Line, GREEN$)
end */
END
END
END
@ -665,23 +708,15 @@ SaveThickness:
WOMatQARec<WO_MAT_QA_RESULT$,vPos> = MetResult
WOMatQARec<WO_MAT_QA_STD_MAX$,vPos> = ICONV(StdMax,'MD3')
WOMatQARec<WO_MAT_QA_STD_RESULT$,vPos> = StdResult ;* Added 8/5/2013 JCH
* WOMatQARec<WO_MAT_QA_SIG$,vPos> = @USER4
* WOMatQARec<WO_MAT_QA_SIG_DTM$,vPos> = Datetime()
end
Until Found EQ True$
Next ProfStep
* Set_Status(0)
* Parameters = 'WO_MAT_QA':@RM:WOMatQAKey:@RM:'':@RM:WOMatQARec
* obj_Tables('WriteRec', Parameters)
Database_Services('WriteDataRow', 'WO_MAT_QA', WOMatQAKey, WOMatQARec, True$, False$, False$)
If Error_Services('HasError') then
ErrMsg(Error_Services('GetMessage'))
end
* IF Get_Status(errCode) THEN
* ErrMsg(errCode)
* END
RETURN
@ -691,70 +726,36 @@ ResultLF:
* * * * * * *
MetLine = Get_Property(@WINDOW,'@MET_LINE_IN')
MetResult = TRIM(Get_Property(@WINDOW:'.MET_RESULT','DEFPROP'))
MetStdEnabled = Get_Property(@WINDOW:'.MET_STD_RESULT','ENABLED')
IF MetStdEnabled THEN
MetResult = Trim(Get_Property(@WINDOW:'.MET_RESULT','DEFPROP'))
MetStdResult = Get_Property(@WINDOW:'.MET_STD_RESULT','DEFPROP')
MetStdMax = Get_Property(@WINDOW:'.MET_STD_MAX','DEFPROP')
END ELSE
MetStdResult = ''
END
IF MetResult NE '' THEN
IF MetStdEnabled = 1 THEN
IF MetStdResult NE '' THEN
*Set_Property(@WINDOW:'.SIGN','ENABLED',1)
Set_Property(@WINDOW, '@MET_RESULT_REQ', 1)
END ELSE
*Set_Property(@WINDOW:'.SIGN','ENABLED',0)
Set_Property(@WINDOW, '@MET_RESULT_REQ', 0)
END
END ELSE
*Set_Property(@WINDOW:'.SIGN','ENABLED',1)
Set_Property(@WINDOW, '@MET_RESULT_REQ', 1)
END
END ELSE
*Set_Property(@WINDOW:'.SIGN','ENABLED',0)
Set_Property(@WINDOW, '@MET_RESULT_REQ', 0)
END
IF (MetResult NE '') THEN
BEGIN CASE
CASE (MetResult < MetLine<1,COL$MET_MIN>) OR (MetResult > MetLine<1,COL$MET_MAX>)
If ( (MetResult < MetLine<1,COL$MET_MIN>) OR (MetResult > MetLine<1,COL$MET_MAX>) ) then
Set_Property(@WINDOW, '@ADE_WAFER_THK_RANGE_REQ', 0)
Set_Property(@WINDOW:'.MET_RESULT','BACKCOLOR',RED$)
CASE 1
end else
Set_Property(@WINDOW, '@ADE_WAFER_THK_RANGE_REQ', 1)
Set_Property(@WINDOW:'.MET_RESULT','BACKCOLOR',GREEN$)
END CASE
end
END ELSE
Set_Property(@WINDOW:'.MET_RESULT','BACKCOLOR',WHITE$)
*Set_Property(@WINDOW:'.SIGN','ENABLED',0)
Set_Property(@WINDOW, '@MET_RESULT_REQ', 0)
END
IF (MetStdEnabled) THEN
IF (MetStdResult NE '') THEN
BEGIN CASE
CASE MetStdResult > MetStdMax
If (MetStdResult > MetStdMax) then
Set_Property(@WINDOW:'.MET_STD_RESULT','BACKCOLOR',RED$)
Set_Property(@WINDOW, '@ADE_STD_RESULT_REQ', 0)
CASE 1
end else
Set_Property(@WINDOW:'.MET_STD_RESULT','BACKCOLOR',GREEN$)
Set_Property(@WINDOW, '@ADE_STD_RESULT_REQ', 1)
END CASE
END ELSE
Set_Property(@WINDOW:'.MET_STD_RESULT','BACKCOLOR',WHITE$)
*Set_Property(@WINDOW:'.SIGN','ENABLED',0)
Set_Property(@WINDOW, '@MET_RESULT_REQ', 0)
END
END ;* End of check for enable MET_STD_RESULT
END
RETURN
@ -882,12 +883,6 @@ Sign:
ErrMsg("Error: ADE Wafer Thk is OOS!")
END
ADEStdResultReq = Get_Property(@WINDOW, '@ADE_STD_RESULT_REQ')
IF (ADEStdResultReq = 0) THEN
SignatureReady = False$
ErrMsg("Error: ADE Std Result is OOS!")
END
MetResultReq = Get_Property(@WINDOW, '@MET_RESULT_REQ')
IF (MetResultReq = 0) THEN
SignatureReady = False$
@ -1024,27 +1019,6 @@ RETURN
Exit:
*****
/*
WONo = Get_Property(@WINDOW:'.WO_NO', 'DEFPROP')
WOStep = Get_Property(@WINDOW:'.PROC_STEP_NO', 'DEFPROP')
CassNo = Get_Property(@WINDOW:'.OUT_CASS_NO', 'DEFPROP')
RDSNo = Get_Property(@WINDOW:'.RDS_NO', 'DEFPROP')
RunStep = Get_Property(@WINDOW:'.RUN_STEP', 'DEFPROP')
BEGIN CASE
CASE RDSNo = '' ; Send_Event('WM_OUT','WRITE')
CASE RunStep = 'UNLOAD' ; Send_Event('RDS_UNLOAD','WRITE')
CASE RunStep = 'QA' ; Send_Event('RDS_POST_EPI','WRITE')
END CASE
BEGIN CASE
CASE RDSNo = '' ; obj_Appwindow('LoadFormKeys','WM_OUT':@RM:WONo:'*':WOStep:'*':CassNo)
CASE RunStep = 'UNLOAD' ; obj_Appwindow('LoadFormKeys','RDS_UNLOAD':@RM:RDSNo)
CASE RunStep = 'QA' ; obj_Appwindow('LoadFormKeys','RDS_POST_EPI':@RM:RDSNo)
END CASE
*/
*End_Dialog(@WINDOW,'')
End_Window(@WINDOW,'')
RETURN
@ -1055,7 +1029,6 @@ SlotClick:
* * * * * * *
MetSlot = Get_Property(@WINDOW:'.MET_SLOT','DEFPROP')
*TestSlot = Get_Property(@WINDOW:'.TEST_SLOT','DEFPROP')
CtrlName = @WINDOW:'.SLOT_FILL'
SlotList = Get_Property(CtrlName,'LIST')
@ -1063,20 +1036,10 @@ SlotClick:
SlotSelection = Get_Property(CtrlName,'SELPOS')
SelectedRow = SlotSelection<2>
*PreviousSlotSelection = Get_Property(CtrlName,'PREVPOS')
*PreviousSelectedRow = PreviousSlotSelection<2>
IF (SlotList<SelectedRow,COL$EPI_MU_WFR_ID> NE '') THEN
*Set_Property(@WINDOW:'.MET_RESULT', 'ENABLED', -1)
*Set_Property(@WINDOW:'.TEST_SLOT', 'ENABLED', -1)
Set_Property(@WINDOW:'.SLOT_FILL', 'CARETPOS', COL$MU_WAFER_THK_RESULT:@FM:SelectedRow)
END ELSE
*Set_Property(@WINDOW:'.MET_RESULT', 'ENABLED', 1)
* Set_Property(@WINDOW:'.TEST_SLOT', 'ENABLED', 1)
* Set_Property(@WINDOW:'.TEST_SLOT', 'DEFPROP', SelectedRow)
* stat = Send_Message(CtrlName, 'COLOR_BY_POS', '', PreviousSelectedRow, GREEN$)
* stat = Send_Message(CtrlName, 'COLOR_BY_POS', '', SelectedRow, YELLOW$)
Handle = Get_Property(CtrlName, 'HANDLE')
CALL sendMessage(Handle, DTM_SELROW$, 0, SelectedRow-1)
END
@ -1089,7 +1052,6 @@ EpiSlotClick:
* * * * * * *
MetSlot = Get_Property(@WINDOW:'.MET_SLOT','DEFPROP')
*TestSlot = Get_Property(@WINDOW:'.TEST_SLOT','DEFPROP')
CtrlName = @WINDOW:'.EPI_SLOT_FILL'
SlotList = Get_Property(CtrlName,'LIST')
@ -1097,20 +1059,10 @@ EpiSlotClick:
SlotSelection = Get_Property(CtrlName,'SELPOS')
SelectedRow = SlotSelection<2>
*PreviousSlotSelection = Get_Property(CtrlName,'PREVPOS')
*PreviousSelectedRow = PreviousSlotSelection<2>
IF SlotList<SelectedRow,COL$EPI_MU_WFR_ID> NE '' THEN
*Set_Property(@WINDOW:'.MET_RESULT', 'ENABLED', -1)
*Set_Property(@WINDOW:'.TEST_SLOT', 'ENABLED', -1)
Set_Property(@WINDOW:'.EPI_SLOT_FILL', 'CARETPOS', COL$EPI_MU_WAFER_THK_RESULT:@FM:SelectedRow)
END ELSE
* Set_Property(@WINDOW:'.MET_RESULT', 'ENABLED', 1)
* Set_Property(@WINDOW:'.TEST_SLOT', 'ENABLED', 1)
* Set_Property(@WINDOW:'.TEST_SLOT', 'DEFPROP', SelectedRow)
* stat = Send_Message(CtrlName, 'COLOR_BY_POS', '', PreviousSelectedRow, GREEN$)
* stat = Send_Message(CtrlName, 'COLOR_BY_POS', '', SelectedRow, YELLOW$)
Handle = Get_Property(CtrlName, 'HANDLE')
CALL sendMessage(Handle, DTM_SELROW$, 0, SelectedRow-1)
END
@ -1179,4 +1131,3 @@ PubSaveClick:
RETURN

View File

@ -230,21 +230,21 @@ Event PUB_OK.CLICK()
Valid = WritePrivateProfileString(lpszSection, lpszEntry, lpszValue, lpszFileName)
End_Dialog(@Window, AccessLevel)
end else
Set_Property(@Window : '.EDL_USERNAME', 'FOCUS', True$)
Set_Property(@Window : '.EDL_USERNAME', 'SELECTION', 1 : @FM : 999)
Set_Property(@Window : '.EDL_PASSWORD', 'FOCUS', True$)
Set_Property(@Window : '.EDL_PASSWORD', 'SELECTION', 1 : @FM : 999)
Message = 'Unable to validate username. Please re-enter.'
Form_Services('DisplayControlMessage', Message, 'MES Logon', @Window : '.EDL_USERNAME', 'VALIDATION', 'RGB(229,20,0)')
end
end else
Set_Property(@Window : '.EDL_USERNAME', 'FOCUS', True$)
Set_Property(@Window : '.EDL_USERNAME', 'SELECTION', 1 : @FM : 999)
Set_Property(@Window : '.EDL_PASSWORD', 'FOCUS', True$)
Set_Property(@Window : '.EDL_PASSWORD', 'SELECTION', 1 : @FM : 999)
Message = Error_Services('GetMessage')
If Message EQ '' then Message = 'Unable to validate username. Please re-enter.'
Form_Services('DisplayControlMessage', Message, 'MES Logon', @Window : '.EDL_USERNAME', 'VALIDATION', 'RGB(229,20,0)')
end
end else
Set_Property(@Window : '.EDL_USERNAME', 'FOCUS', True$)
Set_Property(@Window : '.EDL_USERNAME', 'SELECTION', 1 : @FM : 999)
Set_Property(@Window : '.EDL_PASSWORD', 'FOCUS', True$)
Set_Property(@Window : '.EDL_PASSWORD', 'SELECTION', 1 : @FM : 999)
Message = Error_Services('GetMessage')
If Message EQ '' then Message = 'System unavailable.'
Form_Services('DisplayControlMessage', Message, 'MES Logon', @Window : '.EDL_USERNAME', 'VALIDATION', 'RGB(229,20,0)')
@ -265,6 +265,3 @@ Setup_OLE_Controls:
return

View File

@ -95,7 +95,7 @@ Declare subroutine Tool_Services, Mona_Services
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services, UCase
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Min, Max
Declare function QA_Services, SRP_Join_Arrays, Get_Status, Obj_Clean_Insp, Datetime, SRP_Datetime
Declare function Httpclient_Services, PM_Services, Signature_Services
Declare function Httpclient_Services, PM_Services, Signature_Services, SRP_Array, Math_Services
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Metrology'
LogDate = Oconv(Date(), 'D4/')
@ -494,16 +494,32 @@ Service ImportStratusData(RunData)
Case Otherwise$
Error_Services('Add', 'Unrecognized cassette ID ':Cassette:'.')
End Case
// Update WO_MAT record
If Error_Services('NoError') then
// Update WO_MAT record
StdDev = ''
WOMatKey = WorkOrderNo : '*' : CassNo
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
If Error_Services('NoError') then
NumVals = 0
For each Position in Positions using @VM setting vPos
If Position NE '' then
WOMatRec<WO_MAT_MU_WAFER_THK_RESULT$, Position> = DataPoints<0, vPos>
NumVals += 1
end
Next Position
If NumVals EQ 25 then
StdDevType = 'POPULATION'
end else
StdDevType = 'SAMPLE'
end
If NumVals GT 0 then
Vals = WOMatRec<WO_MAT_MU_WAFER_THK_RESULT$>
Vals = SRP_Array('Clean', Vals, 'Trim', @VM)
StdDev = Math_Services('GetStdDev', Vals, StdDevType)
StdDev = OConv(IConv(StdDev, 'MD3'), 'MD3')
end
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
If Error_Services('HasError') then
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
@ -512,14 +528,31 @@ Service ImportStratusData(RunData)
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
end
// Update the WM_OUT record for EpiPro
if IsEpiPro then
If IsEpiPro then
NumVals = 0
WMORec = Database_Services('ReadDataRow', 'WM_OUT', RDSNo@)
for each wafer in Positions using @VM setting dPos
WMORec<WM_OUT_MU_WAFER_THK_RESULT$, wafer> = DataPoints<0, dPos>
Next wafer
For each Wafer in Positions using @VM setting dPos
If Wafer NE '' then
WMORec<WM_OUT_MU_WAFER_THK_RESULT$, Wafer> = DataPoints<0, dPos>
NumVals += 1
end
Next Wafer
If NumVals EQ 25 then
StdDevType = 'POPULATION'
end else
StdDevType = 'SAMPLE'
end
If NumVals GT 0 then
Vals = WMORec<WM_OUT_MU_WAFER_THK_RESULT$>
Vals = SRP_Array('Clean', Vals, 'Trim', @VM)
StdDev = Math_Services('GetStdDev', Vals, StdDevType)
StdDev = OConv(IConv(StdDev, 'MD3'), 'MD3')
end
Database_Services('WriteDataRow', 'WM_OUT', RDSNo@, WMORec, True$, False$, True$)
end
// Update WO_MAT_QA record
StdDevMax = ''
WOMatQAID = WorkOrderNo : '*' : CassNo
WOMatQARec = Database_Services('ReadDataRow', 'WO_MAT_QA', WOMatQAID)
If Error_Services('NoError') then
@ -529,11 +562,20 @@ Service ImportStratusData(RunData)
ProfileCnt = DCount(WOMatQARec<WO_MAT_QA_PROFILE$>, @VM)
Stages = WOMatQARec<WO_MAT_QA_STAGE$>
Slots = WOMatQARec<WO_MAT_QA_SLOT$>
SpecQty = WOMatQARec<WO_MAT_QA_WFR_QTY$>
pPos = ''
For each Profile in Profiles using @VM setting pPos
Stage = Stages<0, pPos>
If ( (Profile EQ '1ADE') and ( (Stage EQ 'QA') or (Stage EQ 'MO_QA') ) ) then
Slot = Slots<0, pPos>
If ( (Slot EQ 'A') or (SpecQty EQ 'A') or (SpecQty GT 5) ) then
MetMin = WOMatQARec<WO_MAT_QA_MIN$, pPos>
MetMax = WOMatQARec<WO_MAT_QA_MAX$, pPos>
StdDevMax = ((MetMin + MetMax) / 2) * (0.02)
StdDevMax = IConv(StdDevMax,'MD3')
WOMatQARec<WO_MAT_QA_STD_RESULT$, pPos> = StdDev
WOMatQARec<WO_MAT_QA_STD_MAX$, pPos> = StdDevMax
end
Begin Case
Case Slot EQ '1'
WaferIndex = 1
@ -544,10 +586,6 @@ Service ImportStratusData(RunData)
Case Otherwise$
WaferIndex = Slot
End Case
* If Slot EQ '1' then WaferIndex = 1
* If Slot EQ 'L' then WaferIndex = 25
* //Running into Slot "A" in some PSN's and QA records. Translating slot "A" to slot 1
* If Slot EQ 'A' then WaferIndex = 1
Locate WaferIndex in Positions using @VM setting dPos then
WOMatQARec<WO_MAT_QA_RESULT$, pPos> = DataPoints<0, dPos>
end
@ -565,6 +603,7 @@ Service ImportStratusData(RunData)
end else
Metrology_Services('LogResults', RDSNo@, Machine, 'UID001', Service : ' : ' : Error_Services('GetMessage'))
end
end service
@ -2819,20 +2858,3 @@ LoadRunDataToDatabase:
return

View File

@ -300,6 +300,3 @@ SetDelay:
return

View File

@ -280,6 +280,17 @@ FOR WOStepNo = 1 TO StepCnt
WOMatQARec<WO_MAT_QA_SHIP_DOC$,MetLine> = QAMetData<COL$QA_MET_SHIP_DOC,StageNo> ;* StageRec<PRS_STAGE_MET_SHIP_DOC$,StageNo>
WOMatQARec<WO_MAT_QA_PHASE_MIN$,MetLine> = QAMetData<COL$QA_MET_PHASE_MIN,StageNo>
MetTest = QAMetData<COL$QA_MET_TEST,StageNo>
IF MetTest = 'ADE' THEN
MetSpecSlot = QAMetData<COL$QA_MET_SLOT,StageNo>
MetWfrQty = QAMetData<COL$QA_MET_WFR_QTY,StageNo>
IF ( (MetSpecSlot = 'A') OR (MetWfrQty = 'A') OR (MetWfrQty > 5) ) THEN
* Standard Deviation Required
MetStdMax = ((MetMin + MetMax) / 2) * (0.02)
MetStdMax = ICONV(MetStdMax,'MD3')
WOMatQARec<WO_MAT_QA_STD_MAX$> = MetStdMax
END
END ;* End of check for ADE test
* Retrieve any existing results from the WO_MAT record
@ -600,6 +611,7 @@ NEXT I
otParms = 'WO_MAT_QA':@RM:WONo:'*':CassNo
WOMatQARec = obj_Tables('ReadRec',otParms)
errCode = ''
IF Get_Status(errCode) THEN
RETURN
END

View File

@ -38,9 +38,6 @@ Declare function Get_Property, RDS_Services, EpiPro_Services, DateTime, Signa
Declare subroutine Scan_Services, Memory_Services, Database_Services, SRP_JSON, Security_Services, obj_Notes
Declare subroutine obj_WO_Mat_Log, obj_WO_Mat, Set_Status, SAP_Services, Rds_Services, Wm_Out_Services, Hold_Services
//TODO - flag used during cutover, delete from APP_INFO and removed commented lines reference Use2DBarcode
*Use2DBarcode = Database_Services('ReadDataRow', 'APP_INFO', 'USE_PACKAGING_2D')
GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' module.')
end
@ -105,8 +102,6 @@ Service CompletePackaging(CassetteID, OperatorID, BaggerIdentifier)
InvDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')
Set_Status(0)
* aiParms = 'WO_MAT':@RM:WONo:@RM:CassNo:@RM:WhCd:'*':LocCd:@RM:Action:@RM:InvDTM:@RM:UserID:@RM:Tag:@RM:ToolID
* obj_WO_Mat('AddInvTrans', aiParms)
LogDate = OCONV( Date(), 'D2/' )
LogTime = OCONV( Time(), 'MTS' )
@ -131,11 +126,6 @@ Service CompletePackaging(CassetteID, OperatorID, BaggerIdentifier)
WOMLParms := ToolID
obj_WO_Mat_Log('Create',WOMLParms)
* errCode = ''
* IF Get_Status(errCode) THEN
* ErrorMsg = 'Error calling obj_WO_Mat_Log("Create"). Error code: ':errCode
* Error_Services('Add', ErrorMsg)
* end
errCode = ''
IF Get_Status(errCode) THEN
swap @SVM with CRLF$ in errCode
@ -148,14 +138,6 @@ Service CompletePackaging(CassetteID, OperatorID, BaggerIdentifier)
// Add CassComp transaction to SAP queue
SAPBatchNo = Xlate('WO_MAT', WOMatKey, 'SAP_BATCH_NO', 'X')
If SAPBatchNo EQ '' then SAP_Services('AddCassCompTransaction', WOMatKey)
* Begin Case
* Case CommentEntity = 'RDS'
* CommentText = 'Packaging completed for RDS ' :CassetteID: ' by user ' : OperatorID
* Rds_Services('AddComment', CassetteID, CommentText, OperatorID)
* Case CommentEntity = 'WM_OUT'
* CommentText = 'Packaging completed for WM_OUT ' :CassetteID: ' by user ' : OperatorID
* Wm_Out_Services('AddComment', CassetteID, CommentText, OperatorID)
* End Case
end
end
@ -255,7 +237,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
CtrlEntID = False$ ;* Control checked/unchecked
OriginFlag = 'P' ;* Flag to indicate a hold initiated from the packagaing form
Parms = WOMatKey:@RM:HoldEntity:@RM:HoldEntityID:@RM:CtrlEntID:@RM:OriginFlag:@RM:OperatorID
//obj_WO_Mat('ToggleHold', Parms)
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
// Write fail packaging record in material log for first cassette ID
@ -365,8 +346,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
// non-existent carrier will the scan data be considered invalid.
//if using 2D, CassetteId is buried in barcode
*If Use2DBarcode then
cnt = DCount(ScanData, '|')
if cnt NE 8 then
CassetteID = 0
@ -378,9 +357,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
Seq1 = Field(ScanData, '|', 8)
Set_Property(@Window:'.EDL_SEQUENCE1', 'TEXT', Seq1)
end
*end else
* CassetteID = ScanData
*end
// Strip '1T', 'I', and 'O' prefixes.
If CassetteID[1, 2] EQ '1T' then
@ -486,7 +462,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
// non-existent carrier will the scan data be considered invalid.
*If Use2DBarcode then
cnt = DCount(ScanData, '|')
if cnt NE 8 then
CassetteID = 0
@ -497,9 +472,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
SecondCassID = Field(ScanData, '|', 3)
Seq2 = Field(ScanData, '|', 8)
end
*end else
* SecondCassID = ScanData
*end
// Strip '1T', 'I', and 'O' prefixes.
If SecondCassID[1, 2] EQ '1T' then
@ -510,7 +482,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
If ScanData[1, 3] EQ 'PWD' then ScanData = '********'
//SecondCassID = ScanData
FirstCassID = Param1
OperatorID = Param2
Seq1 = Param3
@ -589,7 +560,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
CtrlEntID = False$ ;* Control checked/unchecked
OriginFlag = 'P' ;* Flag to indicate a hold initiated from the packagaing form
Parms = WOMatKey:@RM:HoldEntity:@RM:HoldEntityID:@RM:CtrlEntID:@RM:OriginFlag:@RM:OperatorID
//obj_WO_Mat('ToggleHold', Parms)
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
// Check if second cassette ID is a valid RDS or WM_OUT key
@ -648,7 +618,6 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
CtrlEntID = False$ ;* Control checked/unchecked
OriginFlag = 'P' ;* Flag to indicate a hold initiated from the packagaing form
Parms = WOMatKey:@RM:HoldEntity:@RM:HoldEntityID:@RM:CtrlEntID:@RM:OriginFlag:@RM:OperatorID
//obj_WO_Mat('ToggleHold', Parms)
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
end
@ -671,7 +640,7 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
Error_Services('Add', Message)
end else if SeqMismatch EQ True$ then
//do sequence mismatch stuff here
// Do sequence mismatch stuff here
Message = 'RDS Label verification failed at packaging due to operator double-scanning barcode.':CRLF$ |
: 'RDS: ':FirstCassID:CRLF$ |
: 'Operator: ':OperatorID
@ -693,3 +662,4 @@ Service ProcessScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
end
end service