Files
sysadmin 505bc12355 AD2 session 2026-03-27/28/29: Test datasheet pipeline rebuild
- Built exact-match TXT formatter from QuickBASIC source (SCM5B, 8B, DSCA, DSCT, SCM7B)
- Spec parser for 10 binary DAT files (1470+ models)
- Work order report importer (33K WOs, 63K test lines)
- On-demand PDF generation, styled HTML view
- Archived 500K pre-2026 For_Web files into year subfolders
- Created domain service account (INTRANET\svc_testdatadb)
- Generated 73/73 Quatronix customer datasheets
- Added STAGE + Reports auto-import to sync script

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 17:48:37 -07:00

1732 lines
56 KiB
QBasic
Raw Permalink Blame History

'Automated Test Software for 7Bxx-xx Voltage,
'Current, TC and RTD input models.
'** MAIN PROGRAM (part 2 of 4) **
'******************************************************************
'AUTHOR: Tim Knowlton
'DATE: 08/26/96
'******************************************************************
' REVISION RECORD
'******************************************************************
'
' See REVISION RECORD in 7BMAIN4.BAS for revision notes.
'
DECLARE FUNCTION LOOPVOLT$ (TTYPE%)
DECLARE FUNCTION OPENLOOPDETECT$ ()
DECLARE SUB THRESET ()
DECLARE SUB INITPS (ADDR%, OVERI!, OVERV!)
DECLARE SUB CALDAC (TE$, DACFLAG%)
DECLARE SUB INIT488 (DEVADDR%)
DECLARE SUB IO488 (DDATA$, ADDR%, SEL%)
DECLARE SUB DMM2010 (FUNC$, DDATA$, VALUE!, RATE!, DELAY!, HOLD!, HCOUNT%, FILTER%, FCOUNT%, COMP%, BW!)
DECLARE SUB LOADMUX (CH%, CHON%)
DECLARE SUB SETTH (DOUT%, CB%)
DECLARE SUB PAUSE (TIME!)
DECLARE SUB OHMSET (OHM!, BIT!)
DECLARE SUB SETTEST (TEST%)
DECLARE SUB SETDAC (VOLTAGE!, DACACCV!, CH%, VSENATTEN!)
'THIS MAIN MODULE ROUTINES...
DECLARE SUB SETAC (ONOFF%)
DECLARE SUB COMPTEST (STATUS$(), CAL%, ERRORPCT!(), STAT$, TEST%) 'Complete set of tests
DECLARE SUB CONTINUE () 'Waits for a key press
DECLARE SUB FOOTER (STATUS$()) 'Sends footer to printer if all tests passed
'DECLARE SUB FUNCTEST (STATUS$(), CAL%, TEST%) 'Routines for functional test
DECLARE SUB FUNCTEST (STATUS$(), CAL%, TEST%, TSPEC$()) 'Routines for functional test
DECLARE SUB GENSET () 'Displays message to set signal generator
DECLARE SUB GETADD () 'Gets parallel port/Mux/Testhead address
DECLARE SUB GETSN (SN$) 'Gets serial number
DECLARE SUB GETSPECS () 'Gets module type and specifications
DECLARE SUB HEADERA (SN$) 'Prints test sheet header
DECLARE SUB HEADERB (TESTTITLE$) 'Prints test screen header
DECLARE SUB LOGIT (STATUS$(), SN$, ERRORPCT!(), TEST%) 'Logs test results to disk
DECLARE SUB MEASRES (OHM!, RESNUM%, EMF!) 'Measure test head resistors
DECLARE SUB NOTES () 'Notes on ATE operation
DECLARE SUB REPORT (STATUS$(), TSPEC$()) 'Prints test data on screen
DECLARE SUB RTDTHCAL ()
DECLARE SUB SETOUTLOAD (LOAD!) 'Set output load
DECLARE SUB THRESET ()
DECLARE SUB TSPECS (TSPEC$()) 'Creates a string array of test specifications
DECLARE SUB VTHCAL (TE$)
DECLARE FUNCTION BESTFIT! (SLOPE!, OFFSETS!, TSI!(), NUMPOINTS%, ERRO!()) ' Calculates bestfit line and max error
DECLARE FUNCTION CJCACC$ () 'Test CJC gain accuracy
DECLARE FUNCTION COMPLIANCE$ () 'Test output current source compliance
DECLARE FUNCTION FAILS% (STATUS$()) 'Tests for failed tests
DECLARE FUNCTION FREQRESP$ () 'Performs Frequency response Test
DECLARE FUNCTION GAINCAL$ (CAL%, CONTRES!, PFSMEAS!, INTERACT!, OSERR!, PCB$) 'Performs Gain Calibration
DECLARE FUNCTION GENATTENR! () 'Calculate fn gen attenuator
DECLARE FUNCTION LEADREFF$ (CONTRES!) 'Measure lead resistance effects
DECLARE FUNCTION LINTEST$ (ACC$, CONTRES!, ERRORPCT!()) 'Performs Accuracy and Linearity Tests
DECLARE FUNCTION MENU1% () 'Gets the Test Group selection
DECLARE FUNCTION MENU2% () 'Gets the individual test #
DECLARE FUNCTION MENU3% () 'Gets the module family
DECLARE FUNCTION OFFSETCAL$ (CAL%, CONTRES!, PCB$) 'Performs Offset Calibration
DECLARE FUNCTION OPENLOOPDETECT$ () 'Test 39-1257 open loop detect function
DECLARE FUNCTION OPENTC$ () 'Measure open thermocouple response
DECLARE FUNCTION OUTNOISERMS$ () 'Performs RMS 300KHZ Output Noise Test
DECLARE FUNCTION PARALLEL (X, Y)
DECLARE FUNCTION POWERIO$ (ADDR%, CMD$) 'Library fn. Kepco DPS power supply I/O
DECLARE FUNCTION REPEAT$ () 'Ask if you would like to repeat test
DECLARE FUNCTION RTDOHMS! (TEMP!, SENTYPE$) 'Library fn. Convert RTD in temp to ohms
DECLARE FUNCTION RTDTEMP! (OHMS!, SENTYPE$) 'Library fn. Convert RTD ohms to temp
DECLARE FUNCTION SENSORNUM% () 'Assign a number to each sensor type
DECLARE FUNCTION SETATTEN% (VOLTAGE!) 'Library fn. Sets test head R/2R ladder
DECLARE FUNCTION SETCURRENTIN! (MODIN!, DACACCV!)
DECLARE FUNCTION SETILIM$ (MAXI!)
DECLARE FUNCTION SETSUPPLYV$ (ADDR%, SUPPLYV!, SUPPLYON$) 'Sets programmable supply voltage
DECLARE FUNCTION SUPPLYI$ (EXCL%) 'Measure module supply current
DECLARE FUNCTION SUPPLYVSENS$ ()
DECLARE FUNCTION IEXCHI$ ()
DECLARE FUNCTION IEXCLO$ ()
DECLARE FUNCTION IFINDEXC$ (ILO$, IHI$)
DECLARE FUNCTION SENSORNUM% () 'Assign a number to each sensor type
DECLARE FUNCTION SENSOROUT! (SENSORIN!) 'Calculates module input
DECLARE FUNCTION TCTEMP (TCV!, SENTYPE$) 'Library fn. Convert TC volts to deg. C
DECLARE FUNCTION TCVOLTS (TEMP!, TCTYPE$) 'Library fn. Convert TC in temp to V
DECLARE FUNCTION THERM! (OHMS!) 'Calculate thermistor temp from ohms
DECLARE FUNCTION UPSN$ (SN$) 'Increments dash# of serial#
DECLARE FUNCTION VCJC! () 'Test CJC gain accuracy
DECLARE FUNCTION VOUT! (SENOUT!, PEDOS$) 'Calculates module output for a given input
DECLARE FUNCTION SEEBECK (I$)
'Database Record definition for the specifications
TYPE DBASE
MODNAME AS STRING * 17 '7B47X-XX-XXXX 01/18/06
SENTYPE AS STRING * 7 'mV, V, mA, xTC, RTD
MINVS AS SINGLE 'Lowest supply voltage (V)
NOMVS AS SINGLE 'Nominal supply voltage (V)
MAXVS AS SINGLE 'Highest supply voltage (V)
VLIM AS SINGLE 'Voltage output limit (V)
ILIM AS SINGLE 'Current output limit (mA)
PE AS SINGLE 'Effective available power out (mW)
ISMAXNEXCL AS SINGLE 'Supply current, no out/ load (mA)
MININ AS SINGLE 'Minus F.S. input
MAXIN AS SINGLE 'Plus F.S. input
MINOUT AS SINGLE 'Minus F.S. output
MAXOUT AS SINGLE 'Plus F.S. output
IEXC AS SINGLE 'RTD stimulus current (uA)
EXCIMIN AS SINGLE 'Lowest RTD stimulus current (uA)
EXCIMAX AS SINGLE 'Highest RTD stimulus current (uA)
LEADRERR AS SINGLE 'RTD lead resistance effects (Deg/Ohm)
RCONV AS SINGLE '7B32,35 internal I-V resistor (ohms)
OSCALPT AS SINGLE 'LIN TC offset cal point (mV)
GNCALPT AS SINGLE 'LIN TC gain cal point (mV)
CALTOL AS SINGLE 'Calibration tolerance (% SPAN)
ISMAXFEXCL AS SINGLE 'Supply current, full out/ load (mA)
VEXC AS SINGLE '35 nominal loop voltage (V)
VEXCLO AS SINGLE '35 loop voltage with 20mA load (V)
VEXCHI AS SINGLE '35 loop voltage with 4mA load (V)
LOOPIMAX AS SINGLE '35 max loop current (mA)
LINEAR AS SINGLE 'Module Linearity/conformity (% SPAN)
ACCURACY AS SINGLE 'Module accuracy (% SPAN)
PSS AS SINGLE 'Power supply sensitivity (%/% Delta Vs)
TESTFREQ AS INTEGER 'Bandwidth test frequency (Hz)
ATTEN AS INTEGER 'Filter Attenuation at test frequency (dB)
ATTENTOL AS INTEGER 'Filter attenuation tolerance (dB)
STEPRESP AS SINGLE 'Step response in 200ms (%)
STEPTOL AS SINGLE 'Step response tolerance (%)
OUTNOISERMS AS SINGLE 'Output noise @ 100kHz, in (Vrms)
OUTNOISEVPK AS SINGLE 'Output noise @ 5Mhz, in (Vpk)
INPUTRES AS SINGLE 'Module input resistance (kohms)
VOPENTC AS SINGLE 'TC model open input voltage response (V)
CJCACC AS SINGLE 'TC CJC gain accuracy (Deg C)
IBIAS AS SINGLE 'Input bias current (nA)
END TYPE
COMMON SHARED /SAMPLE/ SPECS AS DBASE
COMMON SHARED PON%, SN$, GENAMPL!, TA!, TA1!, VTCTA!, NUMPOINTS%, TE$, OINSPEC!, COND$
COMMON SHARED SYSTYPE%, FAILFLAG%, LOGDAT%, FINAL%, DMMSERIAL$, PSPORT$
'COMMON SHARED DATASHEET%, VERSION$, VAC!, IOUTLOAD2.MEAS!, COMPTOL!
COMMON SHARED DATASHEET%, VAC!, IOUTLOAD2.MEAS!, COMPTOL!
COMMON SHARED IINSEN.MEAS!, IOUTSEN.MEAS!, TIME2!, ELAP2!
COMMON SHARED CB0VAL%, CB1VAL%, CB2VAL%, CB3VAL%
COMMON SHARED MAINMAX!, MAINMIN!, VERNMAX!, VERNMIN!
COMMON SHARED BADDRS%, LPTADDR%, MUXADDR%, THADDR%, VSADDR%, VINADDR%, DMMADDR%, PSPORT%
CONST CON% = 1, COFF% = 0
CONST CB0% = 0, CB1% = 1, CB2% = 2, CB3% = 3
'assign constants to Kepco DPS power
'supply commands:
CONST VOLT$ = "STV=" 'Set terminal voltage
CONST SUPPLYON$ = "SOP=ON" 'Set output to ON
CONST SUPPLYOFF$ = "SOP=OFF" 'Set output to OFF
CONST ISTAT$ = "RCS" 'Read Current protection status
CONST SETIMAX$ = "SOC=" 'Set overcurrent limit...4mA resol.
CONST IREAD$ = "RTC" 'Read output current
CONST VREAD$ = "RTV" 'Read output voltage
CONST PSID$ = "ID" 'Power supply ID
'********************************************************************
'Assign constants to Keithley 2010 functions:
CONST VODC$ = "volt:dc"
CONST VOAC$ = "volt:ac"
CONST OHM2$ = "res"
CONST OHM4$ = "fres"
CONST FREQ$ = "freq"
CONST PER$ = "per"
CONST TEMP$ = "temp"
CONST DIODE$ = "diod"
CONST CONT$ = "cont"
'********************************************************************
'assign specifications which are constant for all modules
CONST RFNGN! = 6040 'Function generator attenuator series R, 6.04Kohm
CONST IINSEN! = 192 'Input current source sense resistor, 250ohm
CONST IOUTSEN! = 192 'Output current sense resistor.
CONST IOUTLOAD2! = 702 'Output current source max load.
CONST VOUTLOAD1! = 4750 'Voltage output max load.
DIM STATUS(31) As String, TSPEC(31) As String
KEY(10) ON 'Activates F10 key
ON KEY(10) GOSUB FINISH 'Traps for F10 key Exits if pressed
FINISH: END
FUNCTION BESTFIT! (SLOPE!, OFFSETS!, TSI!(), NUMP%, ERRO!())
'Calculates Max error of data from bestfit line
MTERR! = 0
MIN! = TSI!(1)
MAX! = TSI!(NUMP%)
FOR INC% = 1 TO NUMP% 'Increments thru test points
BVEC! = TSI!(INC%) * SLOPE! + OFFSETS! 'Calculates point on best fit line
AVEC! = ERRO!(INC%) 'Gets corresponding data point
TERR! = AVEC! - BVEC! 'Calculates difference
IF ABS(TERR!) > ABS(MTERR!) THEN 'Checks if bigger than last Max
MTERR! = TERR! 'Assigns max error
END IF
NEXT
BESTFIT! = MTERR! 'Passes Max error back
END FUNCTION
FUNCTION CJCACC$
'Measure gain of the CJC input (Seebeck coefficient)
'Two methods of measuring CJC gain have been derived. Reference
'TC theory notes on 12/20/96 for details.
'Method 2 is based on the ideal Seebeck coeff. and the measured module
'f.s. output voltage vs. f.s input temperature transfer function. This
'method is used below because it required fewer measurements.
'It has been verified that both methods yield the same result for SCM5Bs.
TCTYPE$ = UCASE$(LEFT$(SPECS.SENTYPE, 1))
MINTIN! = SPECS.MININ 'C
MAXTIN! = SPECS.MAXIN 'C
MINOUT! = SPECS.MINOUT 'V
MAXOUT! = SPECS.MAXOUT 'V
TAMB1! = TA! '25C +/-0.1C, Measured upon test head startup
TAMB2! = TA1! '35C +/-0.1C, Measured upon test head startup
CJCMAXACCERR! = SPECS.CJCACC 'C
ORANGE! = MAXOUT! - MINOUT!
INRANGE! = MAXTIN! - MINTIN! 'Input range (deg. C)
SNM% = SENSORNUM%
DACACC! = .0001 '.01% DAC setting accuracy
'Accurate setting eliminates the
'need to re-measure
CLS
TESTTITLE$ = "Cold Junction Compensation Gain Measurement"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
IF SNM% <> 3 THEN 'Check for TC in
PRINT "This test is not performed on model "; SPECS.MODNAME
CALL CONTINUE
EXIT FUNCTION
ELSE
IF TCTYPE$ = "B" THEN
PRINT "This test is not performed on model "; SPECS.MODNAME
CALL CONTINUE
EXIT FUNCTION
ELSE
PRINT "Testing, please wait..."
END IF
END IF
MININ1! = SENSOROUT!(MINTIN) 'Calc. minin
CALL SETDAC(MININ1!, DACACC! * INRANGE!, 1, 0) 'Set -f.s. input
'Measure Vout with approx 0.5100V
'(25C) input to CJC port
LOCATE 10, 10
PRINT "Measuring Vout @ Tin = -f.s and Ta = 25C..."
CALL LOADMUX(2, CON%)
CALL DMM2010(VODC$, DDATA$, 2000!, 1, 3, 99, 99, 99, 99, 99, 99)
VOUT1! = VAL(DDATA$): DDATA$ = ""
CB0VAL% = CB0VAL% AND &HDF '1 1 0 1 1 1 1 1
'set resistor corresponding to 35C
CALL SETTH(CB0VAL%, CB0%)
PRINT TAB(10); "Measuring Vout @ Tin = -f.s and Ta = 35C..."
CALL LOADMUX(2, CON%)
CALL DMM2010(VODC$, DDATA$, 2000!, 1, 1, 99, 99, 99, 99, 99, 99)
VOUT3! = VAL(DDATA$): DDATA$ = ""
CB0VAL% = CB0VAL% OR &H20 '0 0 1 0 0 0 0 0
'set resistor corresponding to 25C
CALL SETTH(CB0VAL%, CB0%)
'Determine gain at -f.s. before any
'breakpoints turn on. Choose 2% span
MININ2! = SENSOROUT!(MINTIN + .02 * INRANGE!) 'Calc. minin
CALL SETDAC(MININ2!, DACACC! * INRANGE!, 1, 0) 'Set -f.s. input
'Measure Vout with approx 0.5100V
'(25C) input to CJC port
PRINT TAB(10); "Measuring Vout @ Tin = 2% f.s and Ta = 25C..."
CALL LOADMUX(2, CON%)
CALL DMM2010(VODC$, DDATA$, 2000!, 1, 1, 99, 99, 99, 99, 99, 99)
VOUT2! = VAL(DDATA$): DDATA$ = ""
MEASGAINMFS! = (VOUT2! - VOUT1!) / (MININ2! - MININ1!)
GCJCMEAS! = (VOUT3! - VOUT1!) / MEASGAINMFS! / (TAMB2! - TAMB1!)
SB! = SEEBECK(TCTYPE$)
MEASCJCACCERR! = (GCJCMEAS! - SB!) * (TAMB2! - TAMB1!) / SB!
'LOCATE 10
'PRINT "SEEBECK = "; SB!, "VOUT2CALC = "; VOUT2CALC!
'PRINT "VOUT1 = "; VOUT1!, "VOUT2 = "; VOUT2!
'PRINT "TA1 = "; TAMB1!, "TA2 = "; TAMB2!, "TIN2 = "; TIN2SIM!
'PRINT "XFERFN = "; MEASXFERFN!, "TCV1 = "; TCV1!, "TCV2 = "; TCV2!
'CALL CONTINUE
IF ABS(MEASCJCACCERR!) <= CJCMAXACCERR! THEN
CJC$ = "PASS"
ELSE
CJC$ = "FAIL"
SOUND 1000, .5
END IF
LOCATE 15, 10
PRINT "Status: ";
IF CJC$ = "FAIL" THEN
COLOR 12, 1, 1
ELSE
COLOR 10, 1, 1
END IF
PRINT CJC$
PRINT SPC(12);
COLOR 7, 1, 1
PRINT
PRINT TAB(10); "Measured CJC gain is";
PRINT TAB(43); USING "###.## uV/C"; GCJCMEAS! * 1000000!
PRINT TAB(10); "Resulting measured CJC error is";
PRINT TAB(45); USING "#.## C"; MEASCJCACCERR!
PRINT TAB(10); "Maximum CJC error is";
PRINT TAB(45); USING "#.## C"; CJCMAXACCERR!
CJCACC$ = CJC$ + STR$(GCJCMEAS! * 1000000!) + "1"
IF FINAL% <> 1 THEN CALL PAUSE(1)
END FUNCTION
FUNCTION COMPLIANCE$
'Test output current source compliance.
'Max load resistance for 7B39-xx standard product is 800 ohms
'Max load resistance for 7B39-1256 custom is 700 ohms
'Use 700 ohms to test.
MAXOUT! = SPECS.MAXOUT
MINOUT! = SPECS.MINOUT
SNM% = SENSORNUM%
PLUSFSIN! = SENSOROUT!(SPECS.MAXIN)
INRANGE! = PLUSFSIN! - SENSOROUT!(SPECS.MININ)
DACACC! = .01 '1% DAC setting accuracy
INITTOL! = .1 '10% initial tolerance
COMPTOL! = SPECS.ACCURACY / 100 + 5 / IOUTLOAD2! 'Compliance tolerance
'Assume 5 ohms lead resistance
'(similar to all other product lines)
'error in 700 ohm measurement.
ORANGE! = MAXOUT! - MINOUT!
CLS
TESTTITLE$ = "Compliance Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
IF SNM% <> 8 AND SNM% <> 10 THEN 'Check if 39
PRINT "This test is not performed on model "; SPECS.MODNAME
EXIT FUNCTION
ELSE
PRINT "Testing, please wait..."
END IF
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
IF SNM% = 8 THEN 'Voltage input
CALL SETDAC(PLUSFSIN!, DACACC! * INRANGE!, 1, 0)'Sets input voltage
ELSE 'SNM% = 10
MAXINMEAS! = SETCURRENTIN!(PLUSFSIN!, DACACC! * INRANGE! / 1000! * IINSEN!)
END IF
CALL LOADMUX(2, CON%) 'Measure Iin
CALL DMM2010(VODC$, DDATA$, 5, 99, 99, 99, 99, 99, 99, 99, 99)
IOUT1! = VAL(DDATA$) / IOUTSEN.MEAS! * 1000! 'mA
'PRINT IOUT1!: CALL CONTINUE
DDATA$ = ""
CALL LOADMUX(2, COFF%)
CALL SETOUTLOAD(IOUTLOAD2!) 'Connect output load
CALL LOADMUX(2, CON%) 'Measure Iin
CALL DMM2010(VODC$, DDATA$, 99, 99, 99, 99, 99, 99, 99, 99, 99)
IOUT2! = VAL(DDATA$) / IOUTLOAD2.MEAS! * 1000! 'mA
'PRINT IOUT2!: CALL CONTINUE
DDATA$ = ""
CALL LOADMUX(2, COFF%)
CERROR! = (IOUT2! - IOUT1!) / ORANGE! * 100 '%
LOCATE 10, 5
PRINT "Status: ";
IF ABS(IOUT1! - MAXOUT!) < MAXOUT! * INITTOL! AND ABS(CERROR! / 100!) < COMPTOL! THEN
COMPL$ = "PASS"
COLOR 10, 1, 1
ELSE
COMPL$ = "FAIL"
SOUND 1000, .5
COLOR 12, 1, 1
END IF
PRINT TAB(18); COMPL$;
PRINT SPC(17);
COLOR 7, 1, 1
PRINT SPC(31);
PRINT TAB(5); USING "Output current with ### ohm load is"; IOUTSEN!;
PRINT TAB(52); USING "##.# mA"; IOUT1!
PRINT TAB(5); "Required output current is";
PRINT TAB(52); USING "##.# mA to ##.# mA"; MAXOUT! * (1 - INITTOL!); MAXOUT! * (1 + INITTOL!)
PRINT
PRINT TAB(5); USING "Change in output current with ### ohm load is"; IOUTLOAD2!;
PRINT TAB(52); USING "+###.## %"; CERROR!
PRINT TAB(5); "Required output current is";
PRINT TAB(52); USING " +#.## % to +#.##%"; -COMPTOL! * 100; COMPTOL! * 100
COMPLIANCE$ = COMPL$ + STR$(CERROR!) + "2"
COLOR 7, 1, 1
IF FINAL% <> 1 THEN
CALL PAUSE(1)
ELSE
CALL PAUSE(.5)
END IF
END FUNCTION
FUNCTION FREQRESP$
'CALL THRESET
MININ! = SENSOROUT!(SPECS.MININ) 'Determine min in
MAXIN! = SENSOROUT!(SPECS.MAXIN) 'Determine max in
IEXC! = SPECS.IEXC / 1000000
INPUTRES! = SPECS.INPUTRES
INRANGE! = MAXIN! - MININ!
SPEC! = SPECS.ATTEN
SPECTOL! = SPECS.ATTENTOL
SNM% = SENSORNUM%
IF SNM% = 8 THEN
ORANGE! = ((SPECS.MAXOUT - SPECS.MINOUT) / 1000) * IOUTSEN.MEAS!
ELSE
ORANGE! = SPECS.MAXOUT - SPECS.MINOUT
END IF
CLS
TESTTITLE$ = "Frequency Response Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
PRINT "Testing, please wait..."
IF SNM% = 2 OR SNM% = 9 THEN
CALL SETAC(1)
THATTEN! = 1
VGAIN! = ORANGE! / (INRANGE! / 1000! * IINSEN.MEAS!)
ELSEIF SNM% = 8 THEN
CALL SETAC(1)
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
THATTEN! = SETATTEN%(MAXIN!)
VGAIN! = ORANGE! / INRANGE! 'Gain in V/V
ELSEIF SNM% = 10 THEN
CALL SETAC(1)
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
THATTEN! = 1
VGAIN! = 1
ELSEIF SNM% = 4 OR SNM% = 5 THEN
'Simulated RTD input is the bottom leg in a voltage divider
'from the function generator. The series resistor is 6.04Kohms.
B$ = SETSUPPLYV$(VSADDR%, 0, SUPPLYOFF$)
R! = GENATTENR! 'Find attenuator shunt R
CALL OHMSET(R!, 0)
OHM! = R!
CALL MEASRES(OHM!, 3, EMF!)
RSIM! = OHM! 'Measure simulated resistor
CALL SETTEST(6)
THATTEN! = (RFNGN! + RSIM!) / RSIM!
VGAIN! = ORANGE! / (INRANGE! * IEXC!) 'Gain in V/V
B$ = SETSUPPLYV$(VSADDR%, SPECS.NOMVS, SUPPLYON$) 'Set supply voltage and apply
ELSE
CALL SETAC(1)
IF SNM% = 7 THEN
CALL SETOUTLOAD(VOUTLOAD1!)
END IF
THATTEN! = SETATTEN%(MAXIN!) 'Set test head attenuator
VGAIN! = ORANGE! / INRANGE! 'Gain in V/V
END IF
CALL LOADMUX(2, CON%) 'Measure Vout
CALL DMM2010(VOAC$, DDATA$, 2000!, 1, .5, 99, 99, 99, 99, 99, 99)
VOUTMEAS! = VAL(DDATA$) * SQR(2)
DDATA$ = ""
ATTEN! = -20 * (LOG(ABS(VOUTMEAS! / (VAC! / THATTEN! * VGAIN!))) / LOG(10))
CALL LOADMUX(2, COFF%) 'Turns off mux
IF ABS(ATTEN! - SPEC!) <= SPECTOL! THEN
ATTEN$ = "PASS"
ELSE
ATTEN$ = "FAIL"
SOUND 1000, .5
END IF
LOCATE 10, 10
PRINT ; USING "&"; "Status: ";
IF ATTEN$ = "FAIL" THEN
COLOR 12, 1, 1
ELSE
COLOR 10, 1, 1
END IF
PRINT TAB(18); ATTEN$;
PRINT SPC(12);
COLOR 7, 1, 1
PRINT SPC(20);
PRINT TAB(10); USING "Attenuation at ##### Hz is"; SPECS.TESTFREQ;
PRINT TAB(50); USING "###.# dB"; ATTEN!
PRINT TAB(10); "Required attenuation is";
PRINT TAB(50); USING "###.# +/- ##.# dB"; SPEC!; SPECTOL!
FREQRESP$ = ATTEN$ + STR$(ABS(ATTEN!)) + "0"
COLOR 7, 1, 1
IF FINAL% <> 1 THEN CALL PAUSE(1)
IF SNM% = 4 OR SNM% = 5 THEN
B$ = SETSUPPLYV$(VSADDR%, 0, SUPPLYOFF$)
END IF
CALL SETAC(0)
END FUNCTION
FUNCTION GENATTENR!
'This routine is used for RTD or pot. input modules only.
'It determines the simulated RTD input to the module which
'serves as a voltage divider for the function generator.
'Series resistor from the function generator is 6.8Kohms.
IEXC! = SPECS.IEXC / 1000000! 'Convert to A
MININ! = SENSOROUT!(SPECS.MININ) 'Determine min in
MAXIN! = SENSOROUT!(SPECS.MAXIN) 'Determine max in
RMID! = (MAXIN! - MININ!) / 2 + MININ! 'Determine mid in
VOS! = 5
VIN! = RMID! * IEXC!
RTIM! = (-1 * RFNGN! * VIN!) / (VIN - IEXC! * RFNGN! - VOS!)
GENATTENR! = RTIM!
END FUNCTION
SUB GENSET
MININ! = SENSOROUT!(SPECS.MININ) 'Determine min in
MAXIN! = SENSOROUT!(SPECS.MAXIN) 'Determine max in
FREQUENCY = SPECS.TESTFREQ
SNM% = SENSORNUM%
IF SNM% = 4 OR SNM% = 5 THEN 'Check if resistance in
IEXC! = SPECS.IEXC / 1000000! 'Convert to A
R! = GENATTENR! 'Find attenuator shunt R
VIN! = IEXC! * ((MAXIN! - MININ!) / 2 + MININ!) / 2
GENAMPL! = VIN! / (R! / (RFNGN! + R!))
GENOS! = GENAMPL!
IF UCASE$(SPECS.MODNAME) = "7B36-1246" THEN GENOS! = 2 * GENAMPL!
ELSEIF SNM% = 2 OR SNM% = 9 THEN
GENAMPL! = 2
GENOS! = 2
'IF LEFT$(SPECS.MODNAME, 8) = "7B32-01D" THEN GENOS! = .5
ELSEIF SNM% = 8 OR SNM% = 10 THEN
IF LEFT$(SPECS.MODNAME, 9) = "7B39-1257" OR LEFT$(SPECS.MODNAME, 7) = "7B39-04" THEN
GENOS! = 5
GENAMPL! = 2.5
ELSEIF LEFT$(SPECS.MODNAME, 7) = "7B39-01" THEN
GENOS! = 2
GENAMPL! = 2
'ELSEIF LEFT$(SPECS.MODNAME, 7) = "7B39-02" OR LEFT$(SPECS.MODNAME, 7) = "7B39-03" THEN
ELSEIF LEFT$(SPECS.MODNAME, 7) = "7B39-02" OR LEFT$(SPECS.MODNAME, 7) = "7B39-03" OR LEFT$(SPECS.MODNAME, 9) = "7B39-1808" THEN
GENOS! = 5
GENAMPL! = 5
END IF
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
ELSE
IF SNM% = 7 THEN
CALL SETOUTLOAD(VOUTLOAD1!)
END IF
INRANGE! = SPECS.MAXIN! - SPECS.MININ!
GENAMPL! = 5
GATTEN! = INRANGE! / GENAMPL! 'Attenuator gain
GENOS! = (SPECS.MININ! + INRANGE! / 2!) / GATTEN!
'TSO 12/1/09 added the next line of code due to Agilent Function Generator Limitations
IF (GENAMPL! + ABS(GENOS!)) * 2 > 20 THEN GENAMPL! = (20 - ABS(GENOS!) * 2) / 2
END IF
IF SNM% <> 5 OR SNM% <> 4 THEN CALL SETTH(&HFF, 3) 'Prevents shorting out the +15V supply.
IF SNM% = 5 OR SNM% = 4 THEN 'Check if resistance in
CALL OHMSET(R!, 0)
CALL SETTEST(6) 'Connect function generator
ELSEIF SNM% = 2 OR SNM% = 9 THEN
IF SNM% = 2 THEN ' mA in
IF TE$ = "TE1040OLDCS" THEN
'CB0VAL% = &HF9 'CMD to set relays 21 & 22
'CB3VAL% = &HF5 'CMD to set relays 21 & 22
CB0VAL% = &HFD '1 1 1 1 1 1 0 1 CMD to set relays 21 & 22
CB3VAL% = &HF5 '1 1 1 1 0 1 0 1 CMD to set relays 21 & 22
ELSE
CB0VAL% = &HE9 '1 1 1 0 1 0 0 1 CMD to set relays 21 & 22
CB3VAL% = &HDF '1 1 0 1 1 1 1 1 CMD to set relays 21 & 22
END IF
CALL SETTH(CB0VAL%, CB0%) 'do it
CALL SETTH(CB3VAL%, CB3%) 'do it
ELSE
IF TE$ = "TE1040OLDCS" THEN
'CB3VAL% = &HFC 'CMD to set relay 22 only
'CB0VAL% = &HE9 'CMD to set relay 22 only
CB0VAL% = &HED '1 1 1 0 1 1 0 1 CMD to set relay 22 only
CB3VAL% = &HFD '1 1 1 1 1 1 0 1 CMD to set relay 22 only
ELSE
CB0VAL% = &HED '1 1 1 0 1 1 0 1
CB3VAL% = &HC7 '1 1 0 0 0 1 1 1
END IF
CALL SETTH(CB3VAL%, CB3%)
CALL SETTH(CB0VAL%, CB0%)
END IF
ELSEIF SNM% = 10 THEN 'mA input module
CB3VAL% = (CB3VAL% OR &H10) AND &HDF '0 0 0 1 0 0 0 0
'D.U.T. input = current source
'1 1 0 1 1 1 1 1
CALL SETTH(CB3VAL%, CB3%) 'Input current sourced from +15V
CB0VAL% = (CB0VAL% AND &HE9) OR &H8 '1 1 1 0 1 0 0 1
CALL SETTH(CB0VAL%, CB0%) 'ground inputs, short series R
'remove short on inputs
ELSE
THATTEN! = SETATTEN%(MAXIN!) 'Set test head attenuator
CB0VAL% = (CB0VAL% AND &HE9) OR &H8 '1 1 1 0 1 0 0 1
CALL SETTH(CB0VAL%, CB0%) 'ground inputs, short series R
'remove short on inputs
END IF
IF SNM% = 5 OR SNM% = 4 THEN
CH% = 3
ELSEIF SNM% = 7 OR SNM% = 8 THEN
CH% = 1
ELSEIF SNM% = 10 THEN
A$ = SETILIM$(SPECS.ISMAXNEXCL) 'Set current limit
B$ = SETSUPPLYV$(VSADDR%, SPECS.NOMVS, SUPPLYON$) 'Set supply voltage and apply
CH% = 6
ELSE
CH% = 8
END IF
CALL LOADMUX(CH%, CON%)
CLS
FAILFLAG% = 1
CALL DMM2010(VODC$, "99", 10!, .1, .5, 99, 99, 99, 99, 99, 99)
LOCATE 5, 10
PRINT "Function Generator Settings"
PRINT TAB(10); "------------------------------------------------------------"
PRINT TAB(10); USING "Required Frequency is: ######.# Hz "; FREQUENCY
DO
CALL DMM2010(FREQ$, DDATA$, 2000!, .01, 99, 99, 99, 99, 99, 99, 30)
FREMEAS! = VAL(DDATA$): DDATA$ = ""
IF ABS(FREMEAS! - FREQUENCY) > .05 * FREQUENCY THEN
COLOR 12, 0, 0
FREQFLAG% = 0
ELSE
COLOR 10, 0, 0
FREQFLAG% = 1
END IF
LOCATE 7, 50
PRINT ; USING "#####.# &"; FREMEAS!; " Hz"
A$ = INKEY$
LOOP UNTIL FREQFLAG% = 1 OR A$ <> ""
COLOR 7, 1, 1
PRINT TAB(10); USING "Required DC Offset is: +#.# V "; GENOS!
DO
IF FREQUENCY <= 50 THEN
PLC! = 10
ELSE
PLC! = 99
END IF
CALL DMM2010(VODC$, DDATA$, 10!, PLC!, 99, 99, 99, 99, 99, 99, 99)
VDCMEAS! = VAL(DDATA$): DDATA$ = ""
IF SNM% = 10 THEN
'Read current input, but display voltage to match that of the func. gen
VDCDISP! = (VDCMEAS! + (VDCMEAS! / IINSEN.MEAS! * SPECS.INPUTRES * 1000))*1.1 'Display reads 10% low
ELSE
VDCDISP! = VDCMEAS!
END IF
IF GENOS! <> 0 THEN
IF ABS(VDCDISP! - GENOS!) > .1 * GENOS THEN
COLOR 12, 0, 0
VDCFLAG% = 0
ELSE
COLOR 10, 0, 0
VDCFLAG% = 1
END IF
ELSE
IF ABS(VDCDISP!) > .1 THEN
COLOR 12, 0, 0
VDCFLAG% = 0
ELSE
COLOR 10, 0, 0
VDCFLAG% = 1
END IF
END IF
LOCATE 8, 50
PRINT ; USING "+##.# &"; VDCDISP!; "Vdc"
IF VDCFLAG% = 1 AND VACFLAG% = 1 AND FREQFLAG% = 1 THEN
FAILFLAG% = 1
ELSE
FAILFLAG% = 0
END IF
A$ = INKEY$
LOOP UNTIL VDCFLAG% = 1 OR A$ <> ""
COLOR 7, 1, 1
PRINT TAB(10); USING "Required Amplitude is: ##.# Vpk"; GENAMPL!
DO
CALL DMM2010(VOAC$, DDATA$, 2000!, .01, 99, 99, 99, 99, 99, 99, 99)
VACMEAS! = VAL(DDATA$) * SQR(2): DDATA$ = ""
IF SNM% = 10 THEN
'Read current input, but display voltage to match that of the func. gen
VACDISP! = (VACMEAS! + (VACMEAS! / IINSEN.MEAS! * SPECS.INPUTRES * 1000))*1.1 'Display reads 10% low
ELSE
VACDISP! = VACMEAS!
END IF
IF ABS(VACDISP! - GENAMPL!) > .05 * GENAMPL! THEN
COLOR 12, 0, 0
VACFLAG% = 0
ELSE
COLOR 10, 0, 0
VACFLAG% = 1
END IF
LOCATE 9, 50
PRINT ; USING "##.# &"; VACDISP!; "Vpk"
A$ = INKEY$
LOOP UNTIL VACFLAG% = 1 OR A$ <> ""
COLOR 7, 1, 1
VAC! = VACMEAS!
'CALL THRESET 'Prevents shorting out the +15V supply.
CALL LOADMUX(CH%, COFF%)
CALL PAUSE(1)
END SUB
FUNCTION LEADREFF$ (CONTRES!)
SENSOR$ = SPECS.SENTYPE 'Plat or Nickel or ?
LOWOHM! = SENSOROUT!(SPECS.MININ)
HIGHOHM! = SENSOROUT!(SPECS.MAXIN)
MIDOHM! = (LOWOHM! + HIGHOHM!) / 2 'Use midpoint ohms
MAXOUT! = SPECS.MAXOUT
MINOUT! = SPECS.MINOUT
ORANGE! = (SPECS.MAXOUT - SPECS.MINOUT) 'volts
INRANGE! = SPECS.MAXIN - SPECS.MININ 'temperature or ohms
VGAIN! = ORANGE! / INRANGE! 'V/C or V/ohms (POT)
TGAIN! = INRANGE! / ORANGE! 'C/V or Ohms/V (POT)
SNM% = SENSORNUM%
RLEAD! = 20 'hard-wired in fixture
SPEC! = SPECS.LEADRERR
set! = 0
CLS
TESTTITLE$ = "Lead Resistance Effects Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
CALL OHMSET(MIDOHM! + set!, 0) 'set the rdac
CALL SETTEST(2) 'measure the rdac and add series R in (-) leg
IF SNM% < 4 AND SNM% > 5 THEN 'Check if resistance in
PRINT "This test is not performed on model "; SPECS.MODNAME
EXIT FUNCTION
ELSE
B$ = SETSUPPLYV$(VSADDR%, 0!, SUPPLYOFF$) 'Set supply voltage and apply
'1/8/10 TSO PRINT "Make sure the module under test is in the 7BXX socket location..."
'1/8/10 TSO BEEP
'1/8/10 TSO CALL CONTINUE
END IF
B$ = SETSUPPLYV$(VSADDR%, SPECS.NOMVS, SUPPLYON$) 'Set supply voltage and apply
'RDAC likes to set approx one ohm less...
set! = .5
CALL LOADMUX(2, CON%) 'connect output of module to dvm
IF INRANGE! > 1000 THEN
CALL PAUSE(3) 'set up dvm
END IF
CALL DMM2010(VODC$, DDATA$, 2000!, 5, .5, 99, 99, 99, 99, 99, 99)
V1! = VAL(DDATA$): DDATA$ = ""
'B. PUT IN 20 OHMS (0.1%) AND DETERMINE EFFECT ON OUTPUT
'Instruct test operator to move module to leader test sockets...
B$ = SETSUPPLYV$(VSADDR%, 0!, SUPPLYOFF$) 'Set supply voltage and apply
LOCATE 10, 10
PRINT "Install the module under test in the Lead Comp socket location..."
BEEP
CALL CONTINUE
B$ = SETSUPPLYV$(VSADDR%, SPECS.NOMVS, SUPPLYON$) 'Set supply voltage and apply
CLS
TESTTITLE$ = "Lead Resistance Effects Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
IF INRANGE! >= 1000 THEN
CALL PAUSE(3) 'read module output
END IF
CALL DMM2010(VODC$, DDATA$, 2000!, 5, .5, 99, 99, 99, 99, 99, 99)
V2! = VAL(DDATA$): DDATA$ = ""
OHM! = MIDOHM!
CALL MEASRES(OHM!, 3, EMF!)
RSIM! = OHM! + CONTRES!
'calculate temperature based on the rdac value alone
IF SNM% = 5 THEN
TCALC! = RTDTEMP!(RSIM!, SENSOR$)
ELSE
TCALC! = RSIM!
END IF
CALL LOADMUX(2, COFF%) 'Deselect MUX channel
VERR! = V2! - V1!
IF SNM% = 5 THEN
SPECRTO! = SPEC! * VGAIN! * RLEAD! '<27>C/OHM*(V/C<>)*OHM = V
ELSE
SPECRTO! = SPEC! * VGAIN! * RLEAD! 'OHM/OHM*(V/OHM)*OHM = V
END IF
IF ABS(VERR!) <= SPECRTO! THEN
LRE$ = "PASS"
ELSE
LRE$ = "FAIL"
SOUND 1000, .5
END IF
LOCATE 10, 10
PRINT ; USING "&"; "Status: ";
IF LRE$ = "FAIL" THEN
COLOR 12, 1, 1
ELSE
COLOR 10, 1, 1
END IF
PRINT TAB(18); LRE$;
PRINT SPC(58);
COLOR 7, 1, 1
PRINT SPC(20);
IF SNM% = 5 THEN
UNITS$ = "C/ohm"
ELSE
UNITS$ = "ohm/ohm"
END IF
PRINT TAB(10); "Measured lead resistance effect is";
PRINT TAB(50); USING " +#.### &"; VERR! / VGAIN! / RLEAD!; UNITS$
PRINT TAB(10); "Maximum test lead resistance effect is";
PRINT TAB(50); USING "+/-#.### &"; SPEC!; UNITS$
LEADREFF$ = LRE$ + STR$(VERR! / VGAIN! / RLEAD!) + "3"
COLOR 7, 1, 1
PRINT
PRINT TAB(10); "If you want to continue testing this module"
PRINT TAB(10); "return the module to the 7BXX socket location..."
BEEP
IF FINAL% <> 1 THEN CALL PAUSE(1)
END FUNCTION
FUNCTION LOOPVOLT$ (TTYPE%)
'Function that measures the loop voltage under the specified load
'and supply conditions defined by the input flag (TTYPE!)
'
'TTYPE%=0, min input load, minimum loop supply
'TTYPE%=1, max input load, minimum loop supply
MAXLOAD! = SPECS.MAXIN 'Max input value
MINLOAD! = SPECS.MININ
TOL! = .15 'Maximum tolerance allowed
'Changed from 5% to 15% for SCM7B35-1256 oscillator op-amp IC2005-002 to IC2089-002. Vcompl old 21V@4mA 17.7V@20mA, new 22.3V@4mA 19.8V@20mA.
SNM% = SENSORNUM%
IF TTYPE% = 0 THEN
LOAD$ = " (Min Load, Minimum Supply Voltage)"
INLOAD! = MINLOAD!
VSUPPLY! = SPECS.MINVS 'Minimum supply voltage
VLOOPEXP! = SPECS.VEXCLO 'Expected loop voltage
ELSE
LOAD$ = " (Full Load, Minimum Supply Voltage)"
INLOAD! = MAXLOAD!
VSUPPLY! = SPECS.MINVS 'Minimum supply voltage
VLOOPEXP! = SPECS.VEXCHI 'Expected loop voltage
END IF
CLS
TESTTITLE$ = "Loop Voltage Test" + LOAD$
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
IF SNM% <> 9 THEN
PRINT "This test is not performed on model "; SPECS.MODNAME
EXIT FUNCTION
ELSE
PRINT "Testing, please wait..."
END IF
IINMEAS! = SETCURRENTIN!(INLOAD!, .001)
B$ = SETSUPPLYV$(VSADDR%, VSUPPLY!, SUPPLYON$) 'Set supply voltage and apply
CALL DMM2010(VODC$, "99", 2000!, 5, 99, 99, 99, 99, 99, 99, 99)
CALL LOADMUX(1, CON%)
CALL LOADMUX(2, COFF%) 'Turns ON randomly shorting the input
CALL LOADMUX(4, COFF%) 'Turns ON randomly shorting the input
CALL DMM2010(VODC$, DDATA$, VLOOPEXP! * (1 + 1.5 * TOL!), 5, 99, 99, 99, 99, 99, 99, 99)
VLOOPMEAS! = VAL(DDATA$): DDATA$ = ""
CALL LOADMUX(1, COFF%)
LOCATE 10, 10
PRINT "Status: ";
IF ABS(VLOOPMEAS! - VLOOPEXP!) < (TOL! * VLOOPEXP!) THEN
LOOPV$ = "PASS"
COLOR 10, 1, 1
ELSE
LOOPV$ = "FAIL"
SOUND 1000, .5
COLOR 12, 1, 1
END IF
PRINT LOOPV$;
COLOR 7, 1, 1
PRINT SPC(10);
PRINT TAB(10); "Measured loop voltage is";
PRINT TAB(50); USING "###.## V"; VLOOPMEAS!
PRINT TAB(10); "Expected Value is";
PRINT TAB(50); STR$(VLOOPEXP!) + " +/-" + STR$(VLOOPEXP! * TOL!) + " V"
B$ = SETSUPPLYV$(VSADDR%, SPECS.NOMVS, SUPPLYON$) 'Set supply voltage and apply
LOOPVOLT$ = LOOPV$ + STR$(VLOOPMEAS!) + "2"
IF FINAL% <> 1 THEN CALL PAUSE(1)
END FUNCTION
SUB MEASRES (OHM!, RESNUM%, EMF!)
'Measure specified resistance
'Legend:
'RESNUM% Resistor
'------- --------
' 1 7B39 Output current conversion resistor
' 2 Simulated thermistors, 25C & 35C
' 3 Simulated sensor input, RTD or pot, 8-20Mohm
' 4 Contact resistance, RTD or pot input, milli-ohm
' 5 IDAC turnover resistor
' 6 7B39 & 7B22 load resistors
SNM% = SENSORNUM%
EMF! = 0
EMFFAIL% = 0
SELECT CASE RESNUM% 'Branches to the specific measurement
CASE 1
'Measure 39 output turnover resistor
CALL LOADMUX(2, CON%)
CALL LOADMUX(8, CON%)
OHM$ = OHM4$
RATE! = 3
DELAY! = 99
COMP% = 1
INITTOL! = .05 '5% initial tolerance
CASE 2
'Measure simulated thermistors - voltage test head
CALL LOADMUX(4, CON%) 'Sets mux channel
CALL PAUSE(.5)
OHM$ = OHM2$
RATE! = 99
DELAY! = 99
COMP% = 99
INITTOL! = .05 '5% initial tolerance
CASE 3
'Measure RTD testhead RSIM
CALL SETTEST(7) '120<32> 3-WIRE INPUT
CALL LOADMUX(1, CON%)
CALL LOADMUX(8, CON%)
IF OHM! > 1000 THEN
OHM$ = OHM2$
ELSE
OHM$ = OHM4$
END IF
RATE! = 3
DELAY! = 99 '.5
COMP% = 99 '1
INITTOL! = .15 '15% initial tolerance
CASE 4
CALL OHMSET(1E+10, 0) 'Open all relays
CALL SETTEST(3) 'Measure contact resistance
CALL LOADMUX(1, CON%) 'Sets mux channel
CALL DMM2010(VODC$, DDATA$, .001, 3, 2, 99, 99, 99, 99, 99, 99)
EMF! = VAL(DDATA$)
CALL LOADMUX(6, CON%) 'set sense channel
OHM$ = OHM4$
RATE! = 3
DELAY! = 99 '.5
COMP% = 99 '1
INITTOL! = .15 '15% initial tolerance
CASE 5
'Measure voltage test head IDAC turnover resistor
CALL LOADMUX(0, CON%)
CB0VAL% = (CB0VAL% OR &H4) 'Open K15 to iso R-2R
CALL SETTH(CB0VAL%, CB0%) '0 0 0 0 0 1 0 0
CB3VAL% = &HFF '1 1 1 1 0 1 0 1
CALL SETTH(CB3VAL%, CB3%) 'CMD to set relays 21 and 22
CALL LOADMUX(6, CON%)
CALL LOADMUX(7, CON%)
OHM$ = OHM4$
RATE! = 3
DELAY! = 99
COMP% = 1
INITTOL! = .05 '5% initial tolerance
CASE 6
'Measure 39 or 22 load resistor
CALL LOADMUX(2, CON%)
OHM$ = OHM2$
RATE! = 99
DELAY! = 99
COMP% = 99
INITTOL! = .15 '15% initial tolerance
END SELECT
CALL DMM2010(OHM$, DDATA$, OHM!, RATE!, DELAY!, 99, 99, 99, 99, COMP%, 99)
TEMPR! = VAL(DDATA$): DDATA$ = ""
IF OHM! > 1! AND ABS(TEMPR! - OHM!) > (OHM! * INITTOL!) THEN 'Test for deviation
CLS
LOCATE 10, 10
PRINT "Measured resistance = "; TEMPR!; " ohms."
PRINT TAB(10); USING "Required resistance = #######.## ohms to #######.## ohms"; OHM! * (1 - INITTOL!); OHM! * (1 + INITTOL!)
PRINT TAB(10); "Check all cables and try again."
PRINT TAB(10); "If the failure continues, notify engineering."
END
END IF
CALL LOADMUX(0, CON%) 'Clears mux
IF RESNUM% = 3 THEN
CALL SETTEST(2) 'Reset to standard operation
IF OHM! < 17000 THEN
IF EMF! > .0002 THEN
EMFFAIL% = 1
END IF
ELSE
IF EMF! > .005 THEN
EMFFAIL% = 1
END IF
END IF
ELSEIF RESNUM% = 4 THEN
CALL SETTEST(2)
IF TEMPR! > .3 THEN 'Contact res. out of spec
PRINT
PRINT TAB(10); "Contact resistance = "; TEMPR!; "ohms."
PRINT TAB(10); "This test head requires repair."
PRINT TAB(10); "Please notify engineering."
CALL CONTINUE
END
END IF
IF OHM! < 17000 THEN
IF EMF! > .0002 THEN
EMFFAIL% = 1
END IF
ELSE
IF EMF! > .005 THEN
EMFFAIL% = 1
END IF
END IF
END IF
IF EMFFAIL% = 1 THEN 'EMF out of spec
PRINT
PRINT TAB(10); "Relay EMF = "; EMF! * 1000000!; "uV."
PRINT TAB(10); "This test head requires repair."
PRINT TAB(10); "Please notify engineering."
CALL CONTINUE
END
END IF
OHM! = TEMPR! 'Passes resistor value back
END SUB
FUNCTION OPENLOOPDETECT$
'Test the open loop detect function for the SCM7B39-1257.
'If the output current loop is open, the input impedance of the
'module must go to > 20Kohm in <= 5ms. Since the input is also a
'current loop, open the output loop and measure the input current.
MAXOUT! = SPECS.MAXOUT
SNM% = SENSORNUM%
PLUSFSIN! = SENSOROUT!(SPECS.MAXIN)
INRANGE! = PLUSFSIN! - SENSOROUT!(SPECS.MININ)
DACACC! = .01 '1% DAC setting accuracy
ITOL! = .1 '10% input current tolerance
OLISPEC! = 0 'input current for open output loop
OLITOL! = 1 '+/-1mA measurement tolerance
'Changed from 0.1mA to 1mA due to SCM7B39-1257 circuit revision JL MF 10/11/2024
CLS
TESTTITLE$ = "Open Loop Detect Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
IF SNM% <> 10 AND LEFT$(MN$, 9) <> "7B39-1257" THEN 'Check if 39-1257
PRINT "This test is not performed on model "; SPECS.MODNAME
EXIT FUNCTION
ELSE
PRINT "Testing, please wait..."
END IF
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
IIN1! = SETCURRENTIN!(PLUSFSIN!, DACACC! * INRANGE! / 1000! * IINSEN!)
CALL SETOUTLOAD(100000!) 'Open output loop
CALL LOADMUX(6, CON%) 'Measure Iin
CALL DMM2010(VODC$, DDATA$, 5, 99, 99, 99, 99, 99, 99, 99, 99)
IIN2! = VAL(DDATA$) / IINSEN! * 1000! 'mA
DDATA$ = ""
CALL LOADMUX(6, COFF%)
LOCATE 10, 10
PRINT "Status: ";
IF ABS(IIN1! - PLUSFSIN!) < PLUSFSIN! * ITOL! AND ABS(IIN2! - OLISPEC!) < OLITOL! THEN
OLDET$ = "PASS"
COLOR 10, 1, 1
ELSE
OLDET$ = "FAIL"
SOUND 1000, .5
COLOR 12, 1, 1
END IF
PRINT TAB(18); OLDET$;
PRINT SPC(12);
COLOR 7, 1, 1
PRINT SPC(31);
PRINT TAB(10); "Input current with output loop intact is";
PRINT TAB(52); USING "##.# mA"; IIN1!
PRINT TAB(10); "Required input current is";
PRINT TAB(52); USING "##.# mA to ##.# mA"; PLUSFSIN! * (1 - ITOL!); PLUSFSIN! * (1 + ITOL!)
PRINT
PRINT TAB(10); "Input current with output loop open is";
PRINT TAB(52); USING "##.# mA"; IIN2!
PRINT TAB(10); "Required input current is";
PRINT TAB(52); USING "##.# mA to ##.# mA"; OLISPEC! - OLITOL!; OLISPEC! + OLITOL!
IF SNM% = 10 THEN 'SCM7B39-04, -1257 are showing +f.s. shift. Suspect test head issue. Modules stable on bench.
OPENLOOPDETECT$ = OLDET$ + STR$(IIN2!) + "1"
ELSE
OPENLOOPDETECT$ = OLDET$ + STR$(IIN2!) + "0"
END IF
COLOR 7, 1, 1
IF FINAL% <> 1 THEN
CALL PAUSE(1)
ELSE
CALL PAUSE(.5)
END IF
END FUNCTION
FUNCTION OPENTC$
MINOUT! = SPECS.MINOUT 'Output voltage (V)
MAXOUT! = SPECS.MAXOUT
MN$ = SPECS.MODNAME
SNM% = SENSORNUM%
INRANGE! = SENSOROUT!(SPECS.MAXIN!) - SENSOROUT!(SPECS.MININ!)
ORANGE! = MAXOUT! - MINOUT!
DACACC! = .01 '1% DAC setting accuracy
IF SNM% = 4 THEN
OINSPEC! = .5
ELSEIF LEFT$(MN$, 10) = "7B47K-1254" OR LEFT$(MN$, 10) = "7B47K-1288" OR LEFT$(MN$, 9) = "7B36-1246" THEN
OINSPEC! = -.3
ELSE
OINSPEC! = MAXOUT! + .15
END IF
CLS
TESTTITLE$ = "Open Sensor Detect Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
IF SNM% < 3 OR SNM% > 5 THEN 'Check for TC/POT in
PRINT "This test is not performed on model "; SPECS.MODNAME
EXIT FUNCTION
ELSE
PRINT "Testing, please wait..."
END IF
'inputs should be shorted and attenuator cleared upon entering test
IF SNM% <> 4 THEN 'Check if pot in
MININ! = SPECS.MININ
VOLTAGE! = SENSOROUT!(MININ!)
CALL SETDAC(VOLTAGE!, DACACC! * INRANGE!, 1, 0) 'Sets input voltage
CALL PAUSE(.2)
'Remove short on inputs 06/05/07 MR
CALL SETTH(CB0VAL% OR &H8, CB0%) '0 0 0 0 1 0 0 0 06/05/07 MR
CALL SETTH((CB1VAL% OR &HC0), CB1%) 'Clear R/2R ladder 06/05/07 MR
CALL SETTH((CB2VAL% OR &HFF), CB2%)
CALL LOADMUX(2, CON%) 'Measure Vout
CALL PAUSE(1.2) 'Wait 2.5s (spec is 10s)
CALL DMM2010(VODC$, DDATA$, 2000!, 99, 99, 99, 99, 99, 99, 99, 99)
VO! = VAL(DDATA$): DDATA$ = ""
CALL LOADMUX(2, COFF%)
ELSE
MININ! = SPECS.MININ
CALL LOADMUX(0, CON%) 'Disable DUT output channel
RIN! = SENSOROUT!(MININ!) + set! '<27>C-><3E> + Add set (<28>)
CALL OHMSET(RIN!, 0) 'Set RDAC
CALL SETTEST(2) 'Normal operation
CALL LOADMUX(2, CON%) 'Enable DUT output channel
CALL OHMSET(1E+10, 0) 'Set RDAC
CALL PAUSE(1)
CALL DMM2010(VODC$, DDATA$, 2000!, 99, .8, 99, 99, 99, 99, 99, 99)
VO! = VAL(DDATA$): DDATA$ = ""
CALL LOADMUX(2, COFF%)
END IF
IF OINSPEC! >= MAXOUT! THEN 'Check for upscale open TC detect
COND$ = ">"
IF VO! >= OINSPEC! THEN
OTC$ = "PASS"
ELSE
OTC$ = "FAIL"
SOUND 1000, .5
END IF
ELSE 'else downscale open TC detect
COND$ = "<"
IF VO! <= OINSPEC! THEN
OTC$ = "PASS"
ELSE
OTC$ = "FAIL"
SOUND 1000, .5
END IF
END IF
LOCATE 10, 10
PRINT ; USING "&"; "Status: ";
IF OTC$ = "FAIL" THEN
COLOR 12, 1, 1
ELSE
COLOR 10, 1, 1
END IF
PRINT TAB(18); OTC$;
PRINT SPC(12);
COLOR 7, 1, 1
PRINT SPC(20);
PRINT TAB(10); "Open sensor response is";
PRINT TAB(50); USING " ##.### V"; VO!
PRINT TAB(10); "Required response is";
PRINT TAB(50); USING "& ##.## V"; COND$; OINSPEC!
OPENTC$ = OTC$ + STR$(VO!) + "1"
COLOR 7, 1, 1
IF FINAL% <> 1 THEN CALL PAUSE(1)
END FUNCTION
FUNCTION OUTNOISERMS$
MININ! = SENSOROUT!(SPECS.MININ) 'Calculate module input
MAXIN! = SENSOROUT!(SPECS.MAXIN)
MINVS! = SPECS.MINVS
SPEC! = SPECS.OUTNOISERMS 'uVrms or uArms
SNM% = SENSORNUM%
INRANGE! = MAXIN! - MININ!
DACACC! = .01 '1% DAC setting accuracy
IF SNM% = 8 OR SNM% = 10 THEN
MINOUT! = (SPECS.MINOUT / 1000) * IOUTSEN.MEAS!
MAXOUT! = (SPECS.MAXOUT / 1000) * IOUTSEN.MEAS!
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
ELSE
IF SNM% = 7 THEN
CALL SETOUTLOAD(VOUTLOAD1!)
END IF
MINOUT! = SENSOROUT!(SPECS.MINOUT) 'Calculate module input
MAXOUT! = SENSOROUT!(SPECS.MAXOUT)
END IF
XFRFN! = (MAXOUT! - MINOUT!) / INRANGE!
YINT! = MINOUT! - XFRFN! * MININ!
IF ABS(MININ!) = ABS(MAXIN!) AND (YINT! = 0) THEN
ONMININ! = 0!
ELSE
ONMININ! = MININ! 'Calc. -f.s. input
END IF
CLS
TESTTITLE$ = "Output Noise Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
PRINT "Testing, please wait..."
IF SNM% = 4 OR SNM% = 5 THEN 'Check if resistance in
CALL SETTEST(2)
CALL OHMSET(ONMININ!, 0) 'Set -f.s. input
ELSEIF SNM% = 8 THEN
IF MINOUT! = 0 THEN
VOLTAGE! = MAXIN! / 2
ELSE
VOLTAGE! = MAXIN! 'ONMININ! Changed JL 08/30/00
END IF
CALL SETDAC(VOLTAGE!, DACACC! * INRANGE!, 1, 0)
ELSEIF SNM% = 2 OR SNM% = 9 OR SNM% = 10 THEN
MODIN! = SETCURRENTIN!(ONMININ!, DACACC! * INRANGE! / 1000! * IINSEN!)
ELSE
VOLTAGE! = ONMININ!
CALL SETDAC(VOLTAGE!, DACACC! * INRANGE!, 1, 0)'Set -f.s. input
END IF
CALL LOADMUX(2, CON%) 'Measure Vout
CALL DMM2010(VOAC$, DDATA$, 2000!, 99, 99, 99, 99, 99, 99, 99, 30)
VRMS! = ABS(VAL(DDATA$) * 1000000!)
DDATA$ = ""
CALL LOADMUX(2, COFF%)
IF SNM% = 8 OR SNM% = 10 THEN
VRMS! = VRMS! / IOUTSEN.MEAS!
END IF
IF VRMS! <= SPEC! THEN
VNOISE$ = "PASS"
ELSE
VNOISE$ = "FAIL"
SOUND 1000, .5
END IF
LOCATE 10, 10
PRINT ; USING "&"; "Status: ";
IF VNOISE$ = "FAIL" THEN
COLOR 12, 1, 1
ELSE
COLOR 10, 1, 1
END IF
PRINT TAB(18); VNOISE$;
PRINT SPC(12);
COLOR 7, 1, 1
PRINT SPC(20);
PRINT TAB(10); "Measured output noise is";
IF SNM% <> 8 AND SNM% <> 10 THEN
PRINT TAB(50); USING "##### uV rms"; VRMS!
ELSE
PRINT TAB(50); USING "####.# uA rms"; VRMS!
END IF
PRINT TAB(10); "Maximum output noise is";
IF SNM% <> 8 AND SNM% <> 10 THEN
PRINT TAB(50); USING "##### uV rms"; SPEC!
OUTNOISERMS$ = VNOISE$ + STR$(VRMS!) + "0"
ELSE
PRINT TAB(50); USING "####.# uA rms"; SPEC!
OUTNOISERMS$ = VNOISE$ + STR$(VRMS!) + "1"
END IF
COLOR 7, 1, 1
IF FINAL% <> 1 THEN CALL PAUSE(1)
END FUNCTION
SUB SETAC (ONOFF%)
SNM% = SENSORNUM%
IF SNM% <> 5 OR SNM% <> 4 THEN CALL SETTH(&HFF, 3) 'Prevents shorting out the +15V supply.
IF ONOFF% = 1 THEN
IF SNM% = 5 OR SNM% = 4 THEN 'Check if resistance in
CALL SETTEST(6) 'Connect function generator
ELSEIF SNM% = 2 THEN
IF TE$ = "TE1040OLDCS" THEN
CB0VAL% = &HFD '1 1 1 1 1 1 0 1 CMD to set relays 21 & 22
CB3VAL% = &HF5 '1 1 1 1 0 1 0 1 CMD to set relays 21 & 22
ELSE
CB0VAL% = &HE9 '1 1 1 0 1 0 0 1 CMD to set relays 21 & 22
CB3VAL% = &HDF '1 1 0 1 1 1 1 1 CMD to set relays 21 & 22
END IF
CALL SETTH(CB0VAL%, CB0%)
CALL SETTH(CB3VAL%, CB3%)
ELSEIF SNM% = 9 THEN
IF TE$ = "TE1040OLDCS" THEN
CB0VAL% = &HED '1 1 1 0 1 1 0 1 CMD to set relay 22 only
CB3VAL% = &HFD '1 1 1 1 1 1 0 1 CMD to set relay 22 only
ELSE
CB0VAL% = &HED '1 1 1 0 1 1 0 1
CB3VAL% = &HC7 '1 1 0 0 0 1 1 1
END IF
CALL SETTH(CB3VAL%, CB3%)
CALL SETTH(CB0VAL%, CB0%)
ELSEIF SNM% = 10 THEN
CB3VAL% = (CB3VAL% OR &H10) AND &HDF'0 0 0 1 0 0 0 0
'D.U.T. input = current source
'1 1 0 1 1 1 1 1
CALL SETTH(CB3VAL%, CB3%) 'Input current sourced from +15V
CB0VAL% = (CB0VAL% AND &HE9) OR &H8 '1 1 1 0 1 0 0 1
CALL SETTH(CB0VAL%, CB0%) 'ground inputs, short series R
'remove short on inputs
ELSE
CB0VAL% = (CB0VAL% AND &HE9) OR &H8 '1 1 1 0 1 0 0 1
CALL SETTH(CB0VAL%, CB0%) 'ground inputs, short series R
'remove short on inputs
END IF
ELSE
IF SNM% = 4 OR SNM% = 5 THEN
CALL THRESET
ELSE
CALL SETTH(&HFF, 3) 'Prevents shorting out the +15V supply.
CB0VAL% = CB0VAL% OR &H2 '0 0 0 0 0 0 1 0
CALL SETTH(CB0VAL%, CB0%) 'Select DAC input
END IF
END IF
END SUB
FUNCTION SETCURRENTIN! (MODIN!, DACACCV!)
'Sets the input current source to the D.U.T.
'Inputs; Desired input current in mA.
'Outputs; Measured input current in mA.
'
'Schematic; Current Input, New Current Source (PCB1197).
'Used on TE1062 and TE1040NEWCS, post 05/2007
'* Short +IN and -IN using test head relay for startup test.
' -------
' Vdac-----| |----- +15V
' | | --> Iout = Vdac / (IINSEN.MEAS + RCONV)
' | |---
' | | |
' ------- IINSEN.MEAS
' |
' RCONV (DUT)
' |
' GA1
'
'
'Schematic; Two-Wire Transmitter Input, New Current Source (PCB1197).
'Used on TE1062 and TE1040NEWCS, post 05/2007
' -------
' Vdac-----| |----- +EXC
' | | --> Iout = Vdac / IINSEN.MEAS
' | |---
' | | |
' ------- IINSEN.MEAS
' |---------------
' | |
' GA1 RCONV (DUT)
' |
' FGND
'
'Schematic; Current Input, Old Current Source.
'Used on TE1040OLDCS, pre 05/2007
'* Short +IN and -IN using test head relay for startup test.
'
' +15V
' |
' RCONV (DUT)
' |
' ------- |
' Vdac-----| |---
' | | --> Iout = Vdac / IINSEN.MEAS
' | |---
' | | |
' ------- IINSEN.MEAS
' |
' GA1
'
'Schematic; Two-Wire Transmitter Input, Old Current Source.
'Used on TE1040OLDCS, pre 05/2007
' -------
' Vdac-----| |----- +EXC
' | | --> Iout = Vdac / IINSEN.MEAS
' | |---
' | | |
' ------- IINSEN.MEAS
' |---------------
' | |
' GA1 RCONV (DUT)
' |
' FGND
SNM% = SENSORNUM%
IF TE$ = "TE1062" THEN 'New Current Source
IF SNM% = 0 THEN 'SNM% = 0 is case upon system startup
RCONV! = 0
ELSE 'SNM% = 10, mA input
RCONV! = 250 'Module current conversion resistor
END IF
CB3VAL% = CB3VAL% OR &H10 '0 0 0 1 0 0 0 0
CALL SETTH(CB3VAL%, CB3%) 'Input current sourced from +15V
VSENATTEN! = (IINSEN.MEAS! + RCONV!) / IINSEN.MEAS!
ELSE 'TE1040, Old Current Source
IF SNM% = 0 THEN 'test head startup test
IF SPECS.INPUTRES! <> 0 AND TE$ = "TE1040NEWCS" THEN
'Pass thru modules w/ conversion R.
VSENATTEN! = -2
ELSE
VSENATTEN! = -1 'flag used in SETDAC
END IF
ELSEIF SNM% = 2 THEN 'mA input
VSENATTEN! = -2 'flag used in SETDAC
ELSE 'SNM% = 9, 2WTX input
VSENATTEN! = -3 'flag used in SETDAC
END IF
END IF
VSENSE! = MODIN! / 1000! * IINSEN.MEAS! 'Iin, desired * current source sense R
CH% = 6
CALL SETDAC(VSENSE!, DACACCV!, CH%, VSENATTEN!) 'Sets DAC
CALL LOADMUX(CH%, CON%)
CALL DMM2010(VODC$, DDATA$, 99, 99, 99, 99, 99, 99, 99, 99, 99)
VSENSE! = VAL(DDATA$): DDATA$ = ""
CALL LOADMUX(CH%, COFF%)
SETCURRENTIN! = VSENSE! / IINSEN.MEAS! * 1000!
END FUNCTION
SUB SETOUTLOAD (LOAD!)
'Set the specified output load.
IF LOAD! >= 100000 THEN 'load = open
MASK% = &HFF '1 1 1 1 1 1 1 1
ELSEIF LOAD! > 4700 THEN 'load = 4.75K ohm
MASK% = &HFB '1 1 1 1 1 0 1 1
ELSEIF LOAD! > 699 THEN 'load = 700 ohm
MASK% = &HFD '1 1 1 1 1 1 0 1
ELSE 'load = 192 ohm
MASK% = &HFE '1 1 1 1 1 1 1 0
END IF
CB3VAL% = (CB3VAL% OR &H7) AND MASK% '0 0 0 0 0 1 1 1
CALL SETTH(CB3VAL%, CB3%)
END SUB
FUNCTION SUPPLYVSENS$
MAXIN! = SPECS.MAXIN 'Calc. maxin
MININ! = SPECS.MININ 'Calc. minin
MAXOUT! = SPECS.MAXOUT
MINOUT! = SPECS.MINOUT
MINVS! = SPECS.MINVS 'low supply test voltage
NOMVS! = SPECS.NOMVS
MAXVS! = SPECS.MAXVS 'high supply test voltage
SPEC! = SPECS.PSS
INRANGE! = MAXIN! - MININ!
ORANGE! = MAXOUT! - MINOUT!
CLS
TESTTITLE$ = "Supply Voltage Sensitivity Test"
CALL HEADERB(TESTTITLE$)
LOCATE 10, 10
PRINT "Testing, please wait..."
SNM% = SENSORNUM%
IF SNM% = 0 OR SNM% = 1 OR SNM% = 3 OR SNM% = 7 OR SNM% = 8 THEN 'VOLTAGE IN
IF SNM% = 7 THEN
CALL SETOUTLOAD(VOUTLOAD1!)
ELSEIF SNM% = 8 THEN
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
END IF
VOLTAGE! = SENSOROUT!(MAXIN!)
IF SNM% = 3 THEN 'TC IN
TCTYPE$ = UCASE$(LEFT$(SENSOR$, 1))
IF TCTYPE$ = "B" THEN
IF VOLTAGE! < .00024 THEN
VOLTAGE! = 6.3201E-04
END IF
END IF
END IF
CALL SETDAC(VOLTAGE!, .01 * INRANGE!, 1, 0) 'Sets input voltage
IF MID$(SPECS.MODNAME, 3, 2) = "47" THEN
TSIM! = TCTEMP(TSIM! + VTCTA!, SENSOR$)
ELSE
TSIM! = MEASUREVIN!
END IF
ELSEIF SNM% = 2 OR SNM% = 9 OR SNM% = 10 THEN 'CURRENT IN
IF SNM% = 10 THEN
CALL SETOUTLOAD(IOUTSEN!) 'Connect output load
END IF
TSIM! = SETCURRENTIN!(MAXIN!, .01 * INRANGE! / 1000! * IINSEN!)
ELSEIF SNM% = 5 OR SNM% = 4 THEN 'RESISTANCE IN
RINPUT! = SENSOROUT!(MAXIN!)
CALL OHMSET(RINPUT!, 0) 'Set input
OHM! = RINPUT!
CALL MEASRES(OHM!, 3, EMF!) 'Measure simulated resistor
RSIM! = OHM!
IF SNM% = 5 THEN
TSIM! = RTDTEMP!(RSIM!, SENSOR$) 'Calculate actual simulated temp.
ELSE
TSIM! = RSIM!
END IF
CALL PAUSE(2)
END IF
CALL LOADMUX(2, CON%) 'Measure Vout
CALL DMM2010(VODC$, "99", 2000!, 2, 99, 99, 99, 99, 99, 99, 99)
CALL PAUSE(1)
CALL DMM2010(VODC$, DDATA$, 99, 2, 99, 99, 99, 99, 99, 99, 99)
VOUT1! = VAL(DDATA$): DDATA$ = ""
SL$ = SETSUPPLYV$(VSADDR%, MINVS!, SUPPLYON$) 'Set supply voltage and apply
CALL PAUSE(2)
CALL DMM2010(VODC$, DDATA$, 99, 2, 99, 99, 99, 99, 99, 99, 99)
VOUT2! = VAL(DDATA$): DDATA$ = ""
CALL LOADMUX(2, COFF%) 'Clear mux lines
SL$ = SETSUPPLYV$(VSADDR%, 0!, SUPPLYOFF$) 'Set supply OFF
MAXCHG! = ABS(SPEC! * ((MINVS! - NOMVS!) / (MAXVS! - MINVS!)) * MAXOUT!) 'volts change allowed
IF (ABS(VOUT2! - VOUT1!) <= MAXCHG!) THEN
PSS$ = "PASS"
ELSE
PSS$ = "FAIL"
SOUND 1000, .5
END IF
LOCATE 10, 10
PRINT ; USING "&"; "Status: ";
IF PSS$ = "FAIL" THEN
COLOR 12, 1, 1
ELSE
COLOR 10, 1, 1
END IF
PRINT TAB(18); PSS$
COLOR 7, 1, 1
PRINT SPC(20);
PRINT TAB(10); "Measured change in output (+F.S. input) is";
PRINT TAB(55); USING "#####.### mV"; (VOUT2! - VOUT1!) * 1000!
PRINT
PRINT TAB(10); "Maximum change in output voltage allowed is";
PRINT TAB(55); USING "+/- ###.### mV"; MAXCHG! * 1000!
'CALL THRESET
' SUPPLYVSENS$ = PSS$ + STR$((100 * MAXCHG! / VOUT4!) / (100 * (1 - (MINVS! / MAXVS!)))) + "4"
COLOR 7, 1, 1
END FUNCTION
SUB THRESET
SNM% = SENSORNUM%
'reset the voltage or RTD test head to a known, desired condition.
IF TE$ = "TE1039" THEN 'Check if resistance in
CALL OHMSET(100!, 0) 'Nominal resistance value
CALL SETTEST(2) 'Standard operation
ELSE
IF (SNM% = 1 OR SNM% = 7 OR SNM% = 8) AND (SPECS.MAXIN > 10! OR SPECS.MININ < -10!) THEN
SL$ = POWERIO$(VINADDR%, SUPPLYOFF$) 'Disable power supply
'Remove high voltage from +/-IN
END IF
CB3VAL% = &HFF
CALL SETTH(CB3VAL%, CB3%)
CB2VAL% = &HFF
CALL SETTH(CB2VAL%, CB2%)
CB1VAL% = &HFF
CALL SETTH(CB1VAL%, CB1%)
IF SNM% <> 9 THEN
CB0VAL% = &HE3 'short inputs and ground
CALL SETTH(CB0VAL%, CB0%) '1 1 1 0 0 0 1 1
ELSE
CB0VAL% = &HFB 'open inputs and do not ground them
CALL SETTH(CB0VAL%, CB0%) '1 1 1 1 1 0 1 1
END IF
END IF
CALL LOADMUX(0, CON%) 'Resets MUX
END SUB