SrnsViewer — различия между версиями
Ippolitov (обсуждение | вклад) (Новая страница: «=Общее= Данный проект основан на использовании инструментов библиотеки Qt4. Его задачей я…») |
Korogodin (обсуждение | вклад) (→Что для этого нужно) |
||
(не показаны 24 промежуточные версии 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() | ||
Слот, вызывающийся ежесекундно. Содержит набор операций по чтению, обработке и отображению информации. | Слот, вызывающийся ежесекундно. Содержит набор операций по чтению, обработке и отображению информации. | ||
− | |||
− | |||
− | = | + | ==Классы== |
+ | |||
+ | ===SatView=== | ||
Данный класс предназначен для компоновки и отображения графической информации о сигналах с видимых спутников. | Данный класс предназначен для компоновки и отображения графической информации о сигналах с видимых спутников. | ||
− | |||
*SatSnr - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи. | *SatSnr - класс, предназначенный для передачи информации в виде списка объектов этого класса. Содержит информацию, которую необходимо отобразить, и функции чтения/записи. | ||
<source lang="cpp"> | <source lang="cpp"> | ||
class SatSnr | class SatSnr | ||
− | |||
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=== |
+ | Предназначен для отображения положения спутников на полярном графике. | ||
+ | |||
+ | *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. |
− | =Дополнительно= | + | ==Дополнительно== |
Реализовано отображение времени с поправкой на часовой пояс. | Реализовано отображение времени с поправкой на часовой пояс. | ||
− | =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.
[править] Описание работы
- Доступ к порту (на котором стоит приемник) и его настройка осуществляется посредством библиотеки QSerialPort.
- Ежесекундно (QTimer) вызывается слот dodo(), в котором происходит чтение данных из буфера.
- Далее происходит идентификация, разбор строк и проверка контрольной суммы(на этом этапе задействованы классы и функции описанные выше).
- Следующий этап - компоновка информации в виде объектов класса SatSnr и dataForPolarPlot и составление списка из объектов этих классов.
- И, наконец, передача списка функции otobrazi() класса SatView.
[править] Дополнительно
Реализовано отображение времени с поправкой на часовой пояс.
[править] Что для этого нужно
- Библиотеку 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: qwt-6.1.0.zip (через apt-get
sudo apt-get install libqwt-dev libqwt6
) - QwtPolar 1.0.1 (для Sky View): http://qtlinux.narod.ru/install_qwtpolar.htm. Download: qwtpolar-1.0.1.tar.gz
На этом этапе обратить внимание на пути, которые прописаны в создаваемых/редактируемых файлах. Они должны соответствовать действительности, т.е. все файлы должны там лежать. - QSerialPort (для работы с портом): http://qt-project.org/wiki/QtSerialPort. Download: QSerialPort.tar.gz
По мануалу на QSerialPort нужно создавать дополнительные директории, но этого делать не нужно!
Заходим в директорию с распакованной библиотекой:qmake
make
sudo make install
- Qwt 6.1.0 (для отображения с/ш): http://qtlinux.narod.ru/install_qwt.htm. Download: qwt-6.1.0.zip (через apt-get
Не забыть поставить права на чтение порта!
[править] Как этим пользоваться
Для того, чтобы подключить классы (с их виджетами) к своему проекту достаточно будет подключить к проекту(в .pro-файле) следующие файлы (SrnsViewer/NMEA):
- satview.h и satview.cpp - виджет, отображающий с/ш.
- satpolarplot.h и satpolarplot.cpp - виджет графика.
[править] Порядок работы
- Создаем объект класса 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);
- Формируете список объектов класса SatSnr (ну или dataForPolarPlot), т.е. список(list) того, что хотим отобразить.
- Вызываем методы, передаем им списки.
//передаем данные виджетам
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 компиляции (слева кнопка Проекты) на актуальные.