ArcticSEA — различия между версиями

Материал из SRNS
Перейти к: навигация, поиск
(Методы)
(Ссылки)
 
(не показаны 7 промежуточных версий 1 участника)
Строка 106: Строка 106:
  
 
{|table class="wikitable collapsible collapsed"
 
{|table class="wikitable collapsible collapsed"
! colspan ="3"|-
+
! colspan ="3"| Методы
 +
|-
 
! Метод
 
! Метод
 
! Входные аргументы
 
! Входные аргументы
Строка 159: Строка 160:
 
   <div class="NavContent">
 
   <div class="NavContent">
 
<source lang="matlab">
 
<source lang="matlab">
SMBV = CSMBV;  
+
SMBV = CSMBV;
Rec = CReceiver;
+
Rec = CReceiver;
  
%установка соединения с SMBV  
+
%соединение с SMBV
[Stat] = SMBV.SetConnection('192.168.1.22',5025);  
+
[Stat] = SMBV.SetConnection('192.168.1.22',5025);
 
if (Stat == 0)
 
if (Stat == 0)
     error('Connection problem')  
+
     error('Connection problem')
end
+
end
 +
%сброс настроек SMBV в дефолтные, очистка лога ошибок
 +
[Stat] = SMBV.Preset;
 +
if (Stat == 0)
 +
    error('Error')
 +
end
 +
%запрос модели, серийного номера
 +
[Stat, result] = SMBV.GetIDN;
 +
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 = -95; % стартовая мощность сигнала
 +
%запуск имитации сигнала GPS
 +
[Stat] = SMBV.SetGPS(6);
 +
if (Stat == 0)
 +
    error('Error')
 +
end
 +
%установка стартовой мощности
 +
[Stat] = SMBV.SetLevel(StartLevel);
 +
if (Stat == 0)
 +
    error('Error')
 +
end
 +
[Stat] = SMBV.SetRFOutput('ON');
 +
if (Stat == 0)
 +
    error('Error')
 +
end
  
%сброс настроек SMBV в дефолтные
+
%Настройка соединения с приемником
[Stat] = SMBV.Preset;  
+
Rec.SerialConfig('COM6',115200);
if (Stat == 0)
+
%Соединение с приемником
     error('Error')  
+
Stat = Rec.SerialConnect;
end
+
if (Stat == 0)
 +
     error('Serial: connection problem')
 +
end
 +
%Перезагрузка приемника, запуск отсчета времени на даннй мощности
 +
Rec.Reset;
 +
pause(70);
 +
tin_thislevel = tic;
  
%запрос модели/серийного номера
+
%Параметры эксперимента: шаг изменения мощности, ожидание на мощности
[Stat, result] = SMBV.SendQuery('*IDN?');  
+
LevelStep = 1; PauseOnLevel = 30;
if (Stat == 0
+
HaveFix = 0;
    error('Error')  
+
k = 1;
end
+
RecIsDead5sec = 0;
disp(result);
+
RecOkOnLastStep = 0;
 +
Pow_arr = cell(1,1);
 +
p = 1;
 +
m = 0;
  
%проверка на системные ошибки
+
%цикл эксперимента
[status, result] = SMBV.SendQuery('SYST:SERR?');
+
while (1)
if (result(1) ~= '0' || status == 0 ) 
+
   
    disp (['*** Instrument error : ' result]);   
+
    Rec.GetSolutionStatus;
    return;
+
   
end 
+
    if (Rec.FixType == 3)
 
+
         RecOkOnLastStep = 1;
%начальный уровень мощности для каждого эксперимента
+
        HaveFix = 1;
StartLevel = -111; 
+
        if (toc(tin_thislevel) > PauseOnLevel)
 
+
            LastOkLevel = SMBV.Level;
%запуск имитации спутников
+
             Pow_arr{p,1} = [LastOkLevel 1];
[Stat] = SMBV.SetGPS(4);
+
            p = p + 1;
if (Stat == 0) 
+
            if (LastOkLevel <= -95 && LastOkLevel >= -118)  
    error('Error')
+
                 LevelStep = 8;
end 
+
             elseif (LastOkLevel == -119)
 
+
%установка мощности сигнала
+
[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;
 
                 LevelStep = 2;
        elseif (LastOkLevel <= -130 && LastOkLevel >= -160)
+
            elseif (LastOkLevel <= -120 && LastOkLevel >= -135)
 
                 LevelStep = 0.5;
 
                 LevelStep = 0.5;
        end              
+
             end
        SMBV.SetLevel(LastOkLevel - LevelStep);             
+
            Stat = SMBV.SetLevel(LastOkLevel - LevelStep);
        tin_thislevel = tic;
+
             if (Stat == 0)
 +
                error('SMBV error')
 +
            end
 +
            tin_thislevel = tic;
 +
        end
 +
    elseif ((Rec.FixType == 1 || Rec.FixType == 2) && RecOkOnLastStep == 1 )
 +
        DeathTime = tic;
 
     end
 
     end
elseif (Rec.FixType == 1 && RecOkOnLastStep == 1 )
+
 
    DeathTime = tic;
+
    if ((Rec.FixType == 1 || Rec.FixType ==2) && HaveFix == 1 && RecOkOnLastStep == 0 )
end         
+
     if ( toc(DeathTime) > 5 )
 
+
         RecIsDead5sec = 1;
if (Rec.FixType == 1 && HaveFix == 1 && RecOkOnLastStep == 0 )        
+
     else
     if ( toc(DeathTime) > 5 )            
+
         RecIsDead5sec = 0;
         RecIsDead5sec = 1;        
+
     end
     else            
+
    end
         RecIsDead5sec = 0;        
+
   
     end    
+
    if (Rec.FixType == 1 || Rec.FixType == 2)
end        
+
        RecOkOnLastStep = 0;
 
+
    end
if (Rec.FixType == 1)        
+
   
    RecOkOnLastStep = 0;    
+
    if (RecIsDead5sec == 1)
end        
+
        ResultLevel(k) = LastOkLevel;
 
+
        k = k + 1;
if (RecIsDead5sec == 1)        
+
        Pow_arr{p,1} = [(LastOkLevel - LevelStep) 0];
    ResultLevel(k) = LastOkLevel;  
+
        p = p + 1;
    k = k + 1;
+
        file = [num2str(m) 'MSHUpower.mat'];
    Pow_arr{p,1} = [(LastOkLevel - LevelStep) 0];  
+
        save(file, 'Pow_arr');
    p = p + 1;    
+
        m = m + 1;
    file = [num2str(m) 'newpower.mat'];  
+
        Rec.Reset;
    save(file, 'Pow_arr');    
+
        SMBV.SetLevel(StartLevel);
    m = m + 1;    
+
        HaveFix = 0;
    SMBV.SetLevel(StartLevel);    
+
        RecOkOnLastStep = 0;
    HaveFix = 0;    
+
        RecIsDead5sec = 0;
    RecOkOnLastStep = 0;    
+
        toc(DeathTime);
    RecIsDead5sec = 0;    
+
        pause(70);
    tin_thislevel  = tic;  
+
        tin_thislevel  = tic;
    Rec.Reset;   
+
             
     toc(DeathTime); 
+
     end
end    
+
    
end    
+
end
 
</source>
 
</source>
 
</div>
 
</div>
Строка 290: Строка 292:
  
  
[https://code.google.com/p/arcticsea Ссылка]на репозиторий
+
[https://github.com/Korogodin/arcticsea Ссылка]на репозиторий

Текущая версия на 15:03, 18 октября 2021

ArcticSEA (System for Experiment Automatization) - библиотека функций в виде совокупности matlab-скриптов, предназначенных для проведения автоматизированных экспериментов и испытаний навигационной аппаратуры с помощью лабораторного оборудования.

Blue check.png Этой странице не хватает гламурной фотографии собранного стенда


Содержание

[править] Цель

Приборы Rohde & Schwarz позволяют достаточно просто управлять собой через локальную сеть. При этом некоторую сложность представляет огромное число специфичных команд управления, отвечающих стандарту SCPI (Standard Commands for Programmable Instruments). Цель создания данной библиотеки - написать классы - фасады, методы которых позволят выполнять необходимые действия с приборами без явного использования команд SCPI.


[править] Состав библиотеки

На данный момент в состав библиотеки входят 3 класса для управления приборами и класс для общения с навигационным модулем.

[править] Общие методы для всех классов управления приборами

Описание всех классов, сформированное в doxygen, можно посмотреть, запустив файл help.html в корне проекта

[править] Классы

[править] Класс CFSV

[править] Описание

Класс, созданный для управления анализатором спектра FSV.
На данный момент реализованы следующие возможности:

  1. Установка центральной частоты в режиме анализа спектра
  2. Установка полосы в режиме анализа спектра
  3. Измерение мощности сигнала в заданной полосе

[править] Методы

[править] Класс CSMBV

[править] Описание

Класс, созданный для управления генератором сигналов SMBV.
На данный момент реализованы следующие возможности:

  1. Установка частоты сигнала
  2. Установка мощности сигнала
  3. Имитация сигналов заданного числа спутников(GPS, диапазон L1, расположение - Москва, статика, мощность всех сигналов одинакова)

[править] Методы

[править] Класс CRSC

[править] Описание

Класс, созданный для управления аттенюатором RSC.
На данный момент реализованы следующие возможности:

  1. Установка заданного ослабления

[править] Методы

[править] Класс CReceiver

[править] Описание

Класс, созданный для работы с навигационными модулями.
На данный момент реализованы следующие возможности:

  1. Рестарт приемника (для GEOS - 3)
  2. Получение статуса решения и сохранение его в переменную класса FixType (для GEOS - 3)
  3. Чтение данных, посылаемых приемником по последовательному порту

[править] Методы

[править] Пример использования

Для проверки созданных классов был проведен эксперимент по определению чувствительности модуля GEOS - 3 в режиме слежения.


[править] Ссылки

Ссылкана репозиторий

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты