Merged PR 11238: Modifications for custom EpiSil CDS File
Added in metrology fields for CDS if customer is EpiSil. Related work items: #220257, #221112, #233233
This commit is contained in:
parent
3d230444b0
commit
62ac326550
@ -56,7 +56,7 @@ $Insert PRS_STAGE_EQUATES
|
||||
$Insert WO_MAT_EQUATES
|
||||
|
||||
Declare function Database_Services, SRP_JSON, Error_Services, obj_Clean_Insp
|
||||
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services
|
||||
Declare subroutine Database_Services, SRP_JSON, Error_Services, obj_React_Run, Clean_Insp_Services, React_Run_Services, Btree.Extract
|
||||
|
||||
GoToService
|
||||
|
||||
@ -439,12 +439,33 @@ Service UpdateAllCleanInsp(WOMatKey)
|
||||
|
||||
end service
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// This service functions as a means to get the latest CINo for a specified RDS No where the defectivity measurements took place
|
||||
// This is specifically used to have the latest defectivity data
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Service GetLatestDefectCINoByRDSId(RDSNo)
|
||||
LatestCINo = ''
|
||||
LatestInspDtm = ''
|
||||
Open 'DICT CLEAN_INSP' to @DICT then
|
||||
SrchString = 'RDS_NO':@VM:RDSNo:@FM
|
||||
CIList = ''
|
||||
Option = ''
|
||||
Flag = ''
|
||||
Btree.Extract(SrchString, 'CLEAN_INSP', @DICT, CIList, Option, Flag)
|
||||
If CIList NE '' then
|
||||
for each CleanInspKey in CIList using @VM
|
||||
ThisCIInspDtm = Database_Services('ReadDataColumn', 'CLEAN_INSP', CleanInspKey, CLEAN_INSP_SCAN_VER_SIG_DTM$ , True$, 0, False$)
|
||||
ThisCIInspDefAvg = Database_Services('ReadDataColumn', 'CLEAN_INSP', CleanInspKey, CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$ , True$, 0, False$)
|
||||
If ThisCIInspDtm GT LatestInspDtm AND ThisCIInspDefAvg NE '' then
|
||||
LatestCINo = CleanInspKey
|
||||
LatestInspDtm = ThisCIInspDtm
|
||||
end
|
||||
Next CleanInspKey
|
||||
end
|
||||
end
|
||||
Response = LatestCINo
|
||||
end service
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,17 +1,15 @@
|
||||
COMPILE FUNCTION EXPORT_CDS(ShipNo, AutoFlag,CustPath)
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
* EPIPro Data Report - goes straight to CSV for FTP transmission to customer
|
||||
* This is for Casette Data Sheets
|
||||
|
||||
* 12/2/2008 John C. Henry, J.C. Henry & Co., Inc. Initial coding
|
||||
* 04/15/2020 Jonathan R. Ouellette, COVID-19 Quarantine from my couch, Inc. Modified this from EXPORT_IR.
|
||||
* 05/29/2020 Jonathan R. Ouellette, Still COVID-19 Quarantine from my couch. Further Modified from EXPORT_COA to output only Cassette Info.
|
||||
|
||||
DECLARE SUBROUTINE ErrMsg, Btree.Extract, Set_Status, SetInitDirOptions
|
||||
DECLARE SUBROUTINE ErrMsg, Btree.Extract, Set_Status, SetInitDirOptions, Database_Services
|
||||
DECLARE FUNCTION Msg, Get_Status, obj_Calendar, Utility, SetInitDirOptions, Dialog_Box, obj_RDS_Test, obj_WO_Log, Getnewscandata, Getnewscandataavg
|
||||
DECLARE FUNCTION Popup, obj_WM_Out, obj_WO_Mat
|
||||
DECLARE FUNCTION Popup, obj_WM_Out, obj_WO_Mat, Database_Services, Clean_Insp_Services
|
||||
DECLARE FUNCTION Environment_Services
|
||||
|
||||
$Insert APP_INSERTS
|
||||
$INSERT COC_EQUATES
|
||||
$INSERT RDS_EQU
|
||||
$INSERT RDS_LAYER_EQUATES
|
||||
@ -25,6 +23,8 @@ $INSERT RLIST_EQUATES
|
||||
$INSERT WO_MAT_EQUATES
|
||||
$INSERT ORDER_DET_EQU
|
||||
$INSERT WM_OUT_EQUATES
|
||||
$Insert CLEAN_INSP_EQUATES
|
||||
$Insert REACT_RUN_EQUATES
|
||||
|
||||
|
||||
EQU COL$WMO_NO TO 1
|
||||
@ -41,8 +41,6 @@ EQU COL$CRM_ZONE TO 11
|
||||
EQU COL$CRM_THICK_AVG TO 12
|
||||
EQU COL$CRM_HGCV1_RES_AVG TO 13
|
||||
|
||||
EQU TAB$ TO CHAR(9)
|
||||
EQU CRLF$ TO \0D0A\
|
||||
|
||||
If Assigned(AutoFlag) else AutoFlag = False$
|
||||
If AutoFlag EQ True$ else AutoFlag = False$
|
||||
@ -78,9 +76,7 @@ RevNo = XLATE('CUST_EPI_PART', CustNo : '*' : custPartNo, 3, 'X')
|
||||
|
||||
CONVERT @VM TO '' IN TestWMOutKeys
|
||||
Result = ''
|
||||
|
||||
* EpiPro
|
||||
|
||||
*Loop Through Each Casette
|
||||
FOR I = 1 TO CassCnt
|
||||
|
||||
@ -107,6 +103,66 @@ Result = ''
|
||||
CassNo = WMOutRec<5,N>
|
||||
InSlot = WMOutRec<6,N>
|
||||
Line = CassID : @VM : SlotNo : @VM : RDSNo : @VM : Pocket : @VM : Zone : @VM : LotNo : @VM : PartNo : @VM : CassNo : @VM : InSlot : @VM
|
||||
If CustNo EQ 7108 then
|
||||
|
||||
//This is data specifically for EpiSil
|
||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey, True$, 0, False$)
|
||||
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
|
||||
SubSupplier = WOMatRec<WO_MAT_SUB_SUPPL_BY$>
|
||||
|
||||
//Now Layer and Zone Metrology
|
||||
Layer1ResRhoAvg = ''
|
||||
Layer2ResRhoAvg = ''
|
||||
Layer1ResRhoStdDev = ''
|
||||
Layer2ResRhoStdDev = ''
|
||||
Layer1ThkAvg = ''
|
||||
Layer2ThkAvg = ''
|
||||
LayerCombinedThkAvg = ''
|
||||
RDSLayerKeys = Database_Services('ReadDataColumn', 'REACT_RUN', RDSNo, REACT_RUN_RDS_LAYER_KEYS$, True$, 0, False$)
|
||||
for each RDSLayerKey in RDSLayerKeys using @VM
|
||||
ThisLayer = Field(RDSLayerKey, '*', 2)
|
||||
ThisLayerRDSTestKeys = Database_Services('ReadDataColumn', 'RDS_LAYER', RDSLayerKey, RDS_LAYER_RDS_TEST_KEYS$, True$, 0, False$)
|
||||
For each RDSTestKey in ThisLayerRDSTestKeys using @VM
|
||||
ThisRDSTestRec = Database_Services('ReadDataRow', 'RDS_TEST', RDSTestKey, True$, 0, False$)
|
||||
ThisRDSTestZone = ThisRDSTestRec<RDS_TEST_ZONE$>
|
||||
If ThisRDSTestZone EQ Zone then
|
||||
//It's a matching zone to the wafer we're currently working on.
|
||||
ThisRDSTestLayer = ThisRDSTestRec<RDS_TEST_LS_ID$>
|
||||
ThisSpecResTool = ThisRDSTestRec<RDS_TEST_SPEC_RES_MTOOL$>
|
||||
Begin Case
|
||||
Case ThisRDSTestLayer EQ 'L1'
|
||||
if ThisRDSTestRec<RDS_TEST_RES_AVG$> NE '' then
|
||||
Layer1ResRhoAvg = OCONV(ThisRDSTestRec<RDS_TEST_RES_AVG$>, 'MD4')
|
||||
Layer1ResRhoStdDev = OCONV(ThisRDSTestRec<RDS_TEST_RES_STDV$>, 'MD4')
|
||||
end else
|
||||
Layer1ResRhoAvg = OCONV(ThisRDSTestRec<RDS_TEST_HGCV1_RES_AVG$>, 'MD3')
|
||||
Layer1ResRhoStdDev = OCONV(ThisRDSTestRec<RDS_TEST_HGCV1_RES_STDV$ >, 'MD3')
|
||||
end
|
||||
Layer1ThkAvg = OCONV(ThisRDSTestRec<RDS_TEST_THICK_AVG$>, 'MD2')
|
||||
Case ThisRDSTestLayer EQ 'L2'
|
||||
if ThisRDSTestRec<RDS_TEST_RES_AVG$> NE '' then
|
||||
Layer2ResRhoAvg = OCONV(ThisRDSTestRec<RDS_TEST_RES_AVG$>, 'MD4')
|
||||
Layer2ResRhoStdDev = OCONV(ThisRDSTestRec<RDS_TEST_RES_STDV$>, 'MD4')
|
||||
end else
|
||||
Layer2ResRhoAvg = OCONV(ThisRDSTestRec<RDS_TEST_HGCV1_RES_AVG$>, 'MD3')
|
||||
Layer2ResRhoStdDev = OCONV(ThisRDSTestRec<RDS_TEST_HGCV1_RES_STDV$ >, 'MD3')
|
||||
end
|
||||
Layer2ThkAvg = OCONV(ThisRDSTestRec<RDS_TEST_THICK_AVG$>, 'MD2')
|
||||
Case ThisRDSTestLayer EQ '2'
|
||||
LayerCombinedThkAvg = OCONV(ThisRDSTestRec<RDS_TEST_THICK_AVG$>, 'MD2')
|
||||
End Case
|
||||
end
|
||||
|
||||
Next RDSTestKey
|
||||
Next RDSLayerKey
|
||||
Line := Layer1ResRhoAvg : @VM : Layer2ResRhoAvg : @VM : Layer1ResRhoStdDev : @VM : Layer2ResRhoStdDev : @VM : Layer1ThkAvg : @VM : Layer2ThkAvg : @VM : LayerCombinedThkAvg : @VM
|
||||
LatestCIKey = Clean_Insp_Services('GetLatestDefectCINoByRDSId', RDSNo)
|
||||
ThisCleanInspRec = Database_Services('ReadDataRow', 'CLEAN_INSP', LatestCIKey, True$, 0, False$)
|
||||
DefectivityAvg = ThisCleanInspRec<CLEAN_INSP_SCAN_SUM_OF_DEF_AVG$>
|
||||
DefectivityMin = ThisCleanInspRec<CLEAN_INSP_SCAN_SUM_OF_DEF_MIN$>
|
||||
DefectivityMax = ThisCleanInspRec<CLEAN_INSP_SCAN_SUM_OF_DEF_MAX$>
|
||||
Line := DefectivityAvg : @VM : DefectivityMin : @VM : DefectivityMax : @VM
|
||||
end
|
||||
Result<-1> = Line
|
||||
Next N
|
||||
NEXT I
|
||||
@ -149,6 +205,18 @@ HeaderOut := '"Lot No"':@VM
|
||||
HeaderOut := '"Part Num"':@VM
|
||||
HeaderOut := '"Cass Num"':@VM
|
||||
HeaderOut := '"In Slot"':@VM
|
||||
if CustNo EQ 7108 then
|
||||
//This is EpiSil specific headers
|
||||
HeaderOut := '"Res/Rho Avg Layer 1"':@VM
|
||||
HeaderOut := '"Res/Rho Avg Layer 2"':@VM
|
||||
HeaderOut := '"Res/Rho Std. Dev. Layer 2"':@VM
|
||||
HeaderOut := '"Thk Avg Layer 1"':@VM
|
||||
HeaderOut := '"Thk Avg Layer 2"':@VM
|
||||
HeaderOut := '"Thk Avg Combined"':@VM
|
||||
HeaderOut := '"Defectivity Avg"':@VM
|
||||
HeaderOut := '"Defectivity Min"':@VM
|
||||
HeaderOut := '"Defectivity Max"':@VM
|
||||
end
|
||||
HeaderOut := CRLF$
|
||||
|
||||
SWAP @VM WITH ',' IN HeaderOut
|
||||
@ -175,3 +243,4 @@ OSClose DOSFile
|
||||
RETURN DOSTable
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user