TM Feed
Хабрахабр
Мегамозг
Geektimes
Тостер
Brainstorage
Фрилансим

Черный ящик в офиc1 000 000 на образование Принять вызов?

Разделы

Публикации
Хабы
Компании
Пользователи
Q&A
Песочница
Биржа авторов

Спецпроекты

Выбрать принтер?

Все в Ажуре

Intel Edison

gag_fenix

карма

157,6

412 голосов

рейтинг

15,6

Профиль

Публикации (17)

Комментарии (509)

Избранное (488)

13 октября 2011 в 14:01

Сервер очень точного времени stratum 1 на Garmin GPS

Системное администрирование*

GPS приемники можно использовать не только для определения местоположения, но и для получения сигналов точного времени. В статье я покажу как настроить сервер точного времени, использующий в качестве источника GPS и работающий с точностью до нескольких микросекунд. В качестве примера я использую приемник Garmin и ОС FreeBSD, но статья также будет полезна обладателям Linux и Windows.

UPD: сервер доступен по адресу stratum1.net Веб-морда: www.stratum1.net.

Подобный топик на хабре уже пробегал, но я считаю, что тему надо раскрыть гораздо подробнее: многие важные детали автор опустил.

1. Немного теории

По оценке журнала GPS World, сейчас в мире находится в использовании более миллиарда приёмников GPS, и более 90% из них используются только для получения сигналов точного времени. [19]

Для определения собственных трехмерных координат GPS-приемник рассчитывает расстояние до 4-х спутников. Это расстояние вычисляется путем измерения времени прохождения радиосигнала от спутника. Т.к. скорость света составляет 3×108 м/с, то время прохождения сигнала очень мало, и для расчета требуется очень точная синхронизация хода часов на спутнике и приемнике. Поэтому каждый спутник GPS оборудован атомными часами с точностью хода 1 нс/сут, а приемник обеспечивает точность времени около 50 нс [17]. Для определения времени приемнику достаточно получить сигнал с одного спутника (tanenn).

Таким образом, можно получать точное время с GPS-приемника. Ведь часы компьютера не являются особо точными, не говоря уже о свитчах, IP-камерах и т.д. Но зачем нужен GPS, если можно синхронизироваться по протоколу NTP, например, с pool.ntp.org?

если у системы нет доступа в Интернет;

если вам нужна высокая точность времени — единицы микросекунд (мкс);

если вам нужно синхронизировать распределенную систему от надежного источника времени;

просто ради интереса :)

2. GPS-приемник

GPS-приемник можно использовать практически любой — главное, чтобы он поддерживал стандартный протокол NMEA 0183. Протокол NMEA служит для передачи GPS-информации простыми ASCII-строками по последовательному интерфейсу, такому как RS-232. Вместе с географическими координатами NMEA передает еще и точное время, как правило, раз в секунду.

Точность времени, полученного от обычного GPS-приемника, может составлять до нескольких миллисекунд (мс), однако она сильно зависит от модели приемника: обычно передача NMEA сообщений не является приоритетной задачей для приемника, поэтому точность может быть не очень хорошей.

Если вы хотите обеспечить еще большую точность — до нескольких микросекунд, необходимо использовать GPS-приемник, который умеет выдавать сигнал PPS (Pulse per second). PPS-импульс повторяется раз в секунду с очень большой точностью и может быть считан ntpd.

Ниже я рассмотрю оба варианта: сначала обычный NMEA и более подробно PPS.

3. Получение времени от GPS (без PPS)

3.1 Настройка GPS и ntpd

Windows администраторы могут установить порт ntpd для Windows и следовать указаниям в этой статье.

Для Linux и FreeBSD инструкции одинаковы:

Подключите GPS-приемник к COM-порту сервера (USB переходник тоже должен сработать).

Создайте символическую ссылку /dev/gpsX на устройство (например, у меня /dev/cuau0 -> /dev/gps0).

В ntp.conf добавьте строку

server 127.127.20.0 mode 0 prefer iburst minpoll 4 maxpoll 6

Строка 127.127.20.0 означает, что мы используем локальный источник времени, драйвер 20 (NMEA Generic), устройство /dev/gps0.

Если ваше устройство работает на скорости отличной от 4800 бит/c, необходимо задать скорость с помощью команды mode: 0 — 4800 бит/c (по умолчанию, можно не указывать), 16 — 9600, 32 — 19200 и т.д.

iburst — ускоряет инициализацию;

minpoll n — минимальный интервал опроса в 2n секунд, минимум 4, т.е. 16 с;

maxpoll n — максимальный интервал опроса в 2n секунд, максимум 17, около полутора суток;

prefer — предпочитаемый сервер.

Более подробные сведения можно найти в замечательной документации ntpd..

Перезапустите сервер. Запустите ntpq -p. В списке должна быть строка GPS_NMEA(0)… Если этого не произошло, обратитесь к п. 5 «Возможные проблемы».

3.2 Проверка и коррекция

Проблема заключается в том, что приемник может посылать данные о времени с запозданием. Также не стоит забывать о задержке при передаче NMEA-сообщений. Для того, чтобы скорректировать эту задержку, добавьте в ntp.conf надежный NTP-сервер stratum-1 с параметром prefer и перезапустите ntpd.

Для проверки нам потребуется использовать команду ntpq -p. Формат выдачи:

На каждой строке идет информация об источнике времени, будь то NTP-сервер или локальный источник времени.

Первый символ в строке — статус выбора: * — выбранный источник, + — насколько я понял, кандидат для выбора — на него переключится система в случае отказа основного источника, o — PPS-источник, пробел — не работающий источник, — x и др. — «забракованные» (ненадежные) источники.

Далее идут:

remote — имя узла или IP-адрес;

refid — ID источника (имя драйвера или адрес сервера, с которым синхронизируется источник);

stratum: 0 для первичного источника времени (GPS), 1 для сервера к нему подключенного, 2 для сервера, который синхронизируется с сервером stratum 1 и т.д.;

t — тип: l — локальные часы, u — сетевой узел и т.д.;

when — время с последней передачи;

poll — интервал опроса log2 секунд, т.е. если poll=4, сервер опрашивает источник раз в 24 = 16 секунд;

