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

Материал из SRNS
Перейти к: навигация, поиск
(Общее)
(Что для этого нужно)
 
(не показана 21 промежуточная версия 2 участников)
Строка 1: Строка 1:
=Общее=
 
  
 
Данный проект основан на использовании инструментов библиотеки Qt4. Его задачей является чтение, обработка и отображение информации, приходящей с приемника по текстовому протоколу NMEA 0183 и др.
 
Данный проект основан на использовании инструментов библиотеки Qt4. Его задачей является чтение, обработка и отображение информации, приходящей с приемника по текстовому протоколу NMEA 0183 и др.
  
=Описание=
+
==Описание==
==Классы==
+
===Классы===
  
 
*SatInfoRMC - Класс строки RMC. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.
 
*SatInfoRMC - Класс строки RMC. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.
Строка 60: Строка 59:
 
*Имена функций для записи/чтения , как правило, состоят из названия переменной с префиксом set/get.
 
*Имена функций для записи/чтения , как правило, состоят из названия переменной с префиксом set/get.
  
==Функции==
+
===Функции===
  
 
*QString CalcalateCheckSum(QByteArray stroka)
 
*QString CalcalateCheckSum(QByteArray stroka)
Строка 74: Строка 73:
 
Парсер строки RMC.
 
Парсер строки RMC.
  
==Слоты==
+
*void showClock(QVector <SatInfoRMC> pRMC, int plusUTC)
 +
Функция отображения часов с поправкой на часовой пояс.
 +
 
 +
*bool checksumTest(QByteArray promStrok,QString chSum)
 +
Проверка контрольной суммы.
 +
 
 +
*std::list <dataForPolarPlot>  packPolar(QVector<SatInfoGSA> pGSA,QVector<SatInfoGSV> pGSV)
 +
Формирует список для отображения на полярном графике.
 +
 
 +
*std::list <SatSnr>  packSNR(QVector<SatInfoGSA> pGSA,QVector<SatInfoGSV> pGSV)
 +
Формирует список для отображения гистограммы с/ш.
 +
 
 +
*bool revisionForSolution(int nameOfSat, QVector<SatInfoGSA> pGSA)
 +
Проверка спутника на участие в решении.
 +
 
 +
*QByteArray MainWindow::data(QByteArray stroka, int &i)
 +
Возвращает массив символов от запятой до запятой(NMEA).
 +
 
 +
===Слоты===
 
*dodo()
 
*dodo()
 
Слот, вызывающийся ежесекундно. Содержит набор операций по чтению, обработке и отображению информации.
 
Слот, вызывающийся ежесекундно. Содержит набор операций по чтению, обработке и отображению информации.
  
*goAway()
 
Слот, вызываемый кнопкой "Exit".Закрывает порт и приложение.
 
  
=Класс SatView=
+
==Классы==
 +
 
 +
===SatView===
 
Данный класс предназначен для компоновки и отображения графической информации о сигналах с видимых спутников.
 
Данный класс предназначен для компоновки и отображения графической информации о сигналах с видимых спутников.
  
==Классы==
 
 
*SatSnr - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.
 
*SatSnr - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.
  
 
<source lang="cpp">  
 
<source lang="cpp">  
 
class SatSnr  
 
class SatSnr  
private:
 
  
 
QString name;//номер спутника
 
QString name;//номер спутника
Строка 99: Строка 114:
 
*Otobragenie - вспомогательный класс.
 
*Otobragenie - вспомогательный класс.
  
==Функции==
+
''Методы''
 
*void otobrazi(std::list<SatSnr>) - Функция,отображающая входной список.В ней предусмотрена компоновка, выбор отображаемых позиций, функция   
 
*void otobrazi(std::list<SatSnr>) - Функция,отображающая входной список.В ней предусмотрена компоновка, выбор отображаемых позиций, функция   
 
scroll'а.Использует объекты QwtThermo библиотеки Qwt.
 
scroll'а.Использует объекты QwtThermo библиотеки Qwt.
  
=Описание работы=
+
===satpolarplot===
[[File:satviewer.jpeg|400px|Скрин окошка программы|thumb]]
+
Предназначен для отображения положения спутников на полярном графике.
 +
 
 +
*dataForPolarPlot - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.
 +
<source lang="cpp">
 +
class dataForPolarPlot
 +
 
 +
    QString name;//номер спутника
 +
    QString satSys;//нав. сис-ма
 +
    double elevation;//угол места
 +
    double azimuth;//азимут
 +
    bool inSolution;// Участие в решении
 +
    bool slezhenie;// в слежении
 +
    double SNR;//с/ш
 +
