27.06.2019 Добавление новых сигналов в RTKLIB

Материал из SRNS
Перейти к: навигация, поиск
Строка 32: Строка 32:
  
 
<source lang=C>if (sys==SYS_GPS) {
 
<source lang=C>if (sys==SYS_GPS) {
if (bandnum+initnum == 0) {
+
if (bandnum+initnum == 0) {
        raw->obs.data[n].L[0]  =  Lb - toff*(FREQ1); } </source>
+
raw->obs.data[n].L[0]  =  Lb - toff*(FREQ1); } </source>
  
  

Версия 14:49, 27 июня 2019

Содержание

Это моя статья

Возможности RTKNAVI позволяют отображать сигналы L2С и L5 - единственным препятствием для этого являлось отсутствие необходимого кода в обрабатывающем фале nvs.c. Проблема решалась в несколько этапов. Number1.png

  1. Был изучен протокол информационного взаимодействия СРНС. Конкретно интерес представлял пакет F5, т.к. содержит информацию о типах сигналов. В протоколе эти типы представлены в виде шестнадцатерничных значений, однако , чтобы программа смогла "опознать" соответствующие типы, их необходимо перевести в децимальную систему счисления. Выполняя это простое преобразование, нетрудно убедиться, что сигналу L2C соответствует значение 34, а сигналу L5 - 66. Далее полученные значения добавляются в условие соответствующего цикла, отвечающего за идентификацию навигационных сигналов систем ГЛОНАСС и GPS. На этом этапе программа может "отличить" (но пока не показать!) сигналы L2C и L5 от сигналов системы ГЛОНАСС.
for (i=0,p+=27;(i<nsat) && (n<MAXOBS); i++,p+=30) {
                raw->obs.data[n].time  = time;
                sys = (U1(p)==1 || U1(p)==33)?SYS_GLO:((U1(p)==2 || U1(p)==34 ||U1(p)==66)?SYS_GPS:((U1(p)==4)?SYS_SBS:SYS_NONE));
  1. Теперь же возникла другая подзадача - необходимо, чтобы L2C и L5 и L1 могли идентифицироваться и впоследствии отображаться независимо друг от друга. В предыдущей версии программы стояла аналогичная проблема с разделением сигналов L1С/А и L2OF для системы ГЛОНАСС. Там она была решена введением воспомогательной переменной "bandnum", которая принимала значение, равное 1 исключительно при поступлении типа сигнала L2OF и нулевые при всех остальных. В текущей задаче можно использовать эту переменную для идентификации L2C, поэтому достаточно лишь дополнить условие, при котором переменная принимает единичное значение. Теперь она принимает это значение уже при для двух типов сигналов разных навигационных систем. Далее выполняем аналогичные действия для сигнала L5 и вводим воспомогательную перменную "initnum", которая принимает значение 2 (почему именно 2 будет сказано ниже).
        if (U1(p)==66) {
                        initnum = 2; /* L5 */
                }
                else {
                        initnum = 0;
                }
                if (U1(p)==33 || U1(p)==34) {
                        bandnum = 1; /* L2 */
        } else
                        bandnum = 0;
  1. Далее необходимо обеспечить вывод соответствующих переменных на форму приложения. Для этого необходимо выполнить редактирование соответствующего участка кода с использованием введенных воспомогательных переменных. При нулевых значениях обеих переменных данные будут выводиться, в , соответственно P1, L1, D1, в остальных столбцах (при данном значении строки, соответствующей конкретному спутнику) происходит заполнение нулевыми значениями. Для простоты операцию "И" можно заменить суммой, которая будет принимать нулевое значение только при одновременных ( в одной итерации) нулевых значении значениях переменных "bandnum" и "initnum".
if (sys==SYS_GPS) {
                if (bandnum+initnum == 0) {
                 raw->obs.data[n].L[0]  =  Lb - toff*(FREQ1); }


  • a
  • b
  • c

bold

italic

bold italic










[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

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

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