diff --git a/LSL2/POPUP/ENG_OPTIONS.json b/LSL2/POPUP/ENG_OPTIONS.json index 31a20ff..887341f 100644 --- a/LSL2/POPUP/ENG_OPTIONS.json +++ b/LSL2/POPUP/ENG_OPTIONS.json @@ -43,6 +43,10 @@ "<8,3>": { "<8,3,1>": "Update RDS Layer Parameters", "<8,3,2>": "UPDATE_RDS_LAYER" + }, + "<8,4>": { + "<8,4,1>": "Update RDS Test Specs", + "<8,4,2>": "UPDATE_RDS_TEST" } }, "<9>": { diff --git a/LSL2/STPROC/NDW_RDS_QUERY_EVENTS.txt b/LSL2/STPROC/NDW_RDS_QUERY_EVENTS.txt index dda2205..910c91d 100644 --- a/LSL2/STPROC/NDW_RDS_QUERY_EVENTS.txt +++ b/LSL2/STPROC/NDW_RDS_QUERY_EVENTS.txt @@ -44,7 +44,7 @@ $insert SUPPLEMENTS_EQUATES equ WOCust$ to 2 Declare subroutine SRP_Show_Window, Rds_Services, ErrMsg, Start_Window, Placedialog, Supplement_Services, Hold_Services -Declare subroutine Labeling_Services +Declare subroutine Labeling_Services Declare function Database_Services, Material_Services, Rds_Services, RGB, SRP_Array, MemberOf, Supplement_Services Declare function Hold_Services, Datetime, Printer_Select @@ -186,44 +186,37 @@ Event PUB_ENG_OPTIONS.CLICK() NumRows = DCount(WOMatKeys, @VM) - Begin Case - - Case SelOpt EQ 'CLEAN_INSP' - Caption = "Updating Clean & Insp specs for selected RDS cassettes..." - ServiceModules = 'CLEAN_INSP_SERVICES' - Services = 'UpdateAllCleanInsp' + ServiceModules = '' + Services = '' + Caption = '' + + For each Sel in SelOpt using @VM + If Sel EQ 'CLEAN_INSP' then + Caption<0, -1> = "Updating Clean & Insp specs for selected RDS cassettes..." + ServiceModules<0, -1> = 'CLEAN_INSP_SERVICES' + Services<0, -1> = 'UpdateAllCleanInsp' + end - Case SelOpt EQ 'QA_MET' - Caption = "Updating QA Metrology specs for selected RDS cassettes..." - ServiceModules = 'WO_MAT_QA_SERVICES' - Services = 'UpdateQAMet' + If SelOpt EQ 'QA_MET' then + Caption<0, -1> = "Updating QA Metrology specs for selected RDS cassettes..." + ServiceModules<0, -1> = 'WO_MAT_QA_SERVICES' + Services<0, -1> = 'UpdateQAMet' + end - Case SelOpt EQ 'UPDATE_RDS_LAYER' - Caption = "Updating RDS Layer specs for selected RDS cassettes..." - ServiceModules = 'RDS_LAYER_SERVICES' - Services = 'UpdateRDSLayerSpecs' + If SelOpt EQ 'UPDATE_RDS_LAYER' then + Caption<0, -1> = "Updating RDS Layer specs for selected RDS cassettes..." + ServiceModules<0, -1> = 'RDS_LAYER_SERVICES' + Services<0, -1> = 'UpdateRDSLayerSpecs' + end - Case SelOpt EQ 'CLEAN_INSP':@VM:'QA_MET' - Caption = "Updating Clean & Insp and QA Metrology specs for selected RDS cassettes..." - ServiceModules = 'CLEAN_INSP_SERVICES':@VM:'WO_MAT_QA_SERVICES' - Services = 'UpdateAllCleanInsp':@VM:'UpdateQAMet' - - Case SelOpt EQ 'QA_MET':@VM:'UPDATE_RDS_LAYER' - Caption = "Updating RDS Layer and QA Metrology specs for selected RDS cassettes..." - ServiceModules = 'WO_MAT_QA_SERVICES':@VM:'RDS_LAYER_SERVICES' - Services = 'UpdateQAMet':@VM:'UpdateRDSLayerSpecs' - - Case SelOpt EQ 'CLEAN_INSP':@VM: 'UPDATE_RDS_LAYER' - Caption = "Updating RDS Layer and Clean & Insp specs for selected RDS cassettes..." - ServiceModules = 'CLEAN_INSP_SERVICES':@VM:'RDS_LAYER_SERVICES' - Services = 'UpdateAllCleanInsp':@VM:'UpdateRDSLayerSpecs' - - Case SelOpt EQ 'CLEAN_INSP':@VM:'QA_MET':@VM: 'UPDATE_RDS_LAYER' - Caption = "Updating Clean & Insp, QA Metrology, and RDS Layer specs for selected RDS cassettes..." - ServiceModules = 'CLEAN_INSP_SERVICES':@VM:'WO_MAT_QA_SERVICES' :@VM: 'RDS_LAYER_SERVICES' - Services = 'UpdateAllCleanInsp':@VM:'UpdateQAMet' :@VM: 'UpdateRDSLayerSpecs' - - End Case + If SelOpt EQ 'UPDATE_RDS_TEST' then + Caption<0, -1> = "Updating RDS Test specs for selected RDS cassettes..." + ServiceModules<0, -1> = 'RDS_TEST_SERVICES' + Services<0, -1> = 'UpdateRDSTestSpecs' + end + Next Sel + + Swap @VM with CRLF$ in Caption If ServiceModules NE '' then ErrorMsg = '' @@ -239,7 +232,7 @@ Event PUB_ENG_OPTIONS.CLICK() Running = Msg(@Window, MsgUp, vPos, MSGINSTUPDATE$) ;* Update gas guage For each ServiceModule in ServiceModules using @VM setting sPos Service = Services<0, sPos> - If Service = 'UpdateRDSLayerSpecs' then + If ( (Service _EQC 'UpdateRDSLayerSpecs') or (Service _EQC 'UpdateRDSTestSpecs') ) then RDSKey = SelRDSList<4, vPos> Ans = Function(@ServiceModule(Service, RDSKey)) end else @@ -254,9 +247,6 @@ Event PUB_ENG_OPTIONS.CLICK() Next WOMatKey Msg(@Window,MsgUp) ;* Take gas guage down - If (ErrorMsg NE '') then - Msg(@Window, '', 'OK', '', 'Operation Aborted':@FM:ErrorMsg) - end end Def = '' diff --git a/LSL2/STPROC/OBJ_PROD_SPEC.txt b/LSL2/STPROC/OBJ_PROD_SPEC.txt index 0daddae..5410b73 100644 --- a/LSL2/STPROC/OBJ_PROD_SPEC.txt +++ b/LSL2/STPROC/OBJ_PROD_SPEC.txt @@ -2035,10 +2035,9 @@ RETURN GetQAMet: * * * * * * * - PSNo = Parms[1,@RM] - PSRec = Parms[COL2()+1,@RM] - ReactSchedFlag = Parms[COL2()+1,@RM] - AllSchedFlag = Parms[COL2()+1,@RM] + PSNo = Parms[1,@RM] + PSRec = Parms[COL2()+1,@RM] + ReactSchedFlag = Parms[COL2()+1,@RM] GOSUB StageSortKeys @@ -2056,11 +2055,12 @@ GetQAMet: FOR TestNo = 1 TO MetCnt - IF (PSStageRec NE '') THEN + IF PSStageRec NE '' THEN - Begin Case - Case AllSchedFlag - // Return all scheduled metrology + IF ReactSchedFlag = 1 THEN + + IF PSStageRec = 1 THEN + ResLineCnt += 1 Result = FIELD(PSStageKey,'*',2) Result = PSStageRec @@ -2077,53 +2077,31 @@ GetQAMet: Result = PSStageRec Result = PSStageRec ;* Possible Future Result = PSStageRec ;* 12/3/2016 JCH for Mark - Result = PSStageRec + Result = PSStageRec - Case ReactSchedFlag - // Just return reactor scheduled metrology - IF (PSStageRec EQ True$) THEN - ResLineCnt += 1 - Result = FIELD(PSStageKey,'*',2) - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec ;* Possible Future - Result = PSStageRec ;* 12/3/2016 JCH for Mark - Result = PSStageRec - END - - Case Otherwise$ - // Just return work order scheduled metrology - IF (PSStageRec NE True$) THEN - ResLineCnt += 1 - Result = FIELD(PSStageKey,'*',2) - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec - Result = PSStageRec ;* Possible Future - Result = PSStageRec ;* 12/3/2016 JCH for Mark - Result = PSStageRec - END - - End Case + END + + END ELSE + + ResLineCnt += 1 + Result = FIELD(PSStageKey,'*',2) + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec + Result = PSStageRec ;* Possible future + Result = PSStageRec ;* 12/3/2016 JCH for Mark + Result = PSStageRec + + END ;* End of check for ReactSchedFlag END NEXT TestNo NEXT N diff --git a/LSL2/STPROC/RDS_TEST_SERVICES.txt b/LSL2/STPROC/RDS_TEST_SERVICES.txt new file mode 100644 index 0000000..644e004 --- /dev/null +++ b/LSL2/STPROC/RDS_TEST_SERVICES.txt @@ -0,0 +1,204 @@ +Compile function RDS_TEST_Services(@Service, @Params) +/*********************************************************************************************************************** + + Name : Rds_Test_Services + + Description : Handler program for all RDS_TEST services. + + Notes : Application errors should be logged using the Error Services module. There are a few methodological + assumptions built into way errors are managed which are important to understand in order to properly + work with Error Services: + + - The term 'top' refers to the originating procedure of a call stack and the term 'bottom' refers to + the last routine (or the current routine) within a call stack. Within the OpenInsight Debugger + this will appear backwards since the originating procedure always appears at the bottom of the + list and the current routine appears at the top of the list. We are using this orientation because + it is common to refer to the process of calling other procedures as 'drilling down'. + + - The reason for defining the orientation of the call stack is because Error_Services allows for + multiple error conditions to be appended to an original error. In most cases this will happen when + a procedure at the bottom of the stack generates an error condition and then returns to its + calling procedure. This higher level procedure can optionally add more information relevant to + itself. This continues as the call stack 'bubbles' its way back to the top to where the + originating procedure is waiting. + + - Native OpenInsight commands that handle errors (e.g., Set_Status, Set_FSError, Set_EventStatus) + preserve their error state until explicitly cleared. This can hinder the normal execution of code + since subsequent procedures (usually SSPs) will fail if a pre-existing error condition exists. + Our philosophy is that error conditions should automatically be cleared before a new procedure + is executed to avoid this problem. However, the nature of Basic+ does not make this easy to + automate for any given stored procedure. Therefore, if a stored procedure wants to conform to our + philosophy then it should include a call into the 'Clear' service request at the top of the + program. Alternatively this can be done through a common insert (see SERVICE_SETUP for example.) + + - Service modules will use the SERVICE_SETUP insert and therefore automatically clear out any + error conditions that were set before. + + Parameters : + Service [in] -- Name of the service being requested + Param1-10 [in/out] -- Additional request parameter holders + Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure + + Metadata : + + History : (Date, Initials, Notes) + 09/26/2025 djs Original programmer. + +***********************************************************************************************************************/ +#pragma precomp SRP_PreCompiler + +$Insert SERVICE_SETUP +$insert APP_INSERTS +$Insert RDS_EQUATES +$Insert RDS_TEST_EQUATES +$Insert PROD_SPEC_EQUATES +$Insert RDS_LAYER_EQUATES +$INSERT PRS_LAYER_EQU + +Declare function Database_Services, Error_Services, obj_Prod_Spec +Declare subroutine Database_Services, Error_Services + +GoToService + +Return Response or "" + +//----------------------------------------------------------------------------- +// SERVICES +//----------------------------------------------------------------------------- + +Service UpdateRDSTestSpecs(RdsNo) + + ErrorMsg = '' + If (RDSNo NE '') then + If RowExists('RDS', RDSNo) then + RDSRec = Database_Services('ReadDataRow', 'RDS', RDSNo) + If Error_Services('NoError') then + LayerKeys = RDSRec + PSNId = RDSRec + For each LayerKey in LayerKeys using @VM setting vPos + LayerSet = Field(LayerKey, '*', 2, 1) + LayerSpecs = obj_Prod_Spec('GetLayerProp',PSNId:@RM:LayerSet:@RM:1) ;* Last parameter specifies no output conversion on return data + LayerSpecs = Field(LayerSpecs,@FM,2,99) ;* Returns with the layer set ID in the first field of each line + ErrCode = '' + If Not(Get_Status(ErrCode)) then + WaferSize = Xlate('PROD_SPEC', PSNId, 'SUB_WAFER_SIZE', 'X') + SubOrientation = Xlate('PROD_SPEC', PSNId, 'SUB_ORIENTATION', 'X') + ResUnits = LayerSpecs + ReactorType = Xlate('PROD_SPEC', PSNId, PROD_SPEC_REACTOR_TYPE$, 'X') + ThickFilmMet = Xlate('PROD_SPEC', PSNId, PROD_SPEC_THICKFILM_MET$, 'X') ;* Added 1/16/2009 JCH + + RdsTestKeys = Database_Services('ReadDataColumn', 'RDS_LAYER', LayerKey, RDS_LAYER_RDS_TEST_KEYS$) + If Error_Services('NoError') then + For each RdsTestKey in RdsTestKeys using @VM setting RdsTestPos + RdsTestRec = Database_Services('ReadDataRow', 'RDS_TEST', RdsTestKey) + If Error_Services('NoError') then + RDSTestRec = WaferSize + RDSTestRec = SubOrientation + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + + For A = 11 to 19 + RDSTestRec = LayerSpecs + Next A + + For A = 24 to 32 + RDSTestRec = LayerSpecs + Next A + + For A = 37 to 45 + RDSTestRec = LayerSpecs + Next A + + For A = 50 to 58 + RDSTestRec = LayerSpecs + Next A + + For A = 121 to 129 + RDSTestRec = LayerSpecs + Next A + + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + RDSTestRec = LayerSpecs + + RDSTestRec = ReactorType + + If ( (ReactorType EQ 'P') or (ReactorType EQ 'EPP') or (ThickFilmMet EQ True$) ) then + SpecMap = XLATE('PROD_SPEC', PSNId, PROD_SPEC_TEST_POINT_MAP$, 'X') ;* Added 4/8/2009 JCH new field in PROD_SPEC + If SpecMap NE '' then + RDSTestRec = SpecMap + end else + ;* Added ThickFilmMet check - 1/16/2009 JCH + AllTargetThicks = XLATE('PROD_SPEC', PSNId, 'THICK_TARGET_ALL', 'X') + TargetCnt = COUNT(AllTargetThicks,@VM) + (AllTargetThicks NE '') + + Begin Case + Case TargetCnt = 2 + CombinedThick = SUM(AllTargetThicks) + + Case TargetCnt = 1 OR TargetCnt = 3 + CombinedThick = AllTargetThicks[-1,'B':@VM] + + End Case + + If OCONV(CombinedThick,'MD2') > '65.0' then + RDSTestRec = 'FTIR_T' + end else + RDSTestRec = 'FTIR' + end + end + + end else + RDSTestRec = 'ASM17' ;* 17 Point linear test pattern until PROD_SPEC is updated support other types + end + Database_Services('WriteDataRow', 'RDS_TEST', RdsTestKey, RdsTestRec) + If Error_Services('HasError') then + ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage') + end + end else + ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage') + end + Next RdsTestKey + end else + ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage') + end + end else + ErrorMsg = 'Error in ':Service:' service. Error calling obj_Prod_Spec("GetLayerProp"). Error code: ':ErrCode + end + Next LayerKey + end else + ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage') + end + end else + ErrorMsg = 'Error in ':Service:' service. RDS ':RdsNo:' does not exist' + end + end else + ErrorMsg = 'Error in ':Service:' service. Null RDSNo passed into service' + end + + If (ErrorMsg NE '') then Error_Services('Add', ErrorMsg) + +End Service + diff --git a/LSL2/STPROC/WO_MAT_QA_SERVICES.txt b/LSL2/STPROC/WO_MAT_QA_SERVICES.txt index a07f6dd..97390ff 100644 --- a/LSL2/STPROC/WO_MAT_QA_SERVICES.txt +++ b/LSL2/STPROC/WO_MAT_QA_SERVICES.txt @@ -242,7 +242,7 @@ Service UpdateQAMet(WOMatKey) If Error_Services('NoError') then PSRec = Database_Services('ReadDataRow', 'PROD_SPEC', PSNo) If Error_Services('NoError') then - QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:PSRec:@RM:@RM:True$) + QAMetData = obj_Prod_Spec('GetQAMet',PSNo:@RM:PSRec) QAStages = QAMetData StageCnt = DCount(QAStages,@VM)