Click here to Skip to main content
15,867,704 members
Articles / DevOps / Testing

Remote Controlling Instrument Over LAN

Rate me:
Please Sign up or sign in to vote.
5.00/5 (5 votes)
26 Dec 2011CPOL3 min read 58.5K   2.9K   23   8
Step by Step explanation of remote controlling test instruments over LAN

Introduction

Remote Controlling Desktop Test Instruments consist of physically connecting the instrument  to a computer using GPIB, USB, Ethernet, LXI, LAN and Serial Port, set the measurement conditions via instruments' command set, get the measurement results and log the measurement results for further analysis. 

Some vendors(National Instruments, Agilent, Rohde Schwarz, Keithley, Tektronix...) offers an extensive assortment of instrument control hardware and software tools to help, save time and money throughout the life of your instrument control system. Improve performance and increase reliability with bus hardware for GPIB, USB, Ethernet, LXI, LAN, and serial while taking advantage of increased productivity due to software tools such as NI LabVIEW, Agilent VEE, Visual Studio C# and premade instrument drivers. 

Using ready-to-use instrument drivers may not fit to our needs, since we need custom applications and measurements that vendors never know. So, developing instrument driver using direct I/O commands(the command set supplied with User/Programmer Manuals of the Test Instruments), solve the custom driver requirements. This article explains how to remote control the desktop electronic test instrument(in this case Agilent N9010A) step-by-step using C# over LAN. 

Background

With Instrument control, one can connect to the desktop instrument using computer and take measurements. There are several different ways to control your instruments – you can either use an instrument driver or control the instrument through direct I/O commands (see Figure1).

instrumentDriverArchitecture.png

Figure1.

Getting Started 

In this tutorial, we are going to communicate with an instrument over LAN. The Instrument that we are communicate with is Agilent N9010A with IP number 192.168.1.47 and Port Number 5025.(See Figure2)

UIDesign.png

Figure2. N9010A LAN Communication User Interface

To accomplish this, we need to create new Windows Project using Visual Studio 2010, So click File->New Project. Then give a Name and Location to project(See Figure3)

N9010ANewProject-300x207.png

Figure3.N9010A Project Settings

After creating a VS C#.NET project, we begin designing our User Interface(UI). Our UI consist of following controls and related properties;

Table1.Instrument Control Form 

Control NameText
Windows.FormsMainFormN9010A Communication Over Lan
Windows.Forms.ButtonbtnConnect&Connect
Windows.Forms.TextBoxtbSAPort5025
Windows.Forms.TextBoxtbSAAddress192.168.1.47
Windows.Forms.LabellblIDNText for this control is filled by *IDN? query from N9010A
Windows.Forms.LabellabelControl1SA IP:
Windows.Forms.LabellabelControl2SA Port:
Windows.Forms.LabellabelControl3IDN:
Windows.Forms.ToolStripMenuItemtsmiFileFile
Windows.Forms.ToolStripMenuItemtsmiExitExit

In the following Class named N9010A, we are going to write a N9010A communication infrastructue. The writeLine(string command) method, sends a command to an instrument appending "\n". This "\n" character is known as EOL indicating the end of command. The readLine method reads an instrument response to the remote command sent by writeLine(string command) and returns as ASCII string.  

C#
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace N90101A
{
    // N9010A Spectrumm Analyzer Class
    public class N9010A
    {
        //N9010A IP Address
        private string IpAddr;
        //N9010A Port number
        private int PortNumber;
        //a network endpoint as an IP address and a port number
        private IPEndPoint ip = null;
        //IPEndPoint property for N9010A
        public IPEndPoint Ip
        {
            get
            {
                if (ip == null)
                    ip = new IPEndPoint(IPAddress.Parse(this.IpAddr), this.PortNumber);
                return ip;
            }
            set { ip = value; }
        }
        //N9010A Spectrum Analyzer Constructor
        //instrIPAddress:N9010A IP Address,ex:"192.168.001.047"
        //instrPortNo:N9010A Port Number, ex:5025
        public N9010A(string instrIPAddress, int instrPortNo)
        {
            this.IpAddr = instrIPAddress;
            this.PortNumber = instrPortNo;

            if (!Soket.Connected)
                throw new ApplicationException("Instrument at "+ this.Ip.Address + ":" + this.Ip.Port + " is not connected");
        }

        //Writes an remote command to an N9010A with "\n"
        public void writeLine(string command)
        {
            Soket.Send(Encoding.ASCII.GetBytes(command + "\n"));
        }
        //Reads the N9010A response as string to a command sent with writeLine method
        public string readLine()
        {
            byte[] data = new byte[1024];
            int receivedDataLength = Soket.Receive(data);
            return Encoding.ASCII.GetString(data, 0, receivedDataLength);
        }

        Socket soket = null;

        //TCPIP connection to a N9010A
        public Socket Soket
        {
            get
            {
                if (soket == null)
                {
                    soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        if (!soket.Connected)
                            soket.Connect(this.Ip);
                    }
                    //Throw an exception if not connected
                    catch (SocketException e)
                    {
                        Console.WriteLine("Unable to connect to server.");
                        throw new ApplicationException("Instrument at "+ this.Ip.Address + ":" + this.Ip.Port + " is not connected");
                    }
                }
                return soket;
            }
            set { soket = value; }
        }
    }
}
Let us design a form so that we can communicate with an instrument-N9010A. Controls that we used on the Form is given in Table1.

