Agilent Signal Generators Programming Guide
123
Programming Examples
LAN Programming Interface Examples
2. At the UNIX prompt in your home directory type: cc -Aa -O -o lanio lanio.c
3. At the UNIX prompt in your home directory type: ./lanio xxxxx “*IDN?” where xxxxx is the 
hostname for the signal generator. Use this same format to output SCPI commands to the signal 
generator.
The int main1() function will output a sequence of commands in a program format. If you want to 
run a program using a sequence of commands then perform the following:
1. Rename the lanio.c int main1() to int main() and the original int main() to int main1(). 
2. In the main(), openSocket() function, change the “your hostname here” string to the hostname 
of the signal generator you want to control. 
3. Re-save the lanio.c program.
4. At the UNIX prompt type: cc -Aa -O -o lanio lanio.c
5. At the UNIX prompt type: ./lanio 
The program will run and output a sequence of SCPI commands to the signal generator. The UNIX 
display will show a display similar to the following:
unix machine: /users/mydir
$ ./lanio
ID: Agilent Technologies, E4438C, US70000001, C.02.00
Frequency: +2.5000000000000E+09
Power Level: -5.00000000E+000
Sockets on Windows
In Windows, the routines send() and recv() must be used, since fread() and fwrite() may not work on 
sockets. The following steps outline the process for running the interactive program in the Microsoft 
Visual C++ 6.0 environment:
1. Rename the lanio.c to lanio.cpp and getopt.c to getopt.cpp and add them to the Source folder of 
the Visual C++ project.
NOTE
The int main() function in the lanio.cpp file will allow commands to be sent to the signal 
generator in a line-by-line format; the user types in SCPI commands. The int main1(0) 
function can be used to output a sequence of commands in a “program format.” See 
Programming Using main1() Function below.
2. Click Rebuild All from Build menu. Then Click Execute Lanio.exe. The Debug window will appear with 
a prompt “Press any key to continue.” This indicates that the program has compiled and can be 
used to send commands to the signal generator.
3. Click Start, click Programs, then click Command Prompt. The command prompt window will appear.
4. At the command prompt, cd to the directory containing the lanio.exe file and then to the Debug 
folder. For example C:\SocketIO\Lanio\Debug. 
Best way to convert pdf to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert multiple pdf to jpg; change file from pdf to jpg on
Best way to convert pdf to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf pages to jpg online; pdf to jpeg converter
124
Agilent Signal Generators Programming Guide
Programming Examples
LAN Programming Interface Examples
5. After you cd to the directory where the lanio.exe file is located, type in the following command at 
the command prompt: lanio xxxxx “*IDN?”. For example:
C:\SocketIO\Lanio\Debug>lanio xxxxx “*IDN?” where the xxxxx is the hostname of your 
signal generator. Use this format to output SCPI commands to the signal generator in a line by 
line format from the command prompt.
6. Type exit at the command prompt to quit the program.
Programming Using main1() Function
The int main1() function will output a sequence of commands in a program format. If you want to 
run a program using a sequence of commands then perform the following:
1. Enter the hostname of your signal generator in the openSocket function of the main1() function 
of the lanio.cpp program.
2. Rename the lanio.cpp int main1() function to int main() and the original int main() function 
to int main1(). 
3. Select Rebuild All from Build menu. Then select Execute Lanio.exe.
The program will run and display results similar to those shown in Figure 3-2. 
Figure 3-2 2 Program Output Screen 
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Best C#.NET PDF converter SDK for converting PDF fidelity PDF to TIFF conversion in an easy way. control, C# developers can render and convert PDF document to
to jpeg; batch pdf to jpg converter online
VB.NET Create PDF Library SDK to convert PDF from other file
Best VB.NET component to convert Microsoft Office Creating a PDF document is a good way to share your ideas because you can make sure that the PDF
pdf to jpg converter; pdf to jpg
Agilent Signal Generators Programming Guide
125
Programming Examples
LAN Programming Interface Examples
Queries for Lan Using Sockets
lanio.c and getopt.c perform the following functions:
• establishes TCP/IP connection to port 5025
• resultant file descriptor is used to “talk” to the instrument using regular socket I/O mechanisms
• maps the desired hostname to an internal form
• error checks
• queries signal generator for ID
• sets frequency on signal generator to 2.5 GHz
• sets power on signal generator to –5 dBm
• gets option letter from argument vector and checks for end of file (EOF)
The following programming examples are available on the signal generator Documentation CD-ROM 
as lanio.c and getopt.c.
/***************************************************************************
 $Header: lanio.c 04/24/01
 $Revision: 1.1 $
 $Date: 10/24/01
 PROGRAM NAME:   lanio.c
*
 $Description:     Functions to talk to an Agilent signal generator
                   via TCP/IP.  Uses command-line arguments.
*
                   A TCP/IP connection to port 5025 is established and
                   the resultant file descriptor is used to "talk" to the
                   instrument using regular socket I/O mechanisms. $
*
*
*
 Examples:
*
  Query the signal generator frequency:
       lanio xx.xxx.xx.x 'FREQ?'
*
  Query the signal generator power level:
       lanio xx.xxx.xx.x  'POW?'
*
  Check for errors (gets one error):
       lanio xx.xxx.xx.x  'syst:err?'
*
  Send a list of commands from a file, and number them:
       cat scpi_cmds | lanio -n xx.xxx.xx.x 
*
****************************************************************************
126
Agilent Signal Generators Programming Guide
Programming Examples
LAN Programming Interface Examples
*
 This program compiles and runs under
    - HP-UX 10.20 (UNIX), using HP cc or gcc:
          + cc -Aa    -O -o lanio  lanio.c
          + gcc -Wall -O -o lanio  lanio.c
*
    - Windows 95, using Microsoft Visual C++ 4.0 Standard Edition
    - Windows NT 3.51, using Microsoft Visual C++ 4.0 
          + Be sure to add  WSOCK32.LIB  to your list of libraries!
          + Compile both lanio.c and getopt.c
          + Consider re-naming the files to lanio.cpp and getopt.cpp
*
 Considerations:
    - On UNIX systems, file I/O can be used on network sockets.
      This makes programming very convenient, since routines like
      getc(), fgets(), fscanf() and fprintf() can be used.  These
      routines typically use the lower level read() and write() calls.
*
    - In the Windows environment, file operations such as read(), write(),
      and close() cannot be assumed to work correctly when applied to
      sockets.  Instead, the functions send() and recv() MUST be used.
*****************************************************************************/
/* Support both Win32 and HP-UX UNIX environment */
#ifdef _WIN32     /* Visual C++ 6.0 will define this */
 define WINSOCK