reach — восьмеричное число, показывающее успешность последних 8 попыток передачи. Например, 0 — ни одной успешной попытки, 3778=111111112 — все попытки успешны. После запуска ntpd, если все в порядке источник проходит значения reach 0, 1, 3, 7, 17, 37, 77, 177, 377;

delay — время следования пакета;

offset — разница между временем источника и локальным;

jitter — джиттер или иными словами дисперсия (разброс) времени прохождения пакета.

Больше всего нас будет интересовать символ статуса выбора, reach, offset и jitter. Reach должен быть равен 377, а offset и jitter быть как можно меньше.

Запустите команду ntpq -p. Дождитесь пока offset NTP-сервера не станет достаточно низким.

remote refid st t when poll reach delay offset jitter
==============================================================================
*mail.mobatime.r .DTS. 1 u 5 377 1 14.894 -3.198 0.490
xGPS_NMEA(0) .GPS. 0 l 2 377 7 0.000 -955.90 31.554

Выбранный ntpd сервер отмечен *, в то время как наш GPS-приемник помечен как плохой (x). Offset GPS-приемника составляет около -956 мс. По всей видимости, информация передается о предыдущей секунде. Чтобы скорректировать это отставание необходимо под строкой server 127.127.20.0… добавить строку:

fudge 127.127.20.0 time2 0.956

Теперь можно снова сделать GPS предпочитаемым сервером. После перезапуска сервера перед GPS_NMEA(0) должна появиться *.

4. Получение времени от GPS с сигналами PPS

4.1 Подключение приемника Garmin 18x LVC

Для себя я выбрал приемник Garmin 18x LVC с точностью PPS-импульса ±1 мкс. Это OEM-приемник, у него нет красивого экранчика, но его удобно использовать в собственных приложениях.

Этот приемник передает данные на COM-порт и требует питания 5В, 90 мА, поэтому его будет удобно запитать от USB. Нам понадобится разъем «мама» DB9 или COM-кабель, разрезанный пополам, а также разрезанный кабель USB для питания. Родной разъем приемника тоже нужно отрезать — это не повлияет на гарантию. Схема соединения:

желтый провод — с pin 1 (PPS)

белый провод — с pin 2 (передача)

зеленый провод — с pin 3 (прием)

оба черных провода — с черным проводом USB и pin 5 (земля)

красный провод — с красным проводом USB (+5В).

Желательно припаять контакты. Простая скрутка может и не заработать (впрочем, я не проверял).

Вдохновившись статьями [2] и [3] я пошел еще дальше и добавил в схему подключения предохранитель, светодиод «питание», светодиод «PPS» и резисторы для светодиодов. Умельцы-электронщики вполне могут уместить все в вилке COM-кабеля, у меня же получилась целая коробочка.

Я купил готовую макетную плату, розетки DB-9 и USB тип B, винтовые клеммники (родной разъем BM06B-SRSS-TBT или SM06B-SRSS-TB я в продаже не нашел), предохранитель 1А и держатель. Как смог припаял все это, а разъемы приклеил Epoxy :)

В принципе, так заморачиваться необязательно. Можно просто соединить жилы от GPS, COM и USB, как сделано здесь.

4.2 Настройка Garmin 18x LVC

Для повышения производительности и надежности желательно настроить приемник. Это можно сделать, посылая команды через терминал (см. мануал) или с помощью Windows-утилиты SNSRCFG. Я выбрал второй путь.

Подключаемся к приемнику:

Comm → Setup: устанавливаем COM-порт, Baud rate: manual, 4800.

Comm → Connect

Программа должна загрузить текущую конфигурацию.

Настраиваем:

Config → Sensor Configuration

Необходимо убедиться, что PPS включен и увеличить длину импульса до 200 мс.

Также можно попробовать отключить DGPS — мы им пользоваться не будем, и установить Fix Mode = 2D — в теории это позволит приемнику работать при трех видимых спутниках вместо четырех. Однако не ручаюсь, что эти две опции на что-то влияют.

Выбираем NMEA-сообщения:

Config → NMEA Sentence Selection

NTPd понимает GPRMC и GPGGA сообщения. Чтобы снизить время передачи данных, я оставил только GPGGA.

4.3 Настройка FreeBSD и ntpd

Поддержка PPS во FreeBSD присутствует довольно давно, поэтому PPS здесь настраивается проще и работает точнее. Пользователи Linux могут обратиться к статье Using a Garmin GPS 18 LVC as NTP stratum-0 on Linux 2.6. Настройки написанные ниже относится к FreeBSD.

Для включения поддержки PPS необходимо пересобрать ядро системы с опцией:

options PPS_SYNC

NTP-сервер уже присутствует в системе, но не лишним будет обновить. Для FreeBSD делаем это из портов:

cd /usr/ports/net/ntp
make install clean

Теперь необходимо добавить в rc.conf строки:

ntpd_enable="YES"
ntpd_program="/usr/local/bin/ntpd"

ntpd_program указывает на путь установки ntpd из портов.

Создайте символическую ссылки /dev/gpsX и на /dev/ppsX устройство (например, у меня /dev/cuau0 -> /dev/gps0). Можно воспользоваться командой ln или добавить соответствующие строки в /etc/devfs.conf:

link cuau0 gps0
link cuau0 pps0

В документации NTP рекомендуется с GPS получать только PPS-импульсы для точного хода часов, а само время — с другого сервера stratum 1. Для этого необходимо добавить в /etc/ntp.conf несколько (4-5) серверов stratum 1 и наш PPS, например:

server ntp.mobatime.ru prefer iburst maxpoll 9
server ntp1.vniiftri.ru iburst maxpoll 9
server ntp2.vniiftri.ru iburst maxpoll 9
server 127.127.22.0 minpoll 4
fudge 127.127.22.0 flag3 1

Драйвер 22 отвечает за PPS. flag3 включает режим коррекции времени ядра (kernel discipline). В документации ntpd написано, что включать kernel discipline совсем не обязательно: ntpd будет работать точнее, если просто выставить minpoll 4. Однако у меня получается как раз наоборот: с flag3 часы идут точнее — так что я предлагаю вам поэкспериментировать с этим параметром самостоятельно.

Можно пойти другим путем: получать и время с GPS и сигналы PPS:

