ArcticSEA
ArcticSEA (System for Experiment Automatization) - библиотека функций в виде совокупности matlab-скриптов, предназначенных для проведения автоматизированных экспериментов и испытаний навигационной аппаратуры с помощью лабораторного оборудования.
Этой странице не хватает гламурной фотографии собранного стенда |
Содержание |
Цель
Приборы Rohde & Schwarz позволяют достаточно просто управлять собой через локальную сеть. При этом некоторую сложность представляет огромное число специфичных команд управления, отвечающих стандарту SCPI (Standard Commands for Programmable Instruments). Цель создания данной библиотеки - написать классы - фасады, методы которых позволят выполнять необходимые действия с приборами без явного использования команд SCPI.
Состав библиотеки
На данный момент в состав библиотеки входят 3 класса для управления приборами и класс для общения с навигационным модулем.
Общие методы для всех классов управления приборами
Описание всех классов, сформированное в doxygen, можно посмотреть, запустив файл help.html в корне проекта
Общие методы классов управления приборами | ||
---|---|---|
Метод | Входные аргументы | Возвращает |
SetConnection(IP, port) Установка соединения с прибором |
IP, string - адрес устройства в сети port - порт, для приборов Rohde & Schwarz port = 5025 |
1, если соединение установлено успешно, иначе 0 |
CloseConnection Закрытие соединения с прибором |
--- | 1, если соединение закрыто успешно, иначе 0 |
SendCommand(strCommand) Отправка команды в формате SCPI (т.е. как в документации на прибор) |
strCommand, string - команда в формате SCPI |
1, если команда отправлена успешно, иначе 0. Если отправленная команда не может быть выполнена прибором (например, прибор не поддерживает заданную частоту), сообщение от прибора будет выведено в командную строку. |
SendQuery(strCommand) Отправка запроса в формате SCPI |
strCommand, string - запрос в формате SCPI, заканчивается вопросительным знаком |
[Status, Result] Status = 1, если запрос послан успешно, иначе 0. Result, string - ответ прибора на посланный запрос. |
GetIDN Запрос информации о модели прибора, серийном номере |
--- | [Status, IDN] Status = 1, если операция успешна, иначе 0. IDN, string - информация о модели прибора, серийном номере. |
Preset Установка настроек прибора "по умолчанию", очистка лога ошибок |
--- | 1, если операция успешна, иначе 0 |
QueryError Запрос ошибок |
--- | 1, если есть ошибки, сообщение прибора будет выведено в командную строку. 0 - ошибок нет. |
Классы
Класс CFSV
Описание
Класс, созданный для управления анализатором спектра FSV.
На данный момент реализованы следующие возможности:
- Установка центральной частоты в режиме анализа спектра
- Установка полосы в режиме анализа спектра
- Измерение мощности сигнала в заданной полосе
Методы
Методы | ||
---|---|---|
Метод | Входные аргументы | Возвращает |
SetCenterFreq(Freq) Установка центральной частоты в режиме анализа спектра |
Freq - центральная частота, может быть как string 10GHz, так и число 10E9 |
1, если операция успешна, иначе 0 |
SetSpan(Span) Установка полосы в режиме анализа спектра |
Span - полоса, может быть как string 10MHz, так и число 10E6 |
1, если операция успешна, иначе 0 |
PowerMeasure(Bandwidth) Измерение мощности сигнала в заданной полосе |
Bandwidth - полоса измерения, может быть как string 10MHz, так и число 10E6 |
[Status, measure] Status = 1, если операция успешна, иначе 0. measure - измеренная мощность, дБм. |
Класс CSMBV
Описание
Класс, созданный для управления генератором сигналов SMBV.
На данный момент реализованы следующие возможности:
- Установка частоты сигнала
- Установка мощности сигнала
- Имитация сигналов заданного числа спутников(GPS, диапазон L1, расположение - Москва, статика, мощность всех сигналов одинакова)
Методы
Методы | ||
---|---|---|
Метод | Входные аргументы | Возвращает |
SetLevel(Level) Установка мощности сигнала |
Level - мощность сигнала, дБм |
1, если операция успешна, иначе 0
|
SetFreq(Freq) Установка частоты сигнала |
Freq - частота сигнала, может быть как string 10MHz, так и число 10E6 |
1, если операция успешна, иначе 0 |
SetRFOutput(State) Включение/выключение RF выхода |
State, string - ON/OFF |
1, если операция успешна, иначе 0 |
SetGPS(SatNumber) Имитация сигналов заданного числа спутников(GPS, диапазон L1, расположение - Москва, статика, мощность всех сигналов одинакова) |
SatNumber - количество спутников |
1, если операция успешна, иначе 0 |
Класс CRSC
Описание
Класс, созданный для управления аттенюатором RSC.
На данный момент реализованы следующие возможности:
- Установка заданного ослабления
Методы
! Метод | Входные аргументы | Возвращает | ||
---|---|---|---|---|
SetAttenuation(ATT) Установка заданного ослабления |
ATT - ослабление, дБ |
1, если операция успешна, иначе 0 |
Класс CReceiver
Описание
Класс, созданный для работы с навигационными модулями.
На данный момент реализованы следующие возможности:
- Рестарт приемника (для GEOS - 3)
- Получение статуса решения и сохранение его в переменную класса FixType (для GEOS - 3)
- Чтение данных, посылаемых приемником по последовательному порту
Методы
Методы | ||
---|---|---|
Метод | Входные аргументы | Возвращает |
SerialConfig(COM, Baud) Настройка соединения |
COM,string - имя порта Baud - скорость передачи данных |
--- |
SerialConnect Соединение с приемником |
--- | 1, если операция успешна, иначе 0 |
RecieveString Однократное чтение данных |
--- | [Answer] строка данных |
SerialClose Закрытие соединения |
--- | 1, если операция успешна, иначе 0 |
Reset Перезагрузка приемника |
--- | --- |
GetSolutionStatus Получение статуса решения и сохранение его в переменную класса FixType (для GEOS - 3) |
--- | --- |
Пример использования
Для проверки созданных классов был проведен эксперимент по определению чувствительности модуля GEOS - 3 в режиме слежения.
Rec = CReceiver;
%установка соединения с SMBV
[Stat] = SMBV.SetConnection('192.168.1.22',5025);
if (Stat == 0)
error('Connection problem')
end
%сброс настроек SMBV в дефолтные
[Stat] = SMBV.Preset;
if (Stat == 0)
error('Error')
end
%запрос модели/серийного номера
[Stat, result] = SMBV.SendQuery('*IDN?');
if (Stat == 0)
error('Error')
end
disp(result);
%проверка на системные ошибки
[status, result] = SMBV.SendQuery('SYST:SERR?');
if (result(1) ~= '0' || status == 0 )
disp (['*** Instrument error : ' result]);
return;
end
%начальный уровень мощности для каждого эксперимента
StartLevel = -111;
%запуск имитации спутников
[Stat] = SMBV.SetGPS(4);
if (Stat == 0)
error('Error')
end
%установка мощности сигнала
[Stat] = SMBV.SetLevel(StartLevel);
if (Stat == 0)
error('Error')
end
%включение RF выхода
[Stat] = SMBV.SetRFOutput('ON');
if (Stat == 0)
error('Error')
end
%настройка соединения с приемником
Rec.SerialConfig('COM6',115200);
%установка соединения с приемником
Stat = Rec.SerialConnect;
if (Stat == 0)
error('Serial: connection problem')
end
%перезагрузка приемника, начало отсчета времени нахождения на данной мощности
Rec.Reset;
tin_thislevel = tic;
%шаг мощности, другие параметры эксперимента
LevelStep = 1; PauseOnLevel = 90;
HaveFix = 0; k = 1;
RecIsDead5sec = 0; RecOkOnLastStep = 0;
Pow_arr = cell(1,1); p = 0; m = 0;
%цикл эксперимента
while (1)
Rec.GetSolutionStatus;
if (Rec.FixType == 3)
RecOkOnLastStep = 1;
HaveFix = 1;
if (toc(tin_thislevel) > PauseOnLevel)
LastOkLevel = SMBV.Level;
p = p + 1;
Pow_arr{p,1} = [LastOkLevel 1];
if (LastOkLevel <= -111 && LastOkLevel >= -128)
LevelStep = 6;
elseif (LastOkLevel == -129)
LevelStep = 2;
elseif (LastOkLevel <= -130 && LastOkLevel >= -160)
LevelStep = 0.5;
end
SMBV.SetLevel(LastOkLevel - LevelStep);
tin_thislevel = tic;
end
elseif (Rec.FixType == 1 && RecOkOnLastStep == 1 )
DeathTime = tic;
end
if (Rec.FixType == 1 && HaveFix == 1 && RecOkOnLastStep == 0 )
if ( toc(DeathTime) > 5 )
RecIsDead5sec = 1;
else
RecIsDead5sec = 0;
end
end
if (Rec.FixType == 1)
RecOkOnLastStep = 0;
end
if (RecIsDead5sec == 1)
ResultLevel(k) = LastOkLevel;
k = k + 1;
Pow_arr{p,1} = [(LastOkLevel - LevelStep) 0];
p = p + 1;
file = [num2str(m) 'newpower.mat'];
save(file, 'Pow_arr');
m = m + 1;
SMBV.SetLevel(StartLevel);
HaveFix = 0;
RecOkOnLastStep = 0;
RecIsDead5sec = 0;
tin_thislevel = tic;
Rec.Reset;
toc(DeathTime);
end
end
Ссылки
Ссылкана репозиторий