#endif
#ifndef WINSOCK
 ifndef _HPUX_SOURCE
 define _HPUX_SOURCE
 endif
#endif
#include <stdio.h>         /* for fprintf and NULL  */
#include <string.h>        /* for memcpy and memset */
#include <stdlib.h>        /* for malloc(), atol() */
#include <errno.h>         /* for strerror          */
#ifdef WINSOCK
Agilent Signal Generators Programming Guide
127
Programming Examples
LAN Programming Interface Examples
#include <windows.h>
 ifndef _WINSOCKAPI_
 include <winsock.h>   // BSD-style socket functions
 endif
#else                        /* UNIX with BSD sockets */
 include <sys/socket.h>    /* for connect and socket*/
 include <netinet/in.h>    /* for sockaddr_in       */
 include <netdb.h>         /* for gethostbyname     */
 define SOCKET_ERROR (-1)
 define INVALID_SOCKET (-1)
typedef  int SOCKET;
#endif /* WINSOCK */
#ifdef WINSOCK
/* Declared in getopt.c.  See example programs disk. */
extern char *optarg;
extern int  optind;
extern int getopt(int argc, char * const argv[], const char* optstring);
#else
 include <unistd.h>           /* for getopt(3C) */
#endif
#define COMMAND_ERROR  (1)
#define NO_CMD_ERROR  (0)
#define SCPI_PORT  5025
#define INPUT_BUF_SIZE (64*1024)
/**************************************************************************
* Display usage
**************************************************************************/
static void usage(char *basename)
{
fprintf(stderr,"Usage: %s [-nqu] <hostname> [<command>]\n", basename);
128
Agilent Signal Generators Programming Guide
Programming Examples
LAN Programming Interface Examples
fprintf(stderr,"       %s [-nqu] <hostname> < stdin\n", basename);
fprintf(stderr,"  -n, number output lines\n");
fprintf(stderr,"  -q, quiet; do NOT echo lines\n");
fprintf(stderr,"  -e, show messages in error queue when done\n");
}
#ifdef WINSOCK
int init_winsock(void)
{
WORD wVersionRequested; 
WSADATA wsaData; 
int err; 
wVersionRequested = MAKEWORD(1, 1); 
wVersionRequested = MAKEWORD(2, 0); 
err = WSAStartup(wVersionRequested, &wsaData); 
if (err != 0) {
/* Tell the user that we couldn't find a useable */ 
/* winsock.dll.     */ 
fprintf(stderr, "Cannot initialize Winsock 1.1.\n");
return -1; 
}
return 0;
}
int close_winsock(void)
{
WSACleanup();
return 0;
}
#endif /* WINSOCK */
/***************************************************************************
*
> $Function: openSocket$
*
* $Description:  open a TCP/IP socket connection to the instrument $
Agilent Signal Generators Programming Guide
129
Programming Examples
LAN Programming Interface Examples
*
* $Parameters:  $
   (const char *) hostname . . . . Network name of instrument.
                                   This can be in dotted decimal notation.
   (int) portNumber  . . . . . . . The TCP/IP port to talk to.
                                   Use 5025 for the SCPI port.
*
* $Return:     (int)  . . . . . . . . A file descriptor similar to open(1).$
*
* $Errors:     returns -1 if anything goes wrong $
*
***************************************************************************/
SOCKET openSocket(const char *hostname, int portNumber)
{
struct hostent *hostPtr;
struct sockaddr_in peeraddr_in;
SOCKET s;
memset(&peeraddr_in, 0, sizeof(struct sockaddr_in));
/***********************************************/
/* map the desired host name to internal form. */
/***********************************************/
hostPtr = gethostbyname(hostname);
if (hostPtr == NULL)
{
fprintf(stderr,"unable to resolve hostname '%s'\n", hostname);
return INVALID_SOCKET;
}
/*******************/
/* create a socket */
/*******************/
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
fprintf(stderr,"unable to create socket to '%s': %s\n",
hostname, strerror(errno));
return INVALID_SOCKET;
}
130
Agilent Signal Generators Programming Guide
Programming Examples
LAN Programming Interface Examples
memcpy(&peeraddr_in.sin_addr.s_addr, hostPtr->h_addr, hostPtr->h_length);
peeraddr_in.sin_family = AF_INET;
peeraddr_in.sin_port = htons((unsigned short)portNumber);
if (connect(s, (const struct sockaddr*)&peeraddr_in,
sizeof(struct sockaddr_in)) == SOCKET_ERROR)
fprintf(stderr,"unable to create socket to '%s': %s\n",
hostname, strerror(errno));
return INVALID_SOCKET;
}
return s;
}
/***************************************************************************
*
> $Function: commandInstrument$
*
* $Description:  send a SCPI command to the instrument.$
*
* $Parameters:  $
    (FILE *) . . . . . . . . . file pointer associated with TCP/IP socket.
    (const char *command)  . . SCPI command string.
* $Return:  (char *) . . . . . . a pointer to the result string.
*
* $Errors:   returns 0 if send fails $
*
***************************************************************************/
int commandInstrument(SOCKET sock,
const char *command)
{
int count;
/* fprintf(stderr, "Sending \"%s\".\n", command);  */
if (strchr(command, '\n') == NULL) {
fprintf(stderr, "Warning: missing newline on command %s.\n", command);
}
count = send(sock, command, strlen(command), 0);
Agilent Signal Generators Programming Guide
131
Programming Examples
LAN Programming Interface Examples
if (count == SOCKET_ERROR) {
return COMMAND_ERROR;
}
return NO_CMD_ERROR;
}
/**************************************************************************
* recv_line(): similar to fgets(), but uses recv()
**************************************************************************/
char * recv_line(SOCKET sock, char * result, int maxLength)
{
#ifdef WINSOCK
int cur_length = 0;
int count;
char * ptr = result;
int err = 1;
while (cur_length < maxLength) {
/* Get a byte into ptr */
count = recv(sock, ptr, 1, 0);
/* If no chars to read, stop. */
if (count < 1) {
break;
}
cur_length += count;
/* If we hit a newline, stop. */
if (*ptr == '\n') {
ptr++;
err = 0;
break;
}
ptr++;
}
*ptr = '\0';
if (err) {
132
Agilent Signal Generators Programming Guide
Programming Examples
LAN Programming Interface Examples
return NULL;
} else {
return result;
}
#else
/***********************************************************************
* Simpler UNIX version, using file I/O.  recv() version works too.
* This demonstrates how to use file I/O on sockets, in UNIX.
***********************************************************************/
FILE * instFile;
instFile = fdopen(sock, "r+"); 
if (instFile == NULL) 
fprintf(stderr, "Unable to create FILE * structure : %s\n", 
strerror(errno)); 
exit(2); 
return fgets(result, maxLength, instFile);
#endif
}
/***************************************************************************
*
> $Function: queryInstrument$
*
* $Description:  send a SCPI command to the instrument, return a response.$
*
* $Parameters:  $
    (FILE *) . . . . . . . . . file pointer associated with TCP/IP socket.
    (const char *command)  . . SCPI command string.
    (char *result) . . . . . . where to put the result.
    (size_t) maxLength . . . . maximum size of result array in bytes.
*
* $Return:  (long) . . . . . . . The number of bytes in result buffer.
*
* $Errors:   returns 0 if anything goes wrong. $
*
***************************************************************************/
long queryInstrument(SOCKET sock,
const char *command, char *result, size_t maxLength)
Documents you may be interested
Documents you may be interested