From 6d552ab824210bcb129aaaddf4c02e3c7d8fb413 Mon Sep 17 00:00:00 2001 From: "Infineon\\Ouellette" Date: Fri, 15 Aug 2025 17:27:29 -0700 Subject: [PATCH] Added error checking to scan_services to check for null wo_mat records --- LSL2/STPROC/SCAN_SERVICES.txt | 85 ++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/LSL2/STPROC/SCAN_SERVICES.txt b/LSL2/STPROC/SCAN_SERVICES.txt index c4372c3..11d852f 100644 --- a/LSL2/STPROC/SCAN_SERVICES.txt +++ b/LSL2/STPROC/SCAN_SERVICES.txt @@ -1142,50 +1142,60 @@ Service ProcessScanData(ScanID, ScanJSON) CassNo = Xlate('RDS', RDSNo, 'RUN_ORDER_NUM', 'X') WoMatKey = WO:'*':CassNo WoMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey) - LastCassInWoTestWaferAckReq = WoMatRec - LastCassInWoTestWaferAcked = WoMatRec - LastCassInWoTestWaferReqMsg = '' - If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then - LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey) - - If LastCassInWo then - NextEventScheduled = False$ - NextEventHasSamePsn = True$ - NextEventIsBlock = False$ - - NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo) - If Error_Services('NoError') then - NextEventScheduled = True$ + if Error_Services('NoError') then + If WoMatRec NE '' then + LastCassInWoTestWaferAckReq = WoMatRec + LastCassInWoTestWaferAcked = WoMatRec + LastCassInWoTestWaferReqMsg = '' + If LastCassInWoTestWaferAcked EQ False$ or LastCassInWoTestWaferAcked EQ '' then + LastCassInWo = WO_MAT_Services('CassetteIsLastInWo', WoMatKey) - NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo) - NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo) - end - - If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then - LastCassInWoTestWaferAckReq = True$ - WoMatRec = LastCassInWoTestWaferAckReq - TestWaferRanSinceLoad = WoMatRec or TestWaferLotIsValid EQ True$ - - If TestWaferLotIsValid NE True$ and TestWaferRanSinceLoad NE True$ then - TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo) + If LastCassInWo then + NextEventScheduled = False$ + NextEventHasSamePsn = True$ + NextEventIsBlock = False$ - If TestWaferRanSinceLoad NE True$ then - LastCassInWoTestWaferReqMsg = '' - If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then - LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.' - end else If NextEventHasSamePsn EQ False$ then - LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.' + NextScheduledEvent = Schedule_Services('GetNextEvent', ReactorNo) + If Error_Services('NoError') then + NextEventScheduled = True$ + + NextEventHasSamePsn = Schedule_Services('NextEventIsSamePsn', ReactorNo) + NextEventIsBlock = Schedule_Services('NextEventIsBlock', ReactorNo) + end + + If NextEventScheduled EQ False$ or NextEventHasSamePsn EQ False$ or NextEventIsBlock EQ True$ then + LastCassInWoTestWaferAckReq = True$ + WoMatRec = LastCassInWoTestWaferAckReq + TestWaferRanSinceLoad = WoMatRec or TestWaferLotIsValid EQ True$ + + If TestWaferLotIsValid NE True$ and TestWaferRanSinceLoad NE True$ then + TestWaferRanSinceLoad = Rds_Services('TestWaferRanAfterLoad', RDSNo) + + If TestWaferRanSinceLoad NE True$ then + LastCassInWoTestWaferReqMsg = '' + If NextEventScheduled EQ False$ or NextEventIsBlock EQ True$ then + LastCassInWoTestWaferReqMsg = 'No material scheduled. Test wafer required.' + end else If NextEventHasSamePsn EQ False$ then + LastCassInWoTestWaferReqMsg = 'Next work order is a NEW PSN number. Test wafer required.' + end + + Scan_Services('AddNotAcceptableReason', LastCassInWoTestWaferReqMsg) + end end - Scan_Services('AddNotAcceptableReason', LastCassInWoTestWaferReqMsg) + WoMatRec = TestWaferRanSinceLoad + + Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$) end end - - WoMatRec = TestWaferRanSinceLoad - - Database_Services('WriteDataRow', 'WO_MAT', WoMatKey, WoMatRec, True$, False$, False$) end + end else + ErrorMessage = 'WO_MAT record was null.' + Error_Services('Add', ErrorMessage) end + end else + ErrorMessage = 'Failure to read cassette record. ' : Error_Services('GetMessage') + Error_Services('Add', ErrorMessage) end end end @@ -1487,6 +1497,7 @@ Service AcceptScan(ScanID, ScanJSON) // Check if cassette field is populated. If so, then check the cassette's current status to // determine what the next action will be (i.e. Pre-Epi+Load, Unload, etc.) CassetteID = CassetteIDs<0, 1> + *if CassetteId EQ 1005860 then debug TestWaferLots = ScansRow Begin Case Case CassetteID NE '' @@ -1534,6 +1545,7 @@ Service AcceptScan(ScanID, ScanJSON) Continue = False$ end If Continue then + *if RDSNo EQ 1006721 then debug PreStageSigned = QA_Services('SignPreEpiStage', RDSNo, Username, WaferQty, Reactor, 1) If PreStageSigned EQ True$ then LoadStageSigned = QA_Services('SignLoadStage', RDSNo, USername, WaferQty, LLSide, 1) @@ -2402,3 +2414,4 @@ ClearCursors: return +