From 3c2a50af24c130d9ac7dd274ac459a83738b1cca Mon Sep 17 00:00:00 2001 From: "Infineon\\StieberD" Date: Mon, 18 Nov 2024 15:34:48 -0700 Subject: [PATCH] apply abort metrology when specific sub modes are selected --- LSL2/STPROC/NDW_NOTIFICATION_EVENTS.txt | 25 +- LSL2/STPROC/RDS_SERVICES.txt | 122 +++- LSL2/STPROC/REACTOR_LOG_ACTIONS.txt | 143 ++--- LSL2/STPROC/REACTOR_SERVICES.txt | 744 ++++++++++++++---------- 4 files changed, 596 insertions(+), 438 deletions(-) diff --git a/LSL2/STPROC/NDW_NOTIFICATION_EVENTS.txt b/LSL2/STPROC/NDW_NOTIFICATION_EVENTS.txt index af8931e..06e128b 100644 --- a/LSL2/STPROC/NDW_NOTIFICATION_EVENTS.txt +++ b/LSL2/STPROC/NDW_NOTIFICATION_EVENTS.txt @@ -45,7 +45,7 @@ Declare function Admin_User, Database_Services, Error_Services, Active_Directo Declare subroutine PlaceDialog, Error_Services, Database_Services, Btree.Extract, ErrMsg GoToEvent Event for CtrlEntId else - // Event not implemented + // Event not implemented end Return EventFlow or 1 @@ -69,7 +69,7 @@ Event WINDOW.CREATE(CreateParam) Send_Message(@Window:'.EDT_LSL_USERS', "COLOR_BY_POS", 2, 0, ColorArray) Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 1, 0, ColorArray) Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 2, 0, ColorArray) - Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 3, 0, ColorArray) + Send_Message(@Window:'.EDT_AD_GROUPS', "COLOR_BY_POS", 3, 0, ColorArray) end End Event @@ -98,7 +98,7 @@ Event WINDOW.READ() end If EventFlow EQ EVENT_CONTINUE$ then - + GoSub UnlockRec Key = Get_Property(@Window:'.EDL_NOTIFICATION_ID', 'TEXT') @@ -172,7 +172,7 @@ end event Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus) - + EventFlow = EVENT_CONTINUE$ OrigRec = Get_Property(@Window, '@RECORD') EditRec = Get_Property(@Window, '@EDIT_RECORD') @@ -193,7 +193,7 @@ Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus) end If EventFlow EQ EVENT_CONTINUE$ then - + Set_Property(@Window, '@NEW_REC', False$) GoSub UnlockRec Forward_Event() @@ -305,7 +305,7 @@ Event PUB_LU_ID.CLICK() end If EventFlow EQ EVENT_CONTINUE$ then - + TypeOver = '' TypeOver = 1 NotifyID = Popup(@WINDOW,TypeOver,'NOTIFICATION') @@ -342,7 +342,7 @@ Event EDL_NOTIFICATION_ID.OPTIONS() end If EventFlow EQ EVENT_CONTINUE$ then - + TypeOver = '' TypeOver = 1 NotifyID = Popup(@WINDOW,TypeOver,'NOTIFICATION') @@ -352,7 +352,7 @@ Event EDL_NOTIFICATION_ID.OPTIONS() Set_Property(CtrlEntId, 'TEXT', NotifyID) Post_Event(@Window, 'READ') end - + end end event @@ -373,7 +373,7 @@ end event Event EDL_NOTIFICATION_ID.LOSTFOCUS(Flag, FocusID) - + If Flag EQ 1 then GoSub UnlockRec Post_Event(@Window, 'READ') @@ -396,7 +396,7 @@ Event PUB_ADD_USERS.CLICK() NewUserIDs = Popup(@WINDOW,'','SHOW_USERS') If ( (NewUserIDs NE '') and (NewUserIDs NE CHAR(27)) ) then - + For I = 1 TO COUNT(NewUserIDs,@VM) + (NewUserIDs NE '') NewUserID = NewUserIDs<1,I> Locate NewUserID in CurrUserIDs by 'AL' using @VM setting POS else @@ -449,7 +449,7 @@ Event PUB_ADD_GROUPS.CLICK() GroupArray = Get_Property(@Window:'.EDT_AD_GROUPS', 'ARRAY') GroupIds = GroupArray<1> - + LSLUserNames = '' LSLNames = '' If GroupIds NE '' then @@ -457,7 +457,7 @@ Event PUB_ADD_GROUPS.CLICK() MemberList = Active_Directory_Services('GetADGroupMembersByGroupName', GroupId, 'INFINEON') MemberList = SRP_Array('Rotate', MemberList, @FM, @VM) ADUserNames = MemberList<1> - + Open 'DICT.LSL_USERS' to hDict then For each ADUserName in ADUserNames using @VM setting vPos Query = 'DOMAIN_USERNAME':@VM:ADUserName:@FM @@ -642,3 +642,4 @@ UnlockRec: return + diff --git a/LSL2/STPROC/RDS_SERVICES.txt b/LSL2/STPROC/RDS_SERVICES.txt index bf67859..cb20547 100644 --- a/LSL2/STPROC/RDS_SERVICES.txt +++ b/LSL2/STPROC/RDS_SERVICES.txt @@ -1055,7 +1055,6 @@ end service Service ConvertRecordToJSON(KeyID, Record, itemURL) jsonRecord = '' - If KeyID NE '' then If Record EQ '' then Record = Database_Services('ReadDataRow', 'RDS', KeyID) @@ -1231,7 +1230,9 @@ Service ConvertRecordToJSON(KeyID, Record, itemURL) end service + Service GetRDSMoves(ReportDTM) + DatesToSearch = '' ReportDTM = FIELD(ReportDTM, ' ', 1) query = 'SELECT RDS WITH DATE_OUT EQ ': QUOTE(ReportDTM) @@ -1261,7 +1262,9 @@ Service GetRDSMoves(ReportDTM) end service + Service SignUnloadExtra1(RDSNo, LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1288,7 +1291,9 @@ Service SignUnloadExtra1(RDSNo, LSLUserName) end service + Service UnsignUnloadExtra1(RDSNo, LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1323,9 +1328,12 @@ Service UnsignUnloadExtra1(RDSNo, LSLUserName) end else Error_Services('Add', 'Invalid user passed to Unsign Load Extra 1 routine') end + end service + Service SignLoadExtra1(RDSNo,LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1359,9 +1367,12 @@ Service SignLoadExtra1(RDSNo,LSLUserName) end else Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine') end + end service + Service UnsignLoadExtra1(RDSNo, LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1385,10 +1396,12 @@ Service UnsignLoadExtra1(RDSNo, LSLUserName) end else Error_Services('Add', 'Invalid user passed to Unsign Load Extra 1 routine') end + end service Service SignUnloadExtra2(RDSNo,LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1412,9 +1425,12 @@ Service SignUnloadExtra2(RDSNo,LSLUserName) end else Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine') end + end service + Service UnsignUnloadExtra2(RDSNo, LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1449,9 +1465,12 @@ Service UnsignUnloadExtra2(RDSNo, LSLUserName) end else Error_Services('Add', 'Invalid user passed to Unsign Unload Extra 1 routine') end + end service + Service SignLoadExtra2(RDSNo,LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1484,9 +1503,12 @@ Service SignLoadExtra2(RDSNo,LSLUserName) end else Error_Services('Add', 'Invalid user passed to Sign Unload Extra 1 routine') end + end service + Service UnsignLoadExtra2(RDSNo, LSLUserName) + IF LSLUserName NE '' AND RowExists('LSL_USERS', LSLUserName) then If RowExists('RDS', RDSNo) then RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) @@ -1510,17 +1532,109 @@ Service UnsignLoadExtra2(RDSNo, LSLUserName) end else Error_Services('Add', 'Invalid user passed to Unsign Unload Extra 1 routine') end + end service + +Service ApplyAbortMetrology(RdsKeys) + + Result = False$ + ErrorMsg = '' + If RdsKeys NE '' then + Convert @VM to @FM in RdsKeys + If RowExists('RDS', RdsKeys) then + For each RdsKey in RdsKeys using @FM + + WoNo = Xlate('RDS', RdsKey, RDS_WO$, 'X') + // Set a flag on the CI record indicating the run was aborted + CleanInspKey = Xlate('RDS', RdsKey, 'LWI_CI_NO', 'X') + CIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey) + CIRec = True$ + Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, False$) + If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') + + If ErrorMsg EQ '' then + // Change the QA metrology requirements to all wafers + CassNo = Xlate('RDS', RdsKey, 'CASS_NO', 'X') + WoMatQaKey = WoNo : '*' : CassNo + WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X') + WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X') + WoMatQaStages = WoMatQaRec + WoMatQaProfiles = WoMatQaRec + WoMatQaSlots = WoMatQaRec + WoMatQaWfrQtys = WoMatQaRec + WoMatQaProps = WoMatQaRec + WoMatQaToolClasses = WoMatQaRec + WoMatQaRecipes = WoMatQaRec + WoMatQaRecipePatterns = WoMatQaRec + WoMatQaMin = WoMatQaRec + WoMatQaMax = WoMatQaRec + WoMatQaOOS = WoMatQaRec + StageCount = DCount(WoMatQaStages, @VM) + For stageIdx = 1 to StageCount + If (WoMatQaStages<0, stageIdx> _EQC 'QA') and (WoMatQaProfiles<0, stageIdx> _EQC '1ADE') then + Slot = WoMatQaSlots<0, stageIdx> + If (Slot _NEC 'L') then + WoMatQaSlots<0, stageIdx> = 'A' + WoMatQaWfrQtys<0, stageIdx> = WoWaferQty + end + If (Slot _EQC 'L') then + WoMatQaStages<0, stageIdx> = '' + WoMatQaProfiles<0, stageIdx> = '' + WoMatQaSlots<0, stageIdx> = '' + WoMatQaWfrQtys<0, stageIdx> = '' + WoMatQaProps<0, stageIdx> = '' + WoMatQaToolClasses<0, stageIdx> = '' + WoMatQaRecipes<0, stageIdx> = '' + WoMatQaRecipePatterns<0, stageIdx> = '' + WoMatQaMin<0, stageIdx> = '' + WoMatQaMax<0, stageIdx> = '' + WoMatQaOOS<0, stageIdx> = '' + end + end + Next stageIdx + WoMatQaRec = WoMatQaStages + WoMatQaRec = WoMatQaProfiles + WoMatQaRec = WoMatQaSlots + WoMatQaRec = WoMatQaWfrQtys + WoMatQaRec = WoMatQaProps + WoMatQaRec = WoMatQaToolClasses + WoMatQaRec = WoMatQaRecipes + WoMatQaRec = WoMatQaRecipePatterns + WoMatQaRec = WoMatQaMin + WoMatQaRec = WoMatQaMax + WoMatQaRec = WoMatQaOOS + Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$) + If Error_Services('HasError') then ErrorMsg = Error_Services('GetMessage') + end + + Next RdsKey + end else + Convert @FM to ',' in RdsKeys + ErrorMsg = 'Error in ':Service:' service. One or more Rds records (':RdsKeys:') do not exist!' + end + end else + ErrorMsg = 'Error in ':Service:' service. Null RdsKeys passed into service!' + end + + If ErrorMsg NE '' then + Error_Services('Add', ErrorMsg) + end else + Result = True$ + end + +end service + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ClearCursors: + For counter = 0 to 8 ClearSelect counter Next counter + return - - - diff --git a/LSL2/STPROC/REACTOR_LOG_ACTIONS.txt b/LSL2/STPROC/REACTOR_LOG_ACTIONS.txt index 1cf8721..b57470d 100644 --- a/LSL2/STPROC/REACTOR_LOG_ACTIONS.txt +++ b/LSL2/STPROC/REACTOR_LOG_ACTIONS.txt @@ -42,7 +42,7 @@ Function Reactor_Log_Actions(Action, CalcColName, FSList, Handle, Name, FMC, Rec #pragma precomp SRP_PreCompiler -$Insert LOGICAL +$Insert APP_INSERTS $Insert FILE.SYSTEM.EQUATES $Insert ACTION_SETUP $Insert RDS_EQUATES @@ -56,10 +56,11 @@ $Insert REACTOR_EQUATES $Insert WO_MAT_EQUATES $Insert WO_MAT_QA_EQUATES -equ WOCust$ to 2 +Equ WOCust$ to 2 +Equ Comma$ to ',' Declare function Error_Services, Database_Services, Logging_Services, Environment_Services -Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_Log_Services +Declare subroutine Error_Services, Database_Services, Logging_Services, Set_Status, Reactor_Log_Services, Rds_Services If KeyID then GoSub Initialize_System_Variables @@ -163,95 +164,44 @@ WRITE_RECORD_PRE: end RdsKeys = Record - Swap @VM with @FM in RdsKeys If (Not(OrigWafersRemoved)) and (NewWafersRemoved EQ True$) and (ReactNo NE '') and (RdsKeys NE '') then - ReactorConfigKey = 'WO_DAILY_SCHED':ReactNo - WoNo = Field(Xlate('CONFIG', ReactorConfigKey, WOCust$, 'X'), ' ', 1) - - CurrentRds = '' - - For idx = 1 to Len(RdsKeys) - CurrentRds = RdsKeys - // Set a flag on the CI record indicating the run was aborted - CleanInspKey = Xlate('RDS', CurrentRds, 'LWI_CI_NO', 'X') - CIRec = Database_Services('ReadDataRow', 'CLEAN_INSP', CleanInspKey) - CIRec = True$ - Database_Services('WriteDataRow', 'CLEAN_INSP', CleanInspKey, CIRec, True$, False$, False$) - // Change the QA metrology requirements to all wafers - CassNo = Xlate('RDS', CurrentRds, 'CASS_NO', 'X') - WoMatQaKey = WoNo : '*' : CassNo - WoMatQaRec = Xlate('WO_MAT_QA', WoMatQaKey, '', 'X') - WoWaferQty = Xlate('WO_MAT', WoMatQaKey, WO_MAT_WAFER_QTY$, 'X') - WoMatQaStages = WoMatQaRec - Swap @VM with @FM in WoMatQaStages - WoMatQaProfiles = WoMatQaRec - Swap @VM with @FM in WoMatQaProfiles - WoMatQaSlots = WoMatQaRec - Swap @VM with @FM in WoMatQaSlots - WoMatQaWfrQtys = WoMatQaRec - Swap @VM with @FM in WoMatQaWfrQtys - WoMatQaProps = WoMatQaRec - Swap @VM with @FM in WoMatQaProps - WoMatQaToolClasses = WoMatQaRec - Swap @VM with @FM in WoMatQaToolClasses - WoMatQaRecipes = WoMatQaRec - Swap @VM with @FM in WoMatQaRecipes - WoMatQaRecipePatterns = WoMatQaRec - Swap @VM with @FM in WoMatQaRecipePatterns - WoMatQaMin = WoMatQaRec - Swap @VM with @FM in WoMatQaMin - WoMatQaMax = WoMatQaRec - Swap @VM with @FM in WoMatQaMax - WoMatQaOOS = WoMatQaRec - Swap @VM with @FM in WoMatQaOOS - StageCount = DCount(WoMatQaStages, @FM) - For stageIdx = 1 to StageCount - If (WoMatQaStages _EQC 'QA') and (WoMatQaProfiles _EQC '1ADE') then - Slot = WoMatQaSlots - If (Slot _NEC 'L') then - WoMatQaSlots = 'A' - WoMatQaWfrQtys = WoWaferQty - end - If (Slot _EQC 'L') then - WoMatQaStages = '' - WoMatQaProfiles = '' - WoMatQaSlots = '' - WoMatQaWfrQtys = '' - WoMatQaProps = '' - WoMatQaToolClasses = '' - WoMatQaRecipes = '' - WoMatQaRecipePatterns = '' - WoMatQaMin = '' - WoMatQaMax = '' - WoMatQaOOS = '' - end - end - Next stageIdx - Swap @FM with @VM in WoMatQaStages - WoMatQaRec = WoMatQaStages - Swap @FM with @VM in WoMatQaProfiles - WoMatQaRec = WoMatQaProfiles - Swap @FM with @VM in WoMatQaSlots - WoMatQaRec = WoMatQaSlots - Swap @FM with @VM in WoMatQaWfrQtys - WoMatQaRec = WoMatQaWfrQtys - Swap @FM with @VM in WoMatQaProps - WoMatQaRec = WoMatQaProps - Swap @FM with @VM in WoMatQaToolClasses - WoMatQaRec = WoMatQaToolClasses - Swap @FM with @VM in WoMatQaRecipes - WoMatQaRec = WoMatQaRecipes - Swap @FM with @VM in WoMatQaRecipePatterns - WoMatQaRec = WoMatQaRecipePatterns - Swap @FM with @VM in WoMatQaMin - WoMatQaRec = WoMatQaMin - Swap @FM with @VM in WoMatQaMax - WoMatQaRec = WoMatQaMax - Swap @FM with @VM in WoMatQaOOS - WoMatQaRec = WoMatQaOOS - Database_Services('WriteDataRow', 'WO_MAT_QA', WoMatQaKey, WoMatQaRec, True$, False$, False$) - Next idx + + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorLog' + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : 'Wafers Removed Log.csv' + Headers = 'Logging DTM' : @FM : 'ReactorNo' : @FM : 'Notes' + objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$, True$) + + LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM + + // Log metrology modification attempt + Swap @VM with ',' in RdsKeys + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = 'Wafers removed from reactor, ReactorLog ':Name:'. Attempting to apply abort metrology on RdsKeys ':RdsKeys:'.' + Logging_Services('AppendLog', objLog, LogData, @RM, @FM) + + Swap ',' with @FM in RdsKeys + Rds_Services('ApplyAbortMetrology', RdsKeys) + If Error_Services('HasError') then + // Log failure + ErrorMsg = Error_Services('GetMessage') + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = 'Error applying abort metrology. Error message: ':ErrorMsg + Logging_Services('AppendLog', objLog, LogData, @RM, @FM) + end else + // Log success + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = 'Successfully applied abort metrology' + Logging_Services('AppendLog', objLog, LogData, @RM, @FM) + end end return @@ -373,9 +323,11 @@ return //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ClearCursors: + For counter = 0 to 8 ClearSelect counter Next counter + return @@ -427,14 +379,3 @@ Restore_System_Variables: return - - - - - - - - - - - diff --git a/LSL2/STPROC/REACTOR_SERVICES.txt b/LSL2/STPROC/REACTOR_SERVICES.txt index 4ba6aed..41cb2a4 100644 --- a/LSL2/STPROC/REACTOR_SERVICES.txt +++ b/LSL2/STPROC/REACTOR_SERVICES.txt @@ -64,7 +64,7 @@ EQU ENG$ to 5 Declare subroutine Error_Services, Reactor_Services, Memory_Services, RList, Database_Services, SRP_JSON, obj_React_Mode Declare subroutine Excel_Services, Schedule_Services, Logging_Services, Set_Status, obj_React_Status, Errmsg,React_Assign_Conv -Declare subroutine Obj_Notes, Btree.Extract, SRP_Fastarray, Delay, Mona_Services, SRP_List, Msg +Declare subroutine Obj_Notes, Btree.Extract, SRP_Fastarray, Delay, Mona_Services, SRP_List, Msg, Rds_Services Declare function SRP_Array, Reactor_Services, Memory_Services, Database_Services, SRP_Sort_Array, Excel_Services Declare function SRP_Math, SRP_Hash, SRP_JSON, Epi_Part_Services, Schedule_Services, Date_Services, Environment_Services Declare function Logging_Services, GetCommandLine, NextKey, Reactor_Log_Services, SRP_DateTime, ole_getwebpage @@ -72,25 +72,19 @@ Declare function Datetime, Reactor_Modes_Services, Work_Order_Services, React Declare function SRP_Time, Rds_Services, SRP_Fastarray, Httpclient_Services, SRP_List, Utility, Memberof, Error_Services // Report paths for various performance report services. -TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\' -DailyReportsFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Daily\' -WeeklyReportsFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Weekly\' +TemplatesFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Templates\' +DailyReportsFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Daily\' +WeeklyReportsFolder = Environment_Services('GetApplicationRootPath') : '\Reports\Scheduler\Weekly\' -CommandLine = GetCommandLine() -Machine = Environment_Services('GetServer') -LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\PerformanceReports' -LogDate = Oconv(Date(), 'D4/') -LogTime = Oconv(Time(), 'MTS') -LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Performance Reports.csv' -Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Command Line' : @FM : 'Service Detail' -ColumnWidths = 20 : @FM : 15 : @FM : 60 : @FM : 300 -objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, ColumnWidths, False$, False$) -LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM +CommandLine = GetCommandLine() +Machine = Environment_Services('GetServer') + +LogDate = Oconv(Date(), 'D4/') +LogTime = Oconv(Time(), 'MTS') +LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM GoToService else - Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.') - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Error_Services('GetMessage') - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) + end Return Response else '' @@ -117,22 +111,22 @@ Options REACTORMETRIC = 'TUBE_BELL_JAR_THK', 'TUBE_BELL_JAR_WFR_CNT', 'SUSC_THK' Service IncrementWfrMetrics(RDSNo) // Get Reactor and run count details - RDSRec = Xlate('RDS', RDSNo, '', 'X', '') + RDSRec = Xlate('RDS', RDSNo, '', 'X', '') TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') TargetThickness = OConv(TargetThickness, 'MD3') - WaferCount = RDSRec - ReactorNo = RDSRec - OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) - NewReactorRec = OldReactorRec - ReactorType = OldReactorRec - SusceptorSize = OldReactorRec - SusceptorSize = SusceptorSize[-4,1] + WaferCount = RDSRec + ReactorNo = RDSRec + OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) + NewReactorRec = OldReactorRec + ReactorType = OldReactorRec + SusceptorSize = OldReactorRec + SusceptorSize = SusceptorSize[-4,1] // Get Old Values CurrTubeBellJarThk = OldReactorRec CurrTubeBellJarCnt = OldReactorRec - CurrSuscThk = OldReactorRec - CurrSuscWfrCnt = OldReactorRec + CurrSuscThk = OldReactorRec + CurrSuscWfrCnt = OldReactorRec CurrLowerQuartzThk = OldReactorRec CurrLowerQuartzWfr = OldReactorRec @@ -145,8 +139,8 @@ Service IncrementWfrMetrics(RDSNo) // Set values to 0 if blank If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 - If CurrSuscThk = '' then CurrSuscThk = 0 - If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 + If CurrSuscThk = '' then CurrSuscThk = 0 + If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0 @@ -154,27 +148,27 @@ Service IncrementWfrMetrics(RDSNo) Case ReactorType = 'EPP' - NewReactorRec = CurrTubeBellJarThk + TargetThickness + NewReactorRec = CurrTubeBellJarThk + TargetThickness NewReactorRec = CurrTubeBellJarCnt + 1 - NewReactorRec = CurrSuscThk + TargetThickness - NewReactorRec = CurrSuscWfrCnt + 1 - NewReactorRec = CurrLowerQuartzThk + TargetThickness - NewReactorRec = CurrLowerQuartzWfr + 1 + NewReactorRec = CurrSuscThk + TargetThickness + NewReactorRec = CurrSuscWfrCnt + 1 + NewReactorRec = CurrLowerQuartzThk + TargetThickness + NewReactorRec = CurrLowerQuartzWfr + 1 Case ReactorType = 'HTR' Begin Case Case SusceptorSize = 6 - CntAddition = (WaferCount / 5) - ThkAddition = (WaferCount / 5) * TargetThickness - NewReactorRec = CurrTubeBellJarThk + ThkAddition + CntAddition = (WaferCount / 5) + ThkAddition = (WaferCount / 5) * TargetThickness + NewReactorRec = CurrTubeBellJarThk + ThkAddition NewReactorRec = CurrTubeBellJarCnt + CntAddition - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt + CntAddition - NewReactorRec = CurrLowerQuartzThk + ThkAddition - NewReactorRec = CurrLowerQuartzWfr + CntAddition - NewReactorRec = CurrArmsWfrCnt + WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt + CntAddition + NewReactorRec = CurrLowerQuartzThk + ThkAddition + NewReactorRec = CurrLowerQuartzWfr + CntAddition + NewReactorRec = CurrArmsWfrCnt + WaferCount Case SusceptorSize = 8 // Round up @@ -183,14 +177,14 @@ Service IncrementWfrMetrics(RDSNo) CntAddition = Int(CntAddition) + 1 end - ThkAddition = (WaferCount / 3) * TargetThickness - NewReactorRec = CurrTubeBellJarThk + ThkAddition + ThkAddition = (WaferCount / 3) * TargetThickness + NewReactorRec = CurrTubeBellJarThk + ThkAddition NewReactorRec = CurrTubeBellJarCnt + CntAddition - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt + CntAddition - NewReactorRec = CurrLowerQuartzThk + ThkAddition - NewReactorRec = CurrLowerQuartzWfr + CntAddition - NewReactorRec = CurrArmsWfrCnt + WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt + CntAddition + NewReactorRec = CurrLowerQuartzThk + ThkAddition + NewReactorRec = CurrLowerQuartzWfr + CntAddition + NewReactorRec = CurrArmsWfrCnt + WaferCount End Case @@ -198,13 +192,13 @@ Service IncrementWfrMetrics(RDSNo) ThkAddition = WaferCount * TargetThickness - NewReactorRec = CurrTubeBellJarThk + ThkAddition + NewReactorRec = CurrTubeBellJarThk + ThkAddition NewReactorRec = CurrTubeBellJarCnt + WaferCount - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt + WaferCount - NewReactorRec = CurrLowerQuartzThk + ThkAddition - NewReactorRec = CurrLowerQuartzWfr + WaferCount - NewReactorRec = CurrArmsWfrCnt + WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt + WaferCount + NewReactorRec = CurrLowerQuartzThk + ThkAddition + NewReactorRec = CurrLowerQuartzWfr + WaferCount + NewReactorRec = CurrArmsWfrCnt + WaferCount End Case @@ -284,22 +278,22 @@ end service Service DecrementWfrMetrics(RDSNo) // Get Reactor and run count details - RDSRec = Xlate('RDS', RDSNo, '', 'X', '') + RDSRec = Xlate('RDS', RDSNo, '', 'X', '') TargetThickness = Xlate('RDS', RDSNo, 'THICK_TARGET_TOT', 'X', '') TargetThickness = OConv(TargetThickness, 'MD3') - WaferCount = RDSRec - ReactorNo = RDSRec - OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) - NewReactorRec = OldReactorRec - ReactorType = OldReactorRec - SusceptorSize = OldReactorRec - SusceptorSize = SusceptorSize[-4,1] + WaferCount = RDSRec + ReactorNo = RDSRec + OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) + NewReactorRec = OldReactorRec + ReactorType = OldReactorRec + SusceptorSize = OldReactorRec + SusceptorSize = SusceptorSize[-4,1] // Get Old Values CurrTubeBellJarThk = OldReactorRec CurrTubeBellJarCnt = OldReactorRec - CurrSuscThk = OldReactorRec - CurrSuscWfrCnt = OldReactorRec + CurrSuscThk = OldReactorRec + CurrSuscWfrCnt = OldReactorRec CurrLowerQuartzThk = OldReactorRec CurrLowerQuartzWfr = OldReactorRec @@ -310,7 +304,7 @@ Service DecrementWfrMetrics(RDSNo) end // Set values to 0 if blank - If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 + If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 If CurrSuscThk = '' then CurrSuscThk = 0 If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 @@ -321,27 +315,27 @@ Service DecrementWfrMetrics(RDSNo) Case ReactorType = 'EPP' - NewReactorRec = CurrTubeBellJarThk - TargetThickness + NewReactorRec = CurrTubeBellJarThk - TargetThickness NewReactorRec = CurrTubeBellJarCnt - 1 - NewReactorRec = CurrSuscThk - TargetThickness - NewReactorRec = CurrSuscWfrCnt - 1 - NewReactorRec = CurrLowerQuartzThk - TargetThickness - NewReactorRec = CurrLowerQuartzWfr - 1 + NewReactorRec = CurrSuscThk - TargetThickness + NewReactorRec = CurrSuscWfrCnt - 1 + NewReactorRec = CurrLowerQuartzThk - TargetThickness + NewReactorRec = CurrLowerQuartzWfr - 1 Case ReactorType = 'HTR' Begin Case Case SusceptorSize = 6 - CntAddition = (WaferCount / 5) - ThkAddition = (WaferCount / 5) * TargetThickness - NewReactorRec = CurrTubeBellJarThk - ThkAddition + CntAddition = (WaferCount / 5) + ThkAddition = (WaferCount / 5) * TargetThickness + NewReactorRec = CurrTubeBellJarThk - ThkAddition NewReactorRec = CurrTubeBellJarCnt - CntAddition - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt - CntAddition - NewReactorRec = CurrLowerQuartzThk - ThkAddition - NewReactorRec = CurrLowerQuartzWfr - CntAddition - NewReactorRec = CurrArmsWfrCnt - WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt - CntAddition + NewReactorRec = CurrLowerQuartzThk - ThkAddition + NewReactorRec = CurrLowerQuartzWfr - CntAddition + NewReactorRec = CurrArmsWfrCnt - WaferCount Case SusceptorSize = 8 // Round up @@ -350,14 +344,14 @@ Service DecrementWfrMetrics(RDSNo) CntAddition = Int(CntAddition) + 1 end - ThkAddition = (WaferCount / 3) * TargetThickness - NewReactorRec = CurrTubeBellJarThk - ThkAddition + ThkAddition = (WaferCount / 3) * TargetThickness + NewReactorRec = CurrTubeBellJarThk - ThkAddition NewReactorRec = CurrTubeBellJarCnt - CntAddition - NewReactorRec = CurrSuscThk - ThkAddition - NewReactorRec = CurrSuscWfrCnt - CntAddition - NewReactorRec = CurrLowerQuartzThk - ThkAddition - NewReactorRec = CurrLowerQuartzWfr - CntAddition - NewReactorRec = CurrArmsWfrCnt - WaferCount + NewReactorRec = CurrSuscThk - ThkAddition + NewReactorRec = CurrSuscWfrCnt - CntAddition + NewReactorRec = CurrLowerQuartzThk - ThkAddition + NewReactorRec = CurrLowerQuartzWfr - CntAddition + NewReactorRec = CurrArmsWfrCnt - WaferCount End Case @@ -365,13 +359,13 @@ Service DecrementWfrMetrics(RDSNo) ThkAddition = WaferCount * TargetThickness - NewReactorRec = CurrTubeBellJarThk - ThkAddition + NewReactorRec = CurrTubeBellJarThk - ThkAddition NewReactorRec = CurrTubeBellJarCnt - WaferCount - NewReactorRec = CurrSuscThk - ThkAddition - NewReactorRec = CurrSuscWfrCnt - WaferCount - NewReactorRec = CurrLowerQuartzThk - ThkAddition - NewReactorRec = CurrLowerQuartzWfr - WaferCount - NewReactorRec = CurrArmsWfrCnt - WaferCount + NewReactorRec = CurrSuscThk - ThkAddition + NewReactorRec = CurrSuscWfrCnt - WaferCount + NewReactorRec = CurrLowerQuartzThk - ThkAddition + NewReactorRec = CurrLowerQuartzWfr - WaferCount + NewReactorRec = CurrArmsWfrCnt - WaferCount End Case @@ -395,15 +389,15 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) NewReactorRec = OldReactorRec - ReactorType = OldReactorRec + ReactorType = OldReactorRec SusceptorSize = OldReactorRec SusceptorSize = SusceptorSize[-4,1] // Get Old Values CurrTubeBellJarThk = OldReactorRec CurrTubeBellJarCnt = OldReactorRec - CurrSuscThk = OldReactorRec - CurrSuscWfrCnt = OldReactorRec + CurrSuscThk = OldReactorRec + CurrSuscWfrCnt = OldReactorRec CurrLowerQuartzThk = OldReactorRec CurrLowerQuartzWfr = OldReactorRec @@ -416,8 +410,8 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) // Set values to 0 if blank If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 - If CurrSuscThk = '' then CurrSuscThk = 0 - If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 + If CurrSuscThk = '' then CurrSuscThk = 0 + If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 If CurrLowerQuartzThk = '' then CurrLowerQuartzThk = 0 If CurrLowerQuartzWfr = '' then CurrLowerQuartzWfr = 0 @@ -425,27 +419,27 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) Case ReactorType = 'EPP' - NewReactorRec = CurrTubeBellJarThk + TargetThickness + NewReactorRec = CurrTubeBellJarThk + TargetThickness NewReactorRec = CurrTubeBellJarCnt + 1 - NewReactorRec = CurrSuscThk + TargetThickness - NewReactorRec = CurrSuscWfrCnt + 1 - NewReactorRec = CurrLowerQuartzThk + TargetThickness - NewReactorRec = CurrLowerQuartzWfr + 1 + NewReactorRec = CurrSuscThk + TargetThickness + NewReactorRec = CurrSuscWfrCnt + 1 + NewReactorRec = CurrLowerQuartzThk + TargetThickness + NewReactorRec = CurrLowerQuartzWfr + 1 Case ReactorType = 'HTR' Begin Case Case SusceptorSize = 6 - CntAddition = (WaferCount / 5) - ThkAddition = (WaferCount / 5) * TargetThickness - NewReactorRec = CurrTubeBellJarThk + ThkAddition + CntAddition = (WaferCount / 5) + ThkAddition = (WaferCount / 5) * TargetThickness + NewReactorRec = CurrTubeBellJarThk + ThkAddition NewReactorRec = CurrTubeBellJarCnt + CntAddition - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt + CntAddition - NewReactorRec = CurrLowerQuartzThk + ThkAddition - NewReactorRec = CurrLowerQuartzWfr + CntAddition - NewReactorRec = CurrArmsWfrCnt + WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt + CntAddition + NewReactorRec = CurrLowerQuartzThk + ThkAddition + NewReactorRec = CurrLowerQuartzWfr + CntAddition + NewReactorRec = CurrArmsWfrCnt + WaferCount Case SusceptorSize = 8 // Round up @@ -454,14 +448,14 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) CntAddition = Int(CntAddition) + 1 end - ThkAddition = (WaferCount / 3) * TargetThickness - NewReactorRec = CurrTubeBellJarThk + ThkAddition + ThkAddition = (WaferCount / 3) * TargetThickness + NewReactorRec = CurrTubeBellJarThk + ThkAddition NewReactorRec = CurrTubeBellJarCnt + CntAddition - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt + CntAddition - NewReactorRec = CurrLowerQuartzThk + ThkAddition - NewReactorRec = CurrLowerQuartzWfr + CntAddition - NewReactorRec = CurrArmsWfrCnt + WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt + CntAddition + NewReactorRec = CurrLowerQuartzThk + ThkAddition + NewReactorRec = CurrLowerQuartzWfr + CntAddition + NewReactorRec = CurrArmsWfrCnt + WaferCount End Case @@ -469,13 +463,13 @@ Service IncrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) ThkAddition = WaferCount * TargetThickness - NewReactorRec = CurrTubeBellJarThk + ThkAddition + NewReactorRec = CurrTubeBellJarThk + ThkAddition NewReactorRec = CurrTubeBellJarCnt + WaferCount - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt + WaferCount - NewReactorRec = CurrLowerQuartzThk + ThkAddition - NewReactorRec = CurrLowerQuartzWfr + WaferCount - NewReactorRec = CurrArmsWfrCnt + WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt + WaferCount + NewReactorRec = CurrLowerQuartzThk + ThkAddition + NewReactorRec = CurrLowerQuartzWfr + WaferCount + NewReactorRec = CurrArmsWfrCnt + WaferCount End Case @@ -497,15 +491,15 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) OldReactorRec = Database_Services('ReadDataRow', 'REACTOR', ReactorNo) NewReactorRec = OldReactorRec - ReactorType = OldReactorRec + ReactorType = OldReactorRec SusceptorSize = OldReactorRec SusceptorSize = SusceptorSize[-4,1] // Get Old Values CurrTubeBellJarThk = OldReactorRec CurrTubeBellJarCnt = OldReactorRec - CurrSuscThk = OldReactorRec - CurrSuscWfrCnt = OldReactorRec + CurrSuscThk = OldReactorRec + CurrSuscWfrCnt = OldReactorRec CurrLowerQuartzThk = OldReactorRec CurrLowerQuartzWfr = OldReactorRec @@ -516,7 +510,7 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) end // Set values to 0 if blank - If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 + If CurrTubeBellJarThk = '' then CurrTubeBellJarThk = 0 If CurrTubeBellJarCnt = '' then CurrTubeBellJarCnt = 0 If CurrSuscThk = '' then CurrSuscThk = 0 If CurrSuscWfrCnt = '' then CurrSuscWfrCnt = 0 @@ -527,27 +521,27 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) Case ReactorType = 'EPP' - NewReactorRec = CurrTubeBellJarThk - TargetThickness + NewReactorRec = CurrTubeBellJarThk - TargetThickness NewReactorRec = CurrTubeBellJarCnt - 1 - NewReactorRec = CurrSuscThk - TargetThickness - NewReactorRec = CurrSuscWfrCnt - 1 - NewReactorRec = CurrLowerQuartzThk - TargetThickness - NewReactorRec = CurrLowerQuartzWfr - 1 + NewReactorRec = CurrSuscThk - TargetThickness + NewReactorRec = CurrSuscWfrCnt - 1 + NewReactorRec = CurrLowerQuartzThk - TargetThickness + NewReactorRec = CurrLowerQuartzWfr - 1 Case ReactorType = 'HTR' Begin Case Case SusceptorSize = 6 - CntAddition = (WaferCount / 5) - ThkAddition = (WaferCount / 5) * TargetThickness - NewReactorRec = CurrTubeBellJarThk - ThkAddition + CntAddition = (WaferCount / 5) + ThkAddition = (WaferCount / 5) * TargetThickness + NewReactorRec = CurrTubeBellJarThk - ThkAddition NewReactorRec = CurrTubeBellJarCnt - CntAddition - NewReactorRec = CurrSuscThk + ThkAddition - NewReactorRec = CurrSuscWfrCnt - CntAddition - NewReactorRec = CurrLowerQuartzThk - ThkAddition - NewReactorRec = CurrLowerQuartzWfr - CntAddition - NewReactorRec = CurrArmsWfrCnt - WaferCount + NewReactorRec = CurrSuscThk + ThkAddition + NewReactorRec = CurrSuscWfrCnt - CntAddition + NewReactorRec = CurrLowerQuartzThk - ThkAddition + NewReactorRec = CurrLowerQuartzWfr - CntAddition + NewReactorRec = CurrArmsWfrCnt - WaferCount Case SusceptorSize = 8 // Round up @@ -556,14 +550,14 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) CntAddition = Int(CntAddition) + 1 end - ThkAddition = (WaferCount / 3) * TargetThickness - NewReactorRec = CurrTubeBellJarThk - ThkAddition + ThkAddition = (WaferCount / 3) * TargetThickness + NewReactorRec = CurrTubeBellJarThk - ThkAddition NewReactorRec = CurrTubeBellJarCnt - CntAddition - NewReactorRec = CurrSuscThk - ThkAddition - NewReactorRec = CurrSuscWfrCnt - CntAddition - NewReactorRec = CurrLowerQuartzThk - ThkAddition - NewReactorRec = CurrLowerQuartzWfr - CntAddition - NewReactorRec = CurrArmsWfrCnt - WaferCount + NewReactorRec = CurrSuscThk - ThkAddition + NewReactorRec = CurrSuscWfrCnt - CntAddition + NewReactorRec = CurrLowerQuartzThk - ThkAddition + NewReactorRec = CurrLowerQuartzWfr - CntAddition + NewReactorRec = CurrArmsWfrCnt - WaferCount End Case @@ -571,13 +565,13 @@ Service DecrementTestWfrMetrics(TargetThickness, WaferCount, ReactorNo) ThkAddition = WaferCount * TargetThickness - NewReactorRec = CurrTubeBellJarThk - ThkAddition + NewReactorRec = CurrTubeBellJarThk - ThkAddition NewReactorRec = CurrTubeBellJarCnt - WaferCount - NewReactorRec = CurrSuscThk - ThkAddition - NewReactorRec = CurrSuscWfrCnt - WaferCount - NewReactorRec = CurrLowerQuartzThk - ThkAddition - NewReactorRec = CurrLowerQuartzWfr - WaferCount - NewReactorRec = CurrArmsWfrCnt - WaferCount + NewReactorRec = CurrSuscThk - ThkAddition + NewReactorRec = CurrSuscWfrCnt - WaferCount + NewReactorRec = CurrLowerQuartzThk - ThkAddition + NewReactorRec = CurrLowerQuartzWfr - WaferCount + NewReactorRec = CurrArmsWfrCnt - WaferCount End Case @@ -637,9 +631,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service GetReactors(MatchType, MatchSize) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - * Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - ServiceKeyID := '*' : MatchType : '*' : MatchSize Reactors = '' @@ -711,9 +702,6 @@ Service GetReactors(MatchType, MatchSize) Response = Reactors - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - * Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -724,9 +712,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service GetReactorNumbers(MatchType, MatchSize) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - ServiceKeyID := '*' : MatchType : '*' : MatchSize ReactorNumbers = '' @@ -780,9 +765,6 @@ Service GetReactorNumbers(MatchType, MatchSize) Response = ReactorNumbers - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service //---------------------------------------------------------------------------------------------------------------------- @@ -792,9 +774,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service GetReactor(ReactorNo) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - * Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - ServiceKeyID := '*' : ReactorNo Reactor = '' @@ -837,9 +816,6 @@ Service GetReactor(ReactorNo) Response = Reactor - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - * Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -851,9 +827,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service CreatePerformanceTrackers(ScheduleDate, CreateReports) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - // Force the auto scheduler to run to make sure that all adjustments are being made to the scheduler. * Schedule_Services('AutoScheduler') @@ -987,9 +960,6 @@ Service CreatePerformanceTrackers(ScheduleDate, CreateReports) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -998,10 +968,7 @@ end service // // Updates the wafers processed column in the performance tracking database rows. //---------------------------------------------------------------------------------------------------------------------- -Service UpdatePerformanceTrackers(ScheduleDate, CreateReports) - - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) +Service UpdatePerformanceTrackers(ScheduleDate, CreateReports) If Num(ScheduleDate) else ScheduleDate = Iconv(ScheduleDate, 'D') If ScheduleDate EQ '' then ScheduleDate = Date() @@ -1059,9 +1026,6 @@ Service UpdatePerformanceTrackers(ScheduleDate, CreateReports) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -1072,9 +1036,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service ClearWafersExpected(ScheduleDate) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - If Num(ScheduleDate) else ScheduleDate = Iconv(ScheduleDate, 'D') If ScheduleDate EQ '' then ScheduleDate = Date() @@ -1111,9 +1072,6 @@ Service ClearWafersExpected(ScheduleDate) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -1124,9 +1082,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service ClearWafersProcessed(ScheduleDate) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - If Num(ScheduleDate) else ScheduleDate = Iconv(ScheduleDate, 'D') If ScheduleDate EQ '' then ScheduleDate = Date() @@ -1163,9 +1118,6 @@ Service ClearWafersProcessed(ScheduleDate) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service //---------------------------------------------------------------------------------------------------------------------- @@ -1176,9 +1128,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service CreateDailyPerformanceReport(ScheduleDate) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - If Num(ScheduleDate) else ScheduleDate = Iconv(ScheduleDate, 'D') If ScheduleDate EQ '' then ScheduleDate = Date() @@ -1258,9 +1207,6 @@ Service CreateDailyPerformanceReport(ScheduleDate) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -1272,9 +1218,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service UpdateDailyPerformanceReport(ScheduleDate) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - If Num(ScheduleDate) else ScheduleDate = Iconv(ScheduleDate, 'D') If ScheduleDate EQ '' then ScheduleDate = Date() @@ -1329,9 +1272,6 @@ Service UpdateDailyPerformanceReport(ScheduleDate) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -1343,9 +1283,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service CreateWeeklyPerformanceReport(YearWeekNo) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - // YearWeekNo looks like 2017-W44. For testing purposes it might be easier to pass in a date and the YearWeekNo // will be calculated. If (Num(Iconv(YearWeekNo, 'D')) AND (Iconv(YearWeekNo, 'D') NE '')) OR Num(YearWeekNo) then @@ -1444,9 +1381,6 @@ Service CreateWeeklyPerformanceReport(YearWeekNo) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service @@ -1458,9 +1392,6 @@ end service //---------------------------------------------------------------------------------------------------------------------- Service UpdateWeeklyPerformanceReport(YearWeekNo) - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' begins.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - // YearWeekNo looks like 2017-W44. For testing purposes it might be easier to pass in a date and the YearWeekNo // will be calculated. If (Num(Iconv(YearWeekNo, 'D')) AND (Iconv(YearWeekNo, 'D') NE '')) OR Num(YearWeekNo) then @@ -1514,25 +1445,28 @@ Service UpdateWeeklyPerformanceReport(YearWeekNo) end end - LogData = LoggingDTM : @FM : Machine : @FM : CommandLine : @FM : Service : ' ends.' - Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) - end service + Service GetReactorCurrLoad(ReactNo) + Response = '' ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) LoadedCassettes = ReactStatusRec Response = LoadedCassettes + end service Service GetReactorCurrLoadRDS(ReactNo) + Response = '' ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactNo) LoadedCassettes = ReactStatusRec Response = LoadedCassettes + end service + Service GetReactCurrModeRec(ReactNo) Response = '' @@ -1542,6 +1476,7 @@ Service GetReactCurrModeRec(ReactNo) end service + Service GetReactCurrModeId(ReactNo) Response = '' @@ -1550,12 +1485,16 @@ Service GetReactCurrModeId(ReactNo) end service + Service GetReactCurrModeName(ReactNo) + Response = '' ReactModeRec = Reactor_Services('GetReactCurrModeRec', ReactNo) Response = ReactModeRec + end service + Service GetReactModeHistory(ReactNo, DaysToReport) StartDt = Date() - DaysToReport @@ -1564,9 +1503,8 @@ Service GetReactModeHistory(ReactNo, DaysToReport) If ( (ReactNo NE '') and (DaysToReport NE '') ) then If Date() - DaysToReport LE LegacyDate then modeArray = '' - //New Modes + // New Modes SelectSent = 'SELECT REACT_MODE_NG WITH REACT_NO = ':QUOTE(ReactNo):' AND WITH START_DT > ':QUOTE(OConv(StartDt, 'D4/')):' BY-DSND START_DTM ' - //SelectSent = 'SELECT REACT_MODE_NG WITH START_DT >= ':QUOTE(DayBegin):' AND WITH START_DTM >= ':QUOTE(FromTime):'AND WITH START_DTM <= ':QUOTE(ToTime):' BY-DSND START_DTM ' Set_Status(0) RList(SelectSent, TARGET_ACTIVELIST$, "", "", "") IF Get_Status(errCode) THEN @@ -1632,9 +1570,8 @@ Service GetReactModeHistory(ReactNo, DaysToReport) end GoSub ClearCursors ClearSelect TARGET_ACTIVELIST$ - //Old Modes + // Old Modes SelectSent = 'SELECT REACT_MODE WITH REACT_NO = ':QUOTE(ReactNo):' AND WITH START_DT > ':QUOTE(OConv(StartDt, 'D4/')):' BY-DSND START_DTM ' - //SelectSent = 'SELECT REACT_MODE WITH START_DT >= ':QUOTE(DayBegin):' AND WITH START_DTM >= ':QUOTE(FromTime):'AND WITH START_DTM <= ':QUOTE(ToTime):' BY-DSND START_DTM ' Set_Status(0) RList(SelectSent, TARGET_ACTIVELIST$, "", "", "") IF Get_Status(errCode) THEN @@ -1756,10 +1693,7 @@ Service GetReactModeHistory(ReactNo, DaysToReport) end Next NoteIndex - ServiceNotes = ServiceNotesFormatted - - * SWAP ' ' WITH CRLF$ IN StartDTM - * SWAP ' ' WITH CRLF$ IN StopDTM + ServiceNotes = ServiceNotesFormatted FOR I = 1 TO COUNT(ProbCatIDs,@VM) + (ProbCatIDs NE '') ProbCatDescs<1,I> = ProbCatIDs<1,I>:' - ':ProbCatDescs<1,I> @@ -1797,24 +1731,19 @@ Service GetReactModeHistory(ReactNo, DaysToReport) Error_Services('Add', ErrorMsg) end - end end - - end service Service GetReactorCassLoadHistory(ReactNo, DaysToReport) - Response = '' If ( (ReactNo NE '') and (DaysToReport NE '') ) then Open 'RDS' to RDSTable then OPEN 'DICT.RDS' TO @DICT then StartDt = Date() - DaysToReport - //StartDt = OCONV(StartDt,'D4/') SelectSent = 'SELECT RDS WITH REACTOR = ':QUOTE(ReactNo):' AND WITH DATE_IN > ':QUOTE(OConv(StartDt, 'D4/')):' BY-DSND DATETIME_IN ' Set_Status(0) errCode = '' @@ -1856,14 +1785,13 @@ Service GetReactorCassLoadHistory(ReactNo, DaysToReport) end service + Service GetReactorCassLoadHistoryRange(ReactNo, StartDTM, StopDTM) Response = '' If ( (ReactNo NE '') and (StartDTM NE '') and (StopDTM NE '')) then Open 'RDS' to RDSTable then OPEN 'DICT.RDS' TO @DICT then - //StartDt = Date() - DaysToReport - //StartDt = OCONV(StartDt,'D4/') SelectSent = 'SELECT RDS WITH REACTOR EQ ':ReactNo:' AND WITH DATETIME_IN GE ':StartDTM:' AND WITH DATETIME_IN LE ':StopDTM:' BY-DSND DATETIME_IN ' Set_Status(0) errCode = '' @@ -1903,11 +1831,10 @@ Service GetReactorCassLoadHistoryRange(ReactNo, StartDTM, StopDTM) end end - end service -Service IncrementCycleCount(ToolID) - + +Service IncrementCycleCount(ToolID) If ToolID NE '' then // A reactor number may be passed in. Convert it to the corresponding tool ID if necessary. @@ -1926,6 +1853,14 @@ end service Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, ForceModeChange) + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorModeChg' + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Mode Change Log.csv' + Headers = 'Logging DTM' : @FM : 'Notes' + objLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, '', False$, False$, True$) + LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM + ErrorMsg = '' IF ForceModeChange NE True$ then ForceModeChange = False$ If ( (UserID NE '') and (ReactNo NE '') and (Mode NE '') and (ModeSubCat NE '')) then @@ -1938,7 +1873,7 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force CommentException = False$ - BEGIN Case + Begin Case Case PrevModeRec EQ 'WAITING_FOR_MAINTENANCE_UNSCHEDULED' AND Mode EQ 'MAINTENANCE_UNSCHEDULED' CommentException = True$ @@ -2193,11 +2128,11 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force // Reopen previous react mode Database_Services('WriteDataRow', 'REACT_MODE_NG', NGPrevModeKey, PrevModeRec) end else - //Check to see if notifications are active for this mode - IF SelectedModeRec then + // Check to see if notifications are active for this mode + If SelectedModeRec then //If notifications are active get the classes from the REACTOR_MODE record SendToClasses = SelectedModeRec - for each class in SendToClasses using @VM + For each class in SendToClasses using @VM //Send to all the classes notesParms = '' IncludeNextShift = False$ @@ -2219,9 +2154,157 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force SendToGroup = '' notesParms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup Obj_Notes('Create', notesParms) - Next class - + end + + // If new mode sub category is an ABORT/ALARM or particular Facilities Failure, then apply abort metrology to the oldest loaded RDS + + ReactType = Xlate('REACTOR', ReactNo, 'REACT_TYPE', 'X') + If ReactType NE 'EPP' then + Begin Case + Case ModeSubCat _EQC 'ABORT/ALARM - TC Failure' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Contactor Not Sensed On' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Temp Up Failure' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'Gas Delivery Issue' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'Toxic Gas Alarm' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Facilities Level Failure' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Exhaust System Failure (Scrubber Toxic)' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Gas Flow - TCS' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Gas Flow - Dopant' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Gas Flow - Hydrogen' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Susceptor Faults' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - 24V. Interlock Abort' + ApplyAbortMet = True$ + Case ModeSubCat _EQC 'ABORT/ALARM - Wafer Handling' + ApplyAbortMet = True$ + Case Otherwise$ + ApplyAbortMet = False$ + End Case + + If ApplyAbortMet then + + LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorAborts' + LogDate = Oconv(Date(), 'D4/') + LogTime = Oconv(Time(), 'MTS') + LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Reactor Abort Log.csv' + Headers = 'Logging DTM' : @FM : 'ReactorNo' : @FM : 'Notes' + objAbortLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, ' ', Headers, '', False$, False$, True$) + LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM + + LogMsg = 'Intermediate or Major ABORT/ALARM mode sub category, ':ModeSubCat:'. ' + LogMsg := 'Attempting to apply abort metrology to loaded RDS.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + // Get the loaded RDS key(s) and apply abort metrology. If two are loaded, select the one loaded first. + LoadedRdsKeys = Xlate('REACT_STATUS', ReactNo, 'LOAD_RDS', 'X') + If LoadedRdsKeys NE '' then + + AbortRds = '' + + Begin Case + Case DCount(LoadedRdsKeys, @VM) EQ 2 + // Select the oldest one + LoadDtms = Xlate('RDS', LoadedRdsKeys, 'DATETIME_IN', 'X') + If LoadDtms<0, 2> GT LoadDtms<0, 1> then + AbortRds = LoadedRdsKeys<0, 1> + end else + AbortRds = LoadedRdsKeys<0, 2> + end + + Swap @VM with ' ' in LoadedRdsKeys + LogMsg = 'Two loaded RDS keys, ':LoadedRdsKeys:', found in REACT_STATUS record.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + LogMsg = 'Selecting RDS ':AbortRDS:' as it was loaded earlier.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + Case DCount(LoadedRdsKeys, @VM) EQ 1 + // Only one loaded, so use that + AbortRds = LoadedRdsKeys + LogMsg = 'One loaded RDS key, ':AbortRds:', found in REACT_STATUS record.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + Case Otherwise$ + // Unexpected condition - log error + Swap @VM with ' ' in LoadedRdsKeys + LogMsg = 'Error selecting RDS to apply abort metrology to. Loaded RDS keys, ':LoadedRdsKeys:', found in REACT_STATUS record.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + End Case + + If AbortRds NE '' then + LogMsg = 'Attempting to apply abort metrology to RDS ':AbortRds:'.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + Rds_Services('ApplyAbortMetrology', AbortRds) + If Error_Services('NoError') then + + LogMsg = 'Successfully applied abort metrology to RDS ':AbortRds:'.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + end else + + ErrorMsg = Error_Services('GetMessage') + + LogMsg = 'Error occurred while applying abort metrology to RDS ':AbortRds:'. Error message: ':ErrorMsg + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + + end + end + + end else + // No loaded RDS runs detected + LogMsg = 'No loaded RDS keys found in REACT_STATUS record.' + LogData = '' + LogData<1> = LoggingDtm + LogData<2> = ReactNo + LogData<3> = LogMsg + Logging_Services('AppendLog', objAbortLog, LogData, @RM, @FM) + end + end end end end else @@ -2298,9 +2381,7 @@ Service CreateReactModeChange(UserID, ReactNo, Mode, ModeSubCat, ModeText, Force Case ModeSubCat EQ '' ErrorMsg = 'You must choose a VALID Reactor Problem Category.' - - - + End Case end @@ -2331,9 +2412,9 @@ end service Service GetSingleReactStatusJson(reactNo) response = '' - //Create the root objec JSON + // Create the root object JSON If SRP_Json(objReactor, "New") then - //Create the array of reactors + // Create the array of reactors If SRP_Json(objReactorArray, "New", "Array") then ReactStatusArray = Reactor_Services('FormatReactStatusSingle', reactNo) CurrE10State = Xlate('REACTOR_MODES', ReactStatusArray, REACTOR_MODES_E10_STATE$, 'X') @@ -2367,8 +2448,7 @@ Service GetSingleReactStatusJson(reactNo) // All done with the root object SRP_Json(objReactor, "Release") end - - + response = resultingJSON end service @@ -2420,8 +2500,7 @@ Service GetAllReactStatusJson() // All done with the root object SRP_Json(objReactor, "Release") end - - + response = resultingJSON end service @@ -2751,7 +2830,9 @@ Service CleanReactStatus() end service + Service GetReactModeKeysByTimeSpan(ReactorNo, StartDtm, StopDtm) + Begin Case Case ReactorNo Eq '' Error_Services('Add', 'Error in ' : Service : ' service. ReactorNo not supplied.') @@ -2807,9 +2888,12 @@ Service GetReactModeKeysByTimeSpan(ReactorNo, StartDtm, StopDtm) end else Response = Error_Services('GetMessage') end + end service + Service GetReactorUptimeMetricsByTimeSpan(ReactorNo, StartDtm, StopDtm) + ToolData = '' TotalProductiveMinutes = 0 TotalUnscheduledDownMinutes = 0 @@ -3073,9 +3157,12 @@ Service GetReactorUptimeMetricsByTimeSpan(ReactorNo, StartDtm, StopDtm) end else Response = Error_Services('GetMessage') end + end service + Service GetReactorUptimeMetricsByTypeAndTimeSpan(startDtm, endDtm, reactType) + Begin Case Case startDtm EQ '' Error_Services('Add', 'Error getting reactor uptime metrics -> Report start date not supplied') @@ -3193,9 +3280,12 @@ Service GetReactorUptimeMetricsByTypeAndTimeSpan(startDtm, endDtm, reactType) Error_Services('Add', 'Error getting reactor uptime metrics -> Unable to get total report duration.') end end + end service + Service GetLoadedRds(ReactNo) + StopRDS = Xlate('REACT_STATE', ReactNo, 'LAST_RDS_NO', 'X') // Get list of RDS on current reactor that are not FQA @@ -3206,17 +3296,17 @@ Service GetLoadedRds(ReactNo) RDSList = RDS_Services('GetRDSData', WoNo, RDSColumns, False$, '') // Find the index of StopRDS - RDSList = SRP_Sort_Array(RDSList, "AN1") + RDSList = SRP_Sort_Array(RDSList, "AN1") RDSFastArray = SRP_Fastarray("Create", RDSList) - StopRDSIdx = 0 + StopRDSIdx = 0 SRP_Fastarray("Match", RDSFastArray, StopRDS, StopRDSIdx) - RDSList = SRP_Fastarray("GetVariable", RDSFastArray) + RDSList = SRP_Fastarray("GetVariable", RDSFastArray) - RdsKeys = '':@FM:'' + RdsKeys = '':@FM:'' RdsKeysPosition = 1 - RdsIdx = StopRDSIdx + 1 - DateIn = '' - DateOut = '' + RdsIdx = StopRDSIdx + 1 + DateIn = '' + DateOut = '' Loop DateIn = Xlate('RDS', RDSList, RDS_DATE_IN$, 'X') DateOut = Xlate('RDS', RDSList, RDS_DATE_OUT$, 'X') @@ -3231,8 +3321,10 @@ Service GetLoadedRds(ReactNo) Repeat Response = RdsKeys + end service + Service CreateReactorProveInOrder(ReactNo, ProveInType) Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log' @@ -3338,8 +3430,10 @@ Service CreateReactorProveInOrder(ReactNo, ProveInType) Error_Services('Add', 'Error in ' : Service : ' service. Could not create NICA order.') end end + end service + Service GetReactorProveInStatus(ReactNo) Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log' @@ -3377,20 +3471,15 @@ Service GetReactorProveInStatus(ReactNo) ProveInUrl = BaseProveInUrl:'checklistOrderId=':ProveInOrderId - Retries = 3 + Retries = 3 BackoffSeconds = 1 - IsSuccessful = False$ + IsSuccessful = False$ Loop while (IsSuccessful EQ False$ and Retries GT 0) WaitSeconds = (3 - Retries) * BackoffSeconds - - Delay(WaitSeconds) - - - + Delay(WaitSeconds) Retries = Retries - 1 -* Httpclient_Services('SetTimeoutDuration', HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '') If HttpResponseJson NE '' then @@ -3452,10 +3541,12 @@ Service GetReactorProveInStatus(ReactNo) Database_Services('WriteDataRow', 'REACTOR', ReactNo, ReactorRec) end + end service Service CancelReactorProveIn(ReactNo, OrderId) + Headers = 'Logging DTM' : @FM : 'Machine' : @FM : 'Log' ColumnWidths = 20 : @FM : 15 : @FM : 300 LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\ReactorProveIn' @@ -3483,11 +3574,7 @@ Service CancelReactorProveIn(ReactNo, OrderId) Loop while (IsSuccessful EQ False$ and Retries GT 0) WaitSeconds = (3 - Retries) * BackoffSeconds - - Delay(WaitSeconds) - - - + Delay(WaitSeconds) Retries = Retries - 1 HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '') @@ -3567,9 +3654,12 @@ Service CancelReactorProveIn(ReactNo, OrderId) Error_Services('Add', 'Error in ' : Service : ' service. Could not cancel NICA order') end + end service + Service ActiveProveInPreventsModeChange(ReactNo, NewMode, CurrentMode) + If (ReactNo EQ '') then Error_Services('Add', 'Error in ' : Service : ' service. ReactNo was empty') end @@ -3613,9 +3703,12 @@ Service ActiveProveInPreventsModeChange(ReactNo, NewMode, CurrentMode) end else Response = False$ end + end service + Service GetReactorDownLL(ReactNo) + Response = '' If RowExists('REACTOR', ReactNo) then LLDisabledID = Database_Services('ReadDataColumn', 'REACTOR', ReactNo, REACTOR_ACTIVE_LL_DISABLED$, True$, 0) @@ -3626,8 +3719,10 @@ Service GetReactorDownLL(ReactNo) end end end + end service + Service GetReactorLoadCountLimit(ReactNo) ErrMsg = 'Error in ReactorServices -> GetReactorLoadCountLimit: ' @@ -3674,9 +3769,12 @@ Service GetReactorLoadCountLimit(ReactNo) Error_Services('Add', ErrMsg) end Response = MaxLoadCount + end service + Service GetReactorAvailChamberCount(ReactNo) + ErrMsg = 'Error in ReactorServices -> GetReactorAvailChamberCount: ' AvailableChamberCount = 0 If ReactNo NE '' then @@ -3694,77 +3792,81 @@ Service GetReactorAvailChamberCount(ReactNo) Error_Services('Add', ErrMsg) end Response = AvailableChamberCount + end service + Service RemoveRDSFromReactorLoad(RDSNo, ReactorNo, User) + Response = 0 If User NE '' then - If RDSNo NE '' then - If ReactorNo NE '' then - ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactorNo) - If Error_Services('NoError') then - Locate RDSNo in ReactStatusRec setting RDSPos then - ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_RDS$, RDSPos, 0) - ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_RDS_DTM$, RDSPos, 0) - ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_CASS_ID$, RDSPos, 0) - ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_DTM$, RDSPos, 0) - Database_Services('WriteDataRow', 'REACT_STATUS', ReactorNo, ReactStatusRec, 1, 0, 1) - If Error_Services('NoError') then - Response = 1 - end else - ErrMsg = Error_Services('GetMessage') - Error_Services('Add', ErrMsg) - end + If RDSNo NE '' then + If ReactorNo NE '' then + ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactorNo) + If Error_Services('NoError') then + Locate RDSNo in ReactStatusRec setting RDSPos then + ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_RDS$, RDSPos, 0) + ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_RDS_DTM$, RDSPos, 0) + ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_CASS_ID$, RDSPos, 0) + ReactStatusRec = Delete(ReactStatusREc, REACT_STATUS_LOAD_DTM$, RDSPos, 0) + Database_Services('WriteDataRow', 'REACT_STATUS', ReactorNo, ReactStatusRec, 1, 0, 1) + If Error_Services('NoError') then + Response = 1 end else - Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: RDS was not found as a loaded lot.') + ErrMsg = Error_Services('GetMessage') + Error_Services('Add', ErrMsg) end - end else - ErrMsg = Error_Services('GetMessage') - Error_Services('Add', ErrMsg) - end + end else + Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: RDS was not found as a loaded lot.') + end end else - Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Reactor No was supplied.') + ErrMsg = Error_Services('GetMessage') + Error_Services('Add', ErrMsg) end end else - Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No RDS No was supplied.') + Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Reactor No was supplied.') end + end else + Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No RDS No was supplied.') + end end else Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Username was supplied.') end - end service + Service AddRDSToReactorLoad(RDSNo, ReactorNo) + Response = 0 - If RDSNo NE '' then - If ReactorNo NE '' then - ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactorNo) - If Error_Services('NoError') then - Locate RDSNo in ReactStatusRec using @VM setting iPos else - WONo = Xlate('RDS', RDSNo, 'WO_NO', 'X') - CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X') - WOMatKey = WONo : '*' : CassNo - ThisDTM = SRP_Datetime('Now') - ReactStatusRec = RDSNo - ReactStatusRec = ThisDTM - ReactStatusRec = WOMatKey - ReactStatusRec = ThisDTM - Database_Services('WriteDataRow', 'REACT_STATUS', ReactorNo, ReactStatusRec, 1, 0, 1) - end - end else - ErrMsg = Error_Services('GetMessage') - Error_Services('Add', ErrMsg) - end - end else - Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Reactor No was supplied.') - end + If RDSNo NE '' then + If ReactorNo NE '' then + ReactStatusRec = Database_Services('ReadDataRow', 'REACT_STATUS', ReactorNo) + If Error_Services('NoError') then + Locate RDSNo in ReactStatusRec using @VM setting iPos else + WONo = Xlate('RDS', RDSNo, 'WO_NO', 'X') + CassNo = Xlate('RDS', RDSNo, 'CASS_NO', 'X') + WOMatKey = WONo : '*' : CassNo + ThisDTM = SRP_Datetime('Now') + ReactStatusRec = RDSNo + ReactStatusRec = ThisDTM + ReactStatusRec = WOMatKey + ReactStatusRec = ThisDTM + Database_Services('WriteDataRow', 'REACT_STATUS', ReactorNo, ReactStatusRec, 1, 0, 1) + end end else - Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No RDS No was supplied.') + ErrMsg = Error_Services('GetMessage') + Error_Services('Add', ErrMsg) end + end else + Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No Reactor No was supplied.') + end + end else + Error_Services('Add', 'Error in Reactor Services -> RemoveRDSFromReactorLoad: No RDS No was supplied.') + end + end service - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Internal GoSubs ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////