From 49c9ab09fd256e2e178ec9481e7d7637f9a02ee4 Mon Sep 17 00:00:00 2001 From: "Ouellette Jonathan (CSC FI SPS MESLEO)" Date: Tue, 4 Feb 2025 18:53:58 +0100 Subject: [PATCH] Merged PR 10039: Code to determine if a test wafer usage logging is required. Description Created method to determine if a TW is required. HTR and ASM type reactors will required a test wafer to be logged on runs where a test wafer is prescribed. ASM+ type reactors will require a test wafer to be logged on one run prior to a run where a test wafer is prescribed for metrology. This code is gated by an active switch which will be removed when the system goes live. EpiPro is not effected Related work items: #222043 --- LSL2/STPROC/RDS_EVENTS.txt | 1149 ++++++++++++++++------------------ LSL2/STPROC/RDS_SERVICES.txt | 22 +- 2 files changed, 568 insertions(+), 603 deletions(-) diff --git a/LSL2/STPROC/RDS_EVENTS.txt b/LSL2/STPROC/RDS_EVENTS.txt index f50d598..9c17fb1 100644 --- a/LSL2/STPROC/RDS_EVENTS.txt +++ b/LSL2/STPROC/RDS_EVENTS.txt @@ -96,15 +96,15 @@ Subclass = SubclassInfo<1> // Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler. If Event EQ 'OLE' then - Transfer Event to OIEvent - Transfer Param1 to Event - Transfer Param2 to Param1 - Transfer Param3 to Param2 - * Transfer Param4 to Param3 - * Transfer Param5 to Param4 - * Transfer Param6 to Param5 - * Transfer Param7 to Param6 - * Transfer Param8 to Param7 + Transfer Event to OIEvent + Transfer Param1 to Event + Transfer Param2 to Param1 + Transfer Param3 to Param2 + * Transfer Param4 to Param3 + * Transfer Param5 to Param4 + * Transfer Param6 to Param5 + * Transfer Param7 to Param6 + * Transfer Param8 to Param7 end GoToEvent Event for CtrlEntID @@ -117,25 +117,25 @@ Return EventFlow else EVENT_CONTINUE$ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Event WINDOW.CREATE(CreateParam) - - GoSub Setup_OLE_Controls - - SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$) - + + GoSub Setup_OLE_Controls + + SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$) + end event Event WINDOW.READ() - GoSub OLE_LL_Status - LoadSig = Get_Property(@WINDOW:'.OP_IN', 'DEFPROP') - Reactor = Get_Property(@WINDOW:'.REACTOR','DEFPROP') - PickPlaceFlag = XLATE('REACTOR',Reactor,REACTOR_PICK_PLACE$,'X') - IF PickPlaceFlag AND LoadSig EQ '' THEN - Set_Property(@WINDOW:'.ASM_LOAD_LOCK','ENABLED',1) - END ELSE - Set_Property(@WINDOW:'.ASM_LOAD_LOCK','ENABLED',0) - END - // Disable Wafers In edit line control if the RDS has been loaded and signed. + GoSub OLE_LL_Status + LoadSig = Get_Property(@WINDOW:'.OP_IN', 'DEFPROP') + Reactor = Get_Property(@WINDOW:'.REACTOR','DEFPROP') + PickPlaceFlag = XLATE('REACTOR',Reactor,REACTOR_PICK_PLACE$,'X') + IF PickPlaceFlag AND LoadSig EQ '' THEN + Set_Property(@WINDOW:'.ASM_LOAD_LOCK','ENABLED',1) + END ELSE + Set_Property(@WINDOW:'.ASM_LOAD_LOCK','ENABLED',0) + END + // Disable Wafers In edit line control if the RDS has been loaded and signed. RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT') If RDSNo NE '' then WaferLoadSig = Xlate('RDS', RDSNo, 'OPERATOR_IN', 'X') @@ -143,7 +143,7 @@ Event WINDOW.READ() Set_Property(@Window:'.WAFERS_IN', 'ENABLED', False$) Set_Property(@Window:'.WAFERS_IN', 'BACKCOLOR', READONLY_GREEN$) end else - Set_Property(@Window:'.WAFERS_IN', 'ENABLED', True$) + Set_Property(@Window:'.WAFERS_IN', 'ENABLED', True$) Set_Property(@Window:'.WAFERS_IN', 'BACKCOLOR', '') end end @@ -151,463 +151,412 @@ end event Event WINDOW.CLOSE(CancelFlag) - + end event Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus, CtrlIDFocus) - + end event Event SUPPL_BUTTON.CLICK() - - RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT') - Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$) - + + RDSNo = Get_Property(@Window:'.RDS_NO', 'TEXT') + Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$) + end event Event PUB_SIGN.CLICK() - - RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT') - ReactorType = Get_Property(@WINDOW:'.REACTOR_TYPE','TEXT') - LoadLockVal = Get_Property(@WINDOW:'.LOAD_LOCK_SIDE_HIDDEN','TEXT') - TWAllSigned = Get_Property(@WINDOW:'.TW_ALL_SIGNED','INVALUE') - WONo = Get_Property(@WINDOW:'.WO','TEXT') - RunOrderNo = Get_Property(@WINDOW:'.RUN_ORDER_NUM','TEXT') - Reactor = Get_Property(@WINDOW:'.REACTOR','TEXT') - WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP') - CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') - LSIDArray = Get_Property(@WINDOW:'.RDS_LS_ID','ARRAY') - Preauthenticated = FALSE$ - SignEventType = Get_Property(CtrlEntID, 'TEXT') - - Begin Case - - Case SignEventType EQ 'Sign' - - RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') - WfrQty = Get_Property(@WINDOW:'.WAFERS_IN','TEXT') - LLSide = Get_Property(@Window:'.LOAD_LOCK_SIDE', 'DEFPROP') - - Reactor = Get_Property(@Window:'.REACTOR', 'TEXT') - ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) - ReactorType = ReactorRec - ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X') - - // Don't allow tracking in on down reactor - ReactorCurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 1, 'X') - ReactCurrModeRec = Database_Services('ReadDataRow','REACT_MODE_NG', ReactorCurrModeKey, '','','') - CurrReactMode = ReactCurrModeRec - CurrE10State = Xlate('REACTOR_MODES', CurrReactMode, REACTOR_MODES_E10_STATE$, 'X') - - Override = False$ - UserVerification = '' - OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE' - - ReactorIsDown = CurrE10State _NEC 'PRODUCTIVE' - If (ReactorIsDown EQ True$) then - // Allow override during prove in - If ReactorType EQ 'EPP' then - If RDS_Services('IsEpiProTestRun', RDSNo) then Override = True$ - end - - If Override EQ False$ then - UserMsg = "Reactor down. Override required from a lead or supervisor." - UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) - Override = UserVerification<1> - end - end - - If (ReactorIsDown NE True$) OR (Override EQ True$) then - If (ReactorType EQ 'ASM+' OR ReactorType EQ 'HTR' OR ReactorType EQ 'ASM') AND (ROTREnabled EQ True$) then - ROTRStatus = ReactorRec - If ROTRStatus EQ 'F' then - FailReason = ReactorRec - Message = 'Unable to load reactor.' : CRLF$ : FailReason - RotrOverrideCount = ReactorRec - If RotrOverrideCount EQ '' then RotrOverrideCount = 0 - Message := CRLF$ : RotrOverrideCount : ' override(s) were performed since the ROTR block was originally set.' - Message := CRLF$ : 'A lead or supervisor must override to clear ROTR status.' - - Response = Msg(@Window, '', 'RDS_ROTR_OVERRIDE', '', Message) - - Begin Case - Case Response EQ 1 - Response = True$ ; // User Clicked Override - Case Response EQ 2 - Response = False$ ; // User Clicked Cancel - Case Response EQ char(27) - Response = False$ ; // User Pressed Escape Key - End Case - - If Response EQ True$ then - If UserVerification EQ '' then - UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups) - end - Valid = UserVerification<1> - If Valid EQ True$ then - // Prompt user for a comment - ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW) - - IF ResponseComment<2> NE '' THEN - // Clear ROTR reactor load block. - overrideLogTable = 'RDS':@VM:'REACTOR' - overrideLogKey = RDSNo:@VM:Reactor - overrideLogUser = Response<2> - overrideLogComment = ResponseComment<2> - overrideLogCategory = 'ROTR_BLOCK' - overrideLogCause = FailReason - orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory, overrideLogCause) - - //Add override key to RDS - RDSRec = Xlate('RDS', RDSNo, '', 'X') - RDSRec = Insert(RDSRec, RDS_OVERRIDE_KEYS$, 1, 0, orKey) - - ReactorRec = 'P' - - rotrStatusReason = ReactorRec - ReactorRec = rotrStatusReason - ReactorRec = '' - - ReactorRec = RDSNo - - rotrOverrideCount = ReactorRec - ReactorRec = rotrOverrideCount + 1 - - Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$) - Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) - - end else - //No Comment added. Block Load Signaure - Msg(@Window, 'A comment is required to perform an ROTR Block Override', '', '', '') - return - end - end else - // ROTR override not verified. Block load signature. - return - end - end else - // Block load signature - return - end - end - end - - SupplAckReq = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD') - IF (SupplAckReq NE FALSE$) then - Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$) - If Response EQ False$ then - return - end else - PreAuthenticated = TRUE$ - end - end - - - RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X') - If RDSLayerAckReq EQ True$ then - ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' - ErrMsg(ErrorMessage) - LayerKeys = Xlate('RDS', RDSNo, 'RDS_LAYER_KEYS', 'X') - // Just display the first layer - RDSLSID = LayerKeys<0, 1> - Dialog_Box('RDS_LAYER', @Window, RDSLSID) - - RDSLayerAck = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK', 'X') - If ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) then - ErrorMessage = 'RDS layer parameters were not acknowledged. Sign load stage event aborting.' - ErrMsg(ErrorMessage) - return - end - end - - FWIInstAckReq = Xlate('RDS', RDSNo, 'FWI_INST_ACK_REQ', 'X') - If (FWIInstAckReq EQ True$) then - Response = RDS_Services('RDSVerifyInst', RDSNo, 'FWI') - If Response EQ False$ then return - end - - LoadInstAckReq = Xlate('RDS', RDSNo, 'LOAD_INST_ACK_REQ', 'X') - If (LoadInstAckReq EQ True$) then - Response = RDS_Services('RDSVerifyInst', RDSNo, 'LOAD') - If Response EQ False$ then return - end - - SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X') - IF (SupplAckReq EQ True$) then - Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo) - If Response EQ False$ then return - end - - ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide) - If ReadyToSign EQ True$ then - If PreAuthenticated EQ FALSE$ then - initParams = '' - initParams<4> = 'Sign Load' - Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams) - Valid = Response<1> - If (Valid EQ True$) then - if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then - UsingTestWafers = False$ - ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo) - If ExistingTestWafersLogged EQ '' then - if ReactorType NE 'EPP' then - UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?') - end - IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo) - If UsingTestWafers then - TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor) - If TWLogResult then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end else - If IsTWReqd then - UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override." - OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH' - UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) - Override = UserVerification<1> - If Override then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - end else - ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?') - If ContinueLoad then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - end - end - end else - if IsTWReqd EQ False$ then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end else - UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override." - OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH' - UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) - Override = UserVerification<1> - If Override then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - end - - end - end else - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - - end else - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - - end - end else - if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ then - UsingTestWafers = False$ - ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo) - If ExistingTestWafersLogged EQ '' then - if ReactorType NE 'EPP' then - UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Log Test Wafer Usage':@FM:'Are any test wafers loaded?') - end - IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo) - If UsingTestWafers then - TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor) - If TWLogResult then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end else - If IsTWReqd then - UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override." - OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH' - UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) - Override = UserVerification<1> - If Override then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - end else - ContinueLoad = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?') - If ContinueLoad then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - end - end - end else - if IsTWReqd EQ False$ then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end else - UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override." - OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH' - UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) - Override = UserVerification<1> - If Override then - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) - end - end - - end - end else - QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) + + RDSNo = Get_Property(@WINDOW:'.RDS_NO','TEXT') + ReactorType = Get_Property(@WINDOW:'.REACTOR_TYPE','TEXT') + LoadLockVal = Get_Property(@WINDOW:'.LOAD_LOCK_SIDE_HIDDEN','TEXT') + TWAllSigned = Get_Property(@WINDOW:'.TW_ALL_SIGNED','INVALUE') + WONo = Get_Property(@WINDOW:'.WO','TEXT') + RunOrderNo = Get_Property(@WINDOW:'.RUN_ORDER_NUM','TEXT') + Reactor = Get_Property(@WINDOW:'.REACTOR','TEXT') + WOStep = Get_Property(@WINDOW:'.WO_STEP','DEFPROP') + CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') + LSIDArray = Get_Property(@WINDOW:'.RDS_LS_ID','ARRAY') + Preauthenticated = FALSE$ + SignEventType = Get_Property(CtrlEntID, 'TEXT') + + Begin Case + + Case SignEventType EQ 'Sign' + + RDSNo = Get_Property(@WINDOW:'.RDS_NO','DEFPROP') + WfrQty = Get_Property(@WINDOW:'.WAFERS_IN','TEXT') + LLSide = Get_Property(@Window:'.LOAD_LOCK_SIDE', 'DEFPROP') + + Reactor = Get_Property(@Window:'.REACTOR', 'TEXT') + ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) + ReactorType = ReactorRec + ROTREnabled = Xlate('REACTOR', Reactor, 'ENABLE_ROTR', 'X') + + // Don't allow tracking in on down reactor + ReactorCurrModeKey = Xlate('REACTOR_CHILD_KEY_IDS_NG', Reactor, 1, 'X') + ReactCurrModeRec = Database_Services('ReadDataRow','REACT_MODE_NG', ReactorCurrModeKey, '','','') + CurrReactMode = ReactCurrModeRec + CurrE10State = Xlate('REACTOR_MODES', CurrReactMode, REACTOR_MODES_E10_STATE$, 'X') + + Override = False$ + UserVerification = '' + OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH':@VM:'ROTR_OVERRIDE' + + ReactorIsDown = CurrE10State _NEC 'PRODUCTIVE' + If (ReactorIsDown EQ True$) then + // Allow override during prove in + If ReactorType EQ 'EPP' then + If RDS_Services('IsEpiProTestRun', RDSNo) then Override = True$ + end + + If Override EQ False$ then + UserMsg = "Reactor down. Override required from a lead or supervisor." + UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) + Override = UserVerification<1> + end + end + + If (ReactorIsDown NE True$) OR (Override EQ True$) then + If (ReactorType EQ 'ASM+' OR ReactorType EQ 'HTR' OR ReactorType EQ 'ASM') AND (ROTREnabled EQ True$) then + ROTRStatus = ReactorRec + If ROTRStatus EQ 'F' then + FailReason = ReactorRec + Message = 'Unable to load reactor.' : CRLF$ : FailReason + RotrOverrideCount = ReactorRec + If RotrOverrideCount EQ '' then RotrOverrideCount = 0 + Message := CRLF$ : RotrOverrideCount : ' override(s) were performed since the ROTR block was originally set.' + Message := CRLF$ : 'A lead or supervisor must override to clear ROTR status.' + + Response = Msg(@Window, '', 'RDS_ROTR_OVERRIDE', '', Message) + + Begin Case + Case Response EQ 1 + Response = True$ ; // User Clicked Override + Case Response EQ 2 + Response = False$ ; // User Clicked Cancel + Case Response EQ char(27) + Response = False$ ; // User Pressed Escape Key + End Case + + If Response EQ True$ then + If UserVerification EQ '' then + UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups) + end + Valid = UserVerification<1> + If Valid EQ True$ then + // Prompt user for a comment + ResponseComment = Dialog_Box('NDW_ADD_COMMENT', @WINDOW) + + IF ResponseComment<2> NE '' THEN + // Clear ROTR reactor load block. + overrideLogTable = 'RDS':@VM:'REACTOR' + overrideLogKey = RDSNo:@VM:Reactor + overrideLogUser = Response<2> + overrideLogComment = ResponseComment<2> + overrideLogCategory = 'ROTR_BLOCK' + overrideLogCause = FailReason + orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory, overrideLogCause) + + //Add override key to RDS + RDSRec = Xlate('RDS', RDSNo, '', 'X') + RDSRec = Insert(RDSRec, RDS_OVERRIDE_KEYS$, 1, 0, orKey) + + ReactorRec = 'P' + + rotrStatusReason = ReactorRec + ReactorRec = rotrStatusReason + ReactorRec = '' + + ReactorRec = RDSNo + + rotrOverrideCount = ReactorRec + ReactorRec = rotrOverrideCount + 1 + + Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$) + Database_Services('WriteDataRow', 'RDS', RDSNo, RDSRec, True$, False$, True$) + + end else + //No Comment added. Block Load Signaure + Msg(@Window, 'A comment is required to perform an ROTR Block Override', '', '', '') + return + end + end else + // ROTR override not verified. Block load signature. + return end - end else + // Block load signature + return + end + end + end + + SupplAckReq = Supplement_Services('UnacknowledgedSupplementCheck', 'RDS', RDSNo, 'LOAD') + IF (SupplAckReq NE FALSE$) then + Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo :@FM: 'LOAD' :@FM: FALSE$) + If Response EQ False$ then + return + end else + PreAuthenticated = TRUE$ + end + end + + + RDSLayerAckReq = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK_REQ', 'X') + If RDSLayerAckReq EQ True$ then + ErrorMessage = 'RDS layer parameters must be reviewed for accuracy and acknowledged before the load operation can be signed.' + ErrMsg(ErrorMessage) + LayerKeys = Xlate('RDS', RDSNo, 'RDS_LAYER_KEYS', 'X') + // Just display the first layer + RDSLSID = LayerKeys<0, 1> + Dialog_Box('RDS_LAYER', @Window, RDSLSID) + + RDSLayerAck = Xlate('RDS', RDSNo, 'RDS_LAYER_ACK', 'X') + If ( (RDSLayerAck EQ False$) or (RDSLayerAck EQ '') ) then + ErrorMessage = 'RDS layer parameters were not acknowledged. Sign load stage event aborting.' + ErrMsg(ErrorMessage) + return + end + end + + FWIInstAckReq = Xlate('RDS', RDSNo, 'FWI_INST_ACK_REQ', 'X') + If (FWIInstAckReq EQ True$) then + Response = RDS_Services('RDSVerifyInst', RDSNo, 'FWI') + If Response EQ False$ then return + end + + LoadInstAckReq = Xlate('RDS', RDSNo, 'LOAD_INST_ACK_REQ', 'X') + If (LoadInstAckReq EQ True$) then + Response = RDS_Services('RDSVerifyInst', RDSNo, 'LOAD') + If Response EQ False$ then return + end + + SupplAckReq = Xlate('RDS', RDSNo, 'SUPPL_ACK_REQ', 'X') + IF (SupplAckReq EQ True$) then + Response = Dialog_Box('NDW_RDS_SUPP_SIG', @Window, RDSNo) + If Response EQ False$ then return + end + //Check if TW Required + if XLATE('APP_INFO', 'NEW_TW_SYSTEM_ACTIVE_SWITCH', 1, 'X') EQ True$ AND (ReactorType EQ 'HTR' OR ReactorType EQ 'ASM' OR ReactorType 'ASM+') then + UsingTestWafers = False$ + IsTWReqd = RDS_Services('IsTWLoggingReqd', RDSNo) + ExistingTestWafersLogged = Test_Run_Services('GetTestRunKeysByRDS', RdsNo) + If ExistingTestWafersLogged NE True$ then + If Not(IsTWReqd) then + //Test wafer logging is NOT required here. + UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'Test Wafer Usage logging is not required on this load.':@FM:'Are any test wafers loaded?') + If UsingTestWafers EQ True$ then + TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor) + If TWLogResult NE True$ then + ContinueSign = Msg(@Window, '', 'YESNO', '', 'Continue?':@FM:'Test wafer logging was cancelled. Do you wish to continue signing?') + If Not(ContinueSign) then return + end + end + end else + //Test wafer logging is Required here. + Begin Case + Case ReactorType EQ 'ASM' OR ReactorType EQ 'HTR' + UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on this run':@FM:'Are any test wafers loaded?') + Case ReactorType EQ 'ASM+' + UsingTestWafers = Msg(@Window, '', 'YESNO', '', 'A test wafer is required to be ran with this load for metrology on the next run.':@FM:'Are any test wafers loaded?') + End Case + If UsingTestWafers EQ True$ then + //User has stated that they are using test wafers + TWLogResult = Dialog_Box('NDW_LOG_TEST_WAFER_USAGE', @Window, RDSNo : @VM : 'STANDARD' : @VM : 'REACTOR' : @VM : Reactor) + If TWLogResult NE True$ then + //User exited the the TW log form without logging anything. + UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override." + OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH' + UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) + Override = UserVerification<1> + If Not(Override) then return + end + end else + //User has stated that they are NOT using test wafers + UserMsg = "Unable to sign load because test wafer logging is required on this run. A supervisor or lead may override." + OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEERING':@VM:'ENG_TECH' + UserVerification = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups:@FM:'':@FM:UserMsg) + Override = UserVerification<1> + If Not(Override) then return + end + end + end + end + + ReadyToSign = QA_Services('LoadSignatureReady', RDSNo, @User4, WfrQty, LLSide) + If ReadyToSign EQ True$ then + If PreAuthenticated EQ FALSE$ then + initParams = '' + initParams<4> = 'Sign Load' + Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, initParams) + Valid = Response<1> + If (Valid EQ True$) then QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) end - end - end - If Error_Services('HasError') then - ErrorMsg = Error_Services('GetMessage') - ErrMsg(ErrorMsg) - end - end else - Msg(@Window, "Reactor load signature not allowed on a down reactor.") - end - - GoSub OLE_LL_Status - Set_Property(@Window, 'SAVEWARN', False$) - Send_Event(@Window, 'READ') - - Case SignEventType EQ 'Unsign' - - // 1. Check if on hold. If so, then block event and inform user - WOMatKey = WONo:'*':CassNo - WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey) - IF WOMatCurrStatus = 'HOLD' THEN - ErrorMessage = 'Process Error':@SVM:'Cassette is on Hold and may not have the signature removed.':CRLF$:CRLF$ - ErrMsg(ErrorMessage) - RETURN 0 - END - // 2. - // a. For Non-EPP - Check if LWII, LWIS, or FQA has been signed. If so, then block event and inform user - // b. For EPP - Check Clean_Insp actions to see if an inspection or surfscan has been completed - // Also check the FQA signature (MO_QA) - UnloadSig = Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X') - ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE','X') - CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X') - Convert @VM to '' in CISigs - IF ReactorType NE 'EPP' THEN - FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X') - END ELSE - WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X') - FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X') - END - If ( (UnloadSig NE '') or (CISigs NE '') or (FQASig NE '') ) then - // UNLOAD, LWII, LWIS, or FQA already signed. Block unload unsign event. - ErrorMessage = 'Process Error':@SVM:'UNLOAD, LWII, LWIS, or FQA already signed. Cannot unsign unload event.' | - : CRLF$ : CRLF$ - ErrMsg(ErrorMessage) - Return 0 - end - - // 3. Lead/Supervisor/Engineer/EngTech override - Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH') - Valid = Response<1> - OverrideUser = Response<2> - - If Valid then - - Lot_Services('CreateLotEvent', RDSNo, 'RDS', Datetime(), 'UNSIGN_LOAD', 'Load stage unsigned', Reactor, '', '', '', @User4) - - // 4. Remove WO_MAT Unload signature, date, and time - WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey) - SigProf = WOMatRec - Sigs = WOMatRec - SigDTMs = WOMatRec - Locate '1LOAD' in SigProf using @VM setting vPos then - Sigs<1, vPos> = '' - SigDTMs<1, vPos> = '' - WOMatRec = Sigs - WOMatRec = SigDTMs - obj_React_Status('HandleLoadUnsign',Reactor:@RM:WONo:@RM:CassNo:@RM:RDSNo:@RM:OverrideUser) - end - - // 5. Remove '1LOAD' material log entry (i.e. WO_MAT columns) - InvActions = WOMatRec - Locate '1LOAD' in InvActions using @VM setting vPos then - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - WOMatRec = Delete(WOMatRec, 0, vPos, 0) - end - Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$) - - // 6. Remove RDS Unload signature, date, and time - // NOTE: This needs to occur before item #5 to avoid RDS_ACTIONS restoring the load signature - Set_Property(@Window:'.OP_IN', 'TEXT', '') - Set_Property(@Window:'.OP_IN_NAME', 'TEXT', '') - Set_Property(@Window:'.OP_IN_DATE', 'TEXT', '') - Set_Property(@Window:'.OP_IN_TIME', 'TEXT', '') - IOOptions = Get_Property(@Window, 'IOOPTIONS') - IOOptions<6> = True$ - Set_Property(@Window, 'IOOPTIONS', IOOptions) - Send_Event(@Window, 'WRITE') - IOOptions<6> = False$ - Set_Property(@Window, 'IOOPTIONS', IOOptions) - - Reactor = Get_Property(@Window:'.REACTOR', 'TEXT') - Rds_Services('AddComment', RDSNo, 'Load Stage Unsigned from Reactor ' : Reactor) - ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) - PreviousRotrOverrideRds = ReactorRec - - // Check if ROTR override was preformed when signing this load - If (PreviousRotrOverrideRds EQ RDSNo) then - // Reset the override flag - ReactorRec = 'F' - PreviousRotrStatusReason = ReactorRec - ReactorRec = PreviousRotrStatusReason - RotrOverrideCount = ReactorRec - ReactorRec = Max(0, (RotrOverrideCount - 1)) - end - Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$) - If ReactorType EQ 'EPP' then - Reactor_Services('DecrementWfrMetrics', RDSNo) - end - Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign') - - end else - Return 0 - end - - End Case - Post_Event(@Window, 'READ') - + end else + QA_Services('SignLoadStage', RDSNo, @USER4, WfrQty, LLSide) + end + end + If Error_Services('HasError') then + ErrorMsg = Error_Services('GetMessage') + ErrMsg(ErrorMsg) + end + end else + Msg(@Window, "Reactor load signature not allowed on a down reactor.") + end + + GoSub OLE_LL_Status + Set_Property(@Window, 'SAVEWARN', False$) + Send_Event(@Window, 'READ') + + Case SignEventType EQ 'Unsign' + + // 1. Check if on hold. If so, then block event and inform user + WOMatKey = WONo:'*':CassNo + WOMatCurrStatus = obj_WO_Mat('CurrStatus',WOMatKey) + IF WOMatCurrStatus = 'HOLD' THEN + ErrorMessage = 'Process Error':@SVM:'Cassette is on Hold and may not have the signature removed.':CRLF$:CRLF$ + ErrMsg(ErrorMessage) + RETURN 0 + END + // 2. + // a. For Non-EPP - Check if LWII, LWIS, or FQA has been signed. If so, then block event and inform user + // b. For EPP - Check Clean_Insp actions to see if an inspection or surfscan has been completed + // Also check the FQA signature (MO_QA) + UnloadSig = Xlate('RDS', RDSNo, 'OPERATOR_OUT', 'X') + ReactorType = Xlate('RDS', RDSNo, 'REACTOR_TYPE','X') + CISigs = Xlate('RDS', RDSNo, 'LWI_CI_SIG', 'X') + Convert @VM to '' in CISigs + IF ReactorType NE 'EPP' THEN + FQASig = Xlate('RDS', RDSNo, 'SUP_VER_SIG', 'X') + END ELSE + WMOutKey = Xlate('RDS', RDSNo, 'WM_OUT_KEY', 'X') + FQASig = Xlate('WM_OUT', WMOutKey, 'SUP_VER_SIG', 'X') + END + If ( (UnloadSig NE '') or (CISigs NE '') or (FQASig NE '') ) then + // UNLOAD, LWII, LWIS, or FQA already signed. Block unload unsign event. + ErrorMessage = 'Process Error':@SVM:'UNLOAD, LWII, LWIS, or FQA already signed. Cannot unsign unload event.' | + : CRLF$ : CRLF$ + ErrMsg(ErrorMessage) + Return 0 + end + + // 3. Lead/Supervisor/Engineer/EngTech override + Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4 : @FM : 'LEAD' : @VM : 'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH') + Valid = Response<1> + OverrideUser = Response<2> + + If Valid then + + Lot_Services('CreateLotEvent', RDSNo, 'RDS', Datetime(), 'UNSIGN_LOAD', 'Load stage unsigned', Reactor, '', '', '', @User4) + + // 4. Remove WO_MAT Unload signature, date, and time + WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey) + SigProf = WOMatRec + Sigs = WOMatRec + SigDTMs = WOMatRec + Locate '1LOAD' in SigProf using @VM setting vPos then + Sigs<1, vPos> = '' + SigDTMs<1, vPos> = '' + WOMatRec = Sigs + WOMatRec = SigDTMs + obj_React_Status('HandleLoadUnsign',Reactor:@RM:WONo:@RM:CassNo:@RM:RDSNo:@RM:OverrideUser) + end + + // 5. Remove '1LOAD' material log entry (i.e. WO_MAT columns) + InvActions = WOMatRec + Locate '1LOAD' in InvActions using @VM setting vPos then + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + WOMatRec = Delete(WOMatRec, 0, vPos, 0) + end + Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$) + + // 6. Remove RDS Unload signature, date, and time + // NOTE: This needs to occur before item #5 to avoid RDS_ACTIONS restoring the load signature + Set_Property(@Window:'.OP_IN', 'TEXT', '') + Set_Property(@Window:'.OP_IN_NAME', 'TEXT', '') + Set_Property(@Window:'.OP_IN_DATE', 'TEXT', '') + Set_Property(@Window:'.OP_IN_TIME', 'TEXT', '') + IOOptions = Get_Property(@Window, 'IOOPTIONS') + IOOptions<6> = True$ + Set_Property(@Window, 'IOOPTIONS', IOOptions) + Send_Event(@Window, 'WRITE') + IOOptions<6> = False$ + Set_Property(@Window, 'IOOPTIONS', IOOptions) + + Reactor = Get_Property(@Window:'.REACTOR', 'TEXT') + Rds_Services('AddComment', RDSNo, 'Load Stage Unsigned from Reactor ' : Reactor) + ReactorRec = Database_Services('ReadDataRow', 'REACTOR', Reactor) + PreviousRotrOverrideRds = ReactorRec + + // Check if ROTR override was preformed when signing this load + If (PreviousRotrOverrideRds EQ RDSNo) then + // Reset the override flag + ReactorRec = 'F' + PreviousRotrStatusReason = ReactorRec + ReactorRec = PreviousRotrStatusReason + RotrOverrideCount = ReactorRec + ReactorRec = Max(0, (RotrOverrideCount - 1)) + end + Database_Services('WriteDataRow', 'REACTOR', Reactor, ReactorRec, True$, False$, True$) + If ReactorType EQ 'EPP' then + Reactor_Services('DecrementWfrMetrics', RDSNo) + end + Set_Property(@Window:'.PUB_SIGN', 'TEXT', 'Sign') + + end else + Return 0 + end + + End Case + Post_Event(@Window, 'READ') + end event Event LL_L_STATUS.OnClick() - - MsgStruct = "" - MsgStruct = MSG_WIDTH$ - - ReactNo = Get_Property(@Window:'.REACTOR','DEFPROP') - ActiveReactLLKey = XLATE('REACTOR', ReactNo, REACTOR_ACTIVE_LL_DISABLED$,'X') - ReactLL = XLATE('REACT_LL', ActiveReactLLKey, REACT_LL_DISABLED$, 'X') - StatusSide = 'L' - - GoSub ChangeLLStatus - Set_Property(@Window, 'SAVEWARN', False$) - Gosub OLE_LL_Status - + + MsgStruct = "" + MsgStruct = MSG_WIDTH$ + + ReactNo = Get_Property(@Window:'.REACTOR','DEFPROP') + ActiveReactLLKey = XLATE('REACTOR', ReactNo, REACTOR_ACTIVE_LL_DISABLED$,'X') + ReactLL = XLATE('REACT_LL', ActiveReactLLKey, REACT_LL_DISABLED$, 'X') + StatusSide = 'L' + + GoSub ChangeLLStatus + Set_Property(@Window, 'SAVEWARN', False$) + Gosub OLE_LL_Status + end event Event LL_R_STATUS.OnClick() - - MsgStruct = "" - MsgStruct = MSG_WIDTH$ - - ReactNo = Get_Property(@Window:'.REACTOR','DEFPROP') - ActiveReactLLKey = XLATE('REACTOR', ReactNo, REACTOR_ACTIVE_LL_DISABLED$,'X') - ReactLL = XLATE('REACT_LL', ActiveReactLLKey, REACT_LL_DISABLED$, 'X') - StatusSide = 'R' - - GoSub ChangeLLStatus - - Set_Property(@Window, 'SAVEWARN', False$) - Gosub OLE_LL_Status - + + MsgStruct = "" + MsgStruct = MSG_WIDTH$ + + ReactNo = Get_Property(@Window:'.REACTOR','DEFPROP') + ActiveReactLLKey = XLATE('REACTOR', ReactNo, REACTOR_ACTIVE_LL_DISABLED$,'X') + ReactLL = XLATE('REACT_LL', ActiveReactLLKey, REACT_LL_DISABLED$, 'X') + StatusSide = 'R' + + GoSub ChangeLLStatus + + Set_Property(@Window, 'SAVEWARN', False$) + Gosub OLE_LL_Status + end event @@ -616,154 +565,154 @@ end event //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Setup_OLE_Controls: - + return ChangeLLStatus: - If ReactNo EQ '' then - return - end - If ActiveReactLLKey EQ '' then - return - end - If ReactLL EQ '' OR ReactLL NE StatusSide then - return - end - RDSNo = Get_Property(@Window:'.RDS_NO', 'DEFPROP') - CurrUser = @USER4 - CurrDTM = obj_Calendar('CurrDTM') - - ActiveStartDTM = OCONV(ActiveReactLLKey[-1,'B*'],'DT4/^HS') - - orlParms = ReactNo:@RM - orlParms := ActiveReactLLKey:@RM - orlParms := @USER4:@RM ;* Current user - orlParms := ReactLL:@RM ;* 'L' or 'R' for LL side - orlParms := CurrDTM - - OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH' - Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups) - - Valid = Response<1> - IF Valid then - Obj_React_Ll('SetQual', orlParms) - Message = 'Qual-Mode sucessfully toggled!' - Msg(@Window, Message) - overrideLogTable = 'RDS':@VM:'REACTOR' - overrideLogKey = RDSNo:@VM:ReactNo - overrideLogUser = Response<2> - overrideLogComment = 'Performed Load-Lock qual override' - overirdeLogCategory = 'LOAD_LOCK' - orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory) - end else - Message = 'User is not authorized to put load-lock into qual mode.' - Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', Message) - end - - + If ReactNo EQ '' then + return + end + If ActiveReactLLKey EQ '' then + return + end + If ReactLL EQ '' OR ReactLL NE StatusSide then + return + end + RDSNo = Get_Property(@Window:'.RDS_NO', 'DEFPROP') + CurrUser = @USER4 + CurrDTM = obj_Calendar('CurrDTM') + + ActiveStartDTM = OCONV(ActiveReactLLKey[-1,'B*'],'DT4/^HS') + + orlParms = ReactNo:@RM + orlParms := ActiveReactLLKey:@RM + orlParms := @USER4:@RM ;* Current user + orlParms := ReactLL:@RM ;* 'L' or 'R' for LL side + orlParms := CurrDTM + + OverrideGroups = 'LEAD':@VM:'SUPERVISOR':@VM:'ENGINEER':@VM:'ENG_TECH' + Response = Dialog_Box('NDW_VERIFY_USER', @WINDOW, @USER4:@FM:OverrideGroups) + + Valid = Response<1> + IF Valid then + Obj_React_Ll('SetQual', orlParms) + Message = 'Qual-Mode sucessfully toggled!' + Msg(@Window, Message) + overrideLogTable = 'RDS':@VM:'REACTOR' + overrideLogKey = RDSNo:@VM:ReactNo + overrideLogUser = Response<2> + overrideLogComment = 'Performed Load-Lock qual override' + overirdeLogCategory = 'LOAD_LOCK' + orKey = Override_Log_Services('Create', overrideLogTable, overrideLogKey, overrideLogUser, overrideLogComment, overrideLogCategory) + end else + Message = 'User is not authorized to put load-lock into qual mode.' + Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', Message) + end + + return OLE_LL_Status: - IF @Window EQ 'RDS' then - - RedNormal = "Vertical(Gradient(Red L=90, Red L=80, 30%), Gradient(Red L=75, Red L=80), Border(Red))" - RedHover = "Vertical(Gradient(Red L=90, Red L=80, 90%), Gradient(Red L=75, Red L=80), Border(Red))" - RedPushed = "Vertical(Gradient(Red L=90, Red L=80, 5%), Gradient(Red L=75, Red L=80), Border(Red))" - - OrangeNormal = "Vertical(Gradient(Orange L=90, Orange L=80, 30%), Gradient(Orange L=75, Orange L=80), Border(Orange))" - OrangeHover = "Vertical(Gradient(Orange L=90, Orange L=80, 90%), Gradient(Orange L=75, Orange L=80), Border(Orange))" - OrangePushed = "Vertical(Gradient(Orange L=90, Orange L=80, 5%), Gradient(Orange L=75, Orange L=80), Border(Orange))" - - GreenNormal = "Vertical(Gradient(Green L=90, Green L=80, 30%), Gradient(Green L=75, Green L=80), Border(Green))" - //GreenHover = "Vertical(Gradient(Green L=90, Green L=80, 90%), Gradient(Green L=75, Green L=80), Border(Green))" - - bgUp = '' - bgUp<1> = GreenNormal - bgUp<2> = GreenNormal - bgUp<3> = GreenNormal - bgUp<4> = GreenNormal - bgUp<5> = GreenNormal - - bgDown = '' - bgDown<1> = RedNormal - bgDown<2> = RedHover - bgDown<3> = RedPushed - bgDown<4> = RedHover - bgDown<5> = RedNormal - - bgQual = '' - bgQual<1> = OrangeNormal - bgQual<2> = OrangeHover - bgQual<3> = OrangePushed - bgQual<4> = OrangeHover - bgQual<5> = OrangeNormal - - Reactor = Get_Property(@WINDOW:'.REACTOR','DEFPROP') - LoadSig = Get_Property(@Window:'.OP_IN', 'DEFPROP') - - Set_Property(@Window:".LL_L_STATUS", "OLE.Caption", 'EN') - Set_Property(@Window:".LL_R_STATUS", "OLE.Caption", 'EN') - Set_Property(@Window:".LL_L_STATUS", "OLE.Background", bgUp) - Set_Property(@Window:".LL_R_STATUS", "OLE.Background", bgUp) - Set_Property(@Window:".LL_L_STATUS", "ENABLED", 0) - Set_Property(@Window:".LL_R_STATUS", "ENABLED", 0) - - - IF Reactor NE '' then - - LLDisabled = XLATE('REACTOR', Reactor, REACTOR_ACTIVE_LL_DISABLED$, 'X') - IF LLDisabled NE '' then - ReactLLRec = Database_Services('ReadDataRow', 'REACT_LL', LLDisabled) - SideDisabled = ReactLLRec - QualMode = ReactLLRec - //LL Left Status - Ctrl = @Window : '.LL_L_STATUS' - Set_Property(Ctrl, 'OLE.STYLE', 'STD') - Set_Property(Ctrl, 'OLE.Font', 'Segoe UI' : @SVM : '9') - - - IF SideDisabled EQ 'L' then - If LoadSig EQ '' then - Set_Property(@Window:".LL_L_STATUS", "ENABLED", 1) - end - IF QualMode then - Set_Property(Ctrl, "OLE.Caption", 'QUAL') - Set_Property(Ctrl, "OLE.Background", bgQual) - Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) - - end else - Set_Property(Ctrl, "OLE.Caption", 'DIS') - Set_Property(Ctrl, "OLE.Background", bgDown) - Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) - - end - end - //LL Right Status - Ctrl = @Window : '.LL_R_STATUS' - Set_Property(Ctrl, 'OLE.STYLE', 'STD') - Set_Property(Ctrl, 'OLE.Font', 'Segoe UI' : @SVM : '9') - Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) - - IF SideDisabled EQ 'R' then - If LoadSig EQ '' then - Set_Property(@Window:".LL_R_STATUS", "ENABLED", 1) - end - - IF QualMode then - Set_Property(Ctrl, "OLE.Caption", 'QUAL') - Set_Property(Ctrl, "OLE.Background", bgQual) - Send_Message(Ctrl, 'OLE.OnClick', 1) - - end else - Set_Property(Ctrl, "OLE.Caption", 'DIS') - Set_Property(Ctrl, "OLE.Background", bgDown) - Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) - end - end - end - end - end - + IF @Window EQ 'RDS' then + + RedNormal = "Vertical(Gradient(Red L=90, Red L=80, 30%), Gradient(Red L=75, Red L=80), Border(Red))" + RedHover = "Vertical(Gradient(Red L=90, Red L=80, 90%), Gradient(Red L=75, Red L=80), Border(Red))" + RedPushed = "Vertical(Gradient(Red L=90, Red L=80, 5%), Gradient(Red L=75, Red L=80), Border(Red))" + + OrangeNormal = "Vertical(Gradient(Orange L=90, Orange L=80, 30%), Gradient(Orange L=75, Orange L=80), Border(Orange))" + OrangeHover = "Vertical(Gradient(Orange L=90, Orange L=80, 90%), Gradient(Orange L=75, Orange L=80), Border(Orange))" + OrangePushed = "Vertical(Gradient(Orange L=90, Orange L=80, 5%), Gradient(Orange L=75, Orange L=80), Border(Orange))" + + GreenNormal = "Vertical(Gradient(Green L=90, Green L=80, 30%), Gradient(Green L=75, Green L=80), Border(Green))" + //GreenHover = "Vertical(Gradient(Green L=90, Green L=80, 90%), Gradient(Green L=75, Green L=80), Border(Green))" + + bgUp = '' + bgUp<1> = GreenNormal + bgUp<2> = GreenNormal + bgUp<3> = GreenNormal + bgUp<4> = GreenNormal + bgUp<5> = GreenNormal + + bgDown = '' + bgDown<1> = RedNormal + bgDown<2> = RedHover + bgDown<3> = RedPushed + bgDown<4> = RedHover + bgDown<5> = RedNormal + + bgQual = '' + bgQual<1> = OrangeNormal + bgQual<2> = OrangeHover + bgQual<3> = OrangePushed + bgQual<4> = OrangeHover + bgQual<5> = OrangeNormal + + Reactor = Get_Property(@WINDOW:'.REACTOR','DEFPROP') + LoadSig = Get_Property(@Window:'.OP_IN', 'DEFPROP') + + Set_Property(@Window:".LL_L_STATUS", "OLE.Caption", 'EN') + Set_Property(@Window:".LL_R_STATUS", "OLE.Caption", 'EN') + Set_Property(@Window:".LL_L_STATUS", "OLE.Background", bgUp) + Set_Property(@Window:".LL_R_STATUS", "OLE.Background", bgUp) + Set_Property(@Window:".LL_L_STATUS", "ENABLED", 0) + Set_Property(@Window:".LL_R_STATUS", "ENABLED", 0) + + + IF Reactor NE '' then + + LLDisabled = XLATE('REACTOR', Reactor, REACTOR_ACTIVE_LL_DISABLED$, 'X') + IF LLDisabled NE '' then + ReactLLRec = Database_Services('ReadDataRow', 'REACT_LL', LLDisabled) + SideDisabled = ReactLLRec + QualMode = ReactLLRec + //LL Left Status + Ctrl = @Window : '.LL_L_STATUS' + Set_Property(Ctrl, 'OLE.STYLE', 'STD') + Set_Property(Ctrl, 'OLE.Font', 'Segoe UI' : @SVM : '9') + + + IF SideDisabled EQ 'L' then + If LoadSig EQ '' then + Set_Property(@Window:".LL_L_STATUS", "ENABLED", 1) + end + IF QualMode then + Set_Property(Ctrl, "OLE.Caption", 'QUAL') + Set_Property(Ctrl, "OLE.Background", bgQual) + Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) + + end else + Set_Property(Ctrl, "OLE.Caption", 'DIS') + Set_Property(Ctrl, "OLE.Background", bgDown) + Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) + + end + end + //LL Right Status + Ctrl = @Window : '.LL_R_STATUS' + Set_Property(Ctrl, 'OLE.STYLE', 'STD') + Set_Property(Ctrl, 'OLE.Font', 'Segoe UI' : @SVM : '9') + Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) + + IF SideDisabled EQ 'R' then + If LoadSig EQ '' then + Set_Property(@Window:".LL_R_STATUS", "ENABLED", 1) + end + + IF QualMode then + Set_Property(Ctrl, "OLE.Caption", 'QUAL') + Set_Property(Ctrl, "OLE.Background", bgQual) + Send_Message(Ctrl, 'OLE.OnClick', 1) + + end else + Set_Property(Ctrl, "OLE.Caption", 'DIS') + Set_Property(Ctrl, "OLE.Background", bgDown) + Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', 1) + end + end + end + end + end + return diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt index f515f07..8dc1879 100644 --- a/LSL2/STPROC/RDS_SERVICES.txt +++ b/LSL2/STPROC/RDS_SERVICES.txt @@ -788,6 +788,7 @@ Service IsTWLoggingReqd(RDSNo) 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 Return @@ -808,9 +809,24 @@ Service IsTWLoggingReqd(RDSNo) CASE MeasureFreq = 'F' AND ThisReactorRunOrder = 1 ; IsTWReqd = 1 CASE ThisReactorRunOrder = Start ; IsTWReqd = 1 CASE NUM(MeasureFreq) - IF MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 THEN - IsTWReqd = True$ - END + Begin Case + Case ReactorType EQ 'HTR' + //Logging required on lot the data gets logged to + IF MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 THEN + IsTWReqd = True$ + END + Case ReactorType EQ 'ASM' + //Logging required on lot the data gets logged to + IF MOD(ThisReactorRunOrder,MeasureFreq) - Start = 0 THEN + IsTWReqd = True$ + END + Case ReactorType EQ 'ASM+' + //Logging required on lot prior to the one the data gets logged to. + IF MOD(ThisReactorRunOrder,MeasureFreq) = 0 THEN + IsTWReqd = True$ + END + End Case + END CASE end Until IsTWReqd EQ True$