</source>
 +
 
 +
''Методы''
 +
*void showListOfSatellites(std::list<dataForPolarPlot>) - функция,отображающая входной список.Использует объекты QwtPolarPlot библиотеки QwtPolar.
 +
 
 +
==Описание работы==
 +
[[File:6.png|400px|Скрин окошка программы|thumb]]
 
#Доступ к порту (на котором стоит приемник) и его настройка осуществляется посредством библиотеки QSerialPort.
 
#Доступ к порту (на котором стоит приемник) и его настройка осуществляется посредством библиотеки QSerialPort.
#Ежесекундно (QTimer) вызывается слот dodo(), в котором происходит построчное чтение данных из буфера.  
+
#Ежесекундно (QTimer) вызывается слот dodo(), в котором происходит чтение данных из буфера.  
 
#Далее происходит идентификация, разбор строк и проверка контрольной суммы(на этом этапе задействованы классы и функции описанные выше).
 
#Далее происходит идентификация, разбор строк и проверка контрольной суммы(на этом этапе задействованы классы и функции описанные выше).
#Следующий этап - компоновка информации в виде объектов класса SatSnr и составление списка из объектов этого класса.
+
#Следующий этап - компоновка информации в виде объектов класса SatSnr и dataForPolarPlot  и составление списка из объектов этих классов.
 
#И, наконец, передача списка функции otobrazi() класса SatView.
 
#И, наконец, передача списка функции otobrazi() класса SatView.
=Дополнительно=
+
==Дополнительно==
 
Реализовано отображение времени с поправкой на часовой пояс.
 
Реализовано отображение времени с поправкой на часовой пояс.
=P.S.=
+
 
 +
==Что для этого нужно==
 +
 
 +
#Библиотеку  Qt4 (возможно и на 5.1 заработает) - http://qt-project.org/downloads
 +
#QtCreator (у меня 2.4.1) - http://qt-project.org/downloads                                             
 +
#откомпилированные библиотеки:
 +
##Qwt 6.1.0 (для отображения с/ш): http://qtlinux.narod.ru/install_qwt.htm. Download: [[media:qwt-6.1.0.zip|qwt-6.1.0.zip]] (через apt-get <code>sudo apt-get install libqwt-dev libqwt6</code>)
 +
##QwtPolar 1.0.1 (для Sky View): http://qtlinux.narod.ru/install_qwtpolar.htm. Download: [[media:qwtpolar-1.0.1.tar.gz|qwtpolar-1.0.1.tar.gz]] <br>На этом этапе обратить внимание на пути, которые прописаны в создаваемых/редактируемых файлах. Они должны соответствовать действительности, т.е. все файлы должны там лежать.
 +
##QSerialPort (для работы с портом): http://qt-project.org/wiki/QtSerialPort. Download: [[media:QSerialPort.tar.gz|QSerialPort.tar.gz]] <br> По мануалу на QSerialPort нужно создавать дополнительные директории, но этого делать не нужно! <br> Заходим в директорию с распакованной библиотекой: <br><code> qmake <br> make <br>  sudo make install</code>
 +
'''Не забыть поставить права на чтение порта!'''
 +
 
 +
==Как этим пользоваться==
 +
Для того, чтобы подключить классы (с их виджетами) к своему проекту достаточно будет подключить к проекту(в .pro-файле) следующие файлы (SrnsViewer/NMEA):
 +
*satview.h и satview.cpp - виджет, отображающий с/ш.
 +
*satpolarplot.h и satpolarplot.cpp - виджет графика.
 +
 
 +
===Порядок работы===
 +
 
 +
#Создаем объект класса SatView (ну или satpolarplot) и размещаем на форме.
 +
<source lang="cpp">
 +
// создаем виджет гистограммы С/Ш
 +
      myWidjet = new SatView(this);
 +
      myWidjet->move(20,20);
 +
      myWidjet->resize(280,300);
 +
// создаем виджет полярного графика
 +
      myPolarWidget = new satpolarplot(this);
 +
      myPolarWidget->move(500,20);
 +
      myPolarWidget->resize(400,400);
 +
</source>
 +
 
 +
#Формируете список объектов класса  SatSnr (ну или dataForPolarPlot), т.е. список(list) того, что хотим отобразить.
 +
#Вызываем методы, передаем им списки.
 +
<source lang="cpp">
 +
//передаем данные виджетам
 +
myPolarWidget->showListOfSatellites(polarInfo);
 +
myWidjet->otobrazi(dataForSNR);
 +
</source>
 +
==P.S.==
 