MainForm class is as follows

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;

namespace N90101A
{
    public partial class MainForm : Form
    {
        private N9010A sa;
        public MainForm()
        {
            
            InitializeComponent();
        }
        //When invoked, the Instrument is connected and instrument handle is created
        private void btnSAConnect_Click(object sender, EventArgs e)
        {
            this.saBaglan(this.tbSAAddress.Text, this.tbSAPort.Text);
        }
        //Sends a command "*IDN?" to an instrument whose IP Address is saAddress Port Number is saPort, reads the response from N9010A and update the User Interface
        private void saBaglan(string saAddress, string saPort
        {
            try
            {
                sa = new N9010A(saAddress, int.Parse(saPort));
                sa.writeLine("*IDN?");
                this.lblIDN.Text = sa.readLine();
            }
            catch (ApplicationException ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

The IDN response acquired from Spectrum Analyzer is as folllows:

SpectrumAnalyzerIdnResponse.png

Improving N9010A Class

It is time to improve N9010A class by adding more methods.One can extend the class N9010A to a .dll by creating new Class Library Project

C#
        // Adjusts the N9010A's RBW, VBW and Sweep Time
        // <param name="rbw" />RBW in MHz
        // <param name="vbw" />VBW in MHz
        // <param name="swe" />Sweep Auto 0-->OFF, 1-->ON
        public void saRbwVbwSweTime(double rbw, double vbw, byte swe)
        {
            writeLine("BAND " + rbw + " MHZ");
            writeLine("BAND:VID " + vbw + " MHZ");
            writeLine("SWE:TIME:AUTO " + (swe == 0 ? "OFF":"ON"));
        }

//Read the Marker Peak values and return the marker1 frequency to SAFreqOut, amplitude value to SAAmpOut
public void readMarker1Peak(out double SAFreqOut, out double SAAmpOut)
        {
            writeLine(":CALC:MARK1:STAT ON");
            writeLine(":CALC:MARK1:MAX");//Do a peak search
            writeLine(":CALC:MARK1:X?");//Query the marker peak value
            SAFreqOut = double.Parse(readDouble())/1E6;//in MHz
            writeLine(":CALC:MARK1:Y?");
            SAAmpOut = double.Parse(readLine());
        }

Conclusion 

In this tutorial, I explained the how to Remote Control an Electronic Test Instrument over LAN and develop an instrument driver without a VISA libraries and Instrument Vendor device drivers(dlls, driver files...). To extend the N9010A Class, one can write and add more methods to a class and develop an custom drivers for an instrument.For more articles visit http://www.miltest.com/ 

Instrument Drivers for the Spectrum Analyzers, Network Analyzers, EMI Receivers, Multimeters, Signal Generators are also available and custom drivers may be designed. For further questions please contact me. 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead Aselsan A.S
Turkey Turkey
Test and Measurement Professional, MScEE, Numerical Electromangnetics

Comments and Discussions

 
QuestionRemote control for R&S Spectrum analyzer FSP 30 Pin
Member 1319934418-Feb-22 6:45
Member 1319934418-Feb-22 6:45 
AnswerRe: Remote control for R&S Spectrum analyzer FSP 30 Pin
ceken5-Mar-22 8:02
ceken5-Mar-22 8:02 
Questioncontrolling a relay board over ethernet using C# Pin
Member 1137556017-Nov-15 7:33
Member 1137556017-Nov-15 7:33 
AnswerRe: controlling a relay board over ethernet using C# Pin
ceken22-Feb-16 1:59
ceken22-Feb-16 1:59 
QuestionCapturing Screen shot and downloading into Remote or Client PC Pin
RAJU PONNAGANTI18-Nov-14 1:46
RAJU PONNAGANTI18-Nov-14 1:46 
AnswerRe: Capturing Screen shot and downloading into Remote or Client PC Pin
ceken13-Apr-15 22:16
ceken13-Apr-15 22:16 
AnswerRe: Capturing Screen shot and downloading into Remote or Client PC Pin
ElectroMonster8-Dec-17 7:23
ElectroMonster8-Dec-17 7:23 
GeneralMy vote of 5 Pin
Member 432084412-Feb-12 5:57
Member 432084412-Feb-12 5:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.