реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Extended GPS Week Number (1024 added), нужна формула
kan35
сообщение Dec 24 2012, 04:39
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Здравствуйте

Решил попробовать инциализировать координаты в sirfStar4, но столкнулся с тем, что нужно вычислять неделю и день недели в нем (а эти данные не присутствуют в явном виде в NMEA строках). Помогите формулой или алгоритмом или даже куском кода, который вычисляет эти 2 числа.

Заранее спасибо!
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 24 2012, 08:19
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Может кому пригодится.
CODE

int what_day(short year, char month, char day)
{
int a = (14 - month) / 12;
int y = year - a;
int m = month + 12 * a - 2;
return (7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}

int what_week(short year, char month, char day)
{
unsigned short start_year = 1999;
unsigned char start_month = 8;
unsigned char start_day = 22;
const unsigned char daysinmonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// count days in 1999 after aug 22
unsigned long day_counter = daysinmonth[start_month-1] - start_day;
for (;start_month <= 11; start_month++)
{
day_counter += daysinmonth[start_month-1];
}

for (;start_year < year-1; start_year++)
{
if (start_year%4)
day_counter += 365;
else
day_counter += 366;
}

for (start_month = 1; start_month < month; start_month++)
{
if ( start_month == 2 && !(year%4))
day_counter += 29;
else
day_counter += daysinmonth[start_month-1];
}

day_counter += day;

return day_counter/7 + 1024;
}
Go to the top of the page
 
+Quote Post
antis
сообщение Dec 24 2012, 08:38
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 11-01-09
Пользователь №: 43 172



Цитата(kan35 @ Dec 24 2012, 12:19) *
Может кому пригодится.
CODE


...

if (start_year%4)
day_counter += 365;
else
day_counter += 366;
}
...
for (start_month = 1; start_month < month; start_month++)
{
if ( start_month == 2 && !(year%4))
day_counter += 29;
else
day_counter += daysinmonth[start_month-1];
}
...



Вот так и появляются проблемы 2000 года
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 24 2012, 09:31
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Почему именно эти строки, в чем там проблема?
Go to the top of the page
 
+Quote Post
antis
сообщение Dec 24 2012, 11:15
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 11-01-09
Пользователь №: 43 172



Последние годы столетий, оканчивающиеся на два нуля, в трёх случаях из четырёх не являются високосными. Так, годы 1700, 1800 и 1900 не являются високосными, так как они кратны 100 и не кратны 400. Годы 1600 и 2000 — високосные, так как они кратны 400. Годы 2100, 2200 и 2300 — невисокосные. В високосные годы вводится дополнительный день — 29 февраля.

Високосный год

Сообщение отредактировал antis - Dec 24 2012, 11:17
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 24 2012, 11:20
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Спасибо, я наверное и не знал про это. Хотя в контексте GPS это не так критично, как я думаю. Год в NMEA кодирован 2 цифрами.
Go to the top of the page
 
+Quote Post
antis
сообщение Dec 24 2012, 11:25
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 11-01-09
Пользователь №: 43 172



Цитата(kan35 @ Dec 24 2012, 15:20) *
Спасибо, я наверное и не знал про это. Хотя в контексте GPS это не так критично, как я думаю. Год в NMEA кодирован 2 цифрами.


И до 2100 года, еще надо дожить sm.gif.
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 24 2012, 16:20
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Сделал инициализацию даты и координат командой $PSRF104 при старте модуля, но все равно определяет координаты не быстрее, чем через 45с. Модуль Quectel L30 (sirf star 4). Лучше не будет или что-то возможно не так?

Сообщение отредактировал kan35 - Dec 24 2012, 16:20
Go to the top of the page
 
+Quote Post
Alechek
сообщение Dec 25 2012, 04:33
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



А толку то от координат и времени, если у модуля нет информации о расположении спутников?
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 25 2012, 05:22
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Я так полагаю, что по координатам и времени можно узнать какие спутники сейчас должны быть видны. В документе по NMEA для sirf так и говорится, что это ускоряет процесс. Только не сильно заметно почему то.
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение Dec 25 2012, 09:26
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Цитата(kan35 @ Dec 24 2012, 08:39) *
Решил попробовать инциализировать координаты в sirfStar4, но столкнулся с тем, что нужно вычислять неделю и день недели в нем (а эти данные не присутствуют в явном виде в NMEA строках). Помогите формулой или алгоритмом или даже куском кода, который вычисляет эти 2 числа.


man strptime в общем случае. Самодельные алгоритмы ничем хорошим не кончаются (см. проблема 2000 года).
Go to the top of the page
 
+Quote Post
krdmitry
сообщение Dec 25 2012, 10:26
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 24-11-05
Из: СПб
Пользователь №: 11 354



Цитата(kan35 @ Dec 25 2012, 09:22) *
Я так полагаю, что по координатам и времени можно узнать какие спутники сейчас должны быть видны. В документе по NMEA для sirf так и говорится, что это ускоряет процесс. Только не сильно заметно почему то.


Не заметно вообще? Или все-таки есть хоть какое-то ускорение?
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 25 2012, 12:32
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



По скорости - не заметил улучшения - около окна - 45с. Хотя кажется, что тем не менее чувствительность возрасла, так как хоть и не быстро, но находит координаты даже в дальних углах комнаты, возможно это субъективно.
Настораживает то, что поле того, как я закинул ему координаты и дату со временем - в NMEA сообщениях время не то, а обычное стартовое. Что наводит на мысль о том, что модуль команду не воспринял должным образом. Сомнений в том, что команда оформлена корректно - нет, чексуммы вычисляются автоматом и другие команды принимаются без вопросов.
Попробовал модуль отключать софтверно на долгое время - результат такой, что спутники ищет так же как при холодно старте - долго и нудно.
Так что склоняюсь к самому простому решению - поставить eeprom, в конце концов это не так дорого.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 10:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01454 секунд с 7
ELECTRONIX ©2004-2016