Getting and Putting Data


This Rocky Mountain Basic example does the following:

  1. Takes a sweep, and reads the formatted data trace into an array.  The trace is read as a definite length block.

  2. Instructs you to remove DUT

  3. Downloads the trace back to the analyzer as an definite length block.

See Other SCPI Example Programs

100  DIM A$[10],Data1(1:51)
110  INTEGER Digits,Bytes
120  !
130  COM /Sys_state/ @Hp87xx,Scode
140  ! Identify I/O Port
150  CALL Iden_port
160  !
170  !
180  OUTPUT @Hp87xx;"SYST:PRES"
190  !
200  OUTPUT @Hp87xx;"CALC:PAR:SEL 'CH1_S11_1'"
210  !
220  ! Set up the analyzer to measure 51 data points.
230  OUTPUT @Hp87xx;"SENS1:SWE:POIN 51;*OPC?"
240  ENTER @Hp87xx;Opc
250  !
260  ! Take a single sweep, leaving the analyzer
270  ! in trigger hold mode.
280  OUTPUT @Hp87xx;"ABOR;:INIT1:CONT OFF;:INIT1;*WAI"
290  !
300  ! Select binary block transfer
310  OUTPUT @Hp87xx;"FORM:DATA REAL,64"
320  !
330  ! Request the channel 1 formatted data array
340  ! from the analyzer.
350  OUTPUT @Hp87xx;"CALC:DATA? FDATA"
360  !
370  ! Turn on ASCII formatting on the I/O path.
380  ! It is needed for reading the header
390  ! information.
400  ASSIGN @Hp87xx;FORMAT ON
410  !
420  ! Get the data header.  "A$" will contain the
430  ! "#" character indicating a block data transfer.
440  ! "Digits" will contain the number of characters
450  ! for the number of bytes value which follows.
460  ENTER @Hp87xx USING "%,A,D";A$,Digits
470  !
480  ! Get the rest of the header.  The number of
490  ! bytes to capture in the data array will be
500  ! placed in "Bytes".  Note the use of "Digits"
510  ! in the IMAGE string.
515  !
520  ENTER @Hp87xx USING "%,"&VAL$(Digits)&"D";Bytes
525  PRINT "HEADER",A$,Digits,Bytes
530  !
540  ! Turn off ASCII formatting on the I/O path;
550  ! it is not needed for transferring binary
560  ! formatted data.
570  ASSIGN @Hp87xx;FORMAT OFF
580  !
590  ! Get the data.
600  ENTER @Hp87xx;Data1(*)
610  !
620  ! Turn on ASCII formatting again.
630  ASSIGN @Hp87xx;FORMAT ON
640  !
650  ! Get the "end of data" character.
660  ENTER @Hp87xx;A$
670  !
680  ! Display the first three numbers in the array.
690  DISP "Trace: ";Data1(1);Data1(2);Data1(3);"..."
700  !
710  ! Use this time to visually compare the
720  ! numbers to the visible data trace.
730  WAIT 5
740  !
750  ! Prompt the operator to disconnect the test
760  ! device and how to continue the program.
770  DISP "Disconnect the test device -- Press Continue"
780  PAUSE
790  !
800  ! Update the display line.
810  DISP "Taking a new sweep...";
820  !
830  ! Take a sweep so the display shows new data.
840  OUTPUT @Hp87xx;":INIT1;*WAI"
850  DISP " Done."
860  WAIT 5
870  !
880  ! Send the header for an indefinite block length
890  ! data transfer.
900  DISP "Downloading saved trace...";
915  ! The first byte '3' indicates the next three digits equal number of transfer bytes
916  ! The number of transfer bytes equals 8x the number of tracepoints.
920  OUTPUT @Hp87xx;"CALC:DATA FDATA, #3408";
930  !
940  ! Turn off ASCII formatting.
950  ASSIGN @Hp87xx;FORMAT OFF
960  !
970  ! Send the data array back to the analyzer.
980  OUTPUT @Hp87xx;Data1(*),END
990  !
1000 ! Turn on ASCII formatting again.
1010 ASSIGN @Hp87xx;FORMAT ON
1020 DISP " Done!"
1030 END
1040 !
1050 !**************************************************************
1060 ! Iden_port:   Identify io port to use
1070 ! Description: This routines sets up the I/O port address for
1080 !              the SCPI interface.  For "HP 87xx" instruments,
1090 !              the address assigned to @Hp87xx = 800 otherwise,
1100 !              716.
1110 !**************************************************************
1120 SUB Iden_port
1130     COM /Sys_state/ @Hp87xx,Scode
1140 !
1150     IF POS(SYSTEM$("SYSTEM ID"),"HP 87")<>0 THEN
1160         ASSIGN @Hp87xx TO 800
1170         Scode=8
1180     ELSE
1190         ASSIGN @Hp87xx TO 716
1200         Scode=7
1210     END IF
1220 !
1230 SUBEND !Iden_port
1240 !