С подобными задачами сталкиваешься редко, однако если это происходит, очень приятно прочитать исчерпывающую статью, которая поможет быстро начать продуктивную работу, а не ломать целый день голову вопросами «Что скачать?», «Где найти?», «Как это вообще работает?». У меня подобная задача возникла в рамках разработки автоматизированного стенда для тестирования плат. В процессе ее решения возник ряд проблем, а информации в интернете по этому поводу достаточно мало ввиду узости проблемы. Данная статья максимально подробно и емко описывает основные моменты для быстрого начала работы с осциллографами Tektronix из Visual Studio.
Во-первых нужно скачать и установить драйвер TekVISA (нужно будет пройти регистрацию, иначе вы не сможете скачать необходимые драйвера).
После установки драйвера TekVISA нужно зайти в директорию C:\Windows\assembly, именно там будет лежать необходимая для работы библиотека TekVISANet.dll. Далее добавляем библиотеку в проект (Project > Add Reference… > Browse...) и… все!
И казалось бы, что все так просто! Однако, была потрачена половина рабочего дня, для того чтобы понять, куда была сохранена эта чудо библиотека. Ведь следуя голосу разума, ты ожидаешь найти ее в совсем других директориях, например, C:\Program Files (x86)\IVI Foundation или C:\Program Files (x86)\Tektronix.
Взаимодействовать с осциллографом максимально просто. Например, следующий кусочек кода позволяет подключиться к устройству и прочитать его идентификационные данные:
OUTPUT:
RESOURCES:
USB0::0x0699::0x0376::C011053::INSTR
ASRL7::INSTR
ASRL8::INSTR
IDN (device information):
TEKTRONIX,MSO2012,C011053,CF:91.1CT FV:v1.52 DPO2COMP:V1.00
Для общения с устройством нужно использовать SCPI (Standard Commands for Programmable Instruments) команды. Ознакомиться с ними можно здесь: sdphca.ucsd.edu/Lab_Equip_Manuals/SCPI-99.pdf. Однако все приборы обладают разными настройками и функциональностью, таким образом, нужно найти набор SCPI команд, применимых именно к Вашему конкретному устройству. Как правило, их можно найти в Programmer Manual устройства.
Также можно скачать OpenChoice Desktop free application для осциллографов Tektronix. После скачивания и установки, нужно подключить прибор к компьютеру (USB), запустить приложение, перейти на вкладку Get & Send Settings и нажать кнопку Get Settings. На экране появятся все доступные команды для настройки устройства с их текущими параметрами.
Пример 1. Измерение значения RMS со второго канала:
Пример 2. Получение формы сигнала в виде точек, сохраненных в .csv файл для дальнейшего использования:
Во-первых нужно скачать и установить драйвер TekVISA (нужно будет пройти регистрацию, иначе вы не сможете скачать необходимые драйвера).
После установки драйвера TekVISA нужно зайти в директорию C:\Windows\assembly, именно там будет лежать необходимая для работы библиотека TekVISANet.dll. Далее добавляем библиотеку в проект (Project > Add Reference… > Browse...) и… все!
И казалось бы, что все так просто! Однако, была потрачена половина рабочего дня, для того чтобы понять, куда была сохранена эта чудо библиотека. Ведь следуя голосу разума, ты ожидаешь найти ее в совсем других директориях, например, C:\Program Files (x86)\IVI Foundation или C:\Program Files (x86)\Tektronix.
Взаимодействовать с осциллографом максимально просто. Например, следующий кусочек кода позволяет подключиться к устройству и прочитать его идентификационные данные:
using System;
using System.Collections;
using TekVISANet;
namespace TekVISAExample
{
class Program
{
static void Main(string[] args)
{
string response;
ArrayList resources = new ArrayList();
VISA tekVISA = new VISA();
tekVISA.FindResources("?*", out resources);
Console.WriteLine("RESOURCES:");
foreach (string s in resources)
Console.WriteLine(s);
tekVISA.Open(resources[0].ToString());
tekVISA.Write("*IDN?");
bool status = tekVISA.Read(out response);
if (status)
Console.WriteLine("IDN (device information): {0}", response);
Console.ReadKey();
}
}
}
OUTPUT:
RESOURCES:
USB0::0x0699::0x0376::C011053::INSTR
ASRL7::INSTR
ASRL8::INSTR
IDN (device information):
TEKTRONIX,MSO2012,C011053,CF:91.1CT FV:v1.52 DPO2COMP:V1.00
Для общения с устройством нужно использовать SCPI (Standard Commands for Programmable Instruments) команды. Ознакомиться с ними можно здесь: sdphca.ucsd.edu/Lab_Equip_Manuals/SCPI-99.pdf. Однако все приборы обладают разными настройками и функциональностью, таким образом, нужно найти набор SCPI команд, применимых именно к Вашему конкретному устройству. Как правило, их можно найти в Programmer Manual устройства.
Также можно скачать OpenChoice Desktop free application для осциллографов Tektronix. После скачивания и установки, нужно подключить прибор к компьютеру (USB), запустить приложение, перейти на вкладку Get & Send Settings и нажать кнопку Get Settings. На экране появятся все доступные команды для настройки устройства с их текущими параметрами.
Пример 1. Измерение значения RMS со второго канала:
using System;
using System.Collections;
using TekVISANet;
namespace TekVISAExample
{
class Program
{
private const string OSCILLOSCOPE = "USB0::0x0699::0x0376::C011053::INSTR";
static void Main(string[] args)
{
VISA tekVISA = new VISA();
ArrayList resources = new ArrayList();
tekVISA.FindResources("?*", out resources);
bool opened = false;
if (resources.Contains(OSCILLOSCOPE))
opened = tekVISA.Open(OSCILLOSCOPE);
if (opened)
{
///настраиваем канал 2
tekVISA.Write("CH2:COUPLING AC");
tekVISA.Write("CH2:SCALE 20.000E-3");
tekVISA.Write("CH2:BANDWIDTH 20.000E+6");
///что мы хотим измерять?
tekVISA.Write("MEASUREMENT:MEAS1:TYPE RMS");
tekVISA.Write("MEASUREMENT:MEAS1:SOURCE1 CH2");
tekVISA.Write("MEASUREMENT:MEAS1:STATE ON");
///запрос на чтение значения RMS
tekVISA.Write("MEASUREMENT:MEAS1:VALUE?");
string response = "";
///чтение данных
tekVISA.Read(out response);
Console.WriteLine("RMS CH2 VALUE: {0}", response);
}
Console.ReadKey();
}
}
Пример 2. Получение формы сигнала в виде точек, сохраненных в .csv файл для дальнейшего использования:
using System;
using System.Linq;
using System.Collections;
using System.Globalization;
using TekVISANet;
using System.Threading;
namespace TekVISAExample
{
class Program
{
private const string OSCILLOSCOPE = "USB::0x0699::0x0376::C011053::INSTR";
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
VISA tekVISA = new VISA();
ArrayList resources = new ArrayList();
tekVISA.FindResources("?*", out resources);
bool opened = false;
if (resources.Contains(OSCILLOSCOPE))
opened = tekVISA.Open(OSCILLOSCOPE);
if (opened)
{
NumberStyles styles = NumberStyles.AllowExponent | NumberStyles.Number;
string response = "";
tekVISA.Write("DATA:SOU CH2");
tekVISA.Write("DATA:WIDTH 1");
tekVISA.Write("DATA:ENC ASCII");
tekVISA.Write("DATA:STOP 5208");
tekVISA.Query("WFMPRE:YMULT?", out response);
response = response.Replace(":WFMPRE:YMULT ", "");
float ymult = float.Parse(response, styles);
tekVISA.Query("WFMPRE:YZERO?", out response);
response = response.Replace(":WFMPRE:YZERO ", "");
float yzero = float.Parse(response, styles);
tekVISA.Query("WFMPRE:YOFF?", out response);
response = response.Replace(":WFMPRE:YOFF ", "");
float yoff = float.Parse(response, styles);
tekVISA.Query("WFMPRE:XINCR?", out response);
response = response.Replace(":WFMPRE:XINCR ", "");
float xincr = float.Parse(response, styles);
tekVISA.Write("CURVE?");
tekVISA.Read(out response);
response = response.Replace(":CURVE ", "");
sbyte[] rawwave = response.Split(',').Select(n => Convert.ToSByte(n)).ToArray();
float[] wave = new float[rawwave.Count()];
for (int j = 0; j < rawwave.Count(); j++)
wave[j] = (rawwave[j] - yoff) * ymult + yzero;
System.IO.StreamWriter file = new System.IO.StreamWriter("waveform.csv");
file.WriteLine("V,S");
for (int j = 0; j < wave.Count(); j++)
{
float timepoint = j * xincr;
file.WriteLine(wave[j].ToString() + "," + timepoint.ToString());
}
file.Close();
tekVISA.Close();
}
Console.ReadKey();
}
}
}
leremin
Что-то команды очень похожи на команды источников тока GW Instek PSH-*. А вообще статья ни о чем: нужен Programmer Manual, а все остальное — дело техники.