This file contains remote control and programming information
for the above-mentioned model with use of the PM9080/001
Optically Isolated RS232 Adapter/Cable.
It consists of the following chapters:
1. INSTALLING THE PM9080/001
2. INTRODUCTION TO PROGRAMMING
3. COMMAND REFERENCE
APPENDIXES
APPENDIX A ACKNOWLEDGE DATA
APPENDIX B STATUS DATA
APPENDIX C WAVEFORM DATA
APPENDIX D ASCII 7-BIT CODES
- Connect the PM9080/001 to the RS232 port of the computer
as indicated in the PM9080/001 Instruction Manual.
If necessary, use the 9-pin to 25-pin adapter and the
25-pin gender changer included in the PM9080/001 shipment.
- Hook the PM9080/001 cable to the ScopeMeter as
indicated in the PM9080/001 Instruction Manual.
- Turn on the computer and the ScopeMeter.
- Make sure that the communication settings match for the
RS232 port of the computer and the ScopeMeter.
After power-on, the default settings of the ScopeMeter
are as follows:
1200 baud, No parity, 8 data bits, 1 stop bit
You can modify the baud rate with the PC (Program
Communication) command. See chapter 3 COMMAND REFERENCE.
Other settings are fixed.
You can modify the computer RS232 port settings to match
the above ScopeMeter settings with the following
DOS command:
MODE COM1:1200,N,8,1
This command assumes that COM1 is the RS232 port used on
the computer. Replace COM1 in the above command with COM2,
COM3, or COM4 if one of these ports is used. You can place
this command in the computer startup file AUTOEXEC.BAT so
that the default settings for the computer are the same as
for the ScopeMeter. If you want to use a higher
data transfer speed (baud rate), let your QBASIC program
change the settings for both the computer and the
ScopeMeter. See the example under the PC (Program
Communication) command in chapter 3 COMMAND REFERENCE.
When you have installed the PM9080/001 as described in the
previous chapter, you can control the ScopeMeter
from the computer with simple communication facilities, such
as GWBASIC, QuickBASIC and QBASIC (programming languages from
Microsoft Corporation).
All examples given in this manual are in the QBASIC language
but will also run in QuickBASIC. QuickBASIC allows you to
make executable files from programs so you can start such
programs directly from DOS.
It is assumed that you have knowledge of these programming
languages. QBASIC is supplied with Microsoft Operating System
MS-DOS 5.0 and higher, and has an ’on-line’ Help function.
Features of the syntax and protocol for the ScopeMeter
are as follows:
- Easy input format with a ’forgiving’ syntax:
All commands consist of two characters that can be
UPPER or lower case.
Parameters that sometimes follow the command may be
separated from it by one or more separation characters.
- Strict and consistent output format:
Alpha character responses are always in UPPERCASE.
Parameters are always separated by a comma
("," = ASCII 44, see Appendix D).
Responses always end with the carriage return code
(ASCII 13). Because the carriage return code is a
non-visible character (not visible on the screen or on
paper), this character is represented as <cr> in the
command syntax.
- Synchronization between input and output:
After receipt of every command, the ScopeMeter
returns an acknowledge character (digit) followed by the
carrige return code (ASCII 13). This indicates that the
command has been successfully received and executed.
The computer program must always read this acknowledge
response before sending the next command to the
ScopeMeter.
Page 4
Page 2.2
** Commands sent to the ScopeMeter **
All commands for the ScopeMeter consist of a header
made up of two alpha characters sometimes followed by
parameters. Example:
RI This is the Reset Instrument command. It
resets the ScopeMeter.
Some of the commands are followed by one or more parameters
to give the ScopeMeter more information.
Example:
SS 8 This is the Save Setup command. It saves the
present acquisition settings in memory. The SS
header is followed by a separator (space),
then followed by the parameter "8" to
indicate where to store the settings. The
meaning of this parameter is described in
Chapter 3 COMMAND REFERENCE.
Some commands require several parameters.
Example:
WT 9,50,30 This is the Write Time command.
This command requires three parameters. The
parameters are separated by a comma, which is
called the Program Data Separator. You may
use only one comma between the parameters.
Also refer to the section ’Data Separators’.
A code at the end of each command tells the ScopeMeter
that the command is ended. This is the carriage return
code (ASCII 13) and is called the Program Message Terminator.
This code is needed to indicate to the ScopeMeter
that the command is completed so it can start executing the
command. Also refer to the section ’Command and Response
Terminators’.
Page 5
Page 2.3
** Responses received from the ScopeMeter **
After each command sent to the ScopeMeter there
is an automatic response from it, indicated as <acknowledge>
(which you MUST input), to let the computer know whether or
not the received command has been successfully executed.
Refer to the ’Acknowledge’ section below.
There are several commands that ask the ScopeMeter
for response data. Such commands are called Queries.
Example:
ID This is the IDentification query, which asks for
the model number and the software version of the
ScopeMeter.
When the ScopeMeter has received a query, it sends
the <acknowledge> reply as it does after any command, but
now it is followed by the queried response data.
The format of the response data depends upon which query is
sent. When a response consists of different response data
portions, these are separated with commas (ASCII code 44).
Also refer to the section ’Data Separators’.
All response data, <acknowledge> as well as following
(queried) response data are terminated with the carriage
return code (<cr> = ASCII 13). Also refer to the section
’Command and Response Terminators’.
Page 6
Page 2.4
** Acknowledge **
After receiving of a command, the ScopeMeter
automatically returns the <acknowledge> response to let the
computer know whether or not the received command has been
successfully executed.
This response is a one-digit number followed by <cr> as
response terminator. If <acknowledge> is 0, it indicates
that the ScopeMeter has successfully executed the
command. If the command was a query, the <acknowledge><cr>
response is immediately followed by the queried response data
terminated with <cr>.
If <acknowledge> is 1 or higher, it indicates that the
ScopeMeter has not executed the command
successfully. In that case, if the command was a query, the
<acknowledge><cr> response is NOT followed by any further
response data.
There can be several reasons for a non-zero <acknowledge>
response. For more information see Appendix A.
In case of an error you can obtain more detailed status
information by using the ST (STATUS) query.
Note: YOU MUST ALWAYS INPUT <acknowledge>, EVEN WHEN
THE COMMAND WAS NOT A QUERY.
Page 7
Page 2.5
** Data Separators **
Data Separators are used between parameters sent to the
ScopeMeter and between values and strings received
from the ScopeMeter. Comma (",") is used as program
data separator as well as response data separator:
- Program Data Separator
Name Character ASCII Value Comments
Decimal
--------------------------------------------------------- comma , 44 Single comma allowed
** Command and Response Terminators **
(Message Terminators)
- Command (Program Message) Terminators
A code is needed at the end of each command to tell the
ScopeMeter that the command is ended, and that it
can start executing the command. This code is called the
Program Message Terminator. The code needed for the
ScopeMeter is carriage return (ASCII code 13 decimal).
Notes:
1. The carriage return code is a non-visible ASCII
character. Therefore this code is represented as <cr>
in the Command Syntax and Response Syntax lines given
for each command.
2. The QBASIC programming language, which is used for
all program examples, automatically adds a carriage
return to the end of the command output. (In the QBASIC
language, this is the PRINT #.... statement.)
After <cr> is recognized by the ScopeMeter, the
entered command is executed. After EACH command the
ScopeMeter returns <acknowledge><cr> to the
computer to signal the end of the command processing (also
see the section ’Acknowledge’.)
- Response (Message) Terminators
The response from the ScopeMeter ends with a
carriage return (ASCII 13). This is indicated as <cr> in
the Response Syntax for each command.
Page 9
Page 2.7
** Typical program sequence **
An example
A typical program sequence consists of the following user
actions:
1. Set the communication parameters for the RS232 port of
the computer to match the ScopeMeter settings.
2. Output a command or query to the ScopeMeter.
3. Input the acknowledge response from the ScopeMeter.
If the response value is zero, go to step 4.
If the response value is non-zero, the ScopeMeter did not
execute the previous command. Read the error message from
the following acknowledge subroutine, recover the error,
and repeat the command or query. (This is not shown in the
following program example.)
4. If a query was output to the ScopeMeter, input its
response.
5. The sequence of points 2, 3, and 4 may be repeated for
different commands or queries.
6. Close the communication channel.
Refer to the program example on the next page.
Page 10
Page 2.8
’Example of a typical program sequence:
’***************** Begin example program ****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
’This QBASIC program line sets the parameters for the
’RS232 port (COM1 on the Computer) to match the
’ScopeMeter power-on default settings. It also opens a
’communication channel (assigned #1) for input or output
’through the COM1 port. Your ScopeMeter must be connected
’to this port. "RB2048" sets the size of the computer
’receive buffer to 2048 bytes to prevent buffer overflow
’during communication with the ScopeMeter.
PRINT #1, "ID"
’Outputs the IDENTITY command (query) to the ScopeMeter.
GOSUB Acknowledge
’This subroutine inputs the acknowledge response from
’the ScopeMeter and displays an error message if the
’acknowledge value is non-zero.
INPUT #1, Response$
’This inputs the response data from the IDENTITY query.
PRINT Response$
’Displays the queried data.
CLOSE #1
’This closes the communication channel.
END
’This ends the program.
’
Page 11
’ Page 2.9
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program *****************
Each command description starts on a new page with a header
for quickly finding the command. This header indicates the
command name and the two-character header used for the
command syntax. Example:
===========================================================
AUTO SETUP AS
Where AUTO SETUP is a descriptive name for the command
(this is no syntax!),
and AS are the first two characters used for
the command syntax (not the complete
syntax).
- Purpose:
Explains what the command does or what it is used for.
- Command Syntax:
Shows the syntax for the command. Parameters are separated
by commas. Commands are terminated by <cr> (carriage
return).
- Response Syntax:
Shows the format of the response from the ScopeMeter.
Responses are terminated by <cr> (carriage return).
Each Response Syntax starts with the <acknowledge>
response, followed by the query response if the syntax
relates to a query.
- Example:
This is an example QBASIC program which shows how you can
use the command. The example may also include some other
commands to show the relation with these commands.
The following two comment lines (start with ’) successively
indicate the beginning and the end of an example program.
’***************** Begin example program ****************
’****************** End example program *****************
Page 13
Page 3.2
Use an MS-DOS Editor and copy the complete program between
these two lines to a file name with the .BAS extension.
Start QBASIC and open this file from the FILE menu.
Long programs (longer than 55 lines) include page breaks.
Such page breaks are preceded by the ’ (remark) character
to prevent the QBASIC interpreter from interpreting them as
an incorrect statement.
When you have connected the ScopeMeter as
indicated in the PM9080 Instruction Manual, you can start
the program from the RUN menu.
Page 14
Page 3.3
** Syntax conventions **
The Command Syntax and the Response Syntax may contain the
following meta symbols and data elements:
UPPERCASE These characters are part of the syntax.
For commands, lower case is also allowed.
<...> An expression between these brackets is a
code, such as <cr> (carriage return) that can
not be expressed in a printable character, or
it is a parameter that is further specified.
Do not insert the brackets in the command!
[...] The item between these brackets is optional.
This means that you may omit it for the
command, or for a response it may not appear.
Do not insert the brackets in the command!
| This is a separator between selectable items.
This means that you must choose only one of
the items (exclusive or).
{...} Specifies an element that may be repeated 0 or
more instances.
<signed_integer> = <binary_character><binary_character>
Two bytes representing a signed
integer value. The first byte is the
most significant and contains the
sign bit (bit 7).
<unsigned_integer>= <binary_character><binary_character>
Two bytes representing an unsigned
integer value. The first byte is the
most significant.
------------------------------------------------------ AUTO SETUP AS 3.5
ARM TRIGGER AT 3.7
CLEAR MEMORY CM 3.9
CPL VERSION QUERY CV 3.11
DEFAULT SETUP DS 3.13
GET DOWN GD 3.15
GO TO LOCAL GL 3.17
GO TO REMOTE GR 3.20
IDENTIFICATION ID 3.21
INSTRUMENT STATUS IS 3.23
PROGRAM COMMUNICATION PC 3.26
PROGRAM SETUP PS 3.28
QUERY MEASUREMENT QM 3.32
QUERY PRINT QP 3.35
QUERY SETUP QS 3.39
QUERY WAVEFORM QW 3.40
READ DATE RD 3.54
RESET INSTRUMENT RI 3.56
RECALL SETUP RS 3.58
READ TIME RT 3.61
SWITCH ON SO 3.63
SAVE SETUP SS 3.64
STATUS QUERY ST 3.65
TRIGGER ACQUISITION TA 3.68
WRITE DATE WD 3.70
WRITE TIME WT 3.72
Page 16
Page 3.5
=============================================================
AUTO SETUP AS
Invokes an automatic setup for the active mode. The result
of this command is the same as pressing the AUTO key
on the ScopeMeter.
Note: You can select the items that are affected by the
AUTO SET procedure via the USER OPTIONS key on
the ScopeMeter.
Command Syntax:
AS<cr>
Response Syntax:
<acknowledge><cr>
Example:
The following example program sends an AUTO SETUP command to
the ScopeMeter. Connect a repetitive signal on
INPUT A to see the effect of AUTO SETUP.
Page 17
’ Page 3.6
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "AS" ’Sends AUTO SETUP command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
CLOSE #1
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 18
Page 3.7
=============================================================
ARM TRIGGER AT
Resets and arms the trigger system for a new acquisition.
This command is used for single shot measurements.
When the AT command is given while an acquisition is in
progress, this acquisition is aborted and the trigger
system is rearmed.
Command Syntax:
AT<cr>
Response Syntax:
<acknowledge><cr>
Example:
The following example program arms the trigger system of
the ScopeMeter with the AT command.
This means that after this command the ScopeMeter starts an
acquisition when a trigger occurs from the signal (when
exceeding the trigger level) or from a TA (Trigger
Acquisition) command.
After the AT command it is assumed that the signal amplitude
is sufficient to trigger the acquisition. If it is not, you
can use the TA (TRIGGER ACQUISITION) command to force the
acquisition to be triggered. But this is not useful if you
want the acquisition to be started on a signal edge for
synchronization purposes.
Also see the example program for the IS command, which also
uses the AT command for a single shot application.
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "AT" ’Sends the ARM TRIGGER command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
CLOSE #1
END
’
Page 19
’ Page 3.8
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 20
Page 3.9
=============================================================
CLEAR MEMORY CM
Clears all saved setups, waveforms, and screens from
memory.
Command Syntax:
CM<cr>
Response Syntax:
<acknowledge><cr>
Example:
Page 21
’ Page 3.10
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1,"CM" ’Sends the Clear Memory command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
CLOSE #1
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 22
Page 3.11
=============================================================
CPL VERSION QUERY CV
<version> is an ASCII string representing the year this
version has been created.
Example:
Page 23
’ Page 3.12
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1,"CV" ’Sends CPL VERSION query.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1,VERSION$ ’Inputs queried data.
PRINT "CPL Version "; VERSION$ ’Displays version data.
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Resets the ScopeMeter to the factory settings at
delivery, except for the RS232 communication settings such
as baud rate, to keep the communication alive.
A Master Reset (refer to the Users Manual) performs the
same, but also resets the RS232 communication settings to
the default values.
Command Syntax:
DS<cr>
Response Syntax:
<acknowledge><cr>
Note: Wait for at least 2 seconds after the
<acknowledge> reply has been received, to let
the ScopeMeter settle itself before you send the
next command.
Example:
Page 25
’ Page 3.14
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
CLS
PRINT #1, "DS" ’Sends DEFAULT SETUP command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
SLEEP 2 ’Delay (2 s) necessary after "DS".
PRINT #1, "ID" ’Sends the IDENTIFICATION query.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1, ID$ ’Inputs identity data from ScopeMeter.
PRINT ID$ ’Displays identity data.
CLOSE #1
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 26
Page 3.15
=============================================================
GET DOWN GD
Switches the instrument’s power off. If a power adapter
is connected, you can use the SO command to switch power
on again. If there is no power adapter connected, the
instrument can only be switched on manually by pressing
the Power ON/OFF key.
Command Syntax:
GD<cr>
Response Syntax:
<acknowledge><cr>
Example:
Page 27
’ Page 3.16
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
CLS
PRINT #1, "GD" ’Sends the GET DOWN command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
PRINT "The GET DOWN command switched the ScopeMeter off."
PRINT "Press any key on the PC keyboard to switch "
PRINT "the ScopeMeter on again."
SLEEP
PRINT #1, "SO" ’Sends the SWITCH ON command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
CLOSE #1
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 28
Page 3.17
=============================================================
GO TO LOCAL GL
Sets the ScopeMeter in the local operation mode
so the keypad is enabled.
Also refer to the GR (Go to Remote) command.
Command Syntax:
GL<cr>
Response Syntax:
<acknowledge><cr>
Example:
The following example uses the GR (GO TO REMOTE) command
(refer to the description for this command) to set the
ScopeMeter in the REMOTE state so that the keypad
is disabled (except for the F4 key). After that, the GL
(GO TO LOCAL) command is sent so that the keypad is enabled
again.
Page 29
’ Page 3.18
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "GR" ’Sends GO TO REMOTE command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
PRINT "All ScopeMeter keys (except F4 softkey, which sets
PRINT "ScopeMeter back to LOCAL, and the Power ON/OFF key)
PRINT "are now disabled by the GR (GO TO REMOTE) command."
PRINT "Check this."
PRINT "The remote state is indicated as REMOTE on the bottom"
PRINT "right of the display."
PRINT
PRINT "Press any key on the PC keyboard to continue."
SLEEP
PRINT
PRINT #1, "GL" ’Sends GO TO LOCAL command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
PRINT "The ScopeMeter keys are now enabled again by the "
PRINT "GL (GO TO LOCAL) command."
PRINT "Check this."
CLOSE #1
END
’
Page 30
’ Page 3.19
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 31
Page 3.20
=============================================================
GO TO REMOTE GR
Sets the ScopeMeter in the remote operation mode
so that the keypad is disabled (except for the F4 key).
You can use one of the following methods to return to
the local operation mode so that the keypad is enabled:
1. Sending the GL (Go to Local) command.
2. Pressing the F4 key on the ScopeMeter keypad.
Command Syntax:
GR<cr>
Response Syntax:
<acknowledge><cr>
See an example for this command under GO TO LOCAL (GL).
Page 32
Page 3.21
=============================================================
IDENTIFICATION ID
Returns the ScopeMeter model identification information.
Command Syntax:
ID<cr>
Response Syntax:
<acknowledge><cr>[<identity><cr>]
where,
<identity> is an ASCII string containing the following
data elements:
<model_number>;<software_version>;
<creation_date>;<languages>
Example:
The following example program queries the identity data of
the ScopeMeter and displays this data on the PC
screen.
Page 33
’ Page 3.22
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "ID" ’Sends IDENTIFICATION query.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1, IDENT$ ’Inputs the queried data.
PRINT IDENT$ ’Displays queried data.
CLOSE #1
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 34
Page 3.23
=============================================================
INSTRUMENT STATUS IS
Queries the contents of the ScopeMeter’s status register.
The returned value reflects the present operational status
of the ScopeMeter. This is a 16-bit word, presented as an
integer value, where each bit represents the Boolean value
of a related event.
’***************** Begin example program *****************
CLS ’Clears the PC screen
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "IS" ’Sends the INSTRUMENT STATUS query
GOSUB Acknowledge ’Input acknowledge from ScopeMeter
INPUT #1, Status$ ’Input Instrument Status
StatVal = VAL(Status$) ’Decimal value of Instrument Status
PRINT "Instrument Status : "; StatVal
IF (StatVal AND 2) = 2 THEN PRINT " ScopeMeter charging."
IF (StatVal AND 8) = 8 THEN PRINT " AutoRanging active"
IF (StatVal AND 32) = 32 THEN PRINT " Battery connected."
IF (StatVal AND 64) = 64 THEN PRINT " Power Adapter connected."
IF (StatVal AND 8192) = 8192 THEN PRINT " Instrument On."
IF StatVal < 8192 THEN PRINT " Instrument Off."
END
’
Page 36
’ Page 3.25
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 37
Page 3.26
=============================================================
PROGRAM COMMUNICATION PC
Restores a complete setup, previously saved with the SS
(Save Setup) command and queried with the QS (Query Setup)
command and saved in a string variable or to a file.
Command Syntax 1:
PS [<saved_setup_no>]<cr>
where,
<saved_setup_no> = 0 to 10
This is the register number where a
setup is stored. Also see the
description of the Save Setup (SS)
command.
Response Syntax 1:
<acknowledge><cr>
Command Syntax 2:
<queried_setup><cr>
<queried_setup> = The data returned with the QS command.
(<omit the <acknowledge><cr> response).
Response Syntax 2:
<acknowledge><cr>
Note: Wait for at least two seconds after the
<acknowledge> reply has been received, to let
the ScopeMeter settle itself before you send the
next command.
Remarks:
The ScopeMeter sends the <acknowledge> reply
after it has executed the setup from the PS command.
You must send the <setup> string as a whole, exactly as
returned from the QS (Query Setup) command.
If you do not follow this rule, the ScopeMeter
may crash. A Reset may then be necessary to recover
the ScopeMeter. (Refer to the ScopeMeter Users Manual.)
Example:
The following example program demonstrates the use of the
QS (QUERY SETUP) and the PS (PROGRAM SETUP) commands.
Page 40
The present setup is queried from ScopeMeter and saved to
file. The program asks you to change the ScopeMeter settings.
Then the original setup is read from file and sent back
to the ScopeMeter.
Page 41
’ Page 3.29
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
CLS
GOSUB ClearPort ’Clears pending data from port.
PRINT #1, "QS" ’Queries the actual setup data.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
GOSUB Response ’Writes the setup data to file.
PRINT "Present setup data are stored in the file SETUP0"
PRINT "This setup will now be retrieved from the file and"
PRINT "sent back to the ScopeMeter."
PRINT "To see if this works, change the present settings and"
PRINT "verify if the ScopeMeter returns to the previous"
PRINT "settings."
PRINT
PRINT "Press any key on the PC keyboard to continue."
SLEEP
CLS
PRINT #1, "PS" ’Program header for programming
’the setup data to the ScopeMeter.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
OPEN "SETUP0" FOR INPUT AS #2
’Opens file SETUP0 for data retrieval.
DO WHILE NOT EOF(2)
SUCHR$ = INPUT$(1, #2) ’Reads setup data from file
PRINT #1, SUCHR$; ’Programs ScopeMeter with the"
’setup data stored in SETUP0$.
LOOP
PRINT #1, CHR$(13); ’Program message terminator
CLOSE #2 ’Close file SETUP0.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
END
’
Page 42
’ Page 3.30
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’******* Clears pending data from the RS232 port *********
ClearPort:
WHILE LOC(1) > 0
Dummy$ = INPUT$(1, #1)
WEND
RETURN
’
Page 43
’ Page 3.31
’****************** Response subroutine *********************
’This subroutine reads bytes from the RS232 buffer as long
’as they enter. When no bytes enter for 1 second, the program
’assumes that the ScopeMeter has terminated its response.
’All bytes that enter the buffer are appended to the string
’Resp$.
Response:
start! = TIMER
’Wait for bytes (maximum 1 s) to enter RS232 buffer
WHILE ((TIMER < (start! + 1)) AND (LOC(1) = 0))
WEND
IF LOC(1) > 0 THEN ’If RS232 buffer contains bytes
OPEN "Setup0" FOR OUTPUT AS #2 ’File for setup data
DO
’ LOC(1) gives the number of bytes waiting:
ScopeInput$ = INPUT$(LOC(1), #1) ’Input bytes
PRINT #2, ScopeInput$;
start! = TIMER
WHILE ((TIMER < (start! + 1)) AND (LOC(1) = 0))
WEND
LOOP WHILE LOC(1) > 0 ’Repeat as long as bytes enter
CLOSE #2
END IF
RETURN
’****************** End example program ******************
<field_no> = 11 to 18 and 21 to 28
(see the following table)
<field_no> MEASUREMENT TYPE / DESCRIPTION
11 Channel A main reading.
12 Channel A sub reading, only available when
sub reading is active on channel A.
13 Maximum result on A, only available when
Trend Plot is active.
14 Average result on A, only available when
Trend Plot is active.
15 Minimum result on A, only available when
Trend Plot is active.
16 Time stamp of last recorded maximum on A,
only available when Trend Plot is active.
17 Time stamp of last recorded average on A,
only available when Trend Plot is active.
18 Time stamp of last recorded minimum on A,
only available when Trend Plot is active.
21 Channel B main reading, only available when
channel B is on.
22 Channel B sub reading, only available when
channel B is on.
23 Maximum result on B, only available when
channel B is on and Trend Plot is active.
24 Average result on B, only available when
channel B is on and Trend Plot is active.
25 Minimum result on B, only available when
channel B is on and Trend Plot is active.
26 Time stamp of last recorded maximum on B,
only available when channel B is on and
Trend Plot is active.
27 Time stamp of last recorded average on B,
only available when channel B is on and
Trend Plot is active.
28 Time stamp of last recorded minimum on B,
only available when channel B is on and
Trend Plot is active.
Page 45
Page 3.33
Response Syntax:
<acknowledge><cr>[<meas_value><cr>]
where,
<meas_value> = [<sign>]<decimal_number>"E"
<sign><decimal_number>
Note: Only displayed results are
available for output.
Example:
’***************** Begin example program *****************
’This example program resets the ScopeMeter (RI command),
’programs the default setup (DS command).
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "RI" ’Sends the RESET INSTRUMENT command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
SLEEP 2 ’Delay (2 s) necessary after reset.
PRINT #1, "QM 11" ’Queries the Vac rms result.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1, result$
PRINT "Measurement result = ";result$;" Vrms"
CLOSE #1
END
’
Page 46
’ Page 3.34
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
<printer_data>
This data can directly be sent to the printer to get a
screen copy on paper.
Example:
The following program reads the ScopeMeter screen (print)
data and copies this data to the file Qpfile. Hereafter, you
can copy this file to the printer port LPT1, for example.
The Read Buffer length for the PC is set to 7500 bytes to
prevent buffer overflow during input from the ScopeMeter.
The data transfer speed (baud rate) is set to 19200 and after
the output it is set back to 1200 (default baud rate).
Page 48
’ Page 3.36
’***************** Begin example program *****************
CLS
OPEN "COM1:1200,N,8,1,CS,DS,RB7500" FOR RANDOM AS #1
’Programs COM1 port parameters to
’match with the ScopeMeter power-on
’defaults.
PRINT #1, "PC 19200" ’Programs ScopeMeter to the maximum
’baud rate.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
CLOSE #1
OPEN "COM1:19200,N,8,1,CS,DS,RB7500" FOR RANDOM AS #1
’Programs COM1 port parameters to
’match with the new ScopeMeter
’settings.
PRINT #1, "QP 0,1" ’Sends QUERY PRINT data command.
’(actual screen for LaserJet print)
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
PRINT
PRINT "Busy reading print data !"
PRINT
GOSUB Response
PRINT #1, "PC 1200" ’Programs ScopeMeter back to the
’default baud rate.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
PRINT "Print data copied to file ’QPFILE’."
PRINT "You can copy the file contents to the Laser Printer."
PRINT "DOS-example: COPY Qpfile LPT1"
CLOSE ’Close all files.
END
’
Page 49
’ Page 3.37
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’
Page 50
’ Page 3.38
’****************** Response subroutine *********************
’This subroutine reads bytes from the RS232 buffer as long
’as they enter. When no bytes enter for 1 second, the program
’assumes that the ScopeMeter has terminated its response.
’All bytes that enter the buffer are appended to the string
’Resp$.
Response:
start! = TIMER
’Wait for bytes (maximum 2 s) to enter RS232 buffer
WHILE ((TIMER < (start! + 2)) AND (LOC(1) = 0))
WEND
IF LOC(1) > 0 THEN ’If RS232 buffer contains bytes
Resp$ = ""
OPEN "Qpfile" FOR OUTPUT AS #2 ’File for print data
DO
’ LOC(1) gives the number of bytes waiting:
ScopeInput$ = INPUT$(LOC(1), #1) ’Input bytes
PRINT #2, ScopeInput$;
start! = TIMER
WHILE ((TIMER < (start! + 2)) AND (LOC(1) = 0))
WEND
LOOP WHILE LOC(1) > 0 ’Repeat as long as bytes enter
CLOSE #2
END IF
RETURN
’****************** End example program ******************
Queries the present acquisition setup data from the
ScopeMeter.
Command Syntax:
QS [<setup_no>]<cr>
Response Syntax:
<acknowledge><cr>[#0{<node>}<cr>]
where,
<node> = <node_header><node_identifier><node_length>
[<node_data>]<check_sum>
<node_header> = <binary_character>
Posible values:
20 hex All nodes except the last (end
node)
A0 hex End node
<node_identifier> = <binary_character>
Unique number for each specific node.
<node_length> = <unsigned_integer>
Specifies the number of <binary_character>
fields that follow in the <node_data>
field.
<node_data> = {<binary_character>}
The contents of <node_data> depends on the
<node_identifier> and the selected setup.
<check_sum> = <binary_character>
Contains the sum of all the binary bytes
in the <node_dat> field.
Note: Also see the Program Setup (PS) command.
See an example for this command under PROGRAM SETUP (PS).
<trace_data> = <trace_admin>,<trace_samples><cr>
This includes the complete information about the trace
(waveform).
For detailed descriptions about the waveform structure,
refer to Appendix C.
Page 53
Page 3.41
If option V or v (value only) is given:
<trace_data> = <trace_samples><cr>
For detailed descriptions about the waveform structure,
refer to Appendix C.
If option S or s (Setup data only) is given:
<trace_data> = <trace_admin><cr>
where,
<trace_admin> = string of hexadecimal characters,
representing the setup related to the given
<trace_no>.
Example:
’***************** Begin example program *****************
’
’***** If an error occurs in the waveform data,
’***** the program stops.
’
C65536 = 65536 ’2-bytes Maximum constant
C32768 = 32768 ’2-bytes Sign-bit constant
C256 = 256 ’1-byte Maximum constant
C128 = 128 ’1-byte Sign-bit constant
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
CLS
GOSUB ClearPort ’Clears pending data from port
’
’A min/max trace is a series of waveform samples consisting of
’minimum and maximum waveform points.
’Query$ = "QW 10" ’Queries min/max trace INPUT A
’
’A normal trace is a series of waveform samples consisting of
’single waveform points from the acquisition memory.
Query$ = "QW 11" ’Queries normal trace INPUT A
’See also Command Syntax
PRINT #1, Query$ ’Response = <trace_admin>,<trace_samples>
GOSUB Acknowledge ’Inputs acknowledge from ScopeMeter
Resp$ = "" ’Clears the total Response string
GOSUB Response ’Writes waveform data to Resp$ & files
GOSUB Interpret.Admin ’Interpretes waveform administration data
’See also Appendix C
GOSUB Interpret.Samples ’Interpretes waveform sample data
GOSUB Create.CSV ’Creates Wave.CSV file from waveform data
’as input for Excel, for example.
END
’
Page 54
’ Page 3.42
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’******* Clears pending data from the RS232 port *********
ClearPort:
WHILE LOC(1) > 0
Dummy$ = INPUT$(1, #1)
WEND
RETURN
’
Page 55
’ Page 3.43
’****************** Response subroutine *********************
’This subroutine reads bytes from the RS232 buffer as long
’as they enter. When no bytes enter for 1 second, the program
’assumes that the ScopeMeter has terminated its response. All
’bytes that enter the buffer are appended to the string Resp$
’and are written to the following files:
’File Waveform : the waveform data bytes
’File Waveresp : the waveform ASCII values
’
Response:
start! = TIMER
’Wait for bytes (maximum 1 s) to enter RS232 buffer
WHILE ((TIMER < (start! + 1)) AND (LOC(1) = 0))
WEND
IF LOC(1) > 0 THEN ’If RS232 buffer contains bytes
OPEN "WaveForm" FOR OUTPUT AS #2
’File to contain the waveform data bytes
DO
’ LOC(1) gives the number of bytes waiting:
ScopeInput$ = INPUT$(LOC(1), #1) ’Input bytes
PRINT #2, ScopeInput$;
PRINT ASC(ScopeInput$); ’Prints only first byte value
Resp$ = Resp$ + ScopeInput$
start! = TIMER
WHILE ((TIMER < (start! + 1)) AND (LOC(1) = 0))
WEND
LOOP WHILE LOC(1) > 0 ’Repeat as long as bytes enter
CLOSE #2
PRINT
END IF
’
’***** Write the total Response string to file WaveResp
’
OPEN "WaveResp" FOR OUTPUT AS #3
PRINT "Response data length = "; LEN(Resp$)
PRINT #3, "Response data length = "; LEN(Resp$)
FOR i = 1 TO LEN(Resp$)
PRINT #3, ASC(MID$(Resp$, i, 1));
NEXT i
CLOSE #3: RETURN
’
’ Page 3.45
’
DIM exponent(4)’Exponents for Y/X.Zero & Y/X.Resol
DIM YXvalue#(4)’Values for Y/X.Zero & Y/X.Resol
’
’***** 3 bytes <y_zero> = <mantissa_high><mantissa_low><exponent>
’***** <mantissa> = <mantissa_high> * 256 + <mantissa_low>
’***** <y_zero> = <sign><mantissa> E <sign><exponent>
’***** Example: +123E-4 = 123 / 10000 = 0.0123
FOR i = 0 TO 2
SumCheck1% = (SumCheck1% + ASC(MID$(Resp$, Resp.Count + i, 1))) MOD 256
NEXT i
nb = ASC(MID$(Resp$, Resp.Count, 1))
IF nb >= 128 THEN
nb = - (256 - nb) * 256’Negative value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
ELSE
nb = nb * 256’Positive value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
END IF
exponent(1) = ASC(MID$(Resp$, Resp.Count + 2, 1))
YXvalue#(1) = nb
Resp.Count = Resp.Count + 3
’*****
’* Further calculation after ’Signed.Samples’ determination
’*****
’
’***** 3 bytes <x_zero> = <mantissa_high><mantissa_low><exponent>
’***** <mantissa> = <mantissa_high> * 256 + <mantissa_low>
’***** <x_zero> = <sign><mantissa> E <sign><exponent>
’***** Example: +123E-4 = 123 / 10000 = 0.0123
FOR i = 0 TO 2
SumCheck1% = (SumCheck1% + ASC(MID$(Resp$, Resp.Count + i, 1))) MOD 256
NEXT i
nb = ASC(MID$(Resp$, Resp.Count, 1))
IF nb >= 128 THEN
nb = - (256 - nb) * 256’Negative value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
ELSE
nb = nb * 256’Positive value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
END IF
exponent(2) = ASC(MID$(Resp$, Resp.Count + 2, 1))
YXvalue#(2) = nb
Resp.Count = Resp.Count + 3
’*****
’* Further calculation after ’Signed.Samples’ determination
’*****
’
Page 58
’ Page 3.46
’
’***** 3 bytes <y_resolution> = <mantissa_high><mantissa_low><exponent>
’***** <mantissa> = <mantissa_high> * 256 + <mantissa_low>
’***** <y_resolution> = <sign><mantissa> E <sign><exponent>
’***** Example: +123E-4 = 123 / 10000 = 0.0123
FOR i = 0 TO 2
SumCheck1% = (SumCheck1% + ASC(MID$(Resp$, Resp.Count + i, 1))) MOD 256
NEXT i
nb = ASC(MID$(Resp$, Resp.Count, 1))
IF nb >= 128 THEN
nb = - (256 - nb) * 256’Negative value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
ELSE
nb = nb * 256’Positive value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
END IF
exponent(3) = ASC(MID$(Resp$, Resp.Count + 2, 1))
YXvalue#(3) = nb
Resp.Count = Resp.Count + 3
’*****
’* Further calculation after ’Signed.Samples’ determination
’*****
’***** 3 bytes <x_resolution> = <mantissa_high><mantissa_low><exponent>
’***** <mantissa> = <mantissa_high> * 256 + <mantissa_low>
’***** <x_resolution> = <sign><mantissa> E <sign><exponent>
’***** Example: +123E-4 = 123 / 10000 = 0.0123
FOR i = 0 TO 2
SumCheck1% = (SumCheck1% + ASC(MID$(Resp$, Resp.Count + i, 1))) MOD 256
NEXT i
nb = ASC(MID$(Resp$, Resp.Count, 1))
IF nb >= 128 THEN
nb = - (256 - nb) * 256’Negative value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
ELSE
nb = nb * 256’Positive value
nb = nb + ASC(MID$(Resp$, Resp.Count + 1, 1))
END IF
exponent(4) = ASC(MID$(Resp$, Resp.Count + 2, 1))
YXvalue#(4) = nb
Resp.Count = Resp.Count + 3
’*****
’* Further calculation after ’Signed.Samples’ determination
’*****
’***** 8 bytes <year><month><date>
FOR i = 0 TO 7
SumCheck1% = (SumCheck1% + ASC(MID$(Resp$, Resp.Count + i, 1))) MOD 256
NEXT i
Year$ = MID$(Resp$, Resp.Count, 1)
Year$ = Year$ + MID$(Resp$, Resp.Count + 1, 1)
Year$ = Year$ + MID$(Resp$, Resp.Count + 2, 1)
Year$ = Year$ + MID$(Resp$, Resp.Count + 3, 1)
Month$ = MID$(Resp$, Resp.Count + 4, 1)
Month$ = Month$ + MID$(Resp$, Resp.Count + 5, 1)
Day$ = MID$(Resp$, Resp.Count + 6, 1)
Day$ = Day$ + MID$(Resp$, Resp.Count + 7, 1)
Resp.Count = Resp.Count + 8
’ Page 3.47
’
’***** 6 bytes <hours><minutes><seconds>
FOR i = 0 TO 5
SumCheck1% = (SumCheck1% + ASC(MID$(Resp$, Resp.Count + i, 1))) MOD 256
NEXT i
Hours$ = MID$(Resp$, Resp.Count, 1)
Hours$ = Hours$ + MID$(Resp$, Resp.Count + 1, 1)
Minutes$ = MID$(Resp$, Resp.Count + 2, 1)
Minutes$ = Minutes$ + MID$(Resp$, Resp.Count + 3, 1)
Seconds$ = MID$(Resp$, Resp.Count + 4, 1)
Seconds$ = Seconds$ + MID$(Resp$, Resp.Count + 5, 1)
Resp.Count = Resp.Count + 6
PRINT " <time_stamp> = "; Hours$ + ":" + Minutes$ + ":" + Seconds$
’
’***** 1 byte <check_sum>
Check.Sum% = ASC(MID$(Resp$, Resp.Count, 1))
IF Check.Sum% <> (SumCheck1% MOD 256) GOTO Wave.Error
Resp.Count = Resp.Count + 1
PRINT "<check_sum> ="; Check.Sum%; " & ";
PRINT "SumCheck1 MOD 256 ="; SumCheck1% MOD 256
RETURN
Wave.Error:
PRINT "Waveform admin error at byte :"; Resp.Count
PRINT "Waveform decimal byte value ="; ASC(MID$(Resp$, Resp.Count, 1))
PRINT "SumCheck so far (MOD 256) ="; SumCheck1% MOD 256
CLOSE: END
’
Page 61
’ Page 3.48
Interpret.Samples:
’
’***** Interpret the <trace_samples> waveform data bytes
’***** in the Resp$ string (see appendix C).
’*****
’***** 1 byte separator admin/samples : ,
’***** 2 bytes <trace_samples> block trailing : #0
’
SumCheck2% = 0
IF MID$(Resp$, Resp.Count, 3) <> ",#0" GOTO Wave2.Error
Resp.Count = Resp.Count + 3
’
’***** 1 byte <block_header>
nb = ASC(MID$(Resp$, Resp.Count, 1))
IF nb <> 128 AND nb <> 0 AND nb <> 129 GOTO Wave2.Error
Resp.Count = Resp.Count + 1
’
’***** 2 bytes <block_length>
Block2.Length = ASC(MID$(Resp$, Resp.Count, 1)) * 256
Block2.Length = Block2.Length + ASC(MID$(Resp$, Resp.Count + 1, 1))
Resp.Count = Resp.Count + 2
PRINT "Number of sample chars ="; Block2.Length
OPEN "Samples" FOR OUTPUT AS #4
PRINT #4, "Number of sample chars ="; Block2.Length
’
’***** 1 byte <sample_format>
Sample.Format = ASC(MID$(Resp$, Resp.Count, 1))
SumCheck2% = SumCheck2% + Sample.Format
IF (Sample.Format AND 128) = 128 THEN
Signed.Samples = 1
ELSE
Signed.Samples = 0
END IF
IF (Sample.Format AND 64) = 64 THEN
MinMax.Samples = 1
ELSE
MinMax.Samples = 0
END IF
Sample.Bytes = Sample.Format AND 7
IF Sample.Bytes = 1 THEN’Single-byte samples
CLimit = C128
CMaxim = C256
ELSE’Double-byte samples
CLimit = C32768
CMaxim = C65536
END IF
Resp.Count = Resp.Count + 1
PRINT "Signed.Samples = ";
PRINT #4, "Signed.Samples = ";
IF Signed.Samples = 1 THEN
PRINT "TRUE ";
PRINT #4, "TRUE"
ELSE
PRINT "FALSE ";
PRINT #4, "FALSE"
END IF
Page 62
’ Page 3.49
’
PRINT "MinMax.Samples = ";
PRINT #4, "MinMax.Samples = ";
IF MinMax.Samples = 1 THEN
PRINT "TRUE" : PRINT #4, "TRUE"
ELSE
PRINT "FALSE" : PRINT #4, "FALSE"
END IF
PRINT "Number of Sample.Bytes ="; Sample.Bytes
PRINT #4, "Number of Sample.Bytes ="; Sample.Bytes
’*****
’* Further calculation now that ’Signed.Samples’ is determined
’*****
FOR j = 1 TO 4
IF (Signed.Samples = 0) AND (YXvalue#(j) < 0) THEN
’Unsigned samples, so undo (invert back) the sign ’calculation of the YXvalue# samples.
YXvalue#(j) = CMaxim - YXvalue#(j)
END IF
IF exponent(j) > 127 THEN ’Negative exponent
exponent(j) = 256 - exponent(j)
FOR i = 1 TO exponent(j)
YXvalue#(j) = YXvalue#(j) / 10
NEXT i
ELSE ’Positive exponent
FOR i = 1 TO exponent(j)
YXvalue#(j) = YXvalue#(j) * 10
NEXT i
END IF
NEXT j
Y.Zero = YXvalue#(1) : X.Zero = YXvalue#(2)
Y.Resol = YXvalue#(3) : X.Resol = YXvalue#(4)
PRINT "<y_zero> ="; Y.Zero
PRINT "<x_zero> ="; X.Zero
PRINT "<y_resolution> ="; Y.Resol
PRINT "<x_resolution> ="; X.Resol
’
’***** <Sample.Bytes> bytes <overload> value
Sample.Byte = ASC(MID$(Resp$, Resp.Count, 1))
SumCheck2% = SumCheck2% + Sample.Byte
IF (Signed.Samples = 1) AND (Sample.Byte >= 128) THEN
Sample.Byte = - (256 - Sample.Byte)
END IF
Overload& = Sample.Byte
FOR i = 2 TO Sample.Bytes
Sample.Byte = ASC(MID$(Resp$, Resp.Count + i - 1, 1))
SumCheck2% = (SumCheck2% + Sample.Byte) MOD 256
Overload& = Overload& * 256 + Sample.Byte
NEXT i
IF (Signed.Samples = 0) OR (Overload& < CLimit) THEN
Overload.Value = Overload& * Y.Resol’Positive value
ELSE
Overload.Value = - ((CMaxim - Overload&) * Y.Resol) ’Negative value
END IF
Resp.Count = Resp.Count + Sample.Bytes
PRINT "Overload sample value ="; Overload&; Overload.Value
Page 63
PRINT #4, "Overload sample value ="; Overload&; Overload.Value
’
Page 64
’ Page 3.50
’
’***** <Sample.Bytes> bytes <underload> value
Sample.Byte = ASC(MID$(Resp$, Resp.Count, 1))
SumCheck2% = SumCheck2% + Sample.Byte
IF (Signed.Samples = 1) AND (Sample.Byte >= 128) THEN
Sample.Byte = - (256 - Sample.Byte)
END IF
Underload& = Sample.Byte
FOR i = 2 TO Sample.Bytes
Sample.Byte = ASC(MID$(Resp$, Resp.Count + i - 1, 1))
SumCheck2% = (SumCheck2% + Sample.Byte) MOD 256
Underload& = Underload& * 256 + Sample.Byte
NEXT i
IF (Signed.Samples = 0) OR (Underload& < CLimit) THEN
Underload.Value = Underload& * Y.Resol’Positive value
ELSE
’Negative value
Underload.Value = - ((CMaxim - Underload&) * Y.Resol)
END IF
Resp.Count = Resp.Count + Sample.Bytes
PRINT "Underload sample value ="; Underload&; Underload.Value
PRINT #4, "Underload sample value ="; Underload&; Underload.Value
’
’***** <Sample.Bytes> bytes <invalid> value
Sample.Byte = ASC(MID$(Resp$, Resp.Count, 1))
SumCheck2% = SumCheck2% + Sample.Byte
IF (Signed.Samples = 1) AND (Sample.Byte >= 128) THEN
Sample.Byte = - (256 - Sample.Byte)
END IF
Invalid& = Sample.Byte
FOR i = 2 TO Sample.Bytes
Sample.Byte = ASC(MID$(Resp$, Resp.Count + i - 1, 1))
SumCheck2% = (SumCheck2% + Sample.Byte) MOD 256
Invalid& = Invalid& * 256 + Sample.Byte
NEXT i
IF (Signed.Samples = 0) OR (Invalid& < CLimit) THEN
Invalid.Value = Invalid& * Y.Resol’Positive value
ELSE
’Negative value
Invalid.Value = - ((CMaxim - Invalid&) * Y.Resol)
END IF
Resp.Count = Resp.Count + Sample.Bytes
PRINT "Invalid sample value ="; Invalid&; Invalid.Value
PRINT #4, "Invalid sample value ="; Invalid&; Invalid.Value
’
’***** 2 bytes <nbr_of_samples>
Sample.Byte = ASC(MID$(Resp$, Resp.Count, 1))
SumCheck2% = (SumCheck2% + Sample.Byte) MOD 256
Nbr.Of.Samples = Sample.Byte
Sample.Byte = ASC(MID$(Resp$, Resp.Count + 1, 1))
SumCheck2% = (SumCheck2% + Sample.Byte) MOD 256
Nbr.Of.Samples = Nbr.Of.Samples * 256 + Sample.Byte
IF MinMax.Samples = 1 THEN ’Min/Max pair of samples
Nbr.Of.Samples = Nbr.Of.Samples * 2
END IF
Resp.Count = Resp.Count + 2
Page 65
PRINT "Number of samples ="; Nbr.Of.Samples
PRINT #4, "Number of samples ="; Nbr.Of.Samples
’
Page 66
’ Page 3.51
’
’***** <Sample.Bytes> bytes <sample_value>’s
’
DIM Sample.Value(Nbr.Of.Samples) AS LONG
FOR i = 1 TO Nbr.Of.Samples’Sample loop
Sample.Byte = ASC(MID$(Resp$, Resp.Count, 1))
SumCheck2% = (SumCheck2% + Sample.Byte) MOD 256
IF (Signed.Samples = 1) AND (Sample.Byte >= 128) THEN
Sample.Value&(i) = Sample.Value&(i) * 256 + Sample.Byte
NEXT j
END IF
Resp.Count = Resp.Count + Sample.Bytes
IF i = 1 OR i = 2 OR i = Nbr.Of.Samples - 1 OR i = Nbr.Of.Samples THEN
IF (Signed.Samples = 0) OR (Sample.Value&(i) < CLimit) THEN
Ampl.Value = Sample.Value&(i) * Y.Resol’Positive value
ELSE
’Negative value
Ampl.Value = - ((CMaxim - Sample.Value&(i)) * Y.Resol)
END IF
PRINT "Sample"; i; "="; Sample.Value&(i); Ampl.Value
END IF
PRINT #4, "Sample"; i; "="; Sample.Value&(i); Ampl.Value
NEXT i
’
’***** 1 byte <check_sum>
Check.Sum% = ASC(MID$(Resp$, Resp.Count, 1))
IF Check.Sum% <> (SumCheck2% MOD 256) GOTO Wave2.Error
Resp.Count = Resp.Count + 1
PRINT "<check_sum> ="; Check.Sum%; " & ";
PRINT "SumCheck2 MOD 256 ="; SumCheck2% MOD 256
PRINT #4, "<check_sum> ="; Check.Sum%; " & ";
PRINT #4, "SumCheck2 MOD 256 ="; SumCheck2% MOD 256
’
’***** 1 byte CR
C.R = ASC(MID$(Resp$, Resp.Count, 1))
IF C.R <> 13 GOTO Wave2.Error
Resp.Count = Resp.Count + 1
CLOSE #4: RETURN
Wave2.Error:
PRINT "Waveform sample error at byte :"; Resp.Count
PRINT "Waveform decimal byte value ="; ASC(MID$(Resp$, Resp.Count, 1))
PRINT "SumCheck so far (MOD 256) ="; SumCheck2% MOD 256
CLOSE: END
’
Page 67
’ Page 3.52
Create.CSV:
’
’*****
’***** Convert the total Response string to file Wave.CSV
’***** as input file for Excel (spreadsheet), for example.
’*****
’
OPEN "Wave.CSV" FOR OUTPUT AS #4
PRINT #4, "Title , ";
IF MID$(Query$, 4, 2) = "10" THEN
PRINT #4, "Input A"
ELSEIF MID$(Query$, 4, 2) = "11" THEN
PRINT #4, "Acquisition Memory A"
END IF
IF Trace.Process = 1 OR Trace.Process = 2 THEN
PRINT #4, "ID ,"; 1’Single trace
PRINT #4, "Type , "; "Waveform"
ELSEIF Trace.Process = 3 THEN
PRINT #4, "ID ,"; 2’Envelope trace
PRINT #4, "Type , "; "Envelope"
END IF
PRINT #4, "Date , "; Month$+"/"+Day$+"/"+MID$(Year$,3,2)
PRINT #4, "Time , "; Hours$+":"Minutes$+":"+Seconds$
’
’***** X.Scale = time per division (over 10 divisions)
X.Scale = X.Resol * ((Nbr.Of.Samples - 1) / 10)
PRINT #4, "X Scale ,"; X.Scale
PRINT #4, "X At 0% ,"; X.Zero
PRINT #4, "X Resolution ,"; X.Resol
PRINT #4, "X Size ,"; Nbr.Of.Samples
PRINT #4, "X Unit , ";
IF X.Unit = 7 THEN PRINT #4, "s"
IF X.Unit = 10 THEN PRINT #4, "Hz"
PRINT #4, "X Label ,";
IF X.Unit = 7 THEN PRINT #4, X.Scale; "s/Div"
IF X.Unit = 10 THEN PRINT #4, X.Scale; "Hz/Div"
’
’***** Y.Scale = unit per division (over 8 divisions)
IF Sample.Bytes = 1 THEN’1-byte samples
Y.Scale = Y.Resol * ((256 - 1) / 8)
END IF’Range = 256
IF Sample.Bytes = 2 THEN’2-byte samples
Y.Scale = Y.Resol * ((65536 - 1) / 8)
END IF’Range = 256*256
PRINT #4, "Y Scale ,"; Y.Scale
PRINT #4, "Y At 50% ,"; Y.Zero
PRINT #4, "Y Resolution ,"; Y.Resol
PRINT #4, "Y Size ,";
IF Sample.Bytes = 1 THEN’1-byte samples
PRINT #4, 256
END IF’Range = 256
IF Sample.Bytes = 2 THEN’2-byte samples
PRINT #4, 65536
END IF’Range = 256*256
PRINT #4, "Y Unit , ";
IF Y.Unit = 1 THEN PRINT #4, "V"
Page 68
’
IF Y.Unit = 2 THEN PRINT #4, "A"
IF Y.Unit = 3 THEN PRINT #4, "Ohm"
Page 69
’ Page 3.53
’
PRINT #4, "Y Label ,";
IF Y.Unit = 1 THEN PRINT #4, Y.Scale; "V/Div"
IF Y.Unit = 2 THEN PRINT #4, Y.Scale; "A/Div"
IF Y.Unit = 3 THEN PRINT #4, Y.Scale; "Ohm/Div"
PRINT #4,
’
’***** Sample values x,y (time,amplitude)
Time.Value = X.Zero’Start at x-offset
MinMax.Flag = 1’Switch flag
FOR i = 1 TO Nbr.Of.Samples
IF (Signed.Samples = 0) OR (Sample.Value&(i) < CLimit) THEN
’Positive value
Amplit.Value = Sample.Value&(i) * Y.Resol
ELSE
’Negative value
Amplit.Value = - ((CMaxim - Sample.Value&(i)) * Y.Resol)
END IF
IF MinMax.Samples = 1 THEN’Min/Max waveform
IF MinMax.Flag = 1 THEN
MinMax.Flag = 0
PRINT #4, Time.Value; ","; Amplit.Value; ",";
ELSE
MinMax.Flag = 1
PRINT #4, Amplit.Value
Time.Value = Time.Value + X.Resol
END IF
ELSE’Single waveform
PRINT #4, Time.Value; ","; Amplit.Value
Time.Value = Time.Value + X.Resol
END IF
NEXT i
CLOSE #4: RETURN
’
’****************** End example program ******************
Page 70
Page 3.54
=============================================================
READ DATE RD
<date> = string of the following format:
<year>,<month>,<day>
e.g. 1997,8,14
Example:
The following example program reads the date setting from
the ScopeMeter.
Page 71
’ Page 3.55
’***************** Begin example program *****************
CLS
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "RD" ’Sends the READ DATE query.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1, SMYear$, SMMonth$, SMDay$ ’Inputs the date string.
PRINT "Date "; SMYear$; "-"; SMMonth$; "-"; SMDay$
’Displays the date string.
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 72
Page 3.56
=============================================================
RESET INSTRUMENT RI
Resets the entire instrument, including the CPL interface.
The baud rate remains unchanged.
Command Syntax:
RI<cr>
Response Syntax:
<acknowledge><cr>
Note: Wait for at least 2 seconds after the
<acknowledge> reply has been received, to let
the ScopeMeter settle itself before you send the
next command.
Example:
The following example resets the ScopeMeter and waits for 2
seconds to let the ScopeMeter execute the reset and become
ready for next commands.
The ScopeMeter is queried for the identification data; this
data is input and displayed on the PC screen.
Page 73
’ Page 3.57
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "RI" ’Sends the RESET INSTRUMENT command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
SLEEP 2 ’Delay (2 s) necessary after reset.
GOSUB ClearPort ’Clears pending data from port.
PRINT #1, "ID" ’Sends IDENTIFICATION query.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1, IDENT$ ’Inputs the queried data.
PRINT IDENT$ ’Displays queried data.
CLOSE #1
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’******* Clears pending data from the RS232 port *********
ClearPort:
WHILE LOC(1) > 0
Dummy$ = INPUT$(1, #1)
WEND
RETURN
’****************** End example program ******************
Recalls an internally stored setup. This setup must have
been stored in the ScopeMeter manually or with the SS
(Save Setup) command.
Command Syntax:
RS <setup_reg><cr>
where,
<setup_reg> = 1 to 10
Response Syntax:
<acknowledge><cr>
Note: The new setup is active when you have received the
<acknowledge> response from the ScopeMeter.
Example:
The following example program saves the present setup in
setup memory 8. You are requested to change the present
settings. Then the original settings are recalled from
setup memory 8 and made the actual setting.
Page 75
’ Page 3.59
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "SS 8" ’Sends SAVE SETUP command.
’Setup saved in setup memory 8.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter
PRINT "The present setup data are stored in setup memory 8."
PRINT "The remainder of this program will restore these."
PRINT "To test if this works, change the present settings"
PRINT "and verify if the ScopeMeter returns to the original"
PRINT "settings after continuing the program."
PRINT
PRINT "Press any key on the PC keyboard to continue."
SLEEP
PRINT #1, "RS 8" ’Sends RECALL SETUP command.
’Setup recalled from register 8.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
PRINT
PRINT "Original settings restored"
CLOSE #1
END
’
Page 76
’ Page 3.60
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 77
Page 3.61
=============================================================
READ TIME RT
<time> = string of the following format:
<hours>,<minutes>,<seconds>
e.g. 15,4,43
Example:
The following example program reads the time setting from
the ScopeMeter.
Page 78
’ Page 3.62
’***************** Begin example program *****************
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1,"RT" ’Sends the READ TIME query.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
INPUT #1,SMhour$,SMmin$,SMsec$ ’Inputs the time strings.
PRINT "Time "; SMhour$;":";SMmin$;":";SMsec$
’Displays the time string.
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 79
Page 3.63
=============================================================
SWITCH ON SO
Queries the error status of the ScopeMeter.
This is a 16-bit word, presented as an integer value,
where each bit represents the Boolean value of a related
error event. After the reply or after a RI (Reset
Instrument) command, the value is reset to zero.
A complete description of the status word is given in
Appendix B.
Command Syntax:
ST<cr>
Response Syntax:
<acknowledge><cr>[<status>
where,
<status> = integer value 0 to 32767
Example:
The following example program sends a wrong command to the
ScopeMeter to test the Acknowledge subroutine and to check
the status returned from the ST query.
The acknowledge subroutine contains a GOSUB Status.display
to input the status data from the ScopeMeter when the
acknowledge response is non-zero (ACK <> 0).
Page 82
’ Page 3.66
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "PC 12345" ’Sends a baud rate value that is
’ out of range for the ScopeMeter.
GOSUB Acknowledge.Status ’Input acknowledge from ScopeMeter
’and the status value if the
’acknowledge value is non-zero.
END
’************* Acknowledge + Status subroutine ***********
’This subroutine inputs the acknowledge value from the
’ScopeMeter. If the acknowledge value is non-zero,
’the ST query is used to get further status information from
’the ScopeMeter with respect to the error.
’In case of an error the program is aborted.
Acknowledge.Status:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
GOSUB Status.display ’Further specifies the error.
PRINT "Program aborted."
END
END IF
RETURN
’
Page 83
’ Page 3.67
’************** Displays ScopeMeter status *****************
’This subroutine gives you further information if the
’acknowledge reply from the ScopeMeter is non-zero.
Status.display:
PRINT #1, "ST" ’Sends the STATUS query.
GOSUB Acknowledge.Status ’Inputs acknowledge from ScopeMeter.
INPUT #1, STAT ’Inputs status value.
PRINT "Status " + STR$(STAT) + ": ";
IF STAT = 0 THEN PRINT "No error"
IF (STAT AND 1) = 1 THEN PRINT "Illegal Command"
IF (STAT AND 2) = 2 THEN
PRINT "Data format of parameter is wrong"
END IF
IF (STAT AND 4) = 4 THEN PRINT "Parameter out of range"
IF (STAT AND 8) = 8 THEN
PRINT "Invalid command in this CPL interface"
END IF
IF (STAT AND 16) = 16 THEN PRINT "Command not implemented"
IF (STAT AND 32) = 32 THEN
PRINT "Invalid number of parameters"
END IF
IF (STAT AND 64) = 64 THEN
PRINT "Wrong number of data bits"
END IF
IF (STAT AND 512) = 512 THEN
PRINT "Conflicting instrument settings"
END IF
IF (STAT AND 16384) = 16384 THEN
PRINT "Checksum error"
END IF
RETURN
’****************** End example program ******************
Page 84
Page 3.68
=============================================================
TRIGGER ACQUISITION TA
Triggers an acquisition. This command acts as a
hardware trigger to start a new acquisition.
In SINGLE shot acquisition mode the trigger system
must have been armed with the AT (Arm Trigger)
command.
Command Syntax:
TA<cr>
Response Syntax:
<acknowledge><cr>
Example:
Page 85
’ Page 3.69
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "TA" ’Sends TRIGGER ACQUISITION command.
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 86
Page 3.70
=============================================================
WRITE DATE WD
<date> = string of the following format:
<year>,<month>,<date>
e.g. 1999,9,14
Response Syntax:
<acknowledge><cr>
Example:
The following example program programs the ScopeMeter
with a new date setting.
Page 87
’ Page 3.71
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "WD 1999,9,14" ’Sets the real time clock date
’to September 14, 1999
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 88
Page 3.72
=============================================================
WRITE TIME WT
<time> = string of the following format:
<hours>,<minutes>,<seconds>
e.g. 15,30,0
Response Syntax:
<acknowledge><cr>
Example:
The following example program programs the ScopeMeter
with a new time setting.
Page 89
’ Page 3.73
’***************** Begin example program *****************
CLS ’Clears the PC screen.
OPEN "COM1:1200,N,8,1,CS,DS,RB2048" FOR RANDOM AS #1
PRINT #1, "WT 15,28,0" ’Sets the real time clock to
’03:28 p.m..
GOSUB Acknowledge ’Input acknowledge from ScopeMeter.
END
’**************** Acknowledge subroutine ******************
’Use this subroutine after each command or query sent to the
’ScopeMeter. This routine inputs the acknowledge
’response from the ScopeMeter. If the response is non-zero,
’the previous command was not correct or was not correctly
’received by the ScopeMeter. Then an error message is
’displayed and the program is aborted.
Acknowledge:
INPUT #1, ACK ’Reads acknowledge from ScopeMeter.
IF ACK <> 0 THEN
PRINT "Error "; ACK; ": ";
SELECT CASE ACK
CASE 1
PRINT "Syntax Error"
CASE 2
PRINT "Execution Error"
CASE 3
PRINT "Synchronization Error"
CASE 4
PRINT "Communication Error"
CASE IS < 1
PRINT "Unknown Acknowledge"
CASE IS > 4
PRINT "Unknown Acknowledge"
END SELECT
PRINT "Program aborted."
END
END IF
RETURN
’****************** End example program ******************
Page 90
Page A.1
=============================================================
APPENDIX A ACKNOWLEDGE DATA
The ScopeMeter returns an <acknowledge> reply after
each command or query. The value indicates correct or
incorrect operation. You always must read this reply to check
for the correct operation and to achieve synchronization
between your program and the RS232 interface of the
ScopeMeter.
<acknowledge>
VALUE MEANING
0 No Error
1 Syntax Error (see Note)
2 Execution Error (see Note)
3 Synchronization Error
4 Communication Error
Note: The ST query may give you additional information.
When the ScopeMeter detects an error during the
execution of a command, it sends the corresponding
<acknowledge> reply, terminates further execution of the
command and will be ready to accept a new command.
Syntax Error
Returned when the command is not understood by the ScopeMeter
for one of the following reasons :
- Unknown header
- Wrong instructions
- Data format of body is wrong, e.g. alpha characters when
decimal data is needed.
Execution Error
Returned when internal processing is not possible because of
one of the following reasons:
- Data out of range
- Conflicting instrument settings
Page 91
Page A.2
Synchronization Error
Returned when the ScopeMeter receives data while it
does not expect any data. This can occur as follows:
- The ScopeMeter receives a new command while a
previous command or query is not yet completely executed.
You can prevent this error by doing the following:
1. Read the <acknowledge> reply after each command or
query.
2. If this <acknowledge> is zero and if a query was sent to
the ScopeMeter, read all available response
data.
Communication Error
Any framing, parity or overrun error detected on the received
data will cause Communication Error.
Page 92
Page B.1
=============================================================
APPENDIX B STATUS DATA
The Status word returned from the ST query gives you extra
information when you have received a non-zero <acknowledge>
reply.
The Status word is a 16-bit binary word where each bit set
true represents an error event with a decimal value
determined by the bit position. (See the following table.)
When more than one bit is set true in the status word, the
response from the ST query will be the sum of the decimal
values of the individual bits.
Example:
<status> = 34 This equals 32 + 2
2 = Wrong parameter data format
32 = Invalid number of parameters
DECIMAL <acknowledge>
BIT VALUE EVENT DESCRIPTION VALUE
------------------------------------------------------------ 0 1 Illegal command 1
1 2 Wrong parameter data format 1
2 4 Parameter out of range 1 or 2
3 8 Instruction not valid in present state 1
4 16 Called function not implemented 2
5 32 Invalid number of parameters 2
6 64 Wrong number of data bits 2
9 512 Conflicting instrument settings 2
14 16384 Checksum error 2
Remarks:
1. A bit in the status word is set when the corresponding
error event occurs.
2. Bits do not affect each other.
3. New error events will ’accumulate’ in the status word.
This means existing bits remain set.
The status word is cleared (all bits reset) as follows:
1. After the response (the status word) from the ST query
has been read.
2. After the RI (Reset Instrument) command.
Page 93
Page C.1
=============================================================
APPENDIX C WAVEFORM DATA
<block_header> = <binary_character>
Possible values: 128 and 0.
The value 0 is returned when also the
<trace_samples> data block is requested.
<block_length> = <unsigned_integer>
= This value gives the number of bytes that
are transmitted after the <block_length>
and before the <check_sum>.
<trace_process>= <normal>|<envelope>|<average>
= <binary_character>. The value of this
field specifies which processing is
performed on the samples of this
particular trace:
<normal> = 1 No processing
<average> = 2 The trace is the result of the
averaging of multiple traces (equal to
the SMOOTH function in manual mode)
<envelope>= 3 The trace is the result of the
envelope process (equal to the
ENVELOPE function in manual mode)
<trace_result> = <acquisition>|<trend_plot>|<touch_hold>
= <binary_character>. The value of this
field specifies which function created
this particular trace:
<acquisition>= 1 The trace is a direct result of the
trace acquisition.
<trend_plot> = 2 The trace is a result of the TrendPlot
function (recording numerical results).
<touch_hold> = 3 The trace is a copy of the acquisition
trace. The copy is activated by the
Touch Hold function of the instrument.
Page 94
Page C.2
<misc_setup> = <binary_character>
This byte contains additional setup
information about the queried trace.
Bit 7 of the byte specifies the coupling
(0=AC, 1=DC) of the channel.
<y_unit> = <unit>
<x_unit> = <unit>
The <unit> is a <binary_character> which
value represents the unit:
<volt> = 1
<ampere> = 2
<ohm> = 3
<farad> = 5
<seconds> = 7
<hertz> = 10
<degree> = 11
<degree_celcius> = 12
<degree_fahrenheit> = 13
<percentage> = 14
<dbm50> = 15
<dbm600> = 16
<dbv> = 17
<dba> = 18
<y_zero> = <float>
Measurement value for the samples with
value zero (0). This value can be seen
as the offset value.
<x_zero> = <float>
This field specifies the x-offset of the
first sample in the <trace_samples> array.
(= time between trigger moment and first
sample.)
<y_resolution> = <float>
This field contains the value that
represents the step between two
consecutive sample values or in other
words the step per least significant bit.
<x_resolution> = <float>
This field contains the value (seconds)
that represents the distance between two
samples. (is time between two samples.)
<check_sum> = <binary_character>
One binary character which represents
the sum of all the <binary_character>s
send after the <block_length> and
before the <check_sum>.
<block_header>= <binary_character> which is 1, 128 or 129.
<block_length>= <unsigned_integer>
This parameter specifies the number of
characters that will follow until the
<check_sum>.
<sample_format>= <binary_character>
This byte specifies the format of the samples.
The highest bit (7) defines whether the
samples should be interpreted as signed (1)
or unsigned values (0).
Bit number 6 in the <sample_format> byte
defines whether the samples are min/max pairs
or not. In the case of min/max pairs, the
minimum value will be followed by the maximum.
The number of samples specifies the number of
sample pairs in this case.
The bits 0 to 2 in the <sample_format> byte
define the number of <binary_character>’s in
which a sample value is represented.
<overload> = <sample_value>
This field specifies which value in the trace
samples represents the overload value.
Page 96
Page C.4
<underload> = <sample_value>
This field specifies which value in the trace
samples represents the underload value.
<invalid> = <sample_value>
This field specifies which value in the trace
samples represents an invalid sample.
Invalid samples can be present at locations
in the trace that have not been filled (yet).
This can e.g. occur in random sampling.
<nbr_of_samples>= <unsigned_integer>
Total number of samples (or sample pairs)
that will follow.
<samples> = {<sample_value>}
In total <nbr_of_samples> will be transmitted.
<sample_value>= {<binary_character>}
Depending on the number of
<binary_character>’s in the <sample_format>
byte, each <sample_vale> is transmitted
in a number of <binary_character>s.
In case the <sample_value> contains multiple
<binary_character>’s, the most significant
byte is transmitted first.
<check_sum> = <binary_character>
One binary character which represents the
sum of all the <binary_character>s after
the <block_length> and before the
<check_sum>.
Remarks: The instrument will finish any processing on the
queried waveform first before sending the data to the
remote device. This means that the remote device will
not have to do any polling on status bits before the
query is send. When the waveform that was queried for,
is still under processing, the processing is finished
first. So no "half traces" will be returned. When the
waveform under processing is in roll mode, the query
will give an execution error.
The remote device has the possibility to cancel the
query, when waiting for response takes to long. This
can be achieved by sending an <esc> or hardware break.
Page 97
Page D.1
=============================================================
APPENDIX D ASCII 7-BIT CODES