Пакет поддержки VISA
VISA (Virtual Instrument Software Architecture) — это спецификация, разработанная для унификации взаимодействия с измерительными приборами.
VISA предоставляет абстракцию для общения с различными типами оборудования (USB, Ethernet, GPIB и др.). В контексте Engee пакет поддержки VISA используется для интеграции сторонних измерительных приборов и управления ими через код на языке Julia не выходя из Engee. Например, работа с VISA позволяет:
-
Получать список доступных приборов;
-
Управлять доступными приборами — открывать сессии, отправлять команды, считывать ответы;
-
Работать с бинарными данными и I/O-буферами.
|
Для начала работы с пакетом поддержки VISA в Engee сперва необходимо установить подсистему Engee.Интеграции: запустить клиентскую программу и вставить в нее URL для работы сервера на стороне Engee, подробнее см. в статье. После выполните:
Далее необходимо создать объект VISA, который будет использоваться для взаимодействия с измерительными приборами:
|
Основные методы работы с VISA
Для работы с приборами, подключенными через спецификацию VISA, используются следующие методы:
-
visa.close_instrument— освобождает шину для прибора, подключенного через спецификацию VISA. -
visa.close_session— закрывает сессию работы с VISA. -
visa.create_instrument— создает экземпляр прибора, подключенного по указанному порту. -
visa.create_session— создает сессию для работы с VISA. -
visa.flush— очищает I/O буфера прибора. -
visa.get_ports— получает список доступных физических портов. -
visa.read— читает данные с прибора. -
visa.readbinblock— читает бинарные данные с прибора. -
visa.visatrigger— подает команды прерывания в прибор. -
visa.write— записывает сообщения в прибор. -
visa.writebinblock— записывает бинарные данные в прибор. -
visa.writeread— записывает в прибор и читает ответ.
Подробное описание каждого метода см. в статье Программное управление VISA.
Пошаговый пример работы с VISA
Рассмотрим пример, в котором создается сессия, получается список портов, создается прибор, записывается команда в прибор и читается ответ:
-
Создание сессии для работы с приборами VISA — создайте сессию, указав аппаратную реализацию (например,
@py):visa.create_session("@py")Подробнее об аппаратной реализации читайте по ссылке. -
Получение списка доступных физических портов — получите список доступных портов и выберите последний из них:
ports = visa.get_ports().data port = last(ports) -
Создание абстракции прибора на указанном порте — создайте прибор для работы с выбранным портом:
visa.create_instrument(port)В случае необходимости работы более чем с одним измерительным прибором, повторите команду VISA.create_instrument(visa, port)с портом другого устройства. -
Запись сообщения для сброса настроек в прибор — отправьте команду для сброса настроек прибора:
visa.write(port, "*RST;:SYSTEM:LOCK OFF", "") -
Запись данных в прибор и чтение ответа с задержкой — отправьте команду и прочитайте ответ с задержкой в 1.2 секунды:
writeread_result = visa.writeread(port, ":CHAN1:BASE:WAV?", 1.2).data -
Чтение сообщения с прибора — прочитайте данные с прибора (убедитесь, что прибор отправляет данные):
read_result = visa.read(port, "").data -
Запись бинарных данных в прибор — запишите два байта в прибор:
visa.writebinblock(port, [0x01, 0x00]) -
Чтение бинарных данных с прибора — прочитайте 8 байт данных с прибора:
bytes = visa.readbinblock(port, 8).data -
Инициирование прерывания в приборе — отправьте команду прерывания (может быть недоступно на некоторых приборах):
visa.visatrigger(port) -
Очистка I/O буфера записи в приборе — очистите буфер записи (может быть недоступно на некоторых приборах):
visa.flush(port, "flush_write_buffer") -
Освобождение шины для прибора — освободите шину, чтобы другие приборы могли использовать порт:
visa.close_instrument(port) -
Закрытие сессии работы с прибором — закройте сессию VISA:
visa.close_session()
Возможные проблемы и их решение
-
Проблема с отображением портов — если метод
visa.get_portsне возвращает доступные порты, то убедитесь, что измерительное оборудование доступно на стороне пользователя:-
В Linux для взаимодействия с оборудованием может потребоваться запуск установленной клиентской программы с правами
sudoили добавление пользователя в группуdialout. -
В Windows проверьте, установлены ли все необходимые драйверы, и, при необходимости, запускайте клиентскую программу от имени администратора.
-
-
Проблема с Ethernet-приборами — для работы с Ethernet-соединением убедитесь, что интерфейсы настроены правильно. Если порт возвращается в формате
"TCPIP::INSTR", то используйте его для создания прибора с помощью функцииvisa.create_instrument:visa.create_instrument("TCPIP::INSTR") -
Блокировка шины передачи — если после вызова
visa.writeследующий вызов не срабатывает, то, возможно, шина передачи заблокирована. Освободите ресурсы с помощьюvisa.read. -
Конфликты драйверов — если драйверы прибора и реализации VISA конфликтуют, то проверьте логи приборов на стороне пользователя для выявления недостающих драйверов.