По аналогии можно без труда реализовать парсер и для других типов строк NMEA.
 
По аналогии можно без труда реализовать парсер и для других типов строк NMEA.
 +
 +
== Аппробация (Корогодин) ==
 +
 +
QtCreator и Qt4 у меня стояли, установленные из репозитория. Не помню, чтобы я компилировал Qt4.
 +
 +
qwt поставил командой: <code>sudo apt-get install libqwt-dev libqwt6</code>.
 +
 +
qwtpolar ставил по мануалу, но сейчас к статье добавлен архив с исходниками, в которых все настройки уже выполнены (остается только скомпилировать и установить).
 +
 +
QSerialPort ставил их архива (qmake, make, sudo make install).
 +
 +
Для работы, вероятно, требуется добавить себя в группу dialout. Но я там уже был.
 +
 +
Чтобы работать из QtCreator, следует поменять пути Release и Debug компиляции (слева кнопка ''Проекты'') на актуальные.
  
 
[[Категория:Импала]]
 
[[Категория:Импала]]

Текущая версия на 21:50, 11 ноября 2013

Данный проект основан на использовании инструментов библиотеки Qt4. Его задачей является чтение, обработка и отображение информации, приходящей с приемника по текстовому протоколу NMEA 0183 и др.

Содержание

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

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

  • SatInfoRMC - Класс строки RMC. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.
 
class SatInfoRMC
private:
    QString satSys;
    QByteArray timeUTC;//время
    char status ;//статус
    double latitude;//широта
    char nors;//Сев/Южн
    double longitude;//долгота
    char eorw;//Вост/Зап
    double speed;//скорость
    double putevoiUgol;//Путевой угол
    QByteArray date;//Дата
    double MagnitSklon;//Магнитное склонение
    char napMS;//Направление магнитного склонения
    char regim;//Индикатор режима
    QString CheckSum;
  • SatInfoGSV - Класс строки GSV. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.
 
class SatInfoGSV
private:
    QString satSys;
    int totalNumMes;//число сообщений
    int mesNumber;//номер сообщения
    int satInView;//полное число видимых спутников
    QVector<int> satNumber;//номер спутника
    QVector<int> elevation;//высота
    QVector<int> azimuth;//азимут
    QVector<double> SNR;//с/ш
    QString CheckSum;
  • SatInfoGSA - Класс строки GSA. Содержит в себе всю информацию, содержащуюся в данной строке, и функции для записи/чтения информации из объекта класса.
 
class SatInfoGSA
private:
    QString satSys;
    QString mode1;
    QString mode2;
    QVector <int> satNamesForFix;
    QString PDOP;
    QString HDOP;
    QString VDOP;
    QString CheckSum;
  • Имена функций для записи/чтения , как правило, состоят из названия переменной с префиксом set/get.

[править] Функции

  • QString CalcalateCheckSum(QByteArray stroka)

Функция подсчета контрольной суммы строки.

  • SatInfoGSV GetInfoGSV(QByteArray stroka)

Парсер строки GSV.

  • SatInfoGSA GetInfoGSA(QByteArray stroka)

Парсер строки GSA.

  • SatInfoRMC GetInfoRMC(QByteArray stroka)

Парсер строки RMC.

  • void showClock(QVector <SatInfoRMC> pRMC, int plusUTC)

Функция отображения часов с поправкой на часовой пояс.

  • bool checksumTest(QByteArray promStrok,QString chSum)

Проверка контрольной суммы.

  • std::list <dataForPolarPlot> packPolar(QVector<SatInfoGSA> pGSA,QVector<SatInfoGSV> pGSV)

Формирует список для отображения на полярном графике.

  • std::list <SatSnr> packSNR(QVector<SatInfoGSA> pGSA,QVector<SatInfoGSV> pGSV)

Формирует список для отображения гистограммы с/ш.

  • bool revisionForSolution(int nameOfSat, QVector<SatInfoGSA> pGSA)

Проверка спутника на участие в решении.

  • QByteArray MainWindow::data(QByteArray stroka, int &i)

Возвращает массив символов от запятой до запятой(NMEA).

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

  • dodo()

Слот, вызывающийся ежесекундно. Содержит набор операций по чтению, обработке и отображению информации.


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

[править] SatView

Данный класс предназначен для компоновки и отображения графической информации о сигналах с видимых спутников.

  • SatSnr - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.
 
class SatSnr

QString name;//номер спутника
double q;// с/ш
bool insat;//участие в решении
QString navsys;//навиг. сис-ма
  • Otobragenie - вспомогательный класс.

