VISA (программная архитектура)

VISA, Virtual Instrument Software Architecture — широко используемый стандартизированный интерфейс ввода-вывода в области тестирования и измерений для управления приборами с персонального компьютера. Поддерживает интерфейсы IEEE-488 (GPIB), VXI, RS-232, а также USB для измерительных устройств. Реализация VISA (например, NI VISA) представляет собой библиотеку функций для языков C, Visual Basic и G, которые унифицируют доступ ко всем измерительным устройствам, независимо от используемого протокола и аппаратуры (например, независимо от модели GPIB-адаптера).

Интерфейс VISA предполагает общение с прибором в форме «запрос-ответ». Компьютер отправляет специфичную для конкретного прибора команду-запрос (например, требование выполнить измерение физической величины) и ждёт ответа (например, отчёт о состоянии или результаты измерений) от прибора. Интерфейс также поддерживает специфичные для шины особенности, например, при работе с GPIB общение может также быть инициировано прибором с помощью прерывания, а для RS-232 можно конфигурировать битрейт, количество битов в кадре данных и т. д.

VISA был разработан компанией National Instruments в середине 1990-х для автоматизации измерений с помощью так называемых «виртуальных приборов» (VI). Используется в основном в таких программных продуктах компании, как LabVIEW, LabWindows и Measurement Studio. Несмотря на то, что интерфейс VISA стандартизирован, наиболее часто используется проприетарная реализация от National Instruments. Эта библиотека может быть бесплатно скачана с сайта компании после регистрации, есть версии для Linux, Mac OS, Windows. В комплект с библиотекой включены также несколько программных инструментов, например, NI Spy — программа для протоколирования обращений к библиотеке NI VISA.

PyVISA

PyVISA — это обёртка для библиотеки NI VISA, предоставляющая интерфейс для языка программирования Python. Авторы библиотеки Torsten Bronger, Ахен, Германия и Gregor Thalhammer, Иннсбрук, Австрия; издана по свободной лицензии MIT. Библиотека позволяет использовать всё удобство и гибкость высокоуровневого языка программирования Python для быстрой разработки систем сбора и обработки данных с измерительного оборудования в научной лаборатории.

PyVISA предоставляет высокоуровневые функции для опроса приборов и работы с массивами данных.

Пример использования

Ниже приведён пример использования PyVISA для получения спектра и измерения мощности лазерного излучения, приходящего в оптический спектроанализатор Agilent 86142.

Прежде всего, нужно импортировать библиотеку PyVISA (в коде именуется visa). Для каждого инструмента создаётся класс instrument, в котором есть методы для чтения/отправки данных (read, write, ask, ask_for_values…).

import visa visa.get_instrument_list() # Просмотр всех доступных инструментов OSA = visa.instrument("GPIB::02::INSTR")

Опрос и идентификация прибора с использованием стандартной команды SCPI «*IDN?»

OSA.ask("*IDN?") # Вернёт модель прибора с адресом GPIB::02 OSA.timeout = 40 # Ответ от прибора ожидается до 40 секунд

Получение текущего спектра в виде массива в переменную trace:

OSA.write("CALC1:AVER:STAT ON") # Включаем усреднение измерений OSA.write("CALC1:AVER:COUN 9") # Усреднение производится по 9-ти спектрам OSA.ask("INIT; *OPC?") # Запускаем измерение и ждём его окончания, после чего прибор вернёт "+1" trace = OSA.ask_for_values("TRACE? TRA") # Получаем спектр в переменную trace

Установка маркера мощности на спектр и опрос его значения:

OSA.write("CALC:MAKR1:MAX") # Устанавливаем маркер на пик в спектре power = OSA.ask("CALC:MARK1:Y?") # Считываем значение мощности лазера wl = OSA.ask("CALC:MARK1:X?") # Считываем длину волны лазера