open-insight/LSL2/STPROC/SPC_EVAL_4PP_RPT2.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

366 lines
12 KiB
Plaintext

compile function SPC_EVAL_4PP_RPT2()
begin condition
pre:
post:
end condition
* THIS FUNCTION WILL PLOT INTEGER VALUES FOR STDEV
declare function msg, set_property, send_event, dialog_box, utility, get_property
declare function set_printer, get_printer, fieldcount,Printer_Select
declare subroutine rlist, or_view, activate_save_select, yield
$insert rlist_equates
$insert msg_equates
$insert oiprint_equates
$insert spc_limits_equ
$insert logical
$insert spc_eval_4pp_equ
TableToUse = 'SPC_EVAL_4PP'
open TableToUse to TableVar else
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = 'Unable to open ':TableToUse:'...'
Void = msg( '', MsgInfo )
return 0
end
Params = dialog_box( 'SPC_EVAL_4PP_RPT2', @window, '*CENTER' )
if Params = 'CANCEL' or Params = '' then
return 0
end
convert '*' to @fm in Params
TestDateFrom = Params<1>
TestDateThru = Params<2>
ToolNumber = Params<3>
EvalRange = Params<4>
Eval4PPWaferID = Params<5>
DirToPrinter = Params<6>
Stat = utility( 'CURSOR', 'H' )
Stmt = 'SELECT ':TableToUse:' BY DATE_TESTED BY TIME_TESTED'
* XPOSS ARE STATIC CAUSE THERE WILL ONLY BE SEVEN PLOTS PRINTED PER PAPER
XPosS1 = 1.11:@fm:2.49:@fm:3.87:@fm:5.25:@fm:6.63:@fm:8.01:@fm:9.38
XPosS2 = 1.17:@fm:2.55:@fm:3.93:@fm:5.31:@fm:6.69:@fm:8.07:@fm:9.44
YStartPos1 = ''
YStartPos2 = ''
XPosLast2 = ''
YPosLast2 = ''
EndStmt = ''
* TEST DATE INFORMATION
if TestDateFrom and TestDateThru then
EndStmt := " WITH DATE_TESTED FROM ":QUOTE(TestDateFrom):' TO ':QUOTE(TestDateThru)
end else
if TestDateFrom then
EndStmt := " WITH TEST_DATE GE ":QUOTE(TestDateFrom)
end
if TestDateThru then
EndStmt := " WITH TEST_DATE LE ":QUOTE(TestDateThru)
end
end
Stmt:=EndStmt
Stmt := " AND WITH TOOL_NUMBER ":QUOTE(ToolNumber)
Stmt := " AND WITH RANGE ":QUOTE(EvalRange)
Stmt := " AND WITH WAFER_ID ":QUOTE(Eval4PPWaferID)
Void = set_status(0)
rlist( Stmt, target_activelist$, '', '', '' )
if @reccount then
TestDateS = ''
TestTimeS = ''
ShiftS = ''
EntryIDS = ''
StDevS = ''
PointsPlotted = 0
YDeltaNums = ''
PrintPageBreak = 0
if DirToPrinter = 'Yes' then
PrnFlag = 0
end else
PrnFlag = 3 ;* THREE IN OIPI IS SCREEN MAXIMIZED
end
* PULL OFF VARIABLES
SPCLimitInfo = xlate( 'CONFIG', 'SPC_LIMITS', '', 'X' )
begin case
case EvalRange = 'Low'
Eval4PPStdevMinAll = SPCLimitInfo<Eval4PPLStdevMin$>
Eval4PPStdevMaxAll = SPCLimitInfo<Eval4PPLStdevMax$>
Eval4PPStdevDateChgAll = oconv( SPCLimitInfo<Eval4PPLStdevDate$>, 'D2/' )
Eval4PPStdevWaferIDAll = SPCLimitInfo<Eval4PPLStdevWaferID$>
case EvalRange = 'Mid'
Eval4PPStdevMinAll = SPCLimitInfo<Eval4PPMStdevMin$>
Eval4PPStdevMaxAll = SPCLimitInfo<Eval4PPMStdevMax$>
Eval4PPStdevDateChgAll = oconv( SPCLimitInfo<Eval4PPMStdevDate$>, 'D2/' )
Eval4PPStdevWaferIDAll = SPCLimitInfo<Eval4PPMStdevWaferID$>
case EvalRange = 'High'
Eval4PPStdevMinAll = SPCLimitInfo<Eval4PPHStdevMin$>
Eval4PPStdevMaxAll = SPCLimitInfo<Eval4PPHStdevMax$>
Eval4PPStdevDateChgAll = oconv( SPCLimitInfo<Eval4PPHStdevDate$>, 'D2/' )
Eval4PPStdevWaferIDAll = SPCLimitInfo<Eval4PPHStdevWaferID$>
end case
locate Eval4PPWaferID in Eval4PPStdevWaferIDAll using @vm setting WIDPos then
Eval4PPStdevMin = Eval4PPStdevMinAll<1,WIDPos>
Eval4PPStdevMax = Eval4PPStdevMaxAll<1,WIDPos>
Eval4PPStdevDateChg = Eval4PPStdevDateChgAll<1,WIDPos>
end else
* ERROR ENGINEERING ERROR CONTACT PAUL
MsgInfo = ''
MText = 'Wafer ID# ':quote(Eval4PPWaferID):'is not found in the limit set up.':CrLf$
MText:= 'Please contact the engineering manager.'
MsgInfo<mtext$> = MText
MsgInfo<micon$> = 'H'
Void = msg( '', MsgInfo )
return 0
end
IncVal = Eval4PPStdevMax/6
PrintPath = Printer_Select('',1) ;* Get default printer path
Void = set_printer( 'INIT', '', '', .25:@fm:'':@fm:'':@fm:'', 1, PrnFlag:@fm:75, PrintPath )
Void = set_printer( 'LINESTYLE', PS_SOLID:@fm:1 )
Void = set_printer( 'FILLSTYLE', BS_SOLID )
gosub PrintTOF
Eof = false$
NumKeys = @reccount
Cnt = 0
loop
readnext Eval4PPKey else Eof = true$
until Eof
read Eval4PPEntry from TableVar, Eval4PPKey else
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = 'Error reading ':Eval4PPKey:' from ':TableToUse:'!'
MsgInfo<micon$> = '!'
Void = MSG( '', MsgInfo )
return 0
end
* PULL OFF VARIABLES
TestDate = oconv( Eval4PPEntry<spc_eval_4pp_date_tested$>, 'D2/' )
TestTime = oconv( Eval4PPEntry<spc_eval_4pp_time_tested$>, 'MTH' )
Shift = Eval4PPEntry<spc_eval_4pp_shift$>
EntryID = Eval4PPEntry<spc_eval_4pp_entry_id$>
StDev = Eval4PPEntry<spc_eval_4pp_stdev$>
HoldStDev = StDev
*
locate StDev in YDeltaNums using @fm setting DPos then
YPosToUse1 = YStartPos1<DPos>
YPosToUse2 = YStartPos2<DPos>
end else
if Stdev > Eval4PPStdevMax then
* POINT OUT OF CONTROL HIGH
* SET OTHER VARS UP TOP FOR OUT OF CONTROL
YPosToUse1 = OutofControlHighY
YPosToUse2 = OutofControlHighY+.06
end else
* NOT OUT OF CONTROL BUT IS NOT EVENLY DIVISIBLE BY ONE OF THE SEVEN LINES
* FIND OUT WHICH IT IS CLOSER TO
locate Stdev in YDeltaNums by 'DR' using @fm setting Adjpos then
* THIS WILL NOT HAPPEN BASED ON ABOVE LOGIC
end
BTop = YDeltaNums<AdjPos-1>
BBot = YDeltaNums<AdjPos>
TopDif = BTop-Stdev
BotDif = Stdev-BBot
if TopDif = BotDif then
* BASICALLY IF IT IS EXACLY IN THE MIDDLE OF TWO POINTS
* THEN PUT IT TO THE HIGHER SIDE
YPosToUse1 = YStartPos1<AdjPos>
YPosToUse2 = YStartPos2<AdjPos>
end
if TopDif > BotDif then
* CLOSER TO BOTTOM POINT
YPosToUse1 = YStartPos1<AdjPos>
YPosToUse2 = YStartPos2<AdjPos>
end else
* CLOSER TO TOP POINT
YPosToUse1 = YStartPos1<AdjPos-1>
YPosToUse2 = YStartPos2<AdjPos-1>
end
end
end
if PointsPlotted = 7 then ;* CAN ONLY PLOT SEVEN SO DO A PAGEBREAK AND PRINT TOF AND PRINT COLUMNS
PrintPageBreak = 1
gosub PrintBOF
gosub PrintTOF
end
XPosToUse1 = XPosS1<PointsPlotted+1>
XPosToUse2 = XPosS2<PointsPlotted+1>
*YPOSTOUSE1 = 2.25
*YPOSTOUSE2 = 2.31
if YPosToUse1 = OutofControlHighY then
Void = set_printer( "TEXTXY", oconv( HoldStDev, 'MD3' ), XPosToUse1-.16:@fm:OutofControlHighY-.19, '', 0 )
end
*
TestDateS<1,-1> = TestDate
TestTimeS<1,-1> = TestTime
ShiftS<1,-1> = Shift
EntryIDS<1,-1> = EntryID
StDevS<1,-1> = oconv( HoldStDev, 'MD3' )
* SET YOUR POINT AND THEN SET XY FOR THE LINE TO
Void = set_printer( 'ELLIPSE', XPosToUse1:@FM:YPosToUse1:@FM:XPosToUse2:@FM:YPosToUse2, 0 )
PointsPlotted += 1
if PointsPlotted > 1 then
Void = set_printer( 'LINE', XPosLast2-.03:@fm:YPosLast2:@fm:XPosToUse2-.03:@fm:YPosToUse2, 0 )
end
YPosLast2 = YPosToUse2
XPosLast2 = XPosToUse2
repeat
PrintPageBreak = 0
gosub PrintBOF
Void = set_printer( 'TERM', 1 )
end else
MsgInfo = ''
MsgInfo<mcol$> = -2
MsgInfo<mrow$> = -2
MsgInfo<mtext$> = 'NO Records meeting your date criteria!!'
MsgInfo<micon$> = '!'
Void = MSG( '', MsgInfo )
end
return 0
*===============================================================================================*
PrintTOF:
Font = "Courier New,18,C,1"
convert ',' to @fm in Font
Tfont = Font
Stat = set_printer( 'FONT', Font )
Void = set_printer( 'TEXT', '4PP# ':ToolNumber:' ':EvalRange:' Control Chart' )
Font<2> = 12
Font<3> = 'L'
Stat = set_printer( 'FONT', Font )
Void = set_printer( 'TEXT', '' )
TableColInfo = '^+4680':@vm:'^+4680':@vm:'^+4680'
PrintTbl = 'Characteristic Measured: Stdev':@vm:'Recipe: R-':EvalRange:' Cal':@vm:'Date ctl Limits Calculated: ':Eval4PPStdevDateChg
Void = set_printer( 'ADDTABLE', TableColInfo, '', PrintTbl, '', '', 0, TB_ALL:@fm:'C' )
PrintTbl = 'Unit of Measure: Stdev':@vm:'Frequency: Shiftly':@vm:'Limits Calculated By: Peter Z.'
Void = set_printer( 'ADDTABLE', TableColInfo, '', PrintTbl, '', '', 0, TB_ALL:@fm:'C' )
PrintTbl = 'Sample ID: R-':EvalRange:@vm:'UCL: ':oconv( Eval4PPStdevMax, 'MD3' ):@vm:'Target: ':oconv( Eval4PPStdevMin, 'MD3' )
Void = set_printer( 'ADDTABLE', TableColInfo, '', PrintTbl, '', '', 0, TB_ALL:@fm:'C' )
Void = set_printer( 'TEXT', '' )
Void = set_printer( 'TEXT', 'Standard Deviation X-Bar' )
Void = set_printer( 'TEXT', '' )
Void = set_printer( 'TEXT', 'UCL-':oconv( Eval4PPStdevMax, 'MD3' ) )
TableColInfo = '^+1080':@vm:'^+1987':@vm:'^+1987':@vm:'^+1987':@vm:'^+1987':@vm:'^+1987':@vm:'^+1987':@vm:'^+1987'
CurPos = get_printer( 'POS' )<2>
OutofControlHighY = CurPos-.13
LastOne = ''
YDeltaNums = ''
YStartPos1 = ''
YStartPos2 = ''
for i = Eval4PPStdevMax to 0 step -IncVal
YDeltaNums<-1> = i
LastOne = i
PrintTbl = oconv( i, 'MD3' ):@vm:'':@vm:'':@vm:'':@vm:'':@vm:'':@vm:'':@vm:''
Void = set_printer( 'ADDTABLE', TableColInfo, '', PrintTbl, '', '', 1, TB_ALL:@fm:'L' )
CurPos = get_printer( 'POS' )<2>
CurPos-=.13
TStartPos1 = CurPos
TStartPos2 = CurPos+.06
YStartPos1<-1> = TStartPos1
YStartPos2<-1> = TStartPos2
next i
*if LastOne = 0 then
* LANDED RIGHT ON ZERO
*end else
* DID NOT LAND ON ZERO SO PRINT A ZERO
*PrintTbl = '.000':@vm:'':@vm:'':@vm:'':@vm:'':@vm:'':@vm:'':@vm:''
*Void = set_printer( 'ADDTABLE', TableColInfo, '', PrintTbl, '', '', 1, TB_ALL:@fm:'L' )
*end
CurPos = get_printer( 'POS' )<2>
CurPos-=.13
TStartPos1 = CurPos
TStartPos2 = CurPos+.06
YStartPos1<-1> = TStartPos1
YStartPos2<-1> = TStartPos2
Void = set_printer( 'LINESTYLE', PS_SOLID:@fm:1 )
return
*===============================================================================================*
PrintBOF:
* ALLOW ROOM ON THE BOTTOM FOR A POINT OUT OF CONTROL ON THE LOW SIDE
Void = set_printer( 'TEXT', '' )
Void = set_printer( 'TEXT', '' )
Font<2> = 8
Font<3> = 'L'
Stat = set_printer( 'FONT', Font )
*ColSize = '^+662':@vm:'^+662':@vm:'^+662'
*NewColSize = ''
*ColData = 'Pre':@vm:'Post':@vm:'Delta'
*for i = 1 to PointsPlotted
* NewColSize<1,-1> = ColSize
* ColData<1,-1> = 'Pre':@vm:'Post':@vm:'Delta'
*next i
*NewColSize = '^+720':@vm:NewColSize
*ColData = '':@vm:ColData
*Void = set_printer( 'ADDTABLE', NewColSize, '', ColData, '', '', 0, TB_ALL:@fm:'L' )
*ColData = ''
*for i = 1 to PointsPlotted
* ColData<1,-1> = PreS<i>
* ColData<1,-1> = PostS<i>
* ColData<1,-1> = DeltaS<i>
*next i
*ColData = '':@vm:ColData
*Void = set_printer( 'ADDTABLE', NewColSize, '', ColData, '', '', 1, TB_ALL:@fm:'L' )
*
Void = set_printer( 'TEXT', '' )
ColSize = '^+1987'
NewColSize = ''
for i = 1 to PointsPlotted
NewColSize<1,-1> = ColSize
next i
NewColSize = '^+1080':@vm:NewColSize
NewColData = ''
NewColData<-1> = StdevS
NewColData<-1> = TestDateS
NewColData<-1> = TestTimeS
NewColData<-1> = ShiftS
NewColData<-1> = EntryIDS
NewColData = insert( NewColData, 1, 1, 0, 'Stdev' )
NewColData = insert( NewColData, 2, 1, 0, 'Date' )
NewColData = insert( NewColData, 3, 1, 0, 'Time' )
NewColData = insert( NewColData, 4, 1, 0, 'Shift' )
NewColData = insert( NewColData, 5, 1, 0, 'User' )
Void = set_printer( 'ADDTABLE', NewColSize, '', NewColData, '', '', 1, TB_ALL:@fm:'L' )
TestDateS = ''
TestTimeS = ''
ShiftS = ''
EntryIDS = ''
StdevS = ''
PointsPlotted = 0
Font<2> = 12
Font<3> = 'L'
Stat = set_printer( 'FONT', Font )
if PrintPageBreak then
Void = set_printer( 'PAGEBREAK' )
end
return
*===============================================================================================*