added LSL2 stored procedures
This commit is contained in:
640
LSL2/STPROC/OBJ_RDS_LAYER.txt
Normal file
640
LSL2/STPROC/OBJ_RDS_LAYER.txt
Normal file
@ -0,0 +1,640 @@
|
||||
COMPILE FUNCTION obj_RDS_Layer(Method,Parms)
|
||||
/*
|
||||
Methods for RDS Layer (RDS_LAYER) table
|
||||
|
||||
03/01/2006 JCH - Initial Coding
|
||||
|
||||
Properties:
|
||||
|
||||
Methods:
|
||||
|
||||
Create() ;* Creates New Records
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
|
||||
DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, ErrMsg, Logging_Services, Environment_Services
|
||||
|
||||
DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, obj_WO_Log, NextKey, Logging_Services
|
||||
DECLARE FUNCTION obj_Prod_Spec, obj_RDS_Test, obj_Recipe, Tool_Parms_Services, Database_Services, Environment_Services
|
||||
|
||||
|
||||
|
||||
$INSERT MSG_EQUATES
|
||||
$INSERT RDS_EQU
|
||||
$INSERT RDS_LAYER_EQUATES
|
||||
$INSERT RDS_TEST_EQUATES
|
||||
$INSERT PRS_LAYER_EQU
|
||||
$INSERT PROD_SPEC_EQUATES
|
||||
$INSERT QUOTE_SPEC_EQU
|
||||
$INSERT RECIPE_EQU
|
||||
$INSERT RECIPE_PARMS_EQU
|
||||
$INSERT DICT_EQUATES
|
||||
$INSERT TOOL_PARMS_EQUATES
|
||||
|
||||
|
||||
EQU CRLF$ TO \0D0A\
|
||||
|
||||
ErrTitle = 'Error in Stored Procedure "obj_RDS_Layer"'
|
||||
ErrorMsg = ''
|
||||
|
||||
IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
|
||||
IF NOT(ASSIGNED(Parms)) THEN Parms = ''
|
||||
|
||||
IF ErrorMsg NE '' THEN
|
||||
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
|
||||
RETURN ''
|
||||
END
|
||||
|
||||
Result = ''
|
||||
|
||||
BEGIN CASE
|
||||
CASE Method = 'Create' ; GOSUB Create
|
||||
CASE Method = 'Delete' ; GOSUB Delete
|
||||
CASE Method = 'OutOfSpec' ; GOSUB OutOfSpec
|
||||
CASE Method = 'Complete' ; GOSUB Complete
|
||||
CASE Method = 'UpdateLimits' ; GOSUB UpdateLimits
|
||||
CASE 1
|
||||
ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.'
|
||||
|
||||
END CASE
|
||||
|
||||
IF ErrorMsg NE '' THEN
|
||||
Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
|
||||
RETURN ''
|
||||
END
|
||||
|
||||
RETURN Result
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Create:
|
||||
* * * * * * *
|
||||
|
||||
RDSNo = Parms[1,@RM]
|
||||
LayerSet = Parms[COL2()+1,@RM]
|
||||
PSNId = Parms[COL2()+1,@RM]
|
||||
NoCombinedLayerSetFlag = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSNo = '' THEN ErrorMsg = 'Null parameter "RDSNo" passed to routine (':Method:').'
|
||||
IF LayerSet = '' THEN ErrorMsg = 'Null parameter "LayerSet" passed to routine (':Method:').'
|
||||
IF PSNId = '' THEN ErrorMsg = 'Null parameter "PSNId" passed to routine (':Method:').'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
PSNRec = XLATE('PROD_SPEC',PSNId,'','X')
|
||||
|
||||
IF PSNRec = '' THEN
|
||||
ErrorMsg = 'Invalid PSNId ':QUOTE(PSNId):' passed to routine (':Method:').'
|
||||
RETURN
|
||||
END
|
||||
|
||||
BEGIN CASE
|
||||
CASE LayerSet = 'L1' ; LayerNo = 1 ;* This is needed to deal with the incorrect data layouts in the old system
|
||||
CASE LayerSet = 'L2' ; LayerNo = 2
|
||||
CASE LayerSet = '2' ; LayerNo = 3
|
||||
CASE LayerSet = 'L3' ; LayerNo = 4
|
||||
CASE LayerSet = '3' ; LayerNo = 5
|
||||
CASE LayerSet = 'L4' ; LayerNo = 6
|
||||
CASE LayerSet = '4' ; LayerNo = 7
|
||||
END CASE
|
||||
|
||||
IF NoCombinedLayerSetFlag THEN LayerNo = LayerSet
|
||||
|
||||
EpiLayers = PSNRec<PROD_SPEC_SPEC_EPI$>
|
||||
|
||||
CONVERT CHAR(248) TO @RM IN EpiLayers
|
||||
CONVERT @VM TO @FM IN EpiLayers
|
||||
CONVERT @SVM TO @VM IN EpiLayers
|
||||
CONVERT '~' TO @VM IN EpiLayers
|
||||
|
||||
FirstLayer = FIELD(EpiLayers,@RM,1,1)
|
||||
RecipeNo = FirstLayer<QSEpiRecipe$>
|
||||
|
||||
EpiLayer = FIELD(EpiLayers,@RM,LayerNo,1)
|
||||
|
||||
RDSLayerRec = ''
|
||||
|
||||
*RDSLayerRec<RDS_LAYER_DEP_TIME_RATIO$> = PSNRec<PROD_SPEC_DEP_TIME_RATIO$> ;* Added 4/19/2010 JCH for HTR IGBT runs
|
||||
|
||||
IF INDEX(LayerSet,'L',1) OR NoCombinedLayerSetFlag THEN
|
||||
|
||||
IF NoCombinedLayerSetFlag THEN
|
||||
LayerLimits = obj_Recipe('GetLimits',RecipeNo:@RM:PSNId:@RM:'L':LayerNo)
|
||||
END ELSE
|
||||
LayerLimits = obj_Recipe('GetLimits',RecipeNo:@RM:PSNId:@RM:LayerSet)
|
||||
END
|
||||
|
||||
RDSLayerRec<RDS_LAYER_RECIPE_NO$> = RecipeNo
|
||||
RDSLayerRec<RDS_LAYER_DOPANT$> = LayerLimits<RP_DOPANT$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_EPI_DILUENT$> = LayerLimits<RP_EPI_DILUENT$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> = LayerLimits<RP_DEPOSIT_TIME_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> = LayerLimits<RP_DEPOSIT_TIME_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_DILUENT_MIN$> = LayerLimits<RP_DILUENT_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_DILUENT_MAX$> = LayerLimits<RP_DILUENT_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> = LayerLimits<RP_DOPANT_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> = LayerLimits<RP_DOPANT_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> = LayerLimits<RP_HCL_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> = LayerLimits<RP_HCL_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> = LayerLimits<RP_BAKE_TIME_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> = LayerLimits<RP_BAKE_TIME_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> = LayerLimits<RP_H2_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> = LayerLimits<RP_H2_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> = LayerLimits<RP_TCS_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> = LayerLimits<RP_TCS_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> = LayerLimits<RP_DCS_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> = LayerLimits<RP_DCS_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_AUX1_MIN$> = LayerLimits<RP_AUX1_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_AUX1_MAX$> = LayerLimits<RP_AUX1_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_AUX2_MIN$> = LayerLimits<RP_AUX2_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_AUX2_MAX$> = LayerLimits<RP_AUX2_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> = LayerLimits<RP_FOFFSET_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> = LayerLimits<RP_FOFFSET_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> = LayerLimits<RP_SOFFSET_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> = LayerLimits<RP_SOFFSET_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> = LayerLimits<RP_ROFFSET_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> = LayerLimits<RP_ROFFSET_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> = LayerLimits<RP_SUSC_ETCH_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> = LayerLimits<RP_SUSC_ETCH_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_ETCH1_MIN$> = LayerLimits<RP_ETCH1_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_ETCH1_MAX$> = LayerLimits<RP_ETCH1_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_ETCH2_MIN$> = LayerLimits<RP_ETCH2_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_ETCH2_MAX$> = LayerLimits<RP_ETCH2_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_ETCH3_MIN$> = LayerLimits<RP_ETCH3_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_ETCH3_MAX$> = LayerLimits<RP_ETCH3_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> = LayerLimits<RP_UL_TEMP_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> = LayerLimits<RP_UL_TEMP_MAX$>
|
||||
|
||||
END
|
||||
|
||||
obj_Tables('WriteRec','RDS_LAYER':@RM:RDSNo:'*':LayerSet:@RM:@RM:RDSLayerRec)
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Delete:
|
||||
* * * * * * *
|
||||
|
||||
LayerKeys = Parms[1,@RM]
|
||||
|
||||
IF LayerKeys = '' THEN RETURN
|
||||
|
||||
CONVERT @VM:@SVM TO @FM:@FM IN LayerKeys
|
||||
|
||||
OPEN 'RDS_LAYER' TO RDSLayerFile THEN
|
||||
KeyCnt = COUNT(LayerKeys,@FM) + (LayerKeys NE '')
|
||||
FOR I = 1 TO KeyCnt
|
||||
DELETE RDSLayerFile,LayerKeys<I> ELSE NULL
|
||||
NEXT I
|
||||
END
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
OutOfSpec:
|
||||
* * * * * * *
|
||||
|
||||
RDSLayerKey = Parms[1,@RM]
|
||||
RDSLayerRec = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSLayerKey = '' THEN ErrorMsg = 'Null parameter "RDSLayerKey" passed to routine (':Method:').'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
|
||||
IF RDSLayerRec = '' THEN
|
||||
RDSLayerRec = XLATE('RDS_LAYER',RDSLayerKey,'','X')
|
||||
IF RDSLayerRec = '' THEN RETURN
|
||||
END
|
||||
|
||||
EpiTime = RDSLayerRec<RDS_LAYER_EPI_TIME$>
|
||||
Diluent = RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$>
|
||||
DopantFlow = RDSLayerRec<RDS_LAYER_DOPANT_FLOW$>
|
||||
HCLFlow = RDSLayerRec<RDS_LAYER_HCL_FLOW$>
|
||||
BakeTime = RDSLayerRec<RDS_LAYER_BAKE_TIME$>
|
||||
EpiH2Flow = RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$>
|
||||
TCSFlow = RDSLayerRec<RDS_LAYER_TCS_FLOW$>
|
||||
DCSFLow = RDSLayerRec<RDS_LAYER_DCS_FLOW$>
|
||||
Aux1 = RDSLayerRec<RDS_LAYER_AUX1$>
|
||||
Aux2 = RDSLayerRec<RDS_LAYER_AUX2$>
|
||||
FOffset = RDSLayerRec<RDS_LAYER_F_OFFSET$>
|
||||
SOffset = RDSLayerRec<RDS_LAYER_S_OFFSET$>
|
||||
ROffset = RDSLayerRec<RDS_LAYER_R_OFFSET$>
|
||||
SuscEtch = RDSLayerRec<RDS_LAYER_SUSC_ETCH$>
|
||||
Etch1 = RDSLayerRec<RDS_LAYER_ETCH1$>
|
||||
Etch2 = RDSLayerRec<RDS_LAYER_ETCH2$>
|
||||
Etch3 = RDSLayerRec<RDS_LAYER_ETCH3$>
|
||||
ULTemp = RDSLayerRec<RDS_LAYER_UL_TEMP$>
|
||||
|
||||
|
||||
IF EpiTime NE '' THEN
|
||||
IF EpiTime < RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> OR EpiTime > RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF Diluent NE '' THEN
|
||||
IF Diluent < RDSLayerRec<RDS_LAYER_DILUENT_MIN$> OR Diluent > RDSLayerRec<RDS_LAYER_DILUENT_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF DopantFlow NE '' THEN
|
||||
IF DopantFlow < RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> OR DopantFlow > RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF HCLFlow NE '' THEN
|
||||
IF HCLFlow < RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> OR HCLFlow > RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF BakeTime NE '' THEN
|
||||
IF BakeTime < RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> OR BakeTime > RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF EpiH2Flow NE '' THEN
|
||||
IF EpiH2Flow < RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> OR EpiH2Flow > RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF TCSFlow NE '' THEN
|
||||
IF TCSFlow < RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> OR TCSFlow > RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF DCSFlow NE '' THEN
|
||||
IF DCSFlow < RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> OR DCSFlow > RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF Aux1 NE '' THEN
|
||||
IF Aux1 < RDSLayerRec<RDS_LAYER_AUX1_MIN$> OR Aux1 > RDSLayerRec<RDS_LAYER_AUX1_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF Aux2 NE '' THEN
|
||||
IF Aux2 < RDSLayerRec<RDS_LAYER_AUX2_MIN$> OR Aux2 > RDSLayerRec<RDS_LAYER_AUX2_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF FOffset NE '' THEN
|
||||
IF FOffset < RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> OR FOffset > RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF SOffset NE '' THEN
|
||||
IF SOffset < RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> OR SOffset > RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF ROffset NE '' THEN
|
||||
IF ROffset < RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> OR ROffset > RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF SuscEtch NE '' THEN
|
||||
IF SuscEtch <RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> OR SuscEtch > RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF Etch1 NE '' THEN
|
||||
IF Etch1 < RDSLayerRec<RDS_LAYER_ETCH1_MIN$> OR Etch1 > RDSLayerRec<RDS_LAYER_ETCH1_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF Etch2 NE '' THEN
|
||||
IF Etch2 < RDSLayerRec<RDS_LAYER_ETCH2_MIN$> OR Etch2 > RDSLayerRec<RDS_LAYER_ETCH2_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF Etch3 NE '' THEN
|
||||
IF Etch3 < RDSLayerRec<RDS_LAYER_ETCH3_MIN$> OR Etch3 > RDSLayerRec<RDS_LAYER_ETCH3_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
IF ULTemp NE '' THEN
|
||||
IF ULTemp < RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> OR ULTemp > RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> THEN
|
||||
Result = 1
|
||||
RETURN
|
||||
END
|
||||
END
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
Complete:
|
||||
* * * * * * *
|
||||
|
||||
RDSLayerKey = Parms[1,@RM]
|
||||
RDSLayerRec = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSLayerKey = '' THEN ErrorMsg = 'Null parameter "RDSLayerKey" passed to routine (':Method:').'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
IF RDSLayerRec = '' THEN
|
||||
RDSLayerRec = XLATE('RDS_LAYER',RDSLayerKey,'','X')
|
||||
IF RDSLayerRec = '' THEN RETURN
|
||||
END
|
||||
|
||||
EpiTime = RDSLayerRec<RDS_LAYER_EPI_TIME$>
|
||||
Diluent = RDSLayerRec<RDS_LAYER_DILUENT_ADJ_PARAM$>
|
||||
DopantFlow = RDSLayerRec<RDS_LAYER_DOPANT_FLOW$>
|
||||
HCLFlow = RDSLayerRec<RDS_LAYER_HCL_FLOW$>
|
||||
BakeTime = RDSLayerRec<RDS_LAYER_BAKE_TIME$>
|
||||
EpiH2Flow = RDSLayerRec<RDS_LAYER_EPI_H2_FLOW$>
|
||||
TCSFlow = RDSLayerRec<RDS_LAYER_TCS_FLOW$>
|
||||
DCSFLow = RDSLayerRec<RDS_LAYER_DCS_FLOW$>
|
||||
Aux1 = RDSLayerRec<RDS_LAYER_AUX1$>
|
||||
Aux2 = RDSLayerRec<RDS_LAYER_AUX2$>
|
||||
FOffset = RDSLayerRec<RDS_LAYER_F_OFFSET$>
|
||||
SOffset = RDSLayerRec<RDS_LAYER_S_OFFSET$>
|
||||
ROffset = RDSLayerRec<RDS_LAYER_R_OFFSET$>
|
||||
Etch1 = RDSLayerRec<RDS_LAYER_ETCH1$>
|
||||
Etch2 = RDSLayerRec<RDS_LAYER_ETCH2$>
|
||||
Etch3 = RDSLayerRec<RDS_LAYER_ETCH3$>
|
||||
SuscEtch = RDSLayerRec<RDS_LAYER_SUSC_ETCH$>
|
||||
ULTemp = RDSLayerRec<RDS_LAYER_UL_TEMP$>
|
||||
|
||||
Result = 1
|
||||
|
||||
IF EpiTime = '' AND (RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF Diluent = '' AND (RDSLayerRec<RDS_LAYER_DILUENT_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_DILUENT_MAX$> NE '') THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF DopantFlow = '' AND ( RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> NE '') THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF HCLFlow = '' AND ( RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> NE '') THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF BakeTime = '' AND ( RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> NE '') THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF EpiH2Flow = '' AND ( RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF TCSFlow = '' AND ( RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF DCSFlow = '' AND ( RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF Aux1 = '' AND ( RDSLayerRec<RDS_LAYER_AUX1_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_AUX1_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF Aux2 = '' AND ( RDSLayerRec<RDS_LAYER_AUX2_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_AUX2_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF FOffset = '' AND ( RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF SOffset = '' AND ( RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF ROffset = '' AND ( RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF SuscEtch = '' AND ( RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF Etch1 = '' AND ( RDSLayerRec<RDS_LAYER_ETCH1_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_ETCH1_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF Etch2 = '' AND ( RDSLayerRec<RDS_LAYER_ETCH2_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_ETCH2_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF Etch3 = '' AND ( RDSLayerRec<RDS_LAYER_ETCH3_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_ETCH3_MAX$> NE '' ) THEN
|
||||
Result = 0
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF ULTemp = '' AND (RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> NE '' OR RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> NE '') then
|
||||
Result = 0
|
||||
RETURN
|
||||
end
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
* * * * * * *
|
||||
UpdateLimits:
|
||||
* * * * * * *
|
||||
|
||||
RDSNo = Parms[1,@RM]
|
||||
LayerSet = Parms[COL2()+1,@RM]
|
||||
RecipeNo = Parms[COL2()+1,@RM]
|
||||
|
||||
IF RDSNo = '' THEN ErrorMsg = 'Null parameter "RDSNo" passed to routine (':Method:').'
|
||||
IF LayerSet = '' THEN ErrorMsg = 'Null parameter "LayerSet" passed to routine (':Method:').'
|
||||
|
||||
IF ErrorMsg NE '' THEN RETURN
|
||||
|
||||
|
||||
RLKey = RDSNo:'*':LayerSet
|
||||
|
||||
Set_Status(0)
|
||||
RLParms = 'RDS_LAYER':@RM:RLKey
|
||||
RDSLayerRec = obj_Tables('ReadOnlyRec',RLParms)
|
||||
|
||||
IF Get_Status(errCode) THEN
|
||||
ErrorMsg = 'Unable to read RDS_LAYER record ':QUOTE(RLKey):' for Limits Update.'
|
||||
RETURN
|
||||
END
|
||||
|
||||
IF RDSLayerRec<RDS_LAYER_RECIPE_NO$> = '' AND RecipeNo NE '' THEN
|
||||
RDSLayerRec<RDS_LAYER_RECIPE_NO$> = RecipeNo ;* Added 8/24/2012 JCH
|
||||
END
|
||||
|
||||
|
||||
RecipeNo = RDSLayerRec<RDS_LAYER_RECIPE_NO$>
|
||||
WOStepKey = XLATE('RDS',RDSNo,RDS_WO_STEP_KEY$,'X')
|
||||
PSNId = XLATE('WO_STEP',WOStepKey,1,'X')
|
||||
|
||||
IF INDEX(LayerSet,'L',1) THEN
|
||||
LayerLimits = obj_Recipe('GetLimits',RecipeNo:@RM:PSNId:@RM:LayerSet)
|
||||
|
||||
RDSLayerRec<RDS_LAYER_RECIPE_NO$> = RecipeNo
|
||||
RDSLayerRec<RDS_LAYER_DOPANT$> = LayerLimits<RP_DOPANT$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_EPI_DILUENT$> = LayerLimits<RP_EPI_DILUENT$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_EPI_TIME_MIN$> = LayerLimits<RP_DEPOSIT_TIME_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_EPI_TIME_MAX$> = LayerLimits<RP_DEPOSIT_TIME_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_DILUENT_MIN$> = LayerLimits<RP_DILUENT_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_DILUENT_MAX$> = LayerLimits<RP_DILUENT_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MIN$> = LayerLimits<RP_DOPANT_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_DOPANT_FLOW_MAX$> = LayerLimits<RP_DOPANT_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_HCL_FLOW_MIN$> = LayerLimits<RP_HCL_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_HCL_FLOW_MAX$> = LayerLimits<RP_HCL_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_BAKE_TIME_MIN$> = LayerLimits<RP_BAKE_TIME_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_BAKE_TIME_MAX$> = LayerLimits<RP_BAKE_TIME_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MIN$> = LayerLimits<RP_H2_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_EPI_H2_FLOW_MAX$> = LayerLimits<RP_H2_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_TCS_FLOW_MIN$> = LayerLimits<RP_TCS_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_TCS_FLOW_MAX$> = LayerLimits<RP_TCS_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_DCS_FLOW_MIN$> = LayerLimits<RP_DCS_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_DCS_FLOW_MAX$> = LayerLimits<RP_DCS_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_AUX1_MIN$> = LayerLimits<RP_AUX1_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_AUX1_MAX$> = LayerLimits<RP_AUX1_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_AUX2_MIN$> = LayerLimits<RP_AUX2_FLOW_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_AUX2_MAX$> = LayerLimits<RP_AUX2_FLOW_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_F_OFFSET_MIN$> = LayerLimits<RP_FOFFSET_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_F_OFFSET_MAX$> = LayerLimits<RP_FOFFSET_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_S_OFFSET_MIN$> = LayerLimits<RP_SOFFSET_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_S_OFFSET_MAX$> = LayerLimits<RP_SOFFSET_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_R_OFFSET_MIN$> = LayerLimits<RP_ROFFSET_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_R_OFFSET_MAX$> = LayerLimits<RP_ROFFSET_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MIN$> = LayerLimits<RP_SUSC_ETCH_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_SUSC_ETCH_MAX$> = LayerLimits<RP_SUSC_ETCH_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_ETCH1_MIN$> = LayerLimits<RP_ETCH1_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_ETCH1_MAX$> = LayerLimits<RP_ETCH1_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_ETCH2_MIN$> = LayerLimits<RP_ETCH2_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_ETCH2_MAX$> = LayerLimits<RP_ETCH2_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_ETCH3_MIN$> = LayerLimits<RP_ETCH3_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_ETCH3_MAX$> = LayerLimits<RP_ETCH3_MAX$>
|
||||
|
||||
RDSLayerRec<RDS_LAYER_UL_TEMP_MIN$> = LayerLimits<RP_UL_TEMP_MIN$>
|
||||
RDSLayerRec<RDS_LAYER_UL_TEMP_MAX$> = LayerLimits<RP_UL_TEMP_MAX$>
|
||||
|
||||
END
|
||||
|
||||
RLParms = FieldStore(RLParms, @RM, 4, 1, RDSLayerRec)
|
||||
obj_Tables('WriteOnlyRec',RLParms)
|
||||
|
||||
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user