server 127.127.20.0 prefer minpoll 4
fudge 127.127.20.0 flag1 1 flag3 1

flag1 включает PPS, flag3 — kernel discipline.

Это позволит получать время без использование Интернета, но в этом случае скорее всего понадобится коррекция (аналогично п. 3.2).

После внесения изменений необходимо перезапустить ntpd:

/etc/rc.d/ntpd restart

Запустите команду ntpq -p (подробнее о ней рассказано в п. 3.2). Если вы получаете только PPS сигнал, то вывод должен приблизительно быть таким:

remote refid st t when poll reach delay offset jitter
==============================================================================
xnut.rsuitb.ru 5.89.176.137 3 u 21 64 377 2.074 41.522 5.869
+mx.kr-pro.ru 62.117.76.138 2 u 34 64 377 4.167 0.336 0.423
+wooster.rojer.p 195.54.192.55 3 u 25 64 377 70.609 9.523 0.262
x193.124.4.177 7.123.225.33 3 u 21 64 377 2.133 56.525 9.041
ntp1.vniiftri.r .INIT. 16 u - 512 0 0.000 0.000 0.000
xntp2.vniiftri.r .PPS. 1 u 39 64 377 73.585 -14.117 0.189
*mail.mobatime.r .DTS. 1 u 17 64 377 15.223 0.147 0.843
oPPS(0) .PPS. 0 l 5 16 377 0.000 -0.001 0.002

Перед PPS(0) должно стоять «o», reach в течении пары минут дойти до 377. Остальные сервера используются для получения времени.

Если вы получаете с GPS еще и NMEA-информацию, то

remote refid st t when poll reach delay offset jitter
==============================================================================
*GPS_NMEA(0) .GPS. 0 l 11 16 17 0.000 -9.795 14.537

Перед GPS_NMEA(0) должна стоять *.

Не лишним будет проверить статус PPS. Это можно сделать с помощью команд ntpdc -c kerninfo или ntptime. ntptime дает немного более подробную информацию:

ntptime
ntp_gettime() returns code 0 (OK)
time d24065e8.9067dfac Wed, Oct 12 2011 23:15:52.564, (.564085545),
maximum error 4739 us, estimated error 1 us, TAI offset 0
ntp_adjtime() returns code 0 (OK)
modes 0x0 (),
offset 2.004 us, frequency -28.979 ppm, interval 256 s,
maximum error 4739 us, estimated error 1 us,
status 0x2107 (PLL,PPSFREQ,PPSTIME,PPSSIGNAL,NANO),
time constant 4, precision 0.001 us, tolerance 496 ppm,
pps frequency -28.979 ppm, stability 0.019 ppm, jitter 1.434 us,
intervals 313, jitter exceeded 195, stability exceeded 0, errors 1.

На что нужно смотреть:

ntp_gettime() и ntp_adjtime() должны возвращать «OK».

в status должны быть флаги PPSFREQ, PPSTIME, PPSSIGNAL, и не должно быть PPSWANDER, PPSJITTER, PPSERROR.

jitter exceeded показывает количество импульсов, пришедших не совсем вовремя. Беспокоиться стоит, если значение jitter exceeded станет слишком большим, и в статусе появится флаг PPSJITTER.

intervals — количество интервалов калибровки, должно увеличиваться на единицу раз в interval секунд (в примере 256 с)

stability exceeded — число слишком больших коррекций времени, 0 — всё в порядке.

errors — количество PPS импульсов, не пришедших вообще или пришедших совершенно не вовремя, не должно увеличиваться во время работы.

stability — чем меньше, тем стабильнее работает PPS-источник и часы сервера. Должно быть меньше 0.1.

jitter — джиттер PPS-импульсов. Должен быть несколько микросекунд (us), не больше.

5. Возможные проблемы и отладка

5.1 Don't panic!

Всегда учитывайте, что GPS-приемнику требуется некоторое время, чтобы установить свое местоположение после включения: до получаса для старых моделей, 45 секунд для Garmin 18x. Это время зависит от того, насколько долго приемник был выключен (tanenn). ntpd также требуется определенное время для коррекции хода часов. По моим наблюдениям: 10-20 секунд чтобы «увидеть» приемник, 20-30 минут чтобы offset снизился до оптимального значения. Если ваш reach после нескольких минут работы установился в 377, а offset сокращается (по модулю) — то все в порядке.

5.2 ntpd не видит приемник

Если ntpd не видит приемник: reach в ntpq -p застыл на нуле, — необходимо тщательно проверить подключение приемника к серверу. Остановите ntpd и откройте COM-порт в терминале. В FreeBSD:

cu -l /dev/gps0 -s 4800
Connected
$GPGGA,160042,5545.7890,N,03722.6113,E,1,08,0.9,188.3,M,13.3,M,,*47
$GPGGA,160043,5545.7890,N,03722.6114,E,1,08,0.9,188.3,M,13.3,M,,*41
|ччммсс|---широта--|--долгота---| ^^
|число спутников
...

где /dev/gps0 файл устройства, 4800 — скорость передачи данных.

Если приемник подключен правильно, должны «посыпаться» NMEA-сообщения. Убедитесь, что приемник «видит» спутники. В сообщении GPGGA число спутников должно быть 4 или больше, а перед этим числом должна стоять единица. Если у вас включены сообщения GPRMC, то после времени, должен идти символ «A».

Чтобы выйти из cu нажмите «Enter», затем "~", затем ".".

Если NMEA-сообщения говорят о том, что приемник не видит спутники, необходимо переместить его в зону уверенного приема. Лучше всего, чтобы приемник мог обозревать всё небо. Мой Garmin можно устанавливать и на крыше, но путем экспериментов я приклеил его в такое место на окне, где он видит спутники круглосуточно.

Изучите логи ntpd. Возможно стоит установить самую свежую версия сервера.

Если NMEA-сообщения не приходят вообще, убедитесь, что скорость передачи данных от приемника, соответствует ожидаемой ntpd. Проверьте работоспособность COM-порта и подключения приемника к нему.

Убедитесь, что общая длина кабеля от порта до приемника не превышает 5 м. В противном случае, вам придется заморачиваться и делать дифференциальную линию для передачи сигнала для защиты от помех. Рекомендуется экранирование кабеля GPS соединить с экранированием USB-кабеля.

