Внешнее оборудование - VISA: генератор сигналов UTG962
Работа с генератором сигналов UNI-T UTG962E при помощи интерфейса VISA¶
В этом примере рассматривается работа с внешним оборудованием из Engee - генератором сигналов UTG962E при помощи спецификации VISA и SCPI-команд. Производится настройка подключения, опрос памяти, сброс и конфигурирование выходного порта генератора. Показаны основные приёмы для автоматизации работы с генератором сигналов в Engee.
Введение¶
Engee имеет встроенные возможности для работы с внешним оборудованием, в том числе, взаимодействующих с компьютером посредством VISA.
Подготовка к работе¶
В первую очередь необходимо произвести установку пакета поддержки внешнего оборудования и установить подключение из хост-программы. Подробная пошаговая инструкция приведена в документации Engee и примерах из Сообщества.
Следующий шаг - необходимо подключить генератор сигналов UT962E и убедиться, что драйвера для устройства установлены.
После выполнения подготовительных шагов перейдём к установке соединения между Engee и генератором сигналов, предварительно подключим необходимый модуль пакета поддержки:
using Main.EngeeDeviceManager.Devices.VISA
Установка соединения¶
Создадим объект VISA:
visa = VISA.Visa()
После этого создадим сессию для работы с инструментами VISA:
VISA.create_session(visa, "@py")
Получим список доступных физических портов:
ports = VISA.get_ports(visa)
Последний порт из списка соответствует нашему генератору сигналов. Сохраним его идентификатор отдельно:
port = last(ports)
Создадим абстракцию инструмента на указанном порте для работы с VISA:
VISA.create_instrument(visa, port)
Соединение с устройством установлено, можно перейти непосредственно к работе.
Выполнение простых команд¶
Программирование генератора сигналов по VISA осуществляется при помощи SCPI-команд, специфичных для устройства. Полный список доступен в документации производителя.
Команда *IDN?
возвращает данные об устройстве:
- наименование производителя,
- модель устройства,
- серийный номер,
- версию прошивки.
Для передачи команд и получения информации от устройства следует воспользоваться функцией VISA.writeread()
, которой передаются созданный ранее объект VISA, идентификатор порта, SCPI-команда и время ожидания на получения информации от устройства.
VISA.writeread(visa, port, "*IDN?", 1.2)
Сбросим настройки генератора сигналов до заводских при помощи команды *RST
и заблокируем его кнопочную клавиатуру командой :SYSTEM:LOCK OFF
.
Передать обе команды можно одновременно, через разделитель ;
при помощи функции записи команд VISA.write()
.
VISA.write(visa, port, "*RST;:SYSTEM:LOCK OFF");
Изменение формы генерируемого сигнала¶
Узнаем текущую форму генерируемого сигнала на первом канале устройства. Для этого запишем в него команду :CHAN1:BASE:WAV?
.
VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2)
⚠️ Обратите внимание, что данной функцией следует передавать на устройство только те команды, которые предполагают передачу ответов в программатор. Такие команды легко можно опознать по завершающему их вопросительному знаку.
Ответ SINe
свидетельствует о том, что текущая форма сигнала - синусоидальная. Изменим форму на треугольную (RAMP
) при помощи команды :CHAN1:BASE:WAV RAMP
VISA.write(visa, port, ":CHAN1:BASE:WAV RAMP");
VISA.writeread(visa, port, ":CHAN1:BASE:WAV?", 1.2)
Очередная проверка формы сигнала возвращает нам сообщение RAMP
, значит, форма сигнала была успешно изменена. Теперь запишем в генератор команды для поочерёдного изменения формы сигнала для всех доступных вариантов:
FORMS = ["SIN","SQU","PULS","RAMP","ARB","NOIS","DC"];
Следующий цикл позволит нам переключать форму генерируемого сигнала, после чего произойдёт сброс настроек устройства.
for form in FORMS
VISA.write(visa, port, ":CHAN1:BASE:WAV $form");
sleep(1);
end
VISA.write(visa, port, "*RST");
Как видно из записи, генератор корректно обрабатывает передаваемые команды, изменяя форму генерируемого сигнала.
Графический интерфейс в скрипте Engee¶
Для записи в устройство набора команд для полной конфигурации генерируемого сигнала, удобно записать их в вектор Vector{String}
и передать, например, следующей вспомогательной функции:
"""
Функция для записи в UTG962 SCPI команд, записанных в вектор
"""
function UTG962_write(command::Vector{String})
for com in command
VISA.write(visa, port, com);
sleep(1);
end
end;
Возможность добавить в скрипт Engee маску кодовой ячейки позволяет реализовать простой графический интерфейс для генератора:
Канал = "1" # @param ["1","2"]
Форма = "RAMP" # @param ["SIN","SQU","PULS","RAMP","ARB","NOIS","DC"]
Частота_Гц = 271423 # @param {type:"slider",min:1,max:1000000,step:1}
Фаза_град = 0 # @param {type:"slider",min:-360,max:360,step:1}
Амплитуда = 3.587 # @param {type:"slider",min:0.002,max:20,step:0.001}
message = [
":CHANnel$Канал:MODe CONTinue",
":CHANnel$Канал:BASE:WAVe $Форма",
":CHANnel$Канал:BASE:FREQuency $Частота_Гц",
":CHANnel$Канал:BASE:HIGH $Амплитуда",
":CHANnel$Канал:BASE:LOW 0",
":CHANnel$Канал:BASE:PHAse $Фаза_град",
":CHANnel$Канал:OUTPut ON"
]
UTG962_write(message)
# VISA.write(visa, port, message);
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:BASE:FREQ $Частота_Гц");
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:BASE:PHAS $Фаза_град");
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:BASE:AMPL $Амплитуда");
# sleep(1);
# VISA.write(visa, port, ":CHAN$Канал:OUTP ON");
Из записи видно, как при помощи маски кодовой ячейки и скрипта Engee можно реализовать полноценное управление генератором сигналов.
Пример от производителя¶
В документации производителя приводится пример программирования пилообразного сигнала при помощи SCPI команд. В Engee его также удаётся воспроизвести:
Sawtooth = [
":CHANnel1:MODe CONTinue",
":CHANnel1:BASE:WAVe RAMP",
":CHANnel1:BASE:FREQuency 30000",
":CHANnel1:BASE:HIGH 2",
":CHANnel1:BASE:LOW 0",
":CHANnel1:BASE:PHAse 90",
":CHANnel1:RAMP:SYMMetry 20",
":CHANnel1:OUTPut ON"
]
UTG962_write(Sawtooth)
После выполнения этих команд генератор выставит следующие, ожидаемые настройки сигнала:
Завершение работы¶
Для корректного завершения работы необходимо освободить шину для инструмента:
VISA.close_instrument(visa, port)
И закрыть сессию работы с инструментом:
VISA.close_session(visa)
Заключение¶
В примере мы рассмотрели возможности Engee для работы с внешним оборудованием - генератором сигналов UTG962 по спецификации VISA. При помощи SCPI команды можно запрограммировать устройство и получить текущие значения параметров. Engee позволяет не только автоматизировать работу с устройством, но и без дополнительных инструментов реализовать удобный и простой графический интерфейс.