📄 testplan
字号:
if not Contact_Passed then
for I = 1 to Number_Boards_On_Panel
if BoardSet(I) then
board number is I
if dutfailed then
Status(I) = Failed_Pin_Test
if Fail_Count = 0 then
print Pin_Msg2$
else
if Fail_Count mod 16 = 0 then print
end if
print using "4d,#"; I
Fail_Count = Fail_Count + 1
else
if Chek_Point_Mode = Pretest then Status(I) = Passed
end if
end if
next I
if Fail_Count <> 0 then print
end if
Attempts = Attempts + 1
exit if Contact_Passed or (Attempts > Max_Times_To_Fix_Contact)
question Retry_PinTest$, Retry
exit if not Retry
if Logging and Chek_Point_Mode = Pretest then
for I = 1 to Number_Boards_On_Panel
board number is I
if Status(I) = Failed_Pin_Test then log board end Failed_Pin_Test
next I
end if
question Cycle_Vacuum$, Cycle
if Cycle then
faoff
question Recycle_Vacuum$
faon 0.5 |faoff 0.5|faon 1.5
! Warning: Reducing the value for 'faon' from the default value of 1.5
! can potentially cause testhead damage.
unpowered
end if
if Chek_Point_Mode = Pretest then
for I = Panel_Itself to Number_Boards_On_Panel
board number is I
clear failures
if Logging and Status(I) = Failed_Pin_Test then
log board start Serial$(I), Known_Good$, Panel_Serial$
end if
next I
end if
end loop
if Chek_Point_Mode = Failures then
Retest = False
! Retest failing boards that pass pin test after having failed
for I = Panel_Itself to Number_Boards_On_Panel
if BoardSet(I) then
board number is I
if (not dutfailed) and Status(I) = Failed_Pin_Test then
Retest = True
if Logging then
log clear for retest
log board end Failed_Pin_Test
end if
clear failures
report clear
else
BoardSet(I) = False
end if
end if
next I
return (Retest)
else
return (Contact_Passed)
end if
fnend
! Reset_Board Subroutine
!##############################################################################
sub Reset_Board
!---------------------------------------------------------------------------
! This 'pause' section is placed here to remind the test programmer
! that some powered tests may depend upon the TCK/TMS signals of
! boundary scan chains/devices being held in a stable state.
! When the testplan is run, the tests are properly sequenced
! to assure that the disabled state is set; however, board level
! circuitry may interfere with the persistence of the disabled state.
! You may need to take additional measures; for example, you may
! place your own pullup/down resistor in the fixture to assure a
! stable TMS and/or TCK, or utilize a GP relay to disable some TCK
! oscillator, etc.
! For further explanation, see the Boundary-Scan Manual for the
! section titled 'Maintaining Persistence of Boundary-Scan Disables'.
!
!---------------------------------------------------------------------------
! When Boundary-Scan tests are complete, you may need to produce
! a hard reset on the board-under-test to bring the ICs back into
! operational mode. One way of doing this is to cycle power to the
! board using the following call:
call Cycle_Power_On_Board ! Cycle Power to reset digital state of board
! call ScanWorks_Pretest ! Configure volatile devices, if needed
! Power cycling is time consuming and may not be necessary. Some boards
! may not need any resetting. Others may have a digital reset node
! you can toggle with a digital test to reset the board.
!
! When you have evaluated the needs of this board and modified this
! section, remove the pause and these comments. You should take care
! to document the action you have taken for future reference.
!---------------------------------------------------------------------------
subend
!##############################################################################
! This routine maps a panel serial number to the serial numbers of each
! of the boards. If not user-modified, it simply concatenates a numeric
! string to the serial number of the panel.
!
sub Map_Panel_to_Boards
global Panel_Serial$, Serial$(*), Number_Boards_On_Panel, Panel_Itself
Serial$(Panel_Itself) = Panel_Serial$
for I = 1 to Number_Boards_On_Panel
Serial$(I) = Panel_Serial$ & "-" & val$(I)
next I
subend
! Data Logging Subroutines
!##############################################################################
sub Start_Logging
global Analog_Sample_Rate, QSTATS_Mode, Histo, Panel$, Tests_On_This_Panel
global Sampling, True, False
global Proc_Step$, Batch$, Oper$, Panel_Rev$, Board_Rev$(*), Testplan$
global Testrev$, Panel_Serial$, Known_Good$, Number_Boards_On_Panel, Serial$(*)
global Board$(*), Panel_Itself, Version_Label$
global Tester_Flex_Id$,Fixture_Flex_Id$ ,Tempver$
Sampling = False
if learning then
log level is all
else
if rnd < Analog_Sample_Rate * (QSTATS_Mode = Histo) then
log level is analog without nhls, pins
Sampling = True
else
log level is indictments without nhls
end if
end if
print "Log level: ";lli$;"; Report level: ";rli$;"; Panel type: ";Panel$
PS$ = Proc_Step$ | TR$ = Testrev$ | PR$ = Panel_Rev$ | TP$ = Testplan$
P$ = Panel$
if Tests_On_This_Panel = 1 then
for I = Panel_Itself to Number_Boards_On_Panel
board number is I
if I = Panel_Itself then
log board Panel$, PS$, Batch$, Oper$, PR$, TP$, TR$, "", "",Version_Label$
else
log board Board$(I), Fixture_Flex_Id$, Batch$, Oper$, Board_Rev$(I), TP$, TR$, P$,Tester_Flex_Id$,Tempver$
end if
next I
end if
for I = Panel_Itself to Number_Boards_On_Panel
board number is I
if I = Panel_Itself then
log board start Panel_Serial$, Known_Good$
else
log board start Serial$(I), Known_Good$, Panel_Serial$
end if
next I
print
subend
!##############################################################################
def fn Get_Serial_Num$(Prompt$)
global Serial_Length, Bad_Serial_Image$, Default_Serial_Number$
loop
print using """"&Prompt$&""",#"
Ident$=""
input "",Ident$
if Ident$ = "" then Ident$ = Default_Serial_Number$
exit if Ident$ = Default_Serial_Number$
exit if (len(Ident$) = Serial_Length) or not Serial_Length
print using Bad_Serial_Image$; len(Ident$), Serial_Length
end loop
return (Ident$)
!return (lwc$(Ident$))
fnend
!##############################################################################
! If the Board name contains any invalid characters, stop processing.
sub Verify_Board_Names
global Panel_Itself, Number_Boards_On_Panel
global Stop_Msg$, Bad_Board_Name$, Board$(*)
Last_Board$ = ""
Found_Bad = 0
for I = Panel_Itself to Number_Boards_On_Panel
if Board$(I) <> Last_Board$ then
if fn IllegalChars_In_Board_Name(Board$(I)) then
Found_Bad = 1
print Bad_Board_Name$ | print " ";Board$(I)
end if
end if
Last_Board$ = Board$(I)
next I
if Found_Bad then
print | print Stop_Msg$
beep
stop
end if
subend
!##############################################################################
! Check to see if the Board name contains any invalid characters, now only
! check spaces. Return 1 if yes, and 0 if no.
def fn IllegalChars_In_Board_Name (Board$)
global True, False
if len (Board$) > 0 and pos (Board$, " ") > 0 then
return True
else
return False
end if
fnend
!##############################################################################
sub Create_Log_Queue
global Log_Path$, Directory_Exists, Queue_Error_Msg$, Stop_Msg$, Board$(*)
global Log_File$(*), Number_Boards_On_Panel, Panel_Itself
! Create a directory for the panel (Board$(0)) and for each unique board type
! Note! It is assumed that boards are numbered contiguously within a type
Last_Path$ = ""
for I = Panel_Itself to Number_Boards_On_Panel
if I > 0 then Last_Path$ = Log_File$(I-1)
Log_File$(I) = Log_Path$
! Log_File$(I) = Log_Path$ & Board$(I) & "/"
if nrun = 1 then
if Log_File$(I) <> Last_Path$ then
create dir Log_File$(I),Err
Err = Err and (Err <> Directory_Exists)
if Err then
print Queue_Error_Msg$ | print " ";errm$
print | print Stop_Msg$
beep
stop
end if
end if
end if
next I
!Log_File$(Panel_Itself) = Log_File$(Panel_Itself) & "P-"
subend
!##############################################################################
sub Setup_Logging
global Panel_Serial$, Default_Serial_Number$, Testplan$, Batch$
global Known_Good_Board$, Using_ART, Proc_Step$, Oper_Id_Prompt$
global Panel$, Oper$, Known_Good_Prompt$
global Serializing
randomize
Proc_Step$ = "btest"
Batch$ = datetime$ ! Set to a unique identifier so that Q-STATS II can
! calculate interboard handling and system idle times
Testplan$ = Panel$
Default_Serial_Number$ = "default_SN" & th$
Panel_Serial$ = Default_Serial_Number$
Known_Good_Board$ = ""
Oper$ = ""
if Using_ART then
! print using """"&Oper_Id_Prompt$&""",#"
! input "",Oper$
!====================================================
call Ident_oper_ID
call Input_Custom_Option
!====================================================
end if
!if Serializing then Known_Good_Board$ = fn Get_Serial_Num$(Known_Good_Prompt$)
subend
! Initialization Subroutines
!##############################################################################
sub Initializations
global Logging, Using_Buffered_Reporting, Report_Printer$, Using_ART
global Serializing, Logging_Started, First_Run$, Testmain_Revision$
global Did_First_Run_Inits, QSTATS_Mode
global True, False, Off, No_Histo, Histo, Pretest, Failures
global Number_Boards_On_Panel, BoardSet(*), Panel_Itself, Using_Graphics
global Version_Inits_Needed, Using_Multiple_Versions
global Per_Run, Per_Board, Version_Prompting
Testmain_Revision$="3070 05.20pa 0502(panel)"
True = 1
False = 0
Off = 0
No_Histo = 1
Histo = 2
Pretest = 1
Failures = 2
Panel_Itself = 0
Per_Run = 1
Per_Board = 2
Version_Inits_Needed = False
call Set_Custom_Options
call Initialize_Board_Constants ! external to testmain
call Initialize_Constants
call Verify_Board_Names
! Initialize BoardSet to include all boards (needed by preloading of pintest)
for I = 1 to Number_Boards_On_Panel
BoardSet(I) = True
next I
Logging_Started = False
Logging = (QSTATS_Mode <> Off) or Using_ART
if Using_ART then Serializing = True
! call Get_Board_Revision ! to interactively set Board_Rev$
call Print_Startup_Message ! prints out many variables' values
acknowledge all failures
learn capacitance off
if Using_Buffered_Reporting then
buffered reporting on
else
buffered reporting off
end if
report is Report_Printer$
printer is *
if Logging then
call Setup_Logging
call Create_Log_Queue
else
log level is none
end if
if Using_ART then
report level is all
else
report level is report
end if
if Using_Graphics then
! If graphics are already running or a small monitor is in use,
! the 'board graphics' statement generates an error. Ignore it.
board graphics, Err
board graphics highlight clear all, Err
end if
if nrun = 1 then
print First_Run$
load board
!'object checking on/off' statement goes here. Default is 'on'
object checking on
end if
if Using_Multiple_Versions and Version_Prompting = Per_Run then
call Get_Version_Label
end if
if nrun = 1 or Version_Inits_Needed then
call Do_Version_Inits
Did_First_Run_Inits=True
end if
subend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -