From 62ac326550a5bcc34ce98160c025e582be5b9430 Mon Sep 17 00:00:00 2001 From: "Ouellette Jonathan (CSC FI SPS MESLEO)" Date: Wed, 19 Feb 2025 18:51:09 +0100 Subject: [PATCH] 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 --- LSL2/STPROC/CLEAN_INSP_SERVICES.txt | 33 +++++++++-- LSL2/STPROC/EXPORT_CDS.txt | 89 +++++++++++++++++++++++++---- 2 files changed, 106 insertions(+), 16 deletions(-) diff --git a/LSL2/STPROC/CLEAN_INSP_SERVICES.txt b/LSL2/STPROC/CLEAN_INSP_SERVICES.txt index 0b4b9fd..c7580aa 100644 --- a/LSL2/STPROC/CLEAN_INSP_SERVICES.txt +++ b/LSL2/STPROC/CLEAN_INSP_SERVICES.txt @@ -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 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - diff --git a/LSL2/STPROC/EXPORT_CDS.txt b/LSL2/STPROC/EXPORT_CDS.txt index 51d1217..907bc74 100644 --- a/LSL2/STPROC/EXPORT_CDS.txt +++ b/LSL2/STPROC/EXPORT_CDS.txt @@ -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 + SubSupplier = WOMatRec + + //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 + If ThisRDSTestZone EQ Zone then + //It's a matching zone to the wafer we're currently working on. + ThisRDSTestLayer = ThisRDSTestRec + ThisSpecResTool = ThisRDSTestRec + Begin Case + Case ThisRDSTestLayer EQ 'L1' + if ThisRDSTestRec NE '' then + Layer1ResRhoAvg = OCONV(ThisRDSTestRec, 'MD4') + Layer1ResRhoStdDev = OCONV(ThisRDSTestRec, 'MD4') + end else + Layer1ResRhoAvg = OCONV(ThisRDSTestRec, 'MD3') + Layer1ResRhoStdDev = OCONV(ThisRDSTestRec, 'MD3') + end + Layer1ThkAvg = OCONV(ThisRDSTestRec, 'MD2') + Case ThisRDSTestLayer EQ 'L2' + if ThisRDSTestRec NE '' then + Layer2ResRhoAvg = OCONV(ThisRDSTestRec, 'MD4') + Layer2ResRhoStdDev = OCONV(ThisRDSTestRec, 'MD4') + end else + Layer2ResRhoAvg = OCONV(ThisRDSTestRec, 'MD3') + Layer2ResRhoStdDev = OCONV(ThisRDSTestRec, 'MD3') + end + Layer2ThkAvg = OCONV(ThisRDSTestRec, 'MD2') + Case ThisRDSTestLayer EQ '2' + LayerCombinedThkAvg = OCONV(ThisRDSTestRec, '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 + DefectivityMin = ThisCleanInspRec + DefectivityMax = ThisCleanInspRec + 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 +