Acquiring waveform of LeCroy oscilloscope from C#/.NET

626 views Asked by At

I am trying to load a waveform from a Teledyne Lecroy Wavesurfer 3054 scope using NI-VISA / IVI library. I can connect to the scope and read and set control variables but I can't figure out how to get the trace data back from the scope into my code. I am using USBTMC and can run the sample code in the Lecroy Automation manual but it does not give an example for getting the waveform array data, just control variables. They do not have a driver for IVI.NET. Here is a distilled version of the code:

        // Open session to scope
        var session = (IMessageBasedSession)GlobalResourceManager.Open
                            ("USB0::0x05FF::0x1023::LCRY3702N14729::INSTR");
            session.TimeoutMilliseconds = 5000;
            session.Clear();


            // Don't return command header with query result
            session.FormattedIO.WriteLine("COMM_HEADER OFF");

            //  {  other setup stuff that works OK  }
            //    ...
            //    ...


            //  Attempt to query the Channel 1 waveform data
          session.FormattedIO.WriteLine("vbs? 'return = app.Acquisition.C1.Out.Result.DataArray'");

So the last line above (which seems to be what the manual suggests) causes a beep and there is no data that can be read. I've tried all the read functions and they all time out with no data returned. If I query the number of data points I get 100002 which seems correct and I know the data must be there. Is there a better VBS query to use? Is there a read function that I can use to read the data into a byte array that I have overlooked? Do I need to read the data in blocks due to a buffer size limitation, etc.? I am hoping that someone has solved this problem before. Thanks so much!

2

There are 2 answers

0
darthwarden On

Here is the first effort I got at making it work:

  var session = (IMessageBasedSession)GlobalResourceManager.Open("USB0::0x05FF::0x1023::LCRY3702N14729::INSTR");
  session.TimeoutMilliseconds = 5000;
  session.Clear();

  // Don't return command header with query result
  session.FormattedIO.WriteLine("COMM_HEADER OFF");

  //
  // .. a bunch of setup code...
  //

  session.FormattedIO.WriteLine("C1:WF?");      // Query waveform data for Channel 1
  buff = session.RawIO.Read(MAX_BUFF_SIZE);     // buff has .TRC-like contents of waveform data

The buff[] byte buffer will end up with the same file formatted data as the .TRC files that the scope saves to disk, so it has to be parsed. But at least the waveform data is there! If there is a better way, I may find it and post, or someone else feel free to post it.

0
MRN On

The way I achieved this is by saving the screenshot to a local drive. Map the local drive to the current system & simply use File.Copy() to copy image file from the mapped drive to the local computer. It saves time to parse data & re-plot it if one uses TRC-like contents.