From 31252256393a96aa926ca0726fe000d235d5515a Mon Sep 17 00:00:00 2001 From: "Infineon\\Ouellette" Date: Wed, 6 Aug 2025 16:20:43 -0700 Subject: [PATCH] Created temporary workarounds to QA Metrology not getting set correctly. --- LSL2/STPROC/OBJ_WO_MAT_QA.txt | 3 +- LSL2/STPROC/OBJ_WO_REACT.txt | 45 ++------------- LSL2/STPROC/RDS_SERVICES.txt | 102 +++++++++++++++++++++++++++++++++- 3 files changed, 107 insertions(+), 43 deletions(-) diff --git a/LSL2/STPROC/OBJ_WO_MAT_QA.txt b/LSL2/STPROC/OBJ_WO_MAT_QA.txt index 097db74..b4a22c7 100644 --- a/LSL2/STPROC/OBJ_WO_MAT_QA.txt +++ b/LSL2/STPROC/OBJ_WO_MAT_QA.txt @@ -501,7 +501,7 @@ AddQAMet: //Record is blank, create new from spec. PSN_Services('UpdateAllQAMetrologyRecord', WOMatKey) end - + Database_Services('ReleaseKeyIDLock', 'WO_MAT_QA', WOMatKey) end else LogData = '' LogData<1> = LoggingDTM;//Defined at entry of subroutine @@ -756,3 +756,4 @@ RETURN + diff --git a/LSL2/STPROC/OBJ_WO_REACT.txt b/LSL2/STPROC/OBJ_WO_REACT.txt index b8d3747..49e25c0 100644 --- a/LSL2/STPROC/OBJ_WO_REACT.txt +++ b/LSL2/STPROC/OBJ_WO_REACT.txt @@ -18,6 +18,7 @@ COMPILE FUNCTION obj_WO_React(Method,Parms) DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_Prod_Spec, obj_WO_Mat_QA, GetTickCount Declare function Environment_Services DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, RList, ErrMsg, Btree.Extract, obj_WO_Mat_QA, Mona_Services +Declare subroutine RDS_Services $INSERT MSG_EQUATES $INSERT WO_REACT_EQUATES @@ -303,46 +304,8 @@ RETURN AddSchedQA: * * * * * * * -chgCnt = COUNT(ChangePosList,@VM) + (ChangePosList NE '') - -FOR I = 1 TO chgCnt - AddCassNo = CassNos<1,ChangePoslist<1,I>> - - Log:= 'AddSched on CassNo: ':AddCassNo:@FM - - owmParms = WONo:@RM - owmParms := StepNo:@RM - owmParms := AddCassNo:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData:@RM - owmParms := QAMetData ; // 10/15/18 - djs - Added Phase Min Spec for HgCV - - - obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change - - IF Get_Status(errCode) THEN - ErrMsg(errCode) - END - - *obj_WO_Mat('AddQAMet',owmParms) ;* Dead 6/5/2015 JCH - remove after a few days - - *IF Get_Status(errCode) THEN - * ErrMsg(errCode) - *END - - - -NEXT I +//Redirect to this service as a fallback because the below logic doesn't work +RDS_Services('ProcessMetQA', RDSNo) RETURN + diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt index 54cba81..1f2bc9b 100644 --- a/LSL2/STPROC/RDS_SERVICES.txt +++ b/LSL2/STPROC/RDS_SERVICES.txt @@ -85,6 +85,7 @@ $Insert DICT_EQUATES $Insert COMPANY_EQUATES $Insert RETURN_TO_FAB_LOTS_EQUATES $Insert TEST_RUN_EQUATES +$Insert QA_MET_EQUATES EQU COL$LSID TO 1 EQU COL$RECIPE TO 2 @@ -119,7 +120,7 @@ AutoDisplayErrors = FALSE$ ; // Set this to True$ when debugging so all erro Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status , Reactor_Services -Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce +Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce, obj_wo_mat_qa Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services Declare function Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec @@ -809,6 +810,104 @@ Service GetRDSRunHistoryByReactorAndWO(ReactorNo, WO) end service +Service ProcessMetQA(RDSNo) + + RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) + WONo = RDSRec + CassNo = RDSRec + StepNo = 1 + PSNos = XLATE('WO_LOG',WoNo,'PROD_VER_STEP_PSN','X') + PSNo = PSNos<1,StepNo> + + QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:@RM:1) ;* * * Get Reactor Scheduled QA Metrology * * * + If QAMetData NE '' then + for each Stage in QAMetData using @VM setting StagePos + Start = QAMetData + Interval = QAMetData + Stage = QAMetData + MetPropCd = QAMetData + + IsProdTestReqd = RDS_Services('IsProdTestReqd', RDSNo, MetPropCd) + + If IsProdTestReqd then + + owmParms = WONo:@RM + owmParms := StepNo:@RM + owmParms := CassNo:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData:@RM + owmParms := QAMetData ; // 10/15/18 - djs - Added Phase Min Spec for HgCV + + + obj_WO_Mat_QA('AddQAMet', owmParms) ;* Schedule test boxes after list change + + IF Get_Status(errCode) THEN + ErrMsg(errCode) + END + end + Next Stage + end + +end service + +Service IsProdTestReqd(RDSNo, PropCd) + + ProdTestReqd = False$ + RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) + WONo = RDSRec + ReactNo = RDSRec + ReactorType = Database_Services('ReadDataColumn', 'REACTOR', ReactNo, REACTOR_REACT_TYPE$, True$, 0, False$) + ThisReactorRunOrder = 0 + ReactRDSNos = RDS_Services('GetRDSRunHistoryByReactorAndWO', ReactNo, WONo) + LOCATE RDSNo IN ReactRDSNos USING @VM SETTING ThisReactorRunOrder else + //Add it to the end of the RDS List assuming that it's next to run. + LastIndex = DCount(ReactRDSNos, @VM) + ThisReactorRunOrder = LastIndex + 1 + ReactRDSNos<1, ThisReactorRunOrder> = RDSNo + end + PSNo = RDSRec + PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo) + PRSLayerKeys = PSRec + for each PRSLayerKey in PRSLayerKeys using @VM + PRSPropKeys = Database_Services('ReadDataColumn', 'PRS_LAYER', PRSLayerKey, 5) + for each PRSPropKey in PRSPropKeys using @VM + PRSPropRec = Database_Services('ReadDataRow', 'PRS_PROP', PRSPropKey) + ReqdPropCd = Field(PRSPropKey, '*', 3) + If PropCd EQ ReqdPropCd then + WaferType = PRSPropRec<6> + TestType = Field(PRSPropKey, '*', 3) + Layer = Field(PRSPropKey, '*', 2) + MeasureFreq = PRSPropRec + Start = PRSPropRec + If WaferType EQ 'Product' OR WaferType EQ 'Prod' then + BEGIN CASE + CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; ProdTestReqd = 1 + CASE ThisReactorRunOrder = Start ; ProdTestReqd = 1 + CASE NUM(MeasureFreq) + If MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 then + ProdTestReqd = 1 + end + END CASE + end + end + Until ProdTestReqd EQ True$ + Next PRSPropKey + Until ProdTestReqd EQ True$ + Next PRSLayerKey + Response = ProdTestReqd + +end service Service IsTWLoggingReqd(RDSNo) @@ -2298,3 +2397,4 @@ ClearCursors: return +