Документация Engee

Работа с внешним оборудованием через 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

Рассмотрим пример, в котором создается сессия, получается список портов, создается прибор, записывается команда в прибор и читается ответ:

  1. Создание сессии для работы с приборами VISA — создайте сессию, указав аппаратную реализацию (например, @py):

    VISA.create_session(visa, "@py")
    Подробнее об аппаратной реализации читайте по ссылке.
  2. Получение списка доступных физических портов — получите список доступных портов и выберите последний из них:

    ports = VISA.get_ports(visa).data
    port = last(ports)
  3. Создание абстракции прибора на указанном порте — создайте прибор для работы с выбранным портом:

    VISA.create_instrument(visa, port)
    В случае необходимости работы более чем с одним измерительным прибором, повторите команду VISA.create_instrument(visa, port) с портом другого устройства.
  4. Запись сообщения для сброса настроек в прибор — отправьте команду для сброса настроек прибора:

    VISA.write(visa, port, "*RST;:SYSTEM:LOCK OFF", "")
  5. Запись данных в прибор и чтение ответа с задержкой — отправьте команду и прочитайте ответ с задержкой в 1.2 секунды:

    writeread_result = VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2).data
  6. Чтение сообщения с прибора — прочитайте данные с прибора (убедитесь, что прибор отправляет данные):

    read_result = VISA.read(visa, port, "").data
  7. Запись бинарных данных в прибор — запишите два байта в прибор:

    VISA.writebinblock(visa, port, [0x01, 0x00])
  8. Чтение бинарных данных с прибора — прочитайте 8 байт данных с прибора:

    bytes = VISA.readbinblock(visa, port, 8).data
  9. Инициирование прерывания в приборе — отправьте команду прерывания (может быть недоступно на некоторых приборах):

    VISA.visatrigger(visa, port)
  10. Очистка I/O буфера записи в приборе — очистите буфер записи (может быть недоступно на некоторых приборах):

    VISA.flush(visa, port, "flush_write_buffer")
  11. Освобождение шины для прибора — освободите шину, чтобы другие приборы могли использовать порт:

    VISA.close_instrument(visa, port)
  12. Закрытие сессии работы с прибором — закройте сессию VISA:

    VISA.close_session(visa)

Возможные проблемы и их решение

  1. Проблема с отображением портов — если метод VISA.get_ports не возвращает доступные порты, то убедитесь, что измерительное оборудование доступно на стороне пользователя:

    • В Linux для взаимодействия с оборудованием может потребоваться запуск установленной клиентской программы с правами sudo или добавление пользователя в группу dialout.

    • В Windows проверьте, установлены ли все необходимые драйверы, и, при необходимости, запускайте клиентскую программу от имени администратора.

  2. Проблема с Ethernet-приборами — для работы с Ethernet-соединением убедитесь, что интерфейсы настроены правильно. Если порт возвращается в формате "TCPIP::INSTR", то используйте его для создания прибора с помощью функции VISA.create_instrument:

    VISA.create_instrument(visa, "TCPIP::INSTR")
  3. Блокировка шины передачи — если после вызова VISA.write следующий вызов не срабатывает, то, возможно, шина передачи заблокирована. Освободите ресурсы с помощью VISA.read.

  4. Конфликты драйверов — если драйверы прибора и реализации VISA конфликтуют, то проверьте логи приборов на стороне пользователя для выявления недостающих драйверов.