Keysight CXG, EXG, and MXG X-Series Signal Generators Programming Guide 245
Creating and Downloading Waveform Files
Downloading Waveform Data
9
Calculate the total number of bytes, and store the value in the integer variable defined in line 8.
In this code,
numsamples
contains the number of waveform points, not the number of bytes. Because it
takes four bytes of data, two I bytes and two Q bytes, to create one waveform point, we have to multiply
numsamples
by four. This is shown in the following example:
numsamples = 500 waveform points
numsamples x 4 = 2000 (four bytes per point)
bytesToSend = 2000 (numsamples x 4)
For information on setting the number of waveform points, see
“1. Create I and Q data.” on page 235
10
Create a string large enough to hold the
bytesToSend
value as characters. In this code, string
s
is set to 20
bytes (20 characters—one character equals one byte)
11
Create a string and set its length (
cmd
[200]) to hold the SCPI command syntax and parameters. In this code,
we define the string length as 200 bytes (200 characters).
12
Store the value of
bytesToSend
in string
s
. For example, if bytesToSend = 2000;
s
= ”2000”
sprintf()
is a standard function in C++, which writes string data to a string variable.
13
Store the SCPI command syntax and parameters in the string
cmd
. The SCPI command prepares the signal
generator to accept the data.
—
strlen()
is a standard function in C++, which returns length of a string.
— If
bytesToSend
= 2000, then
s
= “2000”,
strlen(s)
= 4, so
cmd
= :MEM:DATA ”WFM1:FILE1\” #42000.
14
Send the SCPI command stored in the string
cmd
to the signal generator, which is represented by the session
id
.
—
iwrite()
is a SICL function in Keysight IO library, which writes the data (block data) specified
in the string
cmd
to the signal generator (
id
).
— The third argument of
iwrite()
,
strlen(cmd)
, informs the signal generator of the number of
bytes in the command string. The signal generator parses the string to determine the
number of I/Q data bytes it expects to receive.
— The fourth argument of iwrite(), 0, means there is no END of file indicator for the string. This
lets the session remain open, so the program can download the I/Q data.
15
Send the generated waveform data stored in the I/Q array
(iqbuffer)
to the signal generator.
—
iwrite()
sends the data specified in
iqbuffer
to the signal generator (session identifier
specified in
id
).
— The third argument of iwrite(),
bytesToSend
, contains the length of the
iqbuffer
in bytes. In
this example, it is 2000.
— The fourth argument of
iwrite()
, 0, means there is no END of file indicator in the data.
In many programming languages, there are two methods to send SCPI commands and
data:
— Method 1 where the program stops the data download when it encounters the first
zero (END indicator) in the data.
— Method 2 where the program sends a fixed number of bytes and ignores any zeros
in the data. This is the method used in our program.
For your programming language, you must find and use the equivalent of method two.
Otherwise you may only achieve a partial download of the I and Q data.
Line
Code Description—Download the I/Q data
Summary of Contents for X-Series
Page 4: ...4 ...
Page 10: ...10 Contents ...