1060 lines
34 KiB
Plaintext
1060 lines
34 KiB
Plaintext
COMPILE SUBROUTINE Print_Control_Plan_New( PSNo, WONo )
|
||
|
||
|
||
DECLARE SUBROUTINE ErrMsg
|
||
DECLARE FUNCTION Set_Printer, Get_printer, Msg,obj_Install,Printer_Select, obj_Prod_Spec
|
||
|
||
$INSERT OIPRINT_EQUATES
|
||
$INSERT PROD_SPEC_EQU
|
||
$INSERT QUOTE_SPEC_EQU
|
||
$INSERT WO_LOG_EQU
|
||
$INSERT ORDER_DET_EQU
|
||
$INSERT COMPANY_EQU
|
||
$INSERT RECIPE_EQU
|
||
$INSERT RDS_LAYER_EQUATES
|
||
$INSERT RDS_TEST_EQUATES
|
||
$INSERT PRS_LAYER_EQU
|
||
$INSERT APPCOLORS
|
||
|
||
|
||
|
||
EQU PI$LEFT TO 1
|
||
EQU PI$TOP TO 2
|
||
EQU PI$RIGHT TO 3
|
||
EQU PI$BOTTOM TO 4
|
||
EQU PI$WIDTH TO 5
|
||
EQU PI$HEIGHT TO 6
|
||
EQU PI$SIZE TO 7
|
||
|
||
|
||
EQU FONT_NAME$ TO 1
|
||
EQU FONT_SIZE$ TO 2
|
||
EQU FONT_JUST$ TO 3
|
||
EQU FONT_BOLD$ TO 4
|
||
EQU FONT_ITALIC$ TO 5
|
||
EQU FONT_UNDERLINE$ TO 6
|
||
|
||
EQU STEP_STEP$ TO 1
|
||
EQU STEP_PROCESS_NAME$ TO 2
|
||
EQU STEP_MACHINE$ TO 3
|
||
EQU STEP_PSN$ TO 4
|
||
EQU STEP_PRODUCT$ TO 5
|
||
EQU STEP_PROCESS$ TO 6
|
||
EQU STEP_SPEC_TOL$ TO 7
|
||
EQU STEP_EVAL_MEAS$ TO 8
|
||
EQU STEP_SIZE$ TO 9
|
||
EQU STEP_FREQ$ TO 10
|
||
EQU STEP_CTRL_METHOD$ TO 11
|
||
EQU STEP_REACT_PLAN$ TO 12
|
||
|
||
IF NOT(ASSIGNED(PSNo)) THEN RETURN
|
||
IF NOT(ASSIGNED(WONo)) THEN WONo = ''
|
||
|
||
|
||
* * * PRINT SETUP * * *
|
||
|
||
|
||
FileName = 'Print Control Plan'
|
||
Title = 'Print Control Plan'
|
||
|
||
PageInfo = '' ; * Default is .5 inch margins and 8.5 x 11 paper
|
||
PageInfo<PI$LEFT> = 0.5
|
||
PageInfo<PI$TOP> = 1.5
|
||
PageInfo<PI$RIGHT> = 0.5
|
||
PageInfo<PI$BOTTOM> = 0.5
|
||
PageInfo<PI$SIZE> = LETTER
|
||
|
||
PageSetup = 1 ;* 1 = Landscape mode
|
||
|
||
PrintSetup = ''
|
||
PrintSetup<1,1> = '2' ;* Preview Normal
|
||
PrintSetup<1,2> = '5' ;* Show Print and PDF, hide Print Setup
|
||
PrintSetup<1,3> = '0' ;* Show the printing window
|
||
PDFParms = 'Printing PDF Document':@FM: '' :@FM:'':@FM: ''
|
||
|
||
stat = Set_Printer( 'INIT', PDFParms, 'Run Data Sheet',PageInfo,PageSetup,PrintSetup)
|
||
|
||
Margins = Get_Printer('MARGIN')
|
||
LMargin = Margins<1>
|
||
TMargin = Margins<2>
|
||
RMargin = Margins<3>
|
||
BMargin = Margins<4>
|
||
|
||
PageSize = Get_Printer('PAGESIZE')
|
||
PageWidth = PageSize<1>
|
||
PageHeight = PageSize<2>
|
||
|
||
MaxPrintWidth = PageWidth - LMargin - RMargin
|
||
MaxPrintHeight = PageHeight - TMargin - BMargin
|
||
|
||
font = 'Arial' ;* Font basics
|
||
font<2> = 10
|
||
font<4> = 0
|
||
|
||
stat = Set_Printer('FONTHEADFOOT', font)
|
||
|
||
stat = Set_Printer('LINESTYLE', PS_SOLID:@FM:2)
|
||
stat = Set_Printer('LINE', -0.1:@FM:-1.2:@FM:10.0:@FM:-1.2, 1)
|
||
stat = Set_Printer('LINE', -0.1:@FM:-0.1:@FM:10.0:@FM:-0.1, 1)
|
||
|
||
location = -0.15:@FM:-1.150:@FM:1.57:@FM:1
|
||
stat = Set_Printer('BMP',obj_Install('Get_Prop','ColorBMP'),location, 0,1)
|
||
|
||
RSideGraphicX = (1.57 - .15)
|
||
RSideTextX = (MaxPrintWidth - 1.75)
|
||
|
||
HeaderMidX = ((RSideTextX - RSideGraphicX)/2) + RSideGraphicX
|
||
|
||
* * * * Added 10/8/2015 JCH - Updated 'CONFIG','COMPANY' * * * *
|
||
|
||
InstDat = obj_Install('Get_Prop','Company':@FM:'Division')
|
||
Company = InstDat<1>
|
||
Division = InstDat<2>
|
||
|
||
font = 'Arial'
|
||
font<2> = '12' ;* Big type
|
||
font<4> = 1 ;* Bold on
|
||
font<5> = 0 ;* Italics
|
||
|
||
stat = Set_Printer('TEXTXY',Company,RSideTextX:@FM:-1.15,font,1)
|
||
stat = Set_Printer('TEXTXY',Division,RSideTextX:@FM:-0.970,font,1)
|
||
|
||
font<2> = 10 ;* 10 point font
|
||
font<4> = 0 ;* Bold off
|
||
font<5> = 0 ;* Italics Off
|
||
|
||
stat = Set_Printer('TEXTXY',obj_Install('Get_Prop','Address'), RSideTextX:@fm:-0.775, font,1)
|
||
stat = Set_Printer('TEXTXY',obj_Install('Get_Prop','CSZC'), RSideTextX:@fm:-0.625, font,1)
|
||
stat = Set_Printer('TEXTXY','Tel: ':obj_Install('Get_Prop','Phone'), RSideTextX:@fm:-0.475, font, 1)
|
||
stat = Set_Printer('TEXTXY','FAX: ':obj_Install('Get_Prop','FAX'), RSideTextX:@fm:-0.325, font, 1)
|
||
|
||
* * * * End of changes 10/8/2015 JCH * * * *
|
||
|
||
|
||
font = 'Arial'
|
||
font<2> = '18' ;* Big type
|
||
font<4> = 1 ;* Bold on
|
||
font<5> = 1 ;* Italics
|
||
|
||
stat = Set_Printer('FONT',font)
|
||
|
||
stat = Set_Printer("CALCTEXT", 'Control Plan')
|
||
titleSize = Get_Printer("CALCTEXT")
|
||
titleWidth = titleSize<1>
|
||
titleHeight = titleSize<2>
|
||
|
||
titleStartX = HeaderMidX - (titleWidth/2)
|
||
|
||
stat = Set_Printer('TEXTXY','Control Plan',titleStartX:@FM:-1.0,font,1)
|
||
|
||
font<2> = '16'
|
||
font<4> = 0
|
||
|
||
stat = Set_Printer('FONT',font)
|
||
|
||
CustName = XLATE('PROD_SPEC',PSNo,'CUST_NAME','X')
|
||
|
||
stat = Set_Printer("CALCTEXT", 'PSN: ':PSNo:' - ':CustName)
|
||
psnSize = Get_Printer("CALCTEXT")
|
||
psnWidth = psnSize<1>
|
||
psnHeight = psnSize<2>
|
||
|
||
psnStartX = HeaderMidX - (psnWidth/2)
|
||
|
||
stat = Set_Printer("CALCTEXT", 'Work Order No: ':WONo)
|
||
woSize = Get_Printer("CALCTEXT")
|
||
woWidth = woSize<1>
|
||
woHeight = woSize<2>
|
||
|
||
woStartX = HeaderMidX - (woWidth/2)
|
||
|
||
IF WONo NE '' THEN
|
||
stat = Set_Printer('TEXTXY','PSN: ':PSNo:' - ':CustName,psnStartX:@FM:-0.68,font,1)
|
||
stat = Set_Printer('TEXTXY','Work Order No: ':WONo,woStartX:@FM:-0.40,font,1)
|
||
|
||
WORec = XLATE('WO_LOG',WONo,'','X')
|
||
Order = WORec<WO_LOG_ORDER_NO$>
|
||
OrdItem = WORec<WO_LOG_ORDER_ITEM$>
|
||
SubPartNo = XLATE('ORDER_DET',Order:'*':OrdItem,ORDER_DET_SUB_PART_NO$,'X')
|
||
|
||
END ELSE
|
||
stat = Set_Printer('TEXTXY','PSN: ':PSNo:' - ':CustName,psnStartX:@FM:-0.60,font,1)
|
||
SubPartNo = ''
|
||
END
|
||
|
||
font<2> = 12 ;* Drop the font size
|
||
font<5> = 0 ;* Italics off
|
||
|
||
stat = Set_Printer('FOOTER',"Page 'P'":@VM:@VM:"'T' 'D'")
|
||
|
||
* Extract Prod Spec data
|
||
|
||
WORec = XLATE('WO_LOG',WONo,'','X')
|
||
PSNRec = XLATE('PROD_SPEC',PSNo,'','X')
|
||
|
||
SpecSubInfo = PSNRec<prod_spec_spec_substrate$>
|
||
SpecialInst = SpecSubInfo<1,QSSubInstructions$>
|
||
Orientation = SpecSubInfo<1,QSSubOrientation$>
|
||
ProdType = SpecSubInfo<1,QSSubType$>
|
||
|
||
SpecAddtl = PSNRec<prod_spec_spec_addtl$>
|
||
ProveinInst = SpecAddtl<1,QSAddProveInInst$>
|
||
|
||
EntryDt = OCONV(PSNRec<PROD_SPEC_ENTRY_DATE$>,'D2/')
|
||
RevDt = OCONV(PSNRec<PROD_SPEC_MOD_DATE$>,'D2/')
|
||
|
||
KeyContact = "Onsite Quality Representative (480) 668-4000"
|
||
CoreTeam = 'Executive Director, Quality Manager, Process Engineering Manager, Maintenance Engineering Manager, Manufacturing Manager (480) 668-4000'
|
||
|
||
*SWAP @TM WITH CRLF$ IN SpecialInst
|
||
*SWAP @TM WITH CRLF$ IN ProveInInst
|
||
|
||
|
||
SpecType = PSNrec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubSpecType$>
|
||
|
||
BEGIN CASE
|
||
CASE SpecType = 'U'
|
||
Sig = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddPreQualSig$>
|
||
SigDt = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddPreQualSigDate$>
|
||
|
||
CASE SpecType = 'Q'
|
||
Sig = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddQualSig$>
|
||
SigDt = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddQualSigDate$>
|
||
|
||
CASE SpecType = 'X'
|
||
Sig = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddPreProdSig$>
|
||
SigDt = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddPreQualSigDate$>
|
||
|
||
CASE SpecType = 'P'
|
||
Sig = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddProdSig$>
|
||
SigDt = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddProdSigDate$>
|
||
|
||
END CASE
|
||
|
||
Font = 'Arial'
|
||
Font<FONT_JUST$> = 'L'
|
||
Font<FONT_SIZE$> = 8
|
||
Font<FONT_UNDERLINE$> = 0
|
||
Font<FONT_BOLD$> = 0
|
||
Void = Set_Printer( 'FONT', Font )
|
||
|
||
* First line of Specification
|
||
|
||
colHeader = 'Description' ; colFormat = '^1440'
|
||
colHeader<1,2> = 'Type' ; colFormat<1,2> = '^1440'
|
||
colHeader<1,3> = 'Signed' ; colFormat<1,3> = '^1080'
|
||
colHeader<1,4> = 'Key Contact' ; colFormat<1,4> = '^2520'
|
||
colHeader<1,5> = 'Core Team' ; colFormat<1,5> = '^5760'
|
||
colHeader<1,6> = 'Original Dt' ; colFormat<1,6> = '^1080'
|
||
colHeader<1,7> = 'Last Rev' ; colFormat<1,7> = '^1080'
|
||
|
||
colData = PSNRec<PROD_SPEC_LAYER_TYPE$>
|
||
colData<1,2> = OCONV(SpecType,'[SPEC_TYPE_CONV]')
|
||
colData<1,3> = OCONV(SigDt,'D4/')
|
||
colData<1,4> = KeyContact
|
||
colData<1,5> = CoreTeam
|
||
colData<1,6> = EntryDt
|
||
colData<1,7> = RevDt
|
||
|
||
stat = Set_Printer('ADDTABLE', colFormat,colHeader,'',LTGREY$,'',0,TB_ALL)
|
||
stat = Set_Printer('ADDTABLE',colFormat,'',colData,LTGREY$,'',1,TB_ALL)
|
||
|
||
stat = Set_Printer('TEXT')
|
||
|
||
* Second line of Specification
|
||
|
||
PSNLayerProps = obj_Prod_Spec('GetLayerProp',PSNo)
|
||
|
||
|
||
LSIDs = ''
|
||
Dopants = ''
|
||
colData = ''
|
||
|
||
FOR I = 1 TO COUNT(PSNLayerProps,@RM) + (PSNLayerProps NE '')
|
||
LayerSet = FIELD(PSNLayerProps,@RM,I)
|
||
LSIDs<I> = LayerSet<1>
|
||
LayerSet = FIELD(LayerSet,@FM,2,99)
|
||
|
||
Dopants<1,I> = LayerSet<PRS_LAYER_DOPANT$>
|
||
|
||
IF I = 1 THEN
|
||
|
||
RecipeNo = LayerSet<PRS_LAYER_RECIPE$>
|
||
RecipeRec = XLATE('RECIPE',RecipeNo,'','X')
|
||
RecipeName = RecipeRec<RECIPE_RECIPE_NAME$>
|
||
EpiGas = RecipeRec<RECIPE_EPI_GASES$>
|
||
|
||
BEGIN CASE
|
||
CASE EpiGas = 'SiH4' ; EpiGasName = 'Silane'
|
||
CASE EpiGas = 'SiH2CL2' ; EpiGasName = 'DiChloroSilane (DCS)'
|
||
CASE EpiGas = 'SiH1HCL3' ; EpiGasName = 'TriChloroSilane (TCS)'
|
||
CASE 1 ; EpiGasName = ''
|
||
END CASE
|
||
|
||
|
||
|
||
CustPartNos = PSNRec<PROD_SPEC_CUST_PART_NO$>
|
||
CustPartDescs = PSNRec<PROD_SPEC_PN_DESC$>
|
||
|
||
SWAP @VM WITH CRLF$ IN CustPartNos
|
||
SWAP @VM WITH CRLF$ IN CustPartDescs
|
||
|
||
colData<I,1> = 'Silcon Epitaxy'
|
||
colData<I,2> = PSNo
|
||
colData<I,3> = CustPartNos
|
||
colData<I,4> = CustPartDescs
|
||
colData<I,5> = Recipename
|
||
colData<I,6> = EpiGas
|
||
colData<I,7> = SubPartNo
|
||
colData<I,8> = Orientation
|
||
colData<I,9> = ProdType
|
||
END
|
||
|
||
NEXT I
|
||
|
||
colHeader = 'Product' ; colFormat = '<2160'
|
||
colHeader<1,2> = 'Prod Spec' ; colFormat<1,2> = '^1440'
|
||
colHeader<1,3> = 'Cust Part No' ; colFormat<1,3> = '^1440'
|
||
colHeader<1,4> = 'Part Desc' ; colFormat<1,4> = '<2160'
|
||
colHeader<1,5> = 'Recipe' ; colFormat<1,5> = '^1440'
|
||
colHeader<1,6> = 'Epi Gas' ; colFormat<1,6> = '^1440'
|
||
colHeader<1,7> = 'Prod Sub No' ; colFormat<1,7> = '^1440'
|
||
colHeader<1,8> = 'Prod Orientation' ; colFormat<1,8> = '^1440'
|
||
colHeader<1,9> = 'Prod Type' ; colFormat<1,9> = '^1440'
|
||
|
||
|
||
stat = Set_Printer('ADDTABLE', colFormat,colHeader,'',LTGREY$,'',0,TB_ALL)
|
||
stat = Set_Printer('ADDTABLE',colFormat,'',colData,LTGREY$,'',1,TB_ALL)
|
||
|
||
colData = ''
|
||
|
||
stat = Set_Printer('TEXT')
|
||
|
||
colHeader = 'LS':CRLF$:'Id':@VM ; colFormat = '^540':@VM
|
||
colHeader<1,2> = 'Dopant':@VM ; colFormat<1,2> = '^1440':@VM
|
||
colHeader<1,3> = 'Measure':@VM ; colFormat<1,3> = '<1440':@VM
|
||
colHeader<1,4> = 'Minimum':@VM ; colFormat<1,4> = '^1440':@VM
|
||
colHeader<1,5> = 'Target':@VM ; colFormat<1,5> = '^1440':@VM
|
||
colHeader<1,6> = 'Maximum':@VM ; colFormat<1,6> = '^1440':@VM
|
||
colHeader<1,7> = 'Tool':@VM ; colFormat<1,7> = '<1080':@VM
|
||
colHeader<1,8> = 'Monitor Type':@VM ; colFormat<1,8> = '<1440':@VM
|
||
colHeader<1,9> = 'Recipe':@VM ; colFormat<1,9> = '<2160':@VM
|
||
colHeader<1,10> = 'Frq':@VM ; colFormat<1,10> = '^540':@VM
|
||
colHeader<1,11> = 'ProveIn Type' ; colFormat<1,11> = '<1440'
|
||
|
||
* Build Step Data * * * *
|
||
|
||
ReactorType = OCONV(PSNRec<PROD_SPEC_REACTOR_TYPE$> ,'[REACT_TYPE_CONV,OPSREF]' )
|
||
|
||
LayerCnt = COUNT(LSIDs,@FM) + (LSIDs NE '')
|
||
|
||
SDIndex = 0
|
||
StepData = ''
|
||
colData = ''
|
||
|
||
FOR I = 1 TO LayerCnt
|
||
LayerSet = LSIDs<I>
|
||
LayerSpecs = obj_Prod_Spec('GetLayerProp',PSNo:@RM:LayerSet:@RM:'') ;* 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
|
||
|
||
LSID = LSIDs<I>
|
||
|
||
ThickMin = LayerSpecs<PRS_LAYER_THICK_MIN$>
|
||
ThickTarget = LayerSpecs<PRS_LAYER_THICK_TARGET$>
|
||
ThickMax = LayerSpecs<PRS_LAYER_THICK_MAX$>
|
||
ThickUnits = LayerSpecs<PRS_LAYER_THICK_UNITS$>
|
||
|
||
ThickMTool = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MTOOL$>
|
||
ThickMType = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MTYPE$>
|
||
ThickMRecipe = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MRECIPE$>
|
||
ThickMFreq = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MFREQ$>
|
||
ThickMPIType = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MPROVEIN$>
|
||
ThickMFirst = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MFIRST$>
|
||
ThickMLast = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MLAST$>
|
||
ThickMSPC = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MSPC$>
|
||
ThickMOvergrow = LayerSpecs<PRS_LAYER_THICK_MEASUREMENT$,PRS_MOVERGROW$>
|
||
|
||
|
||
|
||
ResMin = LayerSpecs<PRS_LAYER_RES_MIN$>
|
||
ResTarget = LayerSpecs<PRS_LAYER_RES_TARGET$>
|
||
ResMax = LayerSpecs<PRS_LAYER_RES_MAX$>
|
||
ResUnits = LayerSpecs<PRS_LAYER_RES_UNITS$>
|
||
|
||
ResMTool = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MTOOL$>
|
||
ResMType = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MTYPE$>
|
||
ResMRecipe = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MRECIPE$>
|
||
ResMFreq = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MFREQ$>
|
||
ResMPIType = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MPROVEIN$>
|
||
ResMFirst = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MFIRST$>
|
||
ResMLast = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MLAST$>
|
||
ResMSPC = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MSPC$>
|
||
ResMOvergrow = LayerSpecs<PRS_LAYER_RES_MEASUREMENT$,PRS_MOVERGROW$>
|
||
|
||
|
||
IF I = 1 THEN FirstResUnits = ResUnits
|
||
|
||
|
||
ConMin = LayerSpecs<PRS_LAYER_CONC_MIN$>
|
||
ConTarget = LayerSpecs<PRS_LAYER_CONC_TARGET$>
|
||
ConMax = LayerSpecs<PRS_LAYER_CONC_MAX$>
|
||
ConUnits = LayerSpecs<PRS_LAYER_CONC_UNITS$>
|
||
|
||
ConMTool = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MTOOL$>
|
||
ConMType = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MTYPE$>
|
||
ConMRecipe = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MRECIPE$>
|
||
ConMFreq = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MFREQ$>
|
||
ConMPIType = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MPROVEIN$>
|
||
ConMFirst = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MFIRST$>
|
||
ConMLast = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MLAST$>
|
||
ConMSPC = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MSPC$>
|
||
ConMOvergrow = LayerSpecs<PRS_LAYER_CONC_MEASUREMENT$,PRS_MOVERGROW$>
|
||
|
||
|
||
CResMin = LayerSpecs<PRS_LAYER_CRES_MIN$>
|
||
CResTarget = LayerSpecs<PRS_LAYER_CRES_TARGET$>
|
||
CResMax = LayerSpecs<PRS_LAYER_CRES_MAX$>
|
||
CResUnits = LayerSpecs<PRS_LAYER_CRES_UNITS$>
|
||
|
||
CResMTool = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MTOOL$>
|
||
CResMType = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MTYPE$>
|
||
CResMRecipe = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MRECIPE$>
|
||
CResMFreq = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MFREQ$>
|
||
CResMPIType = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MPROVEIN$>
|
||
CResMFirst = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MFIRST$>
|
||
CResMLast = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MLAST$>
|
||
CResMSPC = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MSPC$>
|
||
CResMOvergrow = LayerSpecs<PRS_LAYER_CRES_MEASUREMENT$,PRS_MOVERGROW$>
|
||
|
||
|
||
|
||
colData<I,1> = LSID
|
||
colData<I,2> = Dopants<1,I>
|
||
colData<I,3> = 'Thickness'
|
||
colData<I,4> = ThickMin:ThickUnits
|
||
colData<I,5> = ThickTarget:ThickUnits
|
||
colData<I,6> = ThickMax:ThickUnits
|
||
colData<I,7> = ThickMTool
|
||
colData<I,8> = ThickMType
|
||
colData<I,9> = ThickMRecipe
|
||
colData<I,10> = ThickMFreq
|
||
colData<I,11> = ThickMPIType
|
||
|
||
|
||
IF ResTarget NE '' THEN
|
||
colData<I,1> = colData<I,1>:CRLF$
|
||
colData<I,2> = colData<I,2>:CRLF$
|
||
colData<I,3> = colData<I,3>:CRLF$:'Resistivity'
|
||
colData<I,4> = colData<I,4>:CRLF$:ResMin:ResUnits
|
||
colData<I,5> = colData<I,5>:CRLF$:ResTarget:ResUnits
|
||
colData<I,6> = colData<I,6>:CRLF$:ResMax:ResUnits
|
||
colData<I,7> = colData<I,7>:CRLF$:ResMTool
|
||
colData<I,8> = colData<I,8>:CRLF$:ResMType
|
||
colData<I,9> = colData<I,9>:CRLF$:ResMRecipe
|
||
colData<I,10> = colData<I,10>:CRLF$:ResMFreq
|
||
colData<I,11> = colData<I,11>:CRLF$:ResMPIType
|
||
END
|
||
|
||
|
||
IF ConTarget NE '' THEN
|
||
colData<I,1> = colData<I,1>:CRLF$
|
||
colData<I,2> = colData<I,2>:CRLF$
|
||
colData<I,3> = colData<I,3>:CRLF$:'Concentration'
|
||
colData<I,4> = colData<I,4>:CRLF$:ConMin:ConUnits
|
||
colData<I,5> = colData<I,5>:CRLF$:ConTarget:ConUnits
|
||
colData<I,6> = colData<I,6>:CRLF$:ConMax:ConUnits
|
||
colData<I,7> = colData<I,7>:CRLF$:ConMTool
|
||
colData<I,8> = colData<I,8>:CRLF$:ConMType
|
||
colData<I,9> = colData<I,9>:CRLF$:ConMRecipe
|
||
colData<I,10> = colData<I,10>:CRLF$:ConMFreq
|
||
colData<I,11> = colData<I,11>:CRLF$:ConMPIType
|
||
END
|
||
|
||
IF CResTarget NE '' THEN
|
||
colData<I,1> = colData<I,1>:CRLF$
|
||
colData<I,2> = colData<I,2>:CRLF$
|
||
colData<I,3> = colData<I,3>:CRLF$:'CRes'
|
||
colData<I,4> = colData<I,4>:CRLF$:CResMin:CResUnits
|
||
colData<I,5> = colData<I,5>:CRLF$:CResTarget:CResUnits
|
||
colData<I,6> = colData<I,6>:CRLF$:CResMax:CResUnits
|
||
colData<I,7> = colData<I,7>:CRLF$:CResMTool
|
||
colData<I,8> = colData<I,8>:CRLF$:CResMType
|
||
colData<I,9> = colData<I,9>:CRLF$:CResMRecipe
|
||
colData<I,10> = colData<I,10>:CRLF$:CResMFreq
|
||
colData<I,11> = colData<I,11>:CRLF$:CResMPIType
|
||
END
|
||
|
||
|
||
colData<I,1> = colData<I,1>:CRLF$
|
||
colData<I,2> = colData<I,2>:CRLF$
|
||
colData<I,3> = colData<I,3>:CRLF$
|
||
colData<I,4> = colData<I,4>:CRLF$
|
||
colData<I,5> = colData<I,5>:CRLF$
|
||
colData<I,6> = colData<I,6>:CRLF$
|
||
colData<I,7> = colData<I,7>:CRLF$
|
||
colData<I,8> = colData<I,8>:CRLF$
|
||
colData<I,9> = colData<I,9>:CRLF$
|
||
colData<I,10> = colData<I,10>:CRLF$
|
||
colData<I,11> = colData<I,11>:CRLF$
|
||
|
||
|
||
IF ThickMTool NE '' THEN
|
||
SDIndex += 1
|
||
|
||
SWAP 'æm' WITH 'um' in ThickUnits
|
||
SWAP '' WITH 'A' in ThickUnits
|
||
|
||
Freq = ''
|
||
IF ThickMFirst NE '' THEN Freq = 'First, '
|
||
IF ThickMFreq NE '' THEN Freq := ThickMFreq:', '
|
||
IF ThickMLast NE '' THEN Freq := 'Last'
|
||
|
||
IF ThickMSPC = '' THEN ThickMSPC = '0'
|
||
|
||
stepData<SDIndex,STEP_STEP$> = SDIndex
|
||
stepData<SDIndex,STEP_PROCESS_NAME$> = 'Epitaxy Layer ':I
|
||
stepData<SDIndex,STEP_MACHINE$> = ReactorType
|
||
stepData<SDIndex,STEP_PSN$> = PSNo
|
||
stepData<SDIndex,STEP_PRODUCT$> = CHAR(185):'Thickness'
|
||
stepData<SDIndex,STEP_PROCESS$> = 'Epi Growth'
|
||
stepData<SDIndex,STEP_SPEC_TOL$> = ThickMin:' - ':ThickMax:ThickUnits
|
||
stepData<SDIndex,STEP_EVAL_MEAS$> = ThickMTool
|
||
stepData<SDIndex,STEP_SIZE$> = ThickMType
|
||
stepData<SDIndex,STEP_FREQ$> = ThickMFreq
|
||
stepData<SDIndex,STEP_CTRL_METHOD$> = OCONV(ThickMSPC, 'BSPC,WI' )
|
||
stepData<SDIndex,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
|
||
IF ResMTool NE '' THEN
|
||
SDIndex += 1
|
||
|
||
SWAP 'ê-cm' WITH 'ohm.cm' in ResUnits
|
||
SWAP 'ê/Ü' WITH 'ohm/sq' in ResUnits
|
||
|
||
IF ResMtype = 'Prod' THEN ResMType = '1 Prod Wafer'
|
||
|
||
Freq = ''
|
||
IF ResMFirst NE '' THEN Freq = 'First, '
|
||
IF ResMFreq NE '' THEN Freq := ResMFreq:', '
|
||
IF ResMLast NE '' THEN Freq := 'Last'
|
||
|
||
IF ResMSPC = '' THEN ResMSPC = '0'
|
||
|
||
stepData<SDIndex,STEP_STEP$> = SDIndex
|
||
stepData<SDIndex,STEP_PROCESS_NAME$> = 'Epitaxy Layer ':I
|
||
stepData<SDIndex,STEP_MACHINE$> = ReactorType
|
||
stepData<SDIndex,STEP_PSN$> = PSNo
|
||
stepData<SDIndex,STEP_PRODUCT$> = CHAR(185):'Resistivity'
|
||
stepData<SDIndex,STEP_PROCESS$> = 'Epi Growth'
|
||
stepData<SDIndex,STEP_SPEC_TOL$> = ResMin:' - ':ResMax:ResUnits
|
||
stepData<SDIndex,STEP_EVAL_MEAS$> = ResMTool
|
||
stepData<SDIndex,STEP_SIZE$> = ResMType
|
||
stepData<SDIndex,STEP_FREQ$> = ResMFreq
|
||
stepData<SDIndex,STEP_CTRL_METHOD$> = OCONV(ResMSPC,'BSPC,WI')
|
||
stepData<SDIndex,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
IF ConMTool NE '' THEN
|
||
SDIndex += 1
|
||
|
||
SWAP 'ê-cm' WITH 'ohm.cm' in ConUnits
|
||
SWAP 'ê/Ü' WITH 'ohm/sq' in ConUnits
|
||
|
||
Freq = ''
|
||
IF ConMFirst NE '' THEN Freq = 'First, '
|
||
IF ConMFreq NE '' THEN Freq := ConMFreq:', '
|
||
IF ConMLast NE '' THEN Freq := 'Last'
|
||
|
||
IF ConMType = 'Prod' THEN ConMType = '1 Prod Wafer'
|
||
|
||
IF ConMTool = 'SRP' THEN
|
||
SpecTol = 'See Hard Copy Spec'
|
||
Product = 'SRP'
|
||
Frequency = 'Per Metrology'
|
||
END ELSE
|
||
SpecTol = ConMin:' - ':ConMax:ConUnits
|
||
Product = 'Conductivity'
|
||
Frequency = ConMFreq
|
||
END
|
||
|
||
IF ConMSPC = '' THEN ConMSPC = '0'
|
||
|
||
stepData<SDIndex,STEP_STEP$> = SDIndex
|
||
stepData<SDIndex,STEP_PROCESS_NAME$> = 'Epitaxy Layer ':I
|
||
stepData<SDIndex,STEP_MACHINE$> = ReactorType
|
||
stepData<SDIndex,STEP_PSN$> = PSNo
|
||
stepData<SDIndex,STEP_PRODUCT$> = Product
|
||
stepData<SDIndex,STEP_PROCESS$> = 'Epi Growth'
|
||
stepData<SDIndex,STEP_SPEC_TOL$> = SpecTol
|
||
stepData<SDIndex,STEP_EVAL_MEAS$> = ConMTool
|
||
stepData<SDIndex,STEP_SIZE$> = ConMType
|
||
stepData<SDIndex,STEP_FREQ$> = Frequency
|
||
stepData<SDIndex,STEP_CTRL_METHOD$> = OCONV(ConMSPC,'BSPC,WI')
|
||
stepData<SDIndex,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
IF CResMTool NE '' THEN
|
||
SDIndex += 1
|
||
|
||
SWAP 'ê-cm' WITH 'ohm.cm' in CResUnits
|
||
SWAP 'ê/Ü' WITH 'ohm/sq' in CResUnits
|
||
|
||
IF CresMType = 'Prod' THEN CresMType = '1 Prod Wfr'
|
||
|
||
Freq = ''
|
||
IF CResMFirst NE '' THEN Freq = 'First, '
|
||
IF CResMFreq NE '' THEN Freq := CResMFreq:', '
|
||
IF CResMLast NE '' THEN Freq := 'Last'
|
||
|
||
IF CResMSPC = '' THEN CResMSPC = '0'
|
||
|
||
stepData<SDIndex,STEP_STEP$> = SDIndex
|
||
stepData<SDIndex,STEP_PROCESS_NAME$> = 'Epitaxy Layer ':I
|
||
stepData<SDIndex,STEP_MACHINE$> = ReactorType
|
||
stepData<SDIndex,STEP_PSN$> = PSNo
|
||
stepData<SDIndex,STEP_PRODUCT$> = 'CRes'
|
||
stepData<SDIndex,STEP_PROCESS$> = 'Epi Growth'
|
||
stepData<SDIndex,STEP_SPEC_TOL$> = CResMin:' - ':CResMax:CResUnits
|
||
stepData<SDIndex,STEP_EVAL_MEAS$> = CResMTool
|
||
stepData<SDIndex,STEP_SIZE$> = CResMType
|
||
stepData<SDIndex,STEP_FREQ$> = CResMFreq
|
||
stepData<SDIndex,STEP_CTRL_METHOD$> = OCONV(CResMSPC,'BSPC,WI')
|
||
stepData<SDIndex,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
|
||
NEXT I
|
||
|
||
font<FONT_NAME$> = 'MS LineDraw'
|
||
font<FONT_SIZE$> = 8 ;* 10 point
|
||
font<FONT_BOLD$> = 0 ;* Bold
|
||
stat = Set_Printer('FONT',font)
|
||
|
||
stat = Set_Printer('ADDTABLE', colFormat,colHeader,'',LTGREY$,'',0,TB_ALL)
|
||
|
||
Font<FONT_BOLD$> = 0
|
||
Void = Set_Printer( 'FONT', Font )
|
||
|
||
stat = Set_Printer('ADDTABLE',colFormat,'',colData,LTGREY$,'',1,TB_ALL)
|
||
|
||
stat = Set_Printer('TEXT')
|
||
|
||
Sigs = ''
|
||
|
||
* Process Steps
|
||
|
||
colHeader = 'Step':@VM ; colFormat = '^540':@VM
|
||
colHeader<1,2> = 'Process Name':@VM ; colFormat<1,2> = '<1440':@VM
|
||
colHeader<1,3> = 'Machine':@VM ; colFormat<1,3> = '<1080':@VM
|
||
colHeader<1,4> = 'PSN':@VM ; colFormat<1,4> = '^540':@VM
|
||
colHeader<1,5> = 'Product':@VM ; colFormat<1,5> = '^1440':@VM
|
||
colHeader<1,6> = 'Process':@VM ; colFormat<1,6> = '^1800':@VM
|
||
colHeader<1,7> = 'Spec Tolerance':@VM ; colFormat<1,7> = '<2160':@VM
|
||
colHeader<1,8> = 'Evaluation Meas':@VM ; colFormat<1,8> = '<1440':@VM
|
||
colHeader<1,9> = 'Size':@VM ; colFormat<1,9> = '^1080':@VM
|
||
colHeader<1,10> = 'Freq':@VM ; colFormat<1,10> = '^1080':@VM
|
||
colHeader<1,11> = 'Control':CRLF$:'Method' ; colFormat<1,11> = '^720'
|
||
colHeader<1,12> = 'React Plan' ; colFormat<1,12> = '^1080'
|
||
|
||
StepNo = 1
|
||
|
||
colData = ''
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Receiving'
|
||
colData<StepNo,STEP_MACHINE$> = 'Paperwork'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'Paperwork'
|
||
colData<StepNo,STEP_PROCESS$> = 'Manual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'Consistent Data'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Visual'
|
||
colData<StepNo,STEP_SIZE$> = 'Shipment'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'Pass/Fail'
|
||
|
||
|
||
* * Pre Epi Cleaning and Inspection * *
|
||
|
||
SCSubOxide = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubOxide$>
|
||
SCAngstroms = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubOxideAngstroms$>
|
||
SCTool = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPreClean$>
|
||
SCToolRecipe = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPreAkrionRecipe$>
|
||
|
||
IF SCTool[1,2] _EQC 'NO' THEN SCTool = ''
|
||
|
||
SBrightLight = PSNRec<PROD_SPEC_PRE_BRIGHTLIGHT$>
|
||
SMicroscope = PSNRec<PROD_SPEC_PRE_MICROSCOPE$>
|
||
|
||
SSurfscan = PSNRec<PROD_SPEC_PRE_SURFSCAN$>
|
||
SSurfscanRecipe = PSNRec<PROD_SPEC_PRE_SURFSCAN_RECIPE$>
|
||
|
||
* Sub Oxide Strip
|
||
|
||
IF SCSubOxide = 1 THEN
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'HF Strip'
|
||
colData<StepNo,STEP_MACHINE$> = 'HF'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'SC-1'
|
||
colData<StepNo,STEP_PROCESS$> = '20min or Dewet'
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'NA'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'HF'
|
||
colData<StepNo,STEP_SIZE$> = '1 Cass'
|
||
colData<StepNo,STEP_FREQ$> = 'All'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
* Pre Clean - Done ******
|
||
|
||
IF SCTool NE '' OR SCToolRecipe NE '' THEN
|
||
|
||
IF SCTool = 'If Necessary' THEN SCTool = 'Akrion'
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Pre-epi Clean'
|
||
colData<StepNo,STEP_MACHINE$> = SCTool
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'Cleaning'
|
||
colData<StepNo,STEP_PROCESS$> = SCToolRecipe
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'NA'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Visual'
|
||
colData<StepNo,STEP_SIZE$> = '1 Cass'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
* Pre Brightlight - Done *****
|
||
|
||
IF SBrightLight = 1 THEN
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Pre-epi Insp'
|
||
colData<StepNo,STEP_MACHINE$> = 'Brightlight'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = CHAR(185):"LPD's"
|
||
colData<StepNo,STEP_PROCESS$> = 'Visual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = '<':PSNRec<PROD_SPEC_PRE_LPD$>
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Brightlight'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
* Pre Microscope - Done *****
|
||
|
||
IF SMicroscope = 1 THEN
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Pre-epi Insp'
|
||
colData<StepNo,STEP_MACHINE$> = 'Microscope'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'Surface Quality'
|
||
colData<StepNo,STEP_PROCESS$> = 'Visual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'PSN:':PSNo:' - Surface Spec'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Microscope'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
* Pre Surface Scan - Done *****
|
||
|
||
IF SSurfscan = 1 OR SSurfscanRecipe NE '' THEN
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Pre-epi Insp'
|
||
colData<StepNo,STEP_MACHINE$> = 'SurfScan'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = CHAR(185):"LPD's"
|
||
colData<StepNo,STEP_PROCESS$> = SSurfscanRecipe
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'See Hard Copy Spec'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'SurfScan'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
|
||
FOR I = 1 TO SDIndex
|
||
StepNo += 1
|
||
colData<StepNo> = StepData<I>
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
NEXT I
|
||
|
||
|
||
|
||
* * First/Last Wafer Cleaning and Inspection * *
|
||
|
||
Spec_FWI_LWI = PSNRec<PROD_SPEC_POST_FWI_LWI$> ;* FWI OR LWI
|
||
|
||
SCTool = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPostClean$>
|
||
SCToolRecipe = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPostAkrionRecipe$>
|
||
|
||
IF SCTool[1,2] _EQC 'NO' THEN SCTool = ''
|
||
IF SCToolRecipe[1,2] _EQC 'NO' THEN SCToolRecipe = ''
|
||
|
||
SBrightLight = PSNRec<PROD_SPEC_FIRST_BRIGHTLIGHT$>
|
||
SMicroscope = PSNRec<PROD_SPEC_FIRST_MICROSCOPE$>
|
||
|
||
SSurfscan = PSNRec<PROD_SPEC_FIRST_SURFSCAN$>
|
||
SSurfscanRecipe = PSNRec<PROD_SPEC_FIRST_SURFSCAN_RECIPE$>
|
||
|
||
* FirstWafer Brightlight - Done *****
|
||
|
||
IF Spec_FWI_LWI = 'LWI' THEN
|
||
ProcessName = 'Last Wafer Insp'
|
||
END ELSE
|
||
ProcessName = 'First Wafer Insp'
|
||
END
|
||
|
||
IF SBrightLight = 1 THEN
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = ProcessName
|
||
colData<StepNo,STEP_MACHINE$> = 'Brightlight'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = CHAR(185):"LPD's"
|
||
colData<StepNo,STEP_PROCESS$> = 'Visual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = '<':PSNRec<PROD_SPEC_POST_LPD$>
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Brightlight'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
* FirstWafer Microscope - Done *****
|
||
|
||
IF SMicroscope = 1 THEN
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = ProcessName
|
||
colData<StepNo,STEP_MACHINE$> = 'Microscope'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'Surface Quality'
|
||
colData<StepNo,STEP_PROCESS$> = 'Visual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'PSN:':PSNo:' - Surface Spec'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Microscope'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
* First SurfScan - Done *****
|
||
|
||
IF SSurfscan = 1 OR SSurfscanRecipe NE '' THEN
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = ProcessName
|
||
colData<StepNo,STEP_MACHINE$> = 'SurfScan'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = CHAR(185):"LPD's"
|
||
colData<StepNo,STEP_PROCESS$> = SSurfscanRecipe
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'See Hard Copy Spec'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Surf Scan'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
|
||
END
|
||
|
||
|
||
* * Post Epi Cleaning and Inspection * *
|
||
|
||
SBrightLight = PSNRec<PROD_SPEC_POST_CLEAN_BRIGHTLIGHT$>
|
||
|
||
SSurfscan = PSNRec<PROD_SPEC_POST_CLEAN_SURFSCAN$>
|
||
SSurfscanRecipe = PSNRec<PROD_SPEC_POST_CLEAN_SURFSCAN_RECIPE$>
|
||
|
||
SCTool = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPostClean$>
|
||
SCToolRecipe = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubPostAkrionRecipe$>
|
||
|
||
FirstLPDLimit = PSNRec<PROD_SPEC_POST_LPD$>
|
||
|
||
* Post Cleaning - Done *****
|
||
|
||
IF SCTool NE '' OR SCToolRecipe NE '' THEN
|
||
|
||
|
||
IF SCTool = 'If Necessary' THEN Process = 'Akrion'
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Post-epi Clean'
|
||
colData<StepNo,STEP_MACHINE$> = SCTool
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'Cleaning'
|
||
colData<StepNo,STEP_PROCESS$> = SCToolRecipe
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'NA'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Visual'
|
||
colData<StepNo,STEP_SIZE$> = '1 Cass'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
|
||
* Post Epi Brightlight - Done ****
|
||
|
||
IF SBrightLight = 1 THEN
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Post-epi Insp'
|
||
colData<StepNo,STEP_MACHINE$> = 'Brightlight'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = CHAR(185):"LPD's"
|
||
colData<StepNo,STEP_PROCESS$> = 'Visual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = '<':FirstLPDLimit
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Brightlight'
|
||
colData<StepNo,STEP_SIZE$> = '1 Prod Wfr'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
* Post Epi SurfScan - Not found below!
|
||
|
||
IF SSurfscan = 1 OR SSurfscanRecipe NE '' THEN
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Post-epi Insp'
|
||
colData<StepNo,STEP_MACHINE$> = 'SurfScan'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = CHAR(185):"LPD's"
|
||
colData<StepNo,STEP_PROCESS$> = SSurfscanRecipe
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'See Hard Copy Spec'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'SurfScan'
|
||
colData<StepNo,STEP_SIZE$> = PSNRec<PROD_SPEC_POST_CLEAN_SS_SAMP_QTY$>
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'OCAP'
|
||
END
|
||
|
||
StepNo += 1
|
||
colData<StepNo,STEP_STEP$> = StepNo
|
||
colData<StepNo,STEP_PROCESS_NAME$> = 'Shipping'
|
||
colData<StepNo,STEP_MACHINE$> = 'Paperwork'
|
||
colData<StepNo,STEP_PSN$> = PSNo
|
||
colData<StepNo,STEP_PRODUCT$> = 'Paperwork'
|
||
colData<StepNo,STEP_PROCESS$> = 'Manual'
|
||
colData<StepNo,STEP_SPEC_TOL$> = 'Consistent Data'
|
||
colData<StepNo,STEP_EVAL_MEAS$> = 'Visual'
|
||
colData<StepNo,STEP_SIZE$> = 'Shipment'
|
||
colData<StepNo,STEP_FREQ$> = 'Per Cass'
|
||
colData<StepNo,STEP_CTRL_METHOD$> = 'WI'
|
||
colData<StepNo,STEP_REACT_PLAN$> = 'Pass/Fail'
|
||
|
||
|
||
|
||
Font = 'Arial'
|
||
Font<FONT_JUST$> = 'L'
|
||
Font<FONT_SIZE$> = 8
|
||
Font<FONT_UNDERLINE$> = 0
|
||
Font<FONT_BOLD$> = 0
|
||
Void = Set_Printer( 'FONT', Font )
|
||
|
||
stat = Set_Printer('ADDTABLE', colFormat,colHeader,'',LTGREY$,'',0,TB_ALL)
|
||
stat = Set_Printer('ADDTABLE',colFormat,'',colData,LTGREY$,'',1,TB_ALL)
|
||
|
||
|
||
***************************************************
|
||
|
||
stat = Set_Printer("CALCTEXT",CHAR(185):'Note: Special Characteristics')
|
||
noteSize = Get_Printer("CALCTEXT")
|
||
noteWidth = noteSize<1>
|
||
noteHeight = noteSize<2>
|
||
|
||
|
||
stat = Set_Printer('TEXT')
|
||
stat = Set_Printer('TEXT',CHAR(185):'Note: Special Characteristics')
|
||
|
||
stat = Set_Printer('TEXT')
|
||
|
||
SpecialInst = PSNRec<PROD_SPEC_SPEC_SUBSTRATE$,QSSubInstructions$>
|
||
ProveinInst = PSNRec<PROD_SPEC_SPEC_ADDTL$,QSAddProveInInst$>
|
||
|
||
SWAP @TM WITH CRLF$ IN SpecialInst
|
||
SWAP @TM WITH CRLF$ IN ProveInInst
|
||
|
||
colHeader = 'Special Instructions'
|
||
colFmt = '^14400'
|
||
colData = SpecialInst
|
||
|
||
stat = Set_Printer('CALCTABLE',colFmt:@FM:colData)
|
||
|
||
TableSize = Get_Printer('CALCTABLE')
|
||
TableHeight = TableSize<2>
|
||
CurrY = Get_Printer('POS')<2>
|
||
|
||
IF CurrY + noteHeight + TableHeight > MaxPrintHeight THEN
|
||
stat = Set_Printer('PAGEBREAK')
|
||
END
|
||
|
||
Font<2> = 10
|
||
Font<4> = 0
|
||
Void = Set_Printer( 'FONT', Font )
|
||
|
||
stat = Set_Printer('ADDTABLE', colFmt,colHeader,'',LTGREY$,'',0,TB_ALL)
|
||
|
||
colFmt = '<14400'
|
||
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
|
||
|
||
stat = Set_Printer('TEXT')
|
||
|
||
colHeader = 'Prove-In Instructions'
|
||
colFmt = '^14400'
|
||
colData = ProveinInst
|
||
|
||
stat = Set_Printer('CALCTABLE',colFmt:@FM:colData)
|
||
|
||
TableSize = Get_Printer('CALCTABLE')
|
||
TableHeight = TableSize<2>
|
||
CurrY = Get_Printer('POS')<2>
|
||
|
||
IF CurrY + noteHeight + TableHeight > MaxPrintHeight THEN
|
||
stat = Set_Printer('PAGEBREAK')
|
||
END
|
||
|
||
|
||
Font<2> = 10
|
||
Font<4> = 0
|
||
Void = Set_Printer( 'FONT', Font )
|
||
|
||
stat = Set_Printer('ADDTABLE', colFmt,colHeader,'',LTGREY$,colData,0,TB_ALL)
|
||
|
||
colFmt = '<14400'
|
||
stat = Set_Printer('ADDTABLE',colFmt,'',colData,LTGREY$,'',1,TB_ALL)
|
||
|
||
|
||
stat = set_printer( 'TERM' )
|
||
|
||
RETURN
|
||
|
||
|
||
|
||
|