5.3 ntpd не видит сигнал PPS

Опять же проверьте подключение, например с помощью вольтметра или осцилографа. Я использую карманный дешёвый осциллограф DSO Nano. Так выглядит PPS сигнал:

Также удобно использовать RealTerm: он показывает и NMEA-сообщения и сигнал PPS раз в секунду на линии DCD.

Не используйте переходники USB-COM: PPS сигнал через них может не идти или идти с задержкой. Как правило, COM-порт всегда присутствует на материнской плате, просто он может быть не выведен на стенку корпуса.

5.4 Большой offset/jitter

Убедитесь в том, что вы скорректировали принимаемое время, как описано в 3.2. Если настройки приемника позволяют отключите все NMEA-сообщения, кроме одного из: $GPRMC, $GPGLL, $GPGGA, $GPZDA или $GPZDG. Если вы используете только PPS, можно отключить все сообщения.

Попробуйте выключить буфферизацию COM-порта. Установите в /boot/device.hints:

hint.sio.0.flags="0x2"

Посмотрите, нет ли новых версий прошивки для вашего GPS-приемника. (Garmin 18x LVC Firmware download)

Очевидной идеей является повышение скорости передачи данных. Но согласно документации ntpd это нам ничем не поможет. Скорость лучше оставить 4800.

Возможно стоит попробовать изменить системный таймер ОС. В FreeBSD можно прописать в /etc/sysctl.conf:

kern.timecounter.hardware=i8254

У меня offset стал «прыгать», когда кондиционер в серверной стал постоянно то включаться, то выключаться.

График зависимости offset PPS и температуры, когда температура стабильна:

Когда кондиционер безобразничает:

Из графика видно, что offset зависит от температуры воздуха в помещении. Связано это, видимо, с несовершенством таймера на сервере. Способы устранения этой проблемы описаны здесь и здесь.

«Хардварным» способом является замена генератора на материнской плате на термокомпенсированный (TXCO). Но это вариант для гуру микроэлектроники и паяльника.

6. Подготовка NTP-сервера к использованию

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

Если вы хотите создать NTP-сервер для локальной сети, то можно добавить адрес сервера в параметры DHCP. Однако у меня есть подозрения, что на Windows-клиентах эта опция не работает, а на *nix dchpclient нужно настраивать на каждой машине.

Часто просто подменяют в DNS time.windows.com локальным NTP-сервером :) Теперь все Windows-компьютеры будут долбиться на наш сервер.

Список клиентов можно посмотреть командой ntpdc -c monlist.

Также написал небольшой скрипт для Zabbix, отслеживающий параметры reach/offset/jitter PPS и выбранного сервера времени. Запуск скрипта нужно добавить в zabbix_agentd.conf:

UserParameter=ntp.pps_jitter,/usr/local/bin/php /usr/local/share/zabbix/ntp_zabbix.php pps jitter
UserParameter=ntp.pps_offset,/usr/local/bin/php /usr/local/share/zabbix/ntp_zabbix.php pps offset
UserParameter=ntp.pps_reach,/usr/local/bin/php /usr/local/share/zabbix/ntp_zabbix.php pps reach
UserParameter=ntp.source_jitter,/usr/local/bin/php /usr/local/share/zabbix/ntp_zabbix.php source jitter
UserParameter=ntp.source_offset,/usr/local/bin/php /usr/local/share/zabbix/ntp_zabbix.php source offset
UserParameter=ntp.source_reach,/usr/local/bin/php /usr/local/share/zabbix/ntp_zabbix.php source reach

Перезапустите агент. На сервере соответственно нужно добавить эти item'ы для NTP-сервера. Теперь можно настраивать триггеры и графики.

7. Другие способы синхронизации времени

Помимо NMEA ntpd поддерживает еще массу более экзотических устройств (см. полный список).

Стоит отметить, в первую очередь, возможность синхронизации часов по радиосигналу. Например, в России работает служба RWM, из Франкфурта в Германии вещает станция DCF77. DCF77 неплохо ловится в европейской части России (у меня в Москве уверенный прием). Подружить DCF77 и ntpd несложно, см. статью. Точность такого решения будет ниже, однако оно дешевле варианта с GPS в несколько раз: нужно только купить антенну, никаких знаний радиотехники здесь не требуется.

Умельцы могут настроить синхронизацию по импульсам радио «Маяк» в конце каждого часа. Длина последнего шестого импульса зависит от текущего часа. Но такой способ будет явно хуже по точности, чем обычная синхронизация времени по Интернету.

Точное время можно получать от оператора сотовой связи (hellt). Такая «фича» называется NITZ. Однако не все операторы и не все GSM-устройства её поддерживают. Я проверил свои GSM-модемы Siemens MC55 и Arduino GPRS-shield на чипе SIM900 — таких AT-команд в этих устройствах нет.

Существуют также готовые NTP-сервера с датчиками GPS или ГЛОНАСС, но они, понятно, стоят гораздо дороже.

Список работающих российских публичных серверов statum 1

ntp1.vniiftri.ru

ntp2.vniiftri.ru

ntp4.vniiftri.ru

ntp.mobatime.ru

ntp0.ntp-servers.net

ntp1.ntp-servers.net

ntp2.ntp-servers.net

ntp0.zenon.net

gps-time.prao.psn.ru

ntp.ix.ru

Свой сервер я постараюсь сделать открытым, как только разберусь с правами доступа. stratum1.net.

Литература

Отсортировано по «полезности»:

Документация ntpd

Adding a FreeBSD NTP server based on an GPS 18 LVC device

Using a Garmin GPS 18 LVC as NTP stratum-0 on Linux 2.6

NTP Reference Clocks Using FreeBSD 7.0

Stratum 1 NTP, Garmin GPS 18 LVC on FreeBSD 8.0 (зеркало)

Time synchronization with a Garmin GPS

PPS Synchronization (NTP FAQ)

Stratum One Time Servers

Prof. David R. Andersen: NTP Temperature Compensation

NTP temperature compensation

Network Time Protocol server using PC gnu/linux and freebsd

LinuxPPS NTPD support

The Kernel Discipline

Why does the clock on my computer keep incorrect time? (FreeBSD FAQ)

Система точного времени NTP