Методы

  • void otobrazi(std::list<SatSnr>) - Функция,отображающая входной список.В ней предусмотрена компоновка, выбор отображаемых позиций, функция

scroll'а.Использует объекты QwtThermo библиотеки Qwt.

[править] satpolarplot

Предназначен для отображения положения спутников на полярном графике.

  • dataForPolarPlot - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи.
 
class dataForPolarPlot

    QString name;//номер спутника
    QString satSys;//нав. сис-ма
    double elevation;//угол места
    double azimuth;//азимут
    bool inSolution;// Участие в решении
    bool slezhenie;// в слежении
    double SNR;//с/ш

Методы

  • void showListOfSatellites(std::list<dataForPolarPlot>) - функция,отображающая входной список.Использует объекты QwtPolarPlot библиотеки QwtPolar.

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

Скрин окошка программы
  1. Доступ к порту (на котором стоит приемник) и его настройка осуществляется посредством библиотеки QSerialPort.
  2. Ежесекундно (QTimer) вызывается слот dodo(), в котором происходит чтение данных из буфера.
  3. Далее происходит идентификация, разбор строк и проверка контрольной суммы(на этом этапе задействованы классы и функции описанные выше).
  4. Следующий этап - компоновка информации в виде объектов класса SatSnr и dataForPolarPlot и составление списка из объектов этих классов.
  5. И, наконец, передача списка функции otobrazi() класса SatView.

[править] Дополнительно

Реализовано отображение времени с поправкой на часовой пояс.

[править] Что для этого нужно

  1. Библиотеку Qt4 (возможно и на 5.1 заработает) - http://qt-project.org/downloads
  2. QtCreator (у меня 2.4.1) - http://qt-project.org/downloads
  3. откомпилированные библиотеки:
    1. Qwt 6.1.0 (для отображения с/ш): http://qtlinux.narod.ru/install_qwt.htm. Download: qwt-6.1.0.zip (через apt-get sudo apt-get install libqwt-dev libqwt6)
    2. QwtPolar 1.0.1 (для Sky View): http://qtlinux.narod.ru/install_qwtpolar.htm. Download: qwtpolar-1.0.1.tar.gz
      На этом этапе обратить внимание на пути, которые прописаны в создаваемых/редактируемых файлах. Они должны соответствовать действительности, т.е. все файлы должны там лежать.
    3. QSerialPort (для работы с портом): http://qt-project.org/wiki/QtSerialPort. Download: QSerialPort.tar.gz
      По мануалу на QSerialPort нужно создавать дополнительные директории, но этого делать не нужно!
      Заходим в директорию с распакованной библиотекой:
      qmake
      make
      sudo make install

Не забыть поставить права на чтение порта!

[править] Как этим пользоваться

Для того, чтобы подключить классы (с их виджетами) к своему проекту достаточно будет подключить к проекту(в .pro-файле) следующие файлы (SrnsViewer/NMEA):

  • satview.h и satview.cpp - виджет, отображающий с/ш.
  • satpolarplot.h и satpolarplot.cpp - виджет графика.

[править] Порядок работы

  1. Создаем объект класса SatView (ну или satpolarplot) и размещаем на форме.
 
// создаем виджет гистограммы С/Ш
      myWidjet = new SatView(this);
      myWidjet->move(20,20);
      myWidjet->resize(280,300);
// создаем виджет полярного графика
      myPolarWidget = new satpolarplot(this);
      myPolarWidget->move(500,20);
      myPolarWidget->resize(400,400);
  1. Формируете список объектов класса SatSnr (ну или dataForPolarPlot), т.е. список(list) того, что хотим отобразить.
  2. Вызываем методы, передаем им списки.
 
//передаем данные виджетам
        myPolarWidget->showListOfSatellites(polarInfo);
        myWidjet->otobrazi(dataForSNR);

[править] P.S.

По аналогии можно без труда реализовать парсер и для других типов строк NMEA.

[править] Аппробация (Корогодин)

QtCreator и Qt4 у меня стояли, установленные из репозитория. Не помню, чтобы я компилировал Qt4.

qwt поставил командой: sudo apt-get install libqwt-dev libqwt6.

qwtpolar ставил по мануалу, но сейчас к статье добавлен архив с исходниками, в которых все настройки уже выполнены (остается только скомпилировать и установить).

QSerialPort ставил их архива (qmake, make, sudo make install).

Для работы, вероятно, требуется добавить себя в группу dialout. Но я там уже был.

Чтобы работать из QtCreator, следует поменять пути Release и Debug компиляции (слева кнопка Проекты) на актуальные.

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

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