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