Network Time Protocol (NTP) в конце приведены ссылки на RFC и списки рассылок.

Пять идей, лежащих в основе GPS

DFC77 receiver

Чем опасны дешёвые GPS-глушилки

ntp

, stratum 0

, stratum 1

, gps

, garmin

, pps

, freebsd

+90

24025

137

gag_fenix
15,6
G+

Похожие публикации

В меру Универсальное Устройство Управления на Raspberry Pi + stratum1 NTP-сервер
7 апреля в 16:10

GPS контроль на бесплатном сервисе ViaLatM 2.0
12 марта в 01:54

Зоопарк коммуникационных протоколов для GPS-трекеров (часть 1)
11 марта в 10:18

PARI/GP: вычисления в конечных полях. Часть 1
5 февраля в 11:48

Установка FreeBSD по сети (PXE) с linux-сервера (dnsmasq + nfs)
4 февраля в 13:59

GPS контроль для персонального использования (Заключение)
2 февраля в 19:16

Взлом времени: более 30 000 серверов NTP еще уязвимы
23 января в 11:40

single-mode во FreeBSD с поддержкой сети
11 января в 11:19

Делаем собственный NTP-сервер Stratum-1
29 декабря 2009 в 14:38

Загрузка русских карт с OpenStreetMap в Garmin Oregon 300
31 октября 2009 в 08:20

Комментарии (76)

+4

Richard_Ferlow
13 октября 2011 в 14:26

#

Вопрос остается только один — скажите, чем вы занимаетесь, что для вас этот вопрос встал так остро? :)

+2

gag_fenix
13 октября 2011 в 15:44

#

↵

↑

Для работы наших систем достаточно точности около 1 с.

Просто я заметил, что российских серверов stratum 1 очень мало, многие уже давно не работают. Как только я все донастрою, то сделаю мой сервер открытым для всех.

0

mafet
14 октября 2011 в 02:37

#

↵

↑

точный сервер это хорошо. а где он будет установлен? не в деревне «поляны»?))

вообще хорошо бы, если бы такой сервер стоял где-нибудь в коммерческом ДЦ, но в таких ДЦ сложновато вывести gps-приёмник в место уверенного приёма gps. да и к условиям суровой зимы такой приёмник должен быть готов (причём сразу, а не по факту нароста льда), а это уже сложнее…

0

ncix
14 октября 2011 в 09:58

#

↵

↑

Да просто у окна поставьте. Для точного времени достаточно поймать один спутник.

0

Korogodin
14 октября 2011 в 11:27

#

↵

↑

Не-не-не… Так вы вытащите точность +- 20 мс, т.к. это будет время по шкале приходящего сигнала. Если, конечно, не написать спец. прошивку, учитывающую тот факт, что приемник неподвижен.

0

ncix
14 октября 2011 в 13:48

#

↵

↑

А что вам даст неподвижность приемника? Спутник-то не геостационарный.

0

Korogodin
14 октября 2011 в 14:04

#

↵

↑

Сократит число неизвестных с 4 до 1, что повлечет пропорциональное сокращение требуемых измерений для решение системы уравнений. Спутник хоть и не геостационарный, но координаты его, если у нас есть системная шкала времени, известны.

0

ncix
14 октября 2011 в 14:08

#

↵

↑

Не совсем понятно:

Во первых системное время у нас недостаточно точное по-определению (мы же пытаемся его установить).

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

Или я чего-то не так понимаю?

+1

Korogodin
14 октября 2011 в 14:24

#

↵

↑

Представим, что у нас есть часы в приемнике рассогласованные с системным временем на величину \tau.

Приемник принимает сигнал от спутника, в момент приема по шкале сигнала время tс (он же момент излучения по системной шкале времени). В этот же самый момент приема время по собственной шкале приемника — tп. Вычисляем ro = (tп — tc)*с — псевдодальность до спутника. ro = R + \tau*c + ro_pr, где R — истинное расстояние между спутником на момент передачи и приемником на момент приема, ro_pr — прочие ошибки, вызванные ионосферой и т.п, с — скорость света.

По эфемеридам мы вычисляем, что в момент tc (момент излучения) спутник находился в точке r_sv = {Xsv; Ysv; Zsv}. Мы знаем, что в момент приема приемник находился в точке r_r = {Xsv; Ysv; Zsv}. Считаем расстояние R = norm(r_sv — r_r). По имеющимся моделям оцениваем ro_pr. Остается последний шаг: \tau = (ro — R — ro_pr)/c.

Мог немного напутать, такие вещи лучше проверять на модели. Но концепция такая)

0

ncix
14 октября 2011 в 15:06

#

↵

↑

Примерно понял, спасибо. Я как-то упустил в рассуждениях момент, что нам известны эфемериды спутника.

В двух словах, идея в том, что со спутника мы получаем и точное время, и точное его положение. Зная точное положение приемника рассчитать задержку не составляет труда. Верно?

0

Korogodin
14 октября 2011 в 15:15

#

↵

↑

Примерно так)

+1

roman_tik
15 октября 2011 в 04:47

#

↵

↑

> вообще хорошо бы, если бы такой сервер стоял где-нибудь в коммерческом ДЦ,

> но в таких ДЦ сложновато вывести gps-приёмник в место уверенного приёма gps

В Альфа-Банке (в Москве, на ул. Сахарова) на крыше здания стоит свой GPS-приёмник (а точнее даже два для резервирования). От них уже свой NTP-сервер, с которым синхронизируются все железки Cisco, контроллеры домена Active Directory и прочие серверы и оборудование в корпоративной сети Альфа-Банка.

Как я понял, основными заказчиками информации о точном времени там были трейдеры из Альфа-Директ.

0

mafet
15 октября 2011 в 13:58

#

↵

↑

это гуд =) такие сервера людям очень нужны.

+4

hellt
13 октября 2011 в 15:04

#

Адски плюсую.

Мы сейчас в РЖД занимаемся тем, что проектируем систему единого времени. Берем 1PPS и КВ от эталона времени и частоты от ГНИИ 32 в мытищах.

0

ivlis
13 октября 2011 в 21:41

#

↵

↑

Было бы здорово, если бы ребята их РЖД ещё бы сделали учёт часовых поясов, а то на всех станциях и билетах время только московское :)

0

