open-insight/LSL2/STPROC/RDS_COMM2.txt
2024-09-10 12:03:51 -07:00

645 lines
23 KiB
Plaintext

function rds_comm2(Branch)
* CREATED ON 3/19/99 by Bryce Meek - DUE TO BUFFER OVERLOAD IN RDS_COMM
declare function msg, get_property, entid, key_sort, repository, fieldcount, set_property
declare function dialog_box, send_event, obj_RDS, Supplement_Services
declare subroutine extract_si_keys, make.list, btree.extract, Supplement_Services
equ OutSpecThickLossCode$ to 'D1'
equ OutSpecResLossCode$ to 'D2'
equ FirstWaferInspection$ to 5
equ CrLf$ to char(13):char(10)
$insert quote_spec_equ
$insert prod_spec_equates
$insert rds_equates
$insert rds_layer_info_equ
$insert suppl_info_array_equ
$insert wo_master_sched_equ
$insert react_ll_serv_equ
$insert tw_info_array_equ
$insert react_hrs_equ
$INSERT REACT_RUN_EQUATES
$INSERT CLEAN_INSP_EQUATES
$insert msg_equates
$insert logical
$insert popup_equates
ReturnVar = 0
Branches = 'SEND_STAT_DATA,WAF_SIZE_SET,REACT_PROFILE,SET_SRP_PROFILE,HOLD_CHECK,HOLD_CLICK,SUPPL_CHECK,SUPPL_CLICK,SIGN_ATTEMPT,SIGN_HOLD_CHECK,NEXT_RDS,READY_TO_SHIP_CHECK,CHECK_LL,TW_INSPEC_CHECK,LOAD_UNLOAD_EXTRA_SIGN_CHECK,CHECK_WAF_ETCH,TC_HOURS_CHECK'
convert ',' to @fm in Branches
locate Branch in Branches using @fm setting Bpos then
on Bpos gosub SEND_STAT_DATA, WAF_SIZE_SET, REACT_PROFILE, SET_SRP_PROFILE, HOLD_CHECK, HOLD_CLICK, SUPPL_CHECK, SUPPL_CLICK, SIGN_ATTEMPT, SIGN_HOLD_CHECK, NEXT_RDS, READY_TO_SHIP_CHECK, CHECK_LL, TW_INSPEC_CHECK, LOAD_UNLOAD_EXTRA_SIGN_CHECK, CHECK_WAF_ETCH, TC_HOURS_CHECK
end else
Void = msg( '', 'Invalid Branch ':Bpos:' passed to rds_comm2' )
end
return ReturnVar
*===============================================================================================*
SEND_STAT_DATA:
return
*===============================================================================================*
WAF_SIZE_SET:
return
*===============================================================================================*
REACT_PROFILE:
ProfileInfo = get_property( @window:'.REACTOR_PROFILE', 'ARRAY' )
Void = dialog_box( 'RDS_RPROFILE', @window, ProfileInfo:char(245):'*CENTER' )
return
*===============================================================================================*
SET_SRP_PROFILE:
CurArray = get_property( @window:'.SRP_PROFILES', 'ARRAY' )
CCnt = fieldcount( CurArray, @vm )
Tcnt = 0
PVals = 'No SRP Profiles'
for i = 1 to CCnt
if ( CurArray<1,i> <> '' ) then
Tcnt += 1
PVals<i> = 'Profile ':i
end
next i
if PVals = 'Profile 1' then
* THERE IS ONLY ONE PROFILE SO NO NEED TO SAY IT
PVals = 'Profile'
end
Void = set_property( @window:'.PROFILE_LIST', 'LIST', Pvals )
return
*===============================================================================================*
HOLD_CHECK:
RETURN
if @window = 'RDS_PRE_EPI' then
HoldStatus = get_property( @window:'.HOLD', 'TEXT' )
end else
HoldStatus = xlate( 'RDS', get_property( @window:'.RDS_NO', 'TEXT' ), rds_hold$, 'X' )
end
if HoldStatus then
Void = set_property( @window:'.HOLD_BUTTON', 'VISIBLE', 1 )
end else
Void = set_property( @window:'.HOLD_BUTTON', 'VISIBLE', 0 )
end
return
*===============================================================================================*
HOLD_CLICK:
RETURN
if @window = 'RDS_PRE_EPI' then
Void = send_event( @window:'.HOLD_SET', 'CLICK' )
end else
Void = dialog_box( 'RDS_HOLD', @window, 'READONLY':char(245):get_property( @window:'.RDS_NO', 'TEXT' ) )
end
return
*===============================================================================================*
SUPPL_CHECK:
* SupplInfo = get_property( @window:'.SUPPL_INFO', 'ARRAY' )
SupplInfo = get_property( @window:'.RDS_NO', 'TEXT' )
SuppsWithLots = Supplement_Services('GetSupplementsForLot', 'RDS', SupplInfo, '')
If SuppsWithLots EQ False$ then
SupplFlag = False$
end else
SupplFlag = True$
end
Void = set_property( @window:'.SUPPL_BUTTON', 'VISIBLE', SupplFlag )
return
*===============================================================================================*
SUPPL_CLICK:
SuplInfo = get_property( @window:'.SUPPL_INFO', 'ARRAY' )
DataToSend = field( SuplInfo, @fm, 1, SupOpSigTime$ )
SupplInst = get_property( @window:'.SUPPL_INST', 'TEXT' )
DataToSend := char(245): SupplInst
* NOT PASSING THE LAST VALUE CAUSE IT IS JUST THE FLAG
RetData = dialog_box( 'RDS_SUPPL', @window, DataToSend )
if RetData <> 'CANCEL' then
Instructions = field( RetData, char(245), 2 )
RetData = field( RetData, char(245), 1 )
Void = set_property( @window:'.SUPPL_INFO', 'ARRAY', RetData:@fm:'1' )
Void = set_property( @window:'.SUPPL_INST', 'TEXT', Instructions )
Void = set_property( @window, 'SAVEWARN', 1 )
end
return
*===============================================================================================*
SIGN_ATTEMPT:
* THEY ARE ABOUT TO SUCCEDED ON A SIGNATURE, MAKE SURE THAT THE SUPLEMENT FORM IF APPLICABLE
* HAS BEEN SIGNED
* MAKE SURE THAT 24 HAS NOT PASSED SINCE THE LAST CLEANING
* READ THE RDS PRE CLEAN DATE AND TIME
RDSNo = get_property( @window:'.RDS_NO', 'TEXT' )
RDSRec = xlate( 'RDS', RDSNo, '', 'X' )
SigDate = RDSRec<rds_pre_epi_sig_date$>
SigTime = RDSRec<rds_pre_epi_sig_time$>
DCnt = fieldcount( SigDate, @vm )
TCnt = fieldcount( SigTime, @vm )
CurSigDate = SigDate<1,DCnt>
CurSigTime = SigTime<1,TCnt>
Today = date()
Now = time()
DateDiff = Today - CurSigDate
SecondsToAdd = 0
if DateDiff then
SecondsToAdd = 86400*DateDiff
end
Tans = ( Now + SecondsToAdd ) - CurSigTime
Tans =( Tans /3600)
if Tans > 24.00 then
MsgInfo = ''
MsgInfo<mtext$> = 'It has been more than 24 hours since the last cleaning...':CrLf$:'Please re-clean the material and record in the pre epi window'
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
end
SupplInfo = get_property( @window:'.SUPPL_INFO', 'ARRAY' )
if ( SupplInfo<SupOpSig$> = '' ) and ( SupplInfo<SupFlag$> = 1 ) then
* THEY HAVE NOT SIGNED SO FORCE IT UP
gosub SUPPL_CLICK
returnVar = 0
end else
returnVar = 1
end
return
*===============================================================================================*
SIGN_HOLD_CHECK:
HoldStatus = xlate( 'RDS', get_property( @window:'.RDS_NO', 'TEXT' ), 'HOLD', 'X' )
if HoldStatus = 1 then
MsgInfo = ''
MsgInfo<mtext$> = 'This RDS is currently on hold. No further processing is allowed.'
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
end else
ReturnVar = 1
end
return
*===============================================================================================*
NEXT_RDS:
* GET REACTOR NUMBER AND THEN READ MASTER SCHEDULER AND GET ALL WOS AND RDSs THAT HAVE NOT BEEN LOADED
* CAUSE THESE ARE VALID RDS NUMBERS
ThisRDSNo = get_property( @window:'.RDS_NO', 'TEXT' )
Reactor = get_property( @window:'.REACTOR', 'TEXT' )
WOMastSchedRec = xlate( 'CONFIG', 'WO_MAST_SCHED', '', 'X' )
ValidWOs = ''
for Day = Day1$ to Day31$
ThisDay = WOMastSchedRec<Day,Reactor>
ThisDayIconv = iconv( ThisDay, '[WO_VALID_PROGRAM_CALL]' )
WoCnt = fieldcount( ThisDayIconv, @fm )
for i = 1 to WoCnt
ThisWO = ThisDayIconv<i>
locate ThisWo in ValidWOs using @fm setting FPos else
ValidWos<-1> = ThisWo
end
next i
Next Day
open 'DICT.RDS' to DictRDSTableVar else
Void = msg( '', 'Unable to open DICT.RDS...' )
return
end
convert @fm to @vm in ValidWos
SearchStr = ''
SearchStr<-1> = 'WO':@vm:ValidWos
SearchStr<-1> = 'STATUS':@vm:'C':@vm:'E':@fm ;* ORDER RECEIVED OR PRE EPI STATUS
btree.extract( SearchStr, 'RDS', DictRDSTableVar, Keys, "S", flag )
if flag <> 0 then
Void = msg( '', 'Error while extracting RDS keys...' )
return
end
if Keys = '' then
return
end
convert @vm to @fm in Keys
Keys = key_sort( Keys, 'RDS', 'CUST_NAME':@fm:'WO':@fm:'RUN_ORDER_NUM', 1 )
locate ThisRDSNo in Keys using @fm setting FFPos else
* ALLOW THEM TO ENTER THE CURRENT RDS IN CASE NOTHING ELSE IS SCHEDULED
Keys = insert( Keys, FFPos, 0, 0, ThisRDSNo )
end
* AT THIS POINT THE USER HAS SUCCESSFULLY SIGNED THIS RDS
* NOW WE NEED TO ASK THE USER FOR THE NEXT RDS NUMBER
* USE MSG() FUNCTION FOR INPUT
AskRds:
MsgInfo = ''
MsgInfo<mtext$> = 'Enter the next RDS number, or press OK for a selection of scheduled RDSs...'
MsgInfo<mtype$> = 'RCE'
MsgInfo<micon$> = '?'
MsgInfo<mvalid$> = '(MD0)'
NextRDSNumber = ''
NextRDSNumber = msg( '', MsgInfo )
convert char(27) to '' in NextRDSNumber
if NextRDSNumber = '' then
PopId = entid( @appid<1>, 'POPUP', '', 'RDS_QUERY' )
OverRide = ''
OverRide<pselect$> = 1
OverRide<ptitle$> = 'Please choose the next RDS for reactor ':Reactor:'...'
TKeys = Keys
make.list( 0, TKeys, '', '' )
NextRDSNumber = repository( "EXECUTE", PopId, @window, OverRide )
if NextRDSNumber = '' then
goto AskRds
end
end else
locate NextRDSNumber in Keys using @fm setting FFFPos else
MsgInfo = ''
MsgInfo<mtext$> = NextRDSNumber:' is not a valid scheduled RDS...'
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
goto AskRds
end
end
* GET CURRENT RECIPE USING XLATE() ON RDS TABLE USING THE
* TEXT VALUE OF THE RDS NO. ON THIS FORM
CurrentRecipe = xlate( 'RDS', ThisRDSNo, 'RECIPE_NO', 'X' )
* GET RECIPE FOR NEXT BOX USING XLATE ON RDS TABLE PASSING THE NUMBER
* THAT THE USER ENTERED ABOVE
NextRecipe = xlate( 'RDS', NextRDSNumber, 'RECIPE_NO', 'X' )
If CurrentRecipe = NextRecipe else
MsgInfo = ''
MsgInfo<mtext$> = 'The next RDS has a different recipe.'
MsgInfo<mtype$> = 'BO'
MsgInfo<micon$> = '!'
Void = msg( '', MsgInfo )
end
return
*===============================================================================================*
READY_TO_SHIP_CHECK:
* * * * * * * This is appears dead 4/22/2015 JCH * * * * * * * * * *
ThisRDS = get_property( @window:'.RDS_NO', 'TEXT' )
ThisRDSRec = xlate( 'RDS', ThisRDS, '', 'X' )
WafersOut = obj_RDS('WafersOut',ThisRDS:@RM:ThisRDSRec) ;* JCH 10/20/2004 ThisRDSRec<rds_wafers_out$>
if xlate( 'RDS', ThisRDS, 'OPEN_NCR', 'X' ) then
MsgInfo = ''
Text = 'This RDS has open NCRs...'
MsgInfo<mtext$> = text
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
return
end
* CHECK THE AVERAGES FOR THICKNESS AND RESISTIVITY
* FIRST CHECK THICKNESS
if xlate( 'RDS', ThisRDS, 'THICK_AVG_OUT', 'X' ) then
* NOW SEE IF THERE IS AN NCR
NcrIds = ''
extract_si_keys( 'NCR', 'RDS_ID', ThisRDS, NcrIds )
Ncnt = fieldcount( NcrIds, @vm )
BreakOut = false$
NCRThick = false$
for j = 1 to Ncnt
ThisLossCode = xlate( 'NCR', NcrIds<1,j>, 'LOSS_CODE', 'X' )
if ( ThisLossCode = OutSpecThickLossCode$ ) then
BreakOut = true$
NCRThick = true$
end
until BreakOut
next j
if ( NCRThick = false$ ) then
MsgInfo = ''
Text = 'This RDS thickness average is out of spec and there is no NCR for out of spec thickness...'
MsgInfo<mtext$> = text
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
return
end
end
* NOW RESISTIVITY
if xlate( 'RDS', ThisRDS, 'RES_AVG_OUT', 'X' ) then
* NOW SEE IF THERE IS AN NCR
NcrIds = ''
extract_si_keys( 'NCR', 'RDS_ID', ThisRDS, NcrIds )
Ncnt = fieldcount( NcrIds, @vm )
BreakOut = false$
NCRRes = false$
for j = 1 to Ncnt
ThisLossCode = xlate( 'NCR', NcrIds<1,j>, 'LOSS_CODE', 'X' )
if ( ThisLossCode = OutSpecResLossCode$ ) then
BreakOut = true$
NCRRes = true$
end
until BreakOut
next j
if ( NCRRes = false$ ) then
MsgInfo = ''
Text = 'This RDS resistivity average is out of spec and there is no NCR for out of spec resistivity...'
MsgInfo<mtext$> = text
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
return
end
end
************************************************************************
* IF A PRODUCT WAFER WAS USED THEN MUST HAVE FIRST WAFER INSPECTION CODE
* AND ONE OF THE PIECES OF DATA
************************************************************************
TWProd = ThisRdsRec<rds_tw_prod$>
DataFound = 0
if TWProd > 0 then
TwProdCnt = ThisRdsRec<rds_tw_prod_cnt$>
TwProdTool = ThisRdsRec<rds_tw_prod_tool$>
TwProdThick = ThisRdsRec<rds_tw_prod_thick$>
TwProdRes = ThisRdsRec<rds_tw_prod_res$>
TwProdRHO = ThisRdsRec<rds_tw_prod_rho$>
TwProdStress = ThisRdsRec<rds_tw_prod_stress$>
TwProdTrans = ThisRdsRec<rds_tw_prod_trans$>
TwProdCon = ThisRdsRec<rds_tw_prod_con$>
TwProdCode = ThisRdsRec<rds_tw_prod_code$>
TWCnt = fieldcount( TwProdCnt, @vm )
DataFound = false$
for j = 1 to TWCnt
AnyData = TwProdThick<1,j>:TwProdRes<1,j>:TwProdRHO<1,j>:TwProdStress<1,j>:TwProdTrans<1,j>:TwProdCon<1,j>
if ( TwProdCode<1,j> = FirstWaferInspection$ ) and ( AnyData = '' ) then
MsgInfo = ''
Text = 'You have used a product for first wafer inspection, you must enter the data.'
MsgInfo<mtext$> = text
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
return
end else
if AnyData <> '' then
DataFound = 1
end
end
until DataFound
next j
end
************************************************************************
* IF THERE ARE WAFERS OUT THEN THEY MUST HAVE A TTHICK_AVG TRES_AVG
* DATA FOUND ABOVE
************************************************************************
if ( WafersOut > 0 ) and ( DataFound = '' ) then
TThickAvg = ThisRdsRec<rds_tthick_avg$>
TResAvg = ThisRdsRec<rds_tres_avg$>
if ( TThickAvg <> '' ) or ( TResAvg <> '' ) else
MsgInfo = ''
Text = 'You have wafers out so you must have Thick/Res.'
MsgInfo<mtext$> = text
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
return
end
end
ReturnVar = 1
return
*===============================================================================================*
CHECK_LL:
ReturnVar = 1
RETURN ;* Added per Pete on 1/4/2006
Reactor = get_property( @window:'.REACTOR', 'TEXT' )
ReactLLInfo = xlate( 'CONFIG', 'REACT_LL_SERV', '', 'X' )
Reactors = ReactLLInfo<LLReactor$>
AsmPlusReactors = XLATE('CONFIG','ASM_PLUS_REACTORS','','X') ;* Added 1/12/05 JCH
LOCATE Reactor IN AsmPlusReactors USING @FM SETTING Dummy THEN
ReturnVar = 1
RETURN
END
locate Reactor in Reactors using @vm setting RPos else
ReturnVar = 1 ;* WILL NOT HAPPEN CAUSE ALL REACTORS WILL BE IN THERE EXCEPT AT FIRST HELLO
return
end
LastDate = ReactLLInfo<LLLastDate$,RPos>
LastTime = REactLLInfo<LLLastTime$,RPos>
Today = date()
DateDiff = Today - LastDate
SecondsToAdd = 0
if DateDiff then
SecondsToAdd = 86400*DateDiff
end
Tans = ( time() + SecondsToAdd ) - LastTime
HrsSinceLast = ( Tans /3600) * 100
HrsSinceLast = oconv( HrsSinceLast, 'MD2' )
if HrsSinceLast > 50.00 then
MsgInfo = ''
Text = 'This reactor has not had a Leak && Lamp check for ':HrsSinceLast:' hours,':CrLf$:'Please turn the reactor over to maintenance...'
MsgInfo<mtext$> = text
MsgInfo<micon$> = '!'
Void = msg( '', MsgInfo )
ReturnVar = 1 ;* JUST WARN THE USER, DO NOT STOP
return
end
if HrsSinceLast > 60.00 then
MsgInfo = ''
Text = 'This reactor has not had a Leak && Lamp check for ':HrsSinceLast:' hours,':CrLf$:'You must turn the reactor over to maintenance...'
MsgInfo<mtext$> = text
MsgInfo<micon$> = '!'
Void = msg( '', MsgInfo )
ReturnVar = 0 ;* STOP EVERYTHING
return
end
ReturnVar = 1
return
*===============================================================================================*
TW_INSPEC_CHECK:
InfoArray = get_property( @window:'.TW_INFO', 'ARRAY' )
ICnt = fieldcount( InfoArray<1>, @vm )
PSNId = get_property( 'RDS_UNLOAD.PSN', 'TEXT' )
ThickMinAll = oconv( xlate( 'PROD_SPEC', PSNId, 'THICK_MIN_ALL', 'X' ), 'MD2' )
ThickMaxAll = oconv( xlate( 'PROD_SPEC', PSNId, 'THICK_MAX_ALL', 'X' ), 'MD2' )
ThCnt = fieldcount( ThickMinAll, @vm )
ResMinAll = oconv( xlate( 'PROD_SPEC', PSNId, 'RES_MIN_ALL', 'X' ), 'MD3' )
ResMaxAll = oconv( xlate( 'PROD_SPEC', PSNId, 'RES_MAX_ALL', 'X' ), 'MD3' )
RCnt = fieldcount( ResMinAll, @vm )
ConMinAll = oconv( xlate( 'PROD_SPEC', PSNId, 'CON_MIN_ALL', 'X' ), 'MS21' )
ConMaxAll = oconv( xlate( 'PROD_SPEC', PSNId, 'CON_MAX_ALL', 'X' ), 'MS21' )
CCnt = fieldcount( ConMinAll, @vm )
StressMin = oconv( xlate( 'PROD_SPEC', PSNId, 'STRESS_MIN', 'X' ), 'MS21' )
StressMax = oconv( xlate( 'PROD_SPEC', PSNId, 'STRESS_MAX', 'X' ), 'MS21' )
TransSpec = oconv( xlate( 'PROD_SPEC', PSNId, 'TRANS_SPEC', 'X' ), 'MD2' )
* IF WE HAVE DATA IN ANY CELL THAT IS FIRST WAFER THEN VERIFY AGAINST THE SPEC OF ONE OF THE LAYERS
MsgText = ''
for i = 1 to ICnt
ToolEntered = InfoArray<TWInfoArrayTool$,i>
CurCode = InfoArray<TWInfoArrayCode$,i>
if CurCode = 5 then
Thick = InfoArray<TWInfoArrayThick$,i>
Res = InfoArray<TWInfoArrayRes$,i>
Con = InfoArray<TWInfoArrayConc$,i>
Stress = InfoArray<TWInfoArrayStress$,i>
Trans = InfoArray<TWInfoArrayTrans$,i>
RHO = InfoArray<TWInfoArrayRHO$,i>
if Thick then
InSpec = 0
for j = 1 to ThCnt
if ( Thick >= ThickMinAll<1,j> ) and ( Thick <= ThickMaxAll<1,j> ) then
InSpec = 1
end
until InSpec
next j
if InSpec else
MsgText = 'Thickness on line ':i:' is out of spec from ':ThickMinAll<1,1>:' - ':ThickMaxAll<1,1>:CrLf$
end
end
if Res then
InSpec = 0
for j = 1 to RCnt
if ( Res >= ResMinAll<1,j> ) and ( Res <= ResMaxAll<1,j> ) then
InSpec = 1
end
until InSpec
next j
if InSpec else
MsgText := 'Resistivity on line ':i:' is out of spec from ':ResMinAll<1,1>:' - ':ResMaxAll<1,1>:CrLf$
end
end
if RHO then
RHO = oconv( RHO * 1000, 'MD3' )
InSpec = 0
for j = 1 to RCnt
if ( RHO >= ResMinAll<1,j> ) and ( RHO <= ResMaxAll<1,j> ) then
InSpec = 1
end
until InSpec
next j
if InSpec else
MsgText := 'SheetRHO on line ':i:' is out of spec from ':ResMinAll<1,1>:' - ':ResMaxAll<1,1>:CrLf$
end
end
if Con then
InSpec = 0
for j = 1 to CCnt
if ( Con >= ConMinAll<1,j> ) and ( Con <= ConMaxAll<1,j> ) then
InSpec = 1
end
until InSpec
next j
if InSpec else
MsgText := 'Concentration on line ':i:' is out of spec from ':ConMinAll<1,1>:' - ':ConMaxAll<1,1>:CrLf$
end
end
if Stress then
if ( Stress >= StressMin ) and ( Stress <= StressMax ) else
MsgText := 'Stress on line ':i:' is out of spec from ':StressMin:' - ':StressMax:CrLf$
end
end
if Trans then
if ( Trans < TransSpec ) else
MsgText := 'Transition on line ':i:' is out of spec < ':TransSpec:CrLf$
end
end
end
next i
if MsgText <> '' then
MsgInfo = ''
MsgInfo<mtext$> = MsgText
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 1
end
return
*===========================================================================================================*
LOAD_UNLOAD_EXTRA_SIGN_CHECK:
/*
RDSNo = get_property( 'RDS.RDS_NO', 'TEXT' )
RDSRec = xlate( 'RDS', RDSNo, '', 'X' )
PreCINo = XLATE('REACT_RUN',RDSNo,REACT_RUN_PRE_CI_KEY$,'X')
LastCleanSigDTM = XLATE('CLEAN_INSP',PreCINo,CLEAN_INSP_CLEAN_VER_SIG_DTM$,'X')[-1,'B':@VM]
IF LastCleanSigDTM NE '' THEN
CurrDTM = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT')
Delta = CurrDTM - LastCleanSigDTM
IF Delta > 24.00 THEN
MsgInfo = ''
MsgInfo<mtext$> = 'It has been more than 24 hours since the last cleaning...':CrLf$:'Please re-clean the material and record in the pre epi window'
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
End
END Else
ReturnVar = 1
End
*/
ReturnVar = 1
return
*===========================================================================================================*
CHECK_WAF_ETCH:
* CHECK TO SEE IF IT IS BURIED LAYER OTHERWISE DONT CHECK THE WAFER ETCH
RDSID = get_property( @window:'.RDS_NO', 'TEXT' )
if not( xlate( 'RDS', RDSID, 'BURIED_LAYER', 'X' ) ) then
* IT IS NOT BURIED LAYER SO DO NOT CHECK
ReturnVar = 1
return
end
open 'DICT.SPC_WAFER_ETCH' to DictSPCWaferEtchTable else
Void = msg( '', 'Unable to open DICT.SPC_WAFER_ETCH' )
ReturnVar = 0
return
end
Reactor = get_property( @window:'.REACTOR', 'TEXT' )
*DateRange = oconv( date()-7, 'D4/' ):'...':oconv( date(), 'D4/' ) ;* 10/23/2003 JCH
DateRange = oconv( date()-14, 'D4/' ):'...':oconv( date(), 'D4/' ) ;* Changed to 14 days
SearchStr = ''
SearchStr<-1> = 'REACTOR':@vm:Reactor
SearchStr<-1> = 'DATE_TESTED':@vm:DateRange
SearchStr := @fm
btree.extract( SearchStr, 'SPC_WAFER_ETCH', DictSPCWaferEtchTable, Keys, '', Flag )
if Flag <> 0 then
Void = msg( '', 'Error while extracting SPC_WAFER_ETCH records...' )
ReturnVar = 0
return
end
if Keys then
ReturnVar = 1
end else
MsgInfo = ''
MsgInfo<micon$> = 'H'
MsgInfo<mtext$> = 'There has not been a wafer etch test within the last 14 days for reactor ':Reactor:'.':CrLf$:'Engineering must perform a wafer etch test prior to starting the box.'
Void = msg( '', MsgInfo )
* DO NOT STOP THE OPERATOR
ReturnVar = 1
end
return
*===========================================================================================================*
TC_HOURS_CHECK:
RDSNo = get_property( 'RDS.RDS_NO', 'TEXT' )
RDSRec = xlate( 'RDS', RDSNo, '', 'X' )
Reactor = RDSREc<rds_reactor$>
CurReactHrs = xlate( 'CONFIG', 'REACT_HRS_EQU', '', 'X' )
TCHours = CurReactHrs
if TCHours > 400 then
MsgInfo = ''
MsgInfo<mtext$> = 'The TC hours are greater than 400 hours.':CrLf$:'Please have maintenance change out the TCs before commiting the next box'
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
ReturnVar = 0
end else
ReturnVar = 1
end
return