Глава 2. Получение и визуализация данных эксперимента

Работаем с осциллографом на Python


В настоящее время широко распространены цифровые запоминающие осциллографы, имеющие USB-интерфейс для связи с компьютером. Учитывая широкие возможности обработки и анализа электрических сигналов с помощью этого устройства, использование такого осциллографа может стать весьма полезным при проведении эксперимента. Обычно для таких осциллографов имеется собственная программа-драйвер, а также программа для тестирования возможностей удалённого управления.

Представим, что нам требуется периодически получать данные с осциллографа в процессе проведения автоматизированного эксперимента. В таком случае от нас требуется реализовать приём и передачу команд и данных между управляющей программной на Python и осциллографом.

В качестве объекта интереса был взят двухканальный осциллограф Rigol DS1102E, для которого можно использовать программную прослойку от компании National Instruments - NI-VISA. Интерфейс VISA (Virtual Instrument Software Architecture) представляет собой хорошо зарекомендовавший себя стандарт для осуществления коммуникации с различными устройствами на различных платформах, в том числе подключаемых через USB-порт. В отличие от интерфейса DAQ, взаимодействие через интерфейс VISA очень напоминает работу через последовательный порт: передача команды от компьютера – приём ответа от устройства.

Поскольку выбранный нами осциллограф удовлетворяет протоколу USBTMC (Test and Measurement Class), он идентифицируется как «USB Test and measurement device (IVI)» и с ним можно работать через интерфейс VISA.

Для работы с интерфейсом NI-VISA из Python также нужно будет установить пакет pyvisa:

pip install pyvisa

В примере, показанном ниже, программа подстраивает осциллограф под характеристики измеряемого сигнала и получает содержимое экрана осциллографа.


В первую очередь нам необходимо выбрать нужное устройство с VISA-интерфейсом (строки 5-7), ибо таких устройств может быть подключено к компьютеру несколько. Структура dev содержит список всех подключённых VISA-совместимых устройств. В нашем случае это устройство было единственным, поэтому в строке 7 инициируем работу с ним, выбирая первый элемент списка.

Основные методы pyvisa:

read -чтение информации из прибора,
write -запись информации в прибор,
query -запись команды и, сразу затем, чтение возвращаемого результата.

По умолчанию ввод-вывод осуществляется в символьном представлении.

Первой командой, которую дадим осциллографу, является универсальный запрос *IDN?, в ответ на который прибор должен «представиться». Для этого используем метод query (строка 8). Здесь мы проводим дополнительную проверку на то, корректно ли прибор отвечает.

В строке 11 мы пересылаем в осциллограф команду :AUTO, которая включает автоматическую настройку каналов осциллографа для наилучшего отображения регистрируемого сигнала. Выполнение команды занимает несколько секунд, поэтому в программу введена задержка по времени (строка 12). Команда не требует ответа прибора, поэтому был использован метод write.

В строках 13-16 выводим установленный диапазон по значениям напряжения (для первого канала) и по горизонтальной развёртке.

Строка 17 листинга наиболее интересна. Здесь выполняется команда :WAV:DATA? CHAN1, в ответ на которую осциллограф передаёт мгновенную копию сигнала на экране осциллографа в виде последовательности байтов. Значение каждого байта есть инвертированное значение ординаты в диапазоне от 0 до 255, а порядковый номер байта – значение по абсциссам в диапазоне от 0 до 599. Для того, чтобы перевести эти величины в реальные значения по напряжению и по времени, необходимо их умножить на соответствующий поправочный коэффициент (25 точек/дел. по Y – строка 22, и 50 точек/дел. по X – строка 21).

В данном случае главня задача - быстрая визуализация осциллограммы;
если требуется точное значение величины сигнала в какой-либо точке, следует использовать другие команды.

Поскольку по умолчанию метод query работает с символьными данными, весьма ожидаемыми являются проблемы при передаче битового массива. Именно поэтому мы использовали метод query_binary_values. На самом деле можно было бы взять строку символов с помощью стандартного запроса query, а затем конвертировать их в битовый массив. Однако в программе, с учётом нюансов работы с символьными значениями, это бы выглядело более сложно:


Первые десять символов, приходящих с осциллографа – идентификатор формата, поэтому в данном случае мы их пропускаем. Как можно заметить, в обоих случаях очень удобно использовать numpy-массивы. Массив по оси абсцисс достаточно просто формируется в строке 21: последовательность значений, соответствующих числу элементов в массиве data, каждый из которых умножен на поправочный коэффициент. В строке 22 массив data инвертируется (особенность осциллографа) и также нормируется на реальное значение по напряжению.

Вывод программы:

Установлена связь с устройством
Rigol Technologies,DS1102E,DS1E…
Диапазон, В/дел. : 1.0
Время, с/дел. : 0.0005
Взято данных: 600

Если вы заметили неточность, ошибку или хотите поделиться своими мыслями по поводу статьи - мы рады обратной связи. Давайте вместе сделаем ресурс лучше!

От кого:
Ваш комментарий будет виден всем пользователям