92 lines
2.8 KiB
Plaintext
92 lines
2.8 KiB
Plaintext
function GetNewScanDataAvg(CINo, CurrentMax, NCRNo, CurrentAvg)
|
|
/*
|
|
This function will return the defect data while excluding data for wafers that were NCR'ed out.
|
|
*/
|
|
#pragma precomp SRP_PreCompiler
|
|
$INSERT REACT_RUN_EQUATES
|
|
|
|
Declare function DCount
|
|
Declare function SRP_Math
|
|
*Some wafers must get a reclean and thus they're read twice. We'll take the last number and assign it as the max.
|
|
CurrentMax = CurrentMax<1,1>
|
|
CurrentAvg = CurrentAvg<1,1>
|
|
OldMax = CurrentMax
|
|
|
|
*Pulls in the values of all slots read
|
|
Reads = XLATE('CLEAN_INSP',CINo,86,'X')
|
|
|
|
slots = 25
|
|
|
|
*Pulls up the NCR Records and looks for what failed wafers exist in each NCR
|
|
FailedSlots = ''
|
|
failedCount = 0
|
|
|
|
FailedSlots = FailedSlots:XLATE('NCR', NCRNo, 57, 'X')
|
|
|
|
|
|
failedCount = Count(FailedSlots, @VM)
|
|
|
|
|
|
swap @SVM with @VM in Reads
|
|
ReadsCount = DCOUNT(Reads,@VM)
|
|
NewMax = 0
|
|
DefSpecs = XLATE('CLEAN_INSP',CINo, 15, 'X')
|
|
DefSpec = DefSpecs<1,1>
|
|
|
|
NewReads = 0
|
|
TotalWafers = 0
|
|
if FailedCount GT 0 Then
|
|
For slot = 1 to slots
|
|
|
|
IF Reads<1,slot> NE '' then
|
|
If Reads<1,slot> LE DefSpec then
|
|
NewReads += Reads<1,slot>
|
|
TotalWafers += 1
|
|
If Reads<1,slot> GE NewMax then
|
|
NewMax = Reads<1,slot>
|
|
end
|
|
end
|
|
/*
|
|
failed = 0
|
|
Loop
|
|
For failedWafers = 1 to failedCount
|
|
if FailedSlots<1, failedWafers> EQ slot then
|
|
failed = 1
|
|
end else
|
|
failed = failed + 0
|
|
end
|
|
|
|
Next failedWafers
|
|
Until failed = 1 OR failedWafers GE failedCount
|
|
Repeat
|
|
|
|
if failed = 0 AND Reads<1,slot> LE DefSpec then
|
|
IF Reads<1,slot> GE NewMax AND Reads<1,slot> NE OldMax then
|
|
NewMax = Reads<1,slot>
|
|
|
|
end
|
|
NewReads += Reads<1,slot>
|
|
TotalWafers = TotalWafers + 1
|
|
end
|
|
*/
|
|
|
|
end
|
|
|
|
Next slot
|
|
|
|
|
|
RecalcCount = ReadsCount - FailedCount
|
|
|
|
//Catches a possible division by zero JRO 5/28/2020
|
|
if (NewReads EQ 0) OR (TotalWafers EQ 0) then
|
|
Ans = 0
|
|
end else
|
|
Ans = SRP_Math("ROUND", NewReads / TotalWafers, 3)
|
|
end
|
|
|
|
end else
|
|
Ans = OCONV(CurrentAvg,'MD3')
|
|
end
|
|
|
|
Return Ans
|