alekciy
13 октября 2011 в 22:10

#

↵

↑

Не везде. Пару лет назад держал в руках билеты с местным временем (тогда разница между Самарой и Мск была час), т.е. там так и писалось, что время местное. Летом брал билеты, опять время по Мск (хотя сейчас у нас это и так местное время). Мне подумалось, что ввели и откатили назад, потому как за многие годы все уже просто привыкли к мск в билетах.

0

ivlis
13 октября 2011 в 22:11

#

↵

↑

На сайте РЖД написано, что время московское.

0

IRainman
14 октября 2011 в 01:10

#

↵

↑

Кстати странно почему не GMT тогда, проблем бы не было, страна то огромная… а впрочем всё равно бардак )

+1

ivlis
14 октября 2011 в 01:14

#

↵

↑

Ну забыли, когда ТЗ писали, что ЖД идёт дальше МКАДа, что поделать!

+1

IRainman
14 октября 2011 в 01:23

#

↵

↑

Роися…

0

mitko
13 октября 2011 в 15:27

#

2 вопроса:

1. Есть же готовые решения причем сетевые, чего не устроило?

2. Антенну, то как выкидывали наружу, там недалеко же от такого гармина можно ее поставить.

0

gag_fenix
13 октября 2011 в 15:59

#

↵

↑

1. Т.к. это моя личная инициатива, средства были весьма ограничены. Для очень серьезных задач, конечно, лучше купить готовый NTP-сервер. Прайс-листов в открытом доступе почти нет, но цены начинаются где-то от 1000$ на самые простейшие модели.

2. Не очень понял вопрос. Мне удалось обойтись без установки наружной антенны, просто приклеив приемник на окно (иметь в серверной окно не желательно, но у нас оно есть, и никуда не денешься).

0

mitko
13 октября 2011 в 16:02

#

↵

↑

1. На самом деле готовые NTP сервера уже есть и за 400-500 долларов. Правда не в России, к сожалению, хотя, думаю, можно доставить за не очень большие деньги.

2. То то и оно, что длина кабеля RS-232 это метры, а если в серверной окон нет, то надо либо высверливаться на наружную стену, что не всегда реально, либо как-то тянуть на крышу и упираться в ограничение на длину кабеля.

0

gag_fenix
13 октября 2011 в 16:40

#

↵

↑

1. Если вы кинете мне ссылки на эти сервера в личку, я добавлю их в топик, как альтернативные способы.

2. Проблема решаема. Можно взять не 18ю, а 17ю модель Garmin — у нее кабель уже почти 10 метров. Можно попробовать удлинить RS-232. В одной из ссылок в конце топика автор решил эту проблему с помощью организации дифференциальной линии. Можно просто купить готовое решение.

0

mitko
13 октября 2011 в 16:59

#

↵

↑

Ну, думаю, вариантов множество, но из дешевых решений я лично дело имел с таким: www.timetools.co.uk/products/s5100-gps-ntp-server.htm

стоимость в UK была в районе 300-350 фунтов.

0

ivlis
13 октября 2011 в 21:42

#

↵

↑

А нельзя просто внешнюю антенну приделать к приёмнику?

0

mitko
13 октября 2011 в 22:40

#

↵

↑

Обычную антенну тоже далеко от приемника не утащишь, а для активной нужен более навороченный GPS, ручной не подойдет.

0

ivlis
14 октября 2011 в 00:29

#

↵

↑

Ну метров 10 по хорошему коаксиалю вообще никаких ощутимых помех не вносит. Если сервер не в бункере, то этого обычно хватит.

0

Korogodin
14 октября 2011 в 14:34

#

↵

↑

В радионавигации любая антенна, удаленная более чем на 10 см, делается с малошумящим усилителем. Простой пользователь не найдет на рынке пассивной внешней антенны.

0

nighthawk
13 октября 2011 в 22:30

#

↵

↑

Правда не в России, к сожалению, хотя, думаю, можно доставить за не очень большие деньги.

После «Правды» запятую забыли)

+1

mitko
13 октября 2011 в 22:39

#

↵

↑

Так даже лучше получилось :)

0

ploop
13 октября 2011 в 15:29

#

Очень интересно!

Если не говорить о серьёзных применениях — любители электроники могут спаять себе часы, синхронизируемые от GPS-модуля, благо они сейчас не дорогие, в пределах 20$ можно взять. Там как раз сигнал PPS выведен на отдельную ножку, дальше дело техники…

НЛО прилетело и опубликовало эту надпись здесь

НЛО прилетело и опубликовало эту надпись здесь

НЛО прилетело и опубликовало эту надпись здесь

НЛО прилетело и опубликовало эту надпись здесь

0

entze
14 октября 2011 в 13:55

#

↵

↑

У меня метеостанция Oregon Scientific синхронизируется со станцией в Германии, и вроде успешно (восток Подмосковья).

Видел у кого-то гроб 40х70см советских времен, синхронизирующийся по сигналам Радио Маяк. Точность сказать не могу, спрошу при случае.

0

ploop
13 октября 2011 в 16:46

#

↵

↑

Дык я о больших :)

Например настенные, или схема первичных часов, типа как вокзалах, а во всех комнатах — вторичные (красивый корпус со стрелками либо табло)

+2

grokinn
13 октября 2011 в 15:30

#

Мне вот интересно — если все так просто, то почему ни один смартфон по умолчанию не умеет синхронизировать время по gps?

0

ploop
13 октября 2011 в 15:35

#

↵

↑

Дополнительное потребление, связь со спутником редкая (например внутри зданий, где он чаще всего находится), отсутствие необходимости…

0

trollsid
13 октября 2011 в 15:38

#

↵

↑

наверное т.к. большинство пользователей смартфонов и не подозревает от такой возможности, ну а производителям не охота заморачиваться ради мало кому нужной фичи

+4

hellt
13 октября 2011 в 15:49

#

↵

↑

уже давно все умеют брать время от сети оператора, которые, в свою очередь берут ее от stratum1 источника. Так что время, получаемое по радиосети оператора довольно точное.

0

gag_fenix
13 октября 2011 в 16:20

#

↵

↑

Ага, фича называется NITZ.

0

maxp
13 октября 2011 в 16:27

#

↵

↑

С операторами бывают косяки.

Например, Байкалвестком колбасит регулярно — телефоны разных марок дружно рапортуют, что не могут получить время.

0

trollsid
13 октября 2011 в 16:52

#

↵

↑

когда не могут получить это еще нормально, а бывает что телефон получает об бс, не правильное время ± 15 мин бывает, и самое не приятное не узнаешь пока куда нибудь не опоздаешь ~_~

0

amc
13 октября 2011 в 23:57

#

↵

↑

Когда я последний раз пробовал это у московского Мегафона, он мне выставил 4:46. При том что было что-то вроде 21:15.

Давно конечно было, но проверять что-то не хочется.

0

XAOc57
13 октября 2011 в 16:32

#

↵

↑

У меня Nokia N900, каждый раз при включении GPS синхронизируется время. И как уже высказались выше, есть вариант брать время от сети оператора, у которого, в свою очередь, есть связь с stratum1 сервером.

0

ivlis
13 октября 2011 в 21:45

#

↵

↑

Андроид синхронизирует после фикса.

0

INIT
15 октября 2011 в 10:58

#

↵

↑

можно попродробнее? я нашел только программку gpstime — она требует su и ставит время с отставанием в 0.9 секунды

0

nitro80
14 октября 2011 в 04:57

#

↵

↑

Кто вам сказал? У супруги старенький Rover умел такое делать, и даже предлагал сам следить за временем.

0

cepera_ang
14 октября 2011 в 10:28

#

↵

↑

Некоторые умеют :) В Defy видел такую настройку. Да и для большинства задач хватает синхронизации по NTP. Хотя, что уж там, для ВСЕХ смартфонных задач достаточно точности в пару секунд :)

0

BarsMonster
13 октября 2011 в 16:17

#

Идея с заменой генератора интересна, надо будет как-нибуть для домашнего сервера сделать на досуге )

+4

litos
13 октября 2011 в 16:20

#

Как только разберетесь с настройкой прав доступа и сделаете сервер публичным — рекомендую вступить в pool.ntp.org — этим сервер будет весьма полезен и думаю даже полезнее чем никому не известный standalone

+1

WildHorn
13 октября 2011 в 16:55

#

При взгляде на первую картинку возникает стандартный вопрос преподов в техническиз ВУЗах: почему у Вас на второй компьютер сигнал приходит раньше чем на остальные? Почему такая разбежка по времени?

з.ы. Нет, я всё понимаю, но «красивые картинки — наше всё». Так пусть они будут и точными.

+1

nshopik
13 октября 2011 в 16:55

#

Еще есть ntp.ix.ru. — В качестве источника синхронизации используется эталонный сигнал времени со спутниковых систем ГЛОНАСС (приоритетно) и GPS.

0

webmaks
13 октября 2011 в 17:12

#

Готовые решения конечно есть. Но это так же интересный вариант :) Мне они лично нужны были, т.к. на удалённых участках сервер подсчёта потребления электроэнергии записывал данные и потом при синхронизации не возникало ошибок. А то бывает напряжение поднимали, а по логам выходило, что напряжение по середине участка поднималось с задержкой. Отдал, техникам. Сказали ознакомятся. Может ваш вариант дешевле.

Для всех участников: Почему не GSM? Там его нет. Почему не Интернет? Там его тоже нет. :)

НЛО прилетело и опубликовало эту надпись здесь

0

webmaks
13 октября 2011 в 17:49

#

↵

↑

Я сталкивался только где собиралась статистика в энергетике. Видел так же, как коммунальные счётчики на воду отправляли данные. Сами счётчики не видел, но сервера принимали данные по сети. Синхронизация у них была через интернет. А так больше не знаю. Вот тут к примеру из-за неточности времени пару раз пропускал автобус. bus22.m2m-altai.ru/ Сейчас не знаю, как там дела обстоят.

0

Bobos
13 октября 2011 в 17:38

#

А не легче ли было бы вместо GPS-приемника использовать какое-нибудь простое устройство с чипом RTC и независимым питанием заранее откалиброванное по тому же GPS-у?

0

ploop
13 октября 2011 в 17:56

#

↵

↑

Калибровать очень часто придётся. Почитайте про их точность.

НЛО прилетело и опубликовало эту надпись здесь

0

ivaer
13 октября 2011 в 17:53

#

идея интересная конечно, но не думаю правильная, рисковать я бы не стал, хулиганов можно встретить везде. GPS сигналы можно глушить спец. приборами, купить их можно не за дорого, имеются такие которые вставляются в автомобиль через обычный прикуривать, который глушит сигналы в определённом радиусе.

0

amarao
13 октября 2011 в 18:23

#

А где главный метод точного времени — свои атомные часы?

+2

JerleShannara
13 октября 2011 в 20:31

#

↵

↑

Ну на ebay я видел в продаже цезиевый генератор от agilent сильно б/у, но цена в 17000USD это перебор для DIY

0

equand
14 октября 2011 в 03:10

#

↵

↑

На хабре уже было про ядерный реактор дома, нельзя ли его как-то приспособить?

0

Korogodin
14 октября 2011 в 14:40

#

↵

↑

Можно обойтись меньшей кровью — заказать Semetricon'овский атомный стандарт частоты. Правда, далеко не факт, что продадут в Россию.

0

HounD
13 октября 2011 в 18:31

#

PPS offset в каких величинах на графиках?

0

gag_fenix
14 октября 2011 в 00:21

#

↵

↑

миллисекунды

При нормальной работе ±5 микросекунд.

0

GloooM
13 октября 2011 в 23:44

#

А какую роль в этой схеме играет предохранитель на 1А? )

0

IRainman
14 октября 2011 в 01:23

#

↵

↑

Никакой, если USB на плате кошерный то он отключит питание уже при токе в 500 мА, ну а если так себе то предохранитель остаётся только для успокоения совести.

0

desenix
14 октября 2011 в 15:05

#

↵

↑

Предохранители плавкие предназначены спасать от пожара.

0

GloooM
15 октября 2011 в 12:23

#

↵

↑

Просто при питании от USB о каком предохранителе на 1А может идти речь? В USB итак встроена защита от КЗ, и она срабатывает гораздо раньше чем 1А, там и 500мА не факт что получится вытащить из него.

Предохранитель тут по большей части декоративный и скорее всего сгорит в последнюю очередь ))

+1

desenix
15 октября 2011 в 13:46

#

↵

↑

1. Было указано назначение предохранителя плавкого.

2. Далеко не все материнские платы и тем более USB-HUB оборудованы ограничителями тока (защита по току), поэтому при К.З. вытащить и больше удастся.

0

gag_fenix
15 октября 2011 в 01:44

#

↵

↑

Предохранитель есть на схеме из мануала к 18x lvc. Вот я его и поставил.

0

Korogodin
14 октября 2011 в 11:40

#

Отличная статья!

Думаю студентам дать в качестве бакланской работы… Очень наглядно и интересно!

Остался не понятным только сам механизм синхронизации шкалы времени ntpd.

1) Что это за шкала времени, как она реализована? Как она связана с системными часами?

2) Как в операционной системе с дикими, и что самое главное переменными, задержками на обработки прерываний и т.п. можно достичь точности в мкс? Статистика?

3) Как устроен сам протокол NTP, в чем его отличие от PTP? Как при несимметричности задержек от и до сервера можно произвести синхронизацию с такой точностью?

Я понимаю, что гугл рулит, но хотелось бы услышать мнение опытного человека! =)

0

entze
14 октября 2011 в 14:03

#

Видел в отделении Сбера за спиной операционистки 3 «часов» с наклейками типа «Банкомат», «Центробанк», и еще какой-то.

Так разница была порядка 17 минут. И не на одном не совпадало ни с моими кварцевыми, не с iPhone (как я понимаю? он время корректирует сам?).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Пометьте топик понятными вам метками, если хотите

Метки лучше разделять запятой. Например: общение, социальные сети, myspace.com, подростки, мердок

или закрыть

Популярное за сутки

Правим баг без исходных кодов

ExpvarMon — консольный мониторинг сервисов на Go

Многоуровневое меню для Arduino и не только

Об автоматическом дифференцировании, методе Ньютона и решении СЛАУ на Delphi. Часть 1

все лучшие

Лучшее на Geektimes

Вторая Мировая Война глазами Китая

Форма вселенной: возможностей много, но реальность одна

За 90% загрязнений воздуха ответственными оказались всего 25% автомобилей

SkyNet всё-таки существует, но терминаторов пока опасаться рано

Нью-Йорк — самый мусорный город на планете, а в Москве — одна из самых эффективных систем отопления

Раз плюнуть: обзор и результаты генетического теста Атлас и дайджест основных ДНК-тестов в России и мире

«Особое мнение»: студия Стивена Спилберга готовит продолжение фильма

Как учат водить беспилотный автомобиль

все публикации

Лучшее на Мегамозге

Книги и ресурсы о мотивации на рабочем месте

Китайская комната по-русски: “думать” по шаблону

все публикации

Вопросы по теме

Можно ли узнать начало и конец маршрута группы машин в яндекс-пробках по координатам?

Какой выбрать gps трекер для проката инструмента?

Как записать пройденный маршрут с характеристиками?

Как можно отслеживать передвижения (велосипеда) получая данные, показывать на карте в реальном времени?

Как правильно организовать приём данных с GPS трекера??

Как написать простой Online GPS tracker?

Есть ли аналог Fake GPS работающий не на гугл картах?

Как наложить GPS трек на изображение карты?

Как правильно перемещать маркер в google maps api v2 для android?

Какой параметр в телефоне отвечает за качество GPS-приемника?

Сервис для вывода положения курьера на карте на сайте в режиме реального времени?

Как изменить ошибку с локацией?

Организация поездок агрофирмы по предприятиям?

Как определить местоположение (GPS координаты) WiFi точки, по ее MAC адресу, либо MAC адресам точек находящихся рядом?

Как записать gps в txt на телефоне под андроидом?

Есть ли GPS logger для Android?

Как связать датчик со2 с ноутбуком?

Какой использовать GPS Shield для Arduino в авто?

Как преобразовать GPS-координаты с китайского трекера в координаты GOOGLE MAPS?

Где скрипт, чтобы на GPS-трек нанести метки времени, зная только время первой и последней точек?

Что обсуждают?

Правим баг без исходных кодов 12

Как перевести сайт целиком на постоянный HTTPS для всех 3

Средние ставки фрилансеров — итоги исследования Payoneer 33

Как мы придумывали конструктор для детской робототехники. #1 74

Фотоотчет с открытия Робостанции 25

Загрузка и хранение фотографий в Web приложениях 40

Компьютер маленького человечка 17

Работа глушилки GPS во время парада на красной площади 41

«Проблема дверного звонка» или когда вы думаете, что все знаете 21

Monitoring-as-a-service для инфраструктур на примере сервиса Anturis 6

все публикации

Компания дня

Фонд ReactOS

Последняя публикация:
Видео от пользователя: MacOS внутри ReactOS

128 подписчиков

Доказательство некорректности алгоритма сортировки Android, Java и Python

Троичный компьютер в браузере

Был получен несанкционированный доступ к более чем 20 000 камерам видео-наблюдения Москвы (теперь вы тоже)

Brainstorage

PHP–разработчик

Системный администратор Linux (со знанием python)

Веб-разработчик (back-end)

JS/PHP программист

Ведущий бизнес-аналитик

Увлеченный программист для масштабируемого web-стартапа

Дизайнер интерфейсов

Гейм дизайнер

Фронтенд-разработчик

Веб-программист

все вакансии

Организовать IP-телефонию в маленьком офисе

Коучинг для повышения эффектиности пользования комп.техникой

Разработка Android приложения на Phonegap

Нужен райтер для написания текстов на общественно-политическую тематик

Продвижение в fb

Мониторинг Интернет-СМИ

Сбор информации в сети Интернет

Мониторинг ключевых слов на ТВ

Оптимизация CMS с помощью xml

Парсер google play market

все заказы

Войти

Регистрация

Разделы

Публикации

Хабы

Компании

Пользователи

Q&A

Песочница

Инфо

О сайте

Правила

Помощь

Соглашение

Услуги

Реклама

Спецпроекты

Тарифы

Контент

Семинары

Разное

Приложения

Тест-драйвы

Помощь стартапам

© TM

Служба поддержки

Мобильная версия