Пользователь
54,0
рейтинг
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 инструкции одинаковы:
  1. Подключите GPS-приемник к COM-порту сервера (USB переходник тоже должен сработать).
  2. Создайте символическую ссылку /dev/gpsX на устройство (например, у меня /dev/cuau0 -> /dev/gps0).
  3. В 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..
  4. Перезапустите сервер. Запустите 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.

Литература


Отсортировано по «полезности»:
  1. Документация ntpd
  2. Adding a FreeBSD NTP server based on an GPS 18 LVC device
  3. Using a Garmin GPS 18 LVC as NTP stratum-0 on Linux 2.6
  4. NTP Reference Clocks Using FreeBSD 7.0
  5. Stratum 1 NTP, Garmin GPS 18 LVC on FreeBSD 8.0 (зеркало)
  6. Time synchronization with a Garmin GPS
  7. PPS Synchronization (NTP FAQ)
  8. Stratum One Time Servers
  9. Prof. David R. Andersen: NTP Temperature Compensation
  10. NTP temperature compensation
  11. Network Time Protocol server using PC gnu/linux and freebsd
  12. LinuxPPS NTPD support
  13. The Kernel Discipline
  14. Why does the clock on my computer keep incorrect time? (FreeBSD FAQ)
  15. Система точного времени NTP
  16. Network Time Protocol (NTP) в конце приведены ссылки на RFC и списки рассылок.
  17. Пять идей, лежащих в основе GPS
  18. DFC77 receiver
  19. Чем опасны дешёвые GPS-глушилки
Владислав Росс @gag_fenix
карма
169,8
рейтинг 54,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

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

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

  • +4
    Вопрос остается только один — скажите, чем вы занимаетесь, что для вас этот вопрос встал так остро? :)
    • +2
      Для работы наших систем достаточно точности около 1 с.
      Просто я заметил, что российских серверов stratum 1 очень мало, многие уже давно не работают. Как только я все донастрою, то сделаю мой сервер открытым для всех.
      • 0
        точный сервер это хорошо. а где он будет установлен? не в деревне «поляны»?))
        вообще хорошо бы, если бы такой сервер стоял где-нибудь в коммерческом ДЦ, но в таких ДЦ сложновато вывести gps-приёмник в место уверенного приёма gps. да и к условиям суровой зимы такой приёмник должен быть готов (причём сразу, а не по факту нароста льда), а это уже сложнее…
        • 0
          Да просто у окна поставьте. Для точного времени достаточно поймать один спутник.
          • 0
            Не-не-не… Так вы вытащите точность +- 20 мс, т.к. это будет время по шкале приходящего сигнала. Если, конечно, не написать спец. прошивку, учитывающую тот факт, что приемник неподвижен.
            • 0
              А что вам даст неподвижность приемника? Спутник-то не геостационарный.
              • 0
                Сократит число неизвестных с 4 до 1, что повлечет пропорциональное сокращение требуемых измерений для решение системы уравнений. Спутник хоть и не геостационарный, но координаты его, если у нас есть системная шкала времени, известны.
                • 0
                  Не совсем понятно:
                  Во первых системное время у нас недостаточно точное по-определению (мы же пытаемся его установить).
                  Во вторых разница между точным системным временем и полученным со спутника даст нам потенциальное положение спутника в виде окружности на небесной сфере, каждая точка которой равноудалена от приемника.
                  Или я чего-то не так понимаю?
                  • +1
                    Представим, что у нас есть часы в приемнике рассогласованные с системным временем на величину \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
                      Примерно понял, спасибо. Я как-то упустил в рассуждениях момент, что нам известны эфемериды спутника.

                      В двух словах, идея в том, что со спутника мы получаем и точное время, и точное его положение. Зная точное положение приемника рассчитать задержку не составляет труда. Верно?
                      • 0
                        Примерно так)
        • +1
          > вообще хорошо бы, если бы такой сервер стоял где-нибудь в коммерческом ДЦ,
          > но в таких ДЦ сложновато вывести gps-приёмник в место уверенного приёма gps

          В Альфа-Банке (в Москве, на ул. Сахарова) на крыше здания стоит свой GPS-приёмник (а точнее даже два для резервирования). От них уже свой NTP-сервер, с которым синхронизируются все железки Cisco, контроллеры домена Active Directory и прочие серверы и оборудование в корпоративной сети Альфа-Банка.
          Как я понял, основными заказчиками информации о точном времени там были трейдеры из Альфа-Директ.
          • 0
            это гуд =) такие сервера людям очень нужны.
  • +4
    Адски плюсую.
    Мы сейчас в РЖД занимаемся тем, что проектируем систему единого времени. Берем 1PPS и КВ от эталона времени и частоты от ГНИИ 32 в мытищах.
    • 0
      Было бы здорово, если бы ребята их РЖД ещё бы сделали учёт часовых поясов, а то на всех станциях и билетах время только московское :)
      • 0
        Не везде. Пару лет назад держал в руках билеты с местным временем (тогда разница между Самарой и Мск была час), т.е. там так и писалось, что время местное. Летом брал билеты, опять время по Мск (хотя сейчас у нас это и так местное время). Мне подумалось, что ввели и откатили назад, потому как за многие годы все уже просто привыкли к мск в билетах.
        • 0
          На сайте РЖД написано, что время московское.
          • 0
            Кстати странно почему не GMT тогда, проблем бы не было, страна то огромная… а впрочем всё равно бардак )
            • +1
              Ну забыли, когда ТЗ писали, что ЖД идёт дальше МКАДа, что поделать!
              • +1
                Роися…
  • 0
    2 вопроса:
    1. Есть же готовые решения причем сетевые, чего не устроило?
    2. Антенну, то как выкидывали наружу, там недалеко же от такого гармина можно ее поставить.
    • 0
      1. Т.к. это моя личная инициатива, средства были весьма ограничены. Для очень серьезных задач, конечно, лучше купить готовый NTP-сервер. Прайс-листов в открытом доступе почти нет, но цены начинаются где-то от 1000$ на самые простейшие модели.
      2. Не очень понял вопрос. Мне удалось обойтись без установки наружной антенны, просто приклеив приемник на окно (иметь в серверной окно не желательно, но у нас оно есть, и никуда не денешься).
      • 0
        1. На самом деле готовые NTP сервера уже есть и за 400-500 долларов. Правда не в России, к сожалению, хотя, думаю, можно доставить за не очень большие деньги.
        2. То то и оно, что длина кабеля RS-232 это метры, а если в серверной окон нет, то надо либо высверливаться на наружную стену, что не всегда реально, либо как-то тянуть на крышу и упираться в ограничение на длину кабеля.
        • 0
          1. Если вы кинете мне ссылки на эти сервера в личку, я добавлю их в топик, как альтернативные способы.
          2. Проблема решаема. Можно взять не 18ю, а 17ю модель Garmin — у нее кабель уже почти 10 метров. Можно попробовать удлинить RS-232. В одной из ссылок в конце топика автор решил эту проблему с помощью организации дифференциальной линии. Можно просто купить готовое решение.
          • 0
            Ну, думаю, вариантов множество, но из дешевых решений я лично дело имел с таким: www.timetools.co.uk/products/s5100-gps-ntp-server.htm
            стоимость в UK была в районе 300-350 фунтов.
          • 0
            А нельзя просто внешнюю антенну приделать к приёмнику?
            • 0
              Обычную антенну тоже далеко от приемника не утащишь, а для активной нужен более навороченный GPS, ручной не подойдет.
              • 0
                Ну метров 10 по хорошему коаксиалю вообще никаких ощутимых помех не вносит. Если сервер не в бункере, то этого обычно хватит.
              • 0
                В радионавигации любая антенна, удаленная более чем на 10 см, делается с малошумящим усилителем. Простой пользователь не найдет на рынке пассивной внешней антенны.
        • 0
          Правда не в России, к сожалению, хотя, думаю, можно доставить за не очень большие деньги.

          После «Правды» запятую забыли)
          • +1
            Так даже лучше получилось :)
  • 0
    Очень интересно!

    Если не говорить о серьёзных применениях — любители электроники могут спаять себе часы, синхронизируемые от GPS-модуля, благо они сейчас не дорогие, в пределах 20$ можно взять. Там как раз сигнал PPS выведен на отдельную ножку, дальше дело техники…
    • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
        • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          У меня метеостанция Oregon Scientific синхронизируется со станцией в Германии, и вроде успешно (восток Подмосковья).
          Видел у кого-то гроб 40х70см советских времен, синхронизирующийся по сигналам Радио Маяк. Точность сказать не могу, спрошу при случае.
      • 0
        Дык я о больших :)
        Например настенные, или схема первичных часов, типа как вокзалах, а во всех комнатах — вторичные (красивый корпус со стрелками либо табло)
  • +2
    Мне вот интересно — если все так просто, то почему ни один смартфон по умолчанию не умеет синхронизировать время по gps?
    • 0
      Дополнительное потребление, связь со спутником редкая (например внутри зданий, где он чаще всего находится), отсутствие необходимости…
    • 0
      наверное т.к. большинство пользователей смартфонов и не подозревает от такой возможности, ну а производителям не охота заморачиваться ради мало кому нужной фичи
    • +4
      уже давно все умеют брать время от сети оператора, которые, в свою очередь берут ее от stratum1 источника. Так что время, получаемое по радиосети оператора довольно точное.
      • 0
        Ага, фича называется NITZ.
      • 0
        С операторами бывают косяки.
        Например, Байкалвестком колбасит регулярно — телефоны разных марок дружно рапортуют, что не могут получить время.
        • 0
          когда не могут получить это еще нормально, а бывает что телефон получает об бс, не правильное время ± 15 мин бывает, и самое не приятное не узнаешь пока куда нибудь не опоздаешь ~_~
          • 0
            Когда я последний раз пробовал это у московского Мегафона, он мне выставил 4:46. При том что было что-то вроде 21:15.
            Давно конечно было, но проверять что-то не хочется.
    • 0
      У меня Nokia N900, каждый раз при включении GPS синхронизируется время. И как уже высказались выше, есть вариант брать время от сети оператора, у которого, в свою очередь, есть связь с stratum1 сервером.
    • 0
      Андроид синхронизирует после фикса.
      • 0
        можно попродробнее? я нашел только программку gpstime — она требует su и ставит время с отставанием в 0.9 секунды
    • 0
      Кто вам сказал? У супруги старенький Rover умел такое делать, и даже предлагал сам следить за временем.
    • 0
      Некоторые умеют :) В Defy видел такую настройку. Да и для большинства задач хватает синхронизации по NTP. Хотя, что уж там, для ВСЕХ смартфонных задач достаточно точности в пару секунд :)
  • 0
    Идея с заменой генератора интересна, надо будет как-нибуть для домашнего сервера сделать на досуге )
  • +4
    Как только разберетесь с настройкой прав доступа и сделаете сервер публичным — рекомендую вступить в pool.ntp.org — этим сервер будет весьма полезен и думаю даже полезнее чем никому не известный standalone
  • +1
    При взгляде на первую картинку возникает стандартный вопрос преподов в техническиз ВУЗах: почему у Вас на второй компьютер сигнал приходит раньше чем на остальные? Почему такая разбежка по времени?
    з.ы. Нет, я всё понимаю, но «красивые картинки — наше всё». Так пусть они будут и точными.
  • +1
    Еще есть ntp.ix.ru. — В качестве источника синхронизации используется эталонный сигнал времени со спутниковых систем ГЛОНАСС (приоритетно) и GPS.
  • 0
    Готовые решения конечно есть. Но это так же интересный вариант :) Мне они лично нужны были, т.к. на удалённых участках сервер подсчёта потребления электроэнергии записывал данные и потом при синхронизации не возникало ошибок. А то бывает напряжение поднимали, а по логам выходило, что напряжение по середине участка поднималось с задержкой. Отдал, техникам. Сказали ознакомятся. Может ваш вариант дешевле.
    Для всех участников: Почему не GSM? Там его нет. Почему не Интернет? Там его тоже нет. :)
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Я сталкивался только где собиралась статистика в энергетике. Видел так же, как коммунальные счётчики на воду отправляли данные. Сами счётчики не видел, но сервера принимали данные по сети. Синхронизация у них была через интернет. А так больше не знаю. Вот тут к примеру из-за неточности времени пару раз пропускал автобус. bus22.m2m-altai.ru/ Сейчас не знаю, как там дела обстоят.
  • 0
    А не легче ли было бы вместо GPS-приемника использовать какое-нибудь простое устройство с чипом RTC и независимым питанием заранее откалиброванное по тому же GPS-у?
    • 0
      Калибровать очень часто придётся. Почитайте про их точность.
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    идея интересная конечно, но не думаю правильная, рисковать я бы не стал, хулиганов можно встретить везде. GPS сигналы можно глушить спец. приборами, купить их можно не за дорого, имеются такие которые вставляются в автомобиль через обычный прикуривать, который глушит сигналы в определённом радиусе.
  • 0
    А где главный метод точного времени — свои атомные часы?
    • +2
      Ну на ebay я видел в продаже цезиевый генератор от agilent сильно б/у, но цена в 17000USD это перебор для DIY
      • 0
        На хабре уже было про ядерный реактор дома, нельзя ли его как-то приспособить?
      • 0
        Можно обойтись меньшей кровью — заказать Semetricon'овский атомный стандарт частоты. Правда, далеко не факт, что продадут в Россию.
  • 0
    PPS offset в каких величинах на графиках?
    • 0
      миллисекунды
      При нормальной работе ±5 микросекунд.
  • 0
    А какую роль в этой схеме играет предохранитель на 1А? )
    • 0
      Никакой, если USB на плате кошерный то он отключит питание уже при токе в 500 мА, ну а если так себе то предохранитель остаётся только для успокоения совести.
      • 0
        Предохранители плавкие предназначены спасать от пожара.
        • 0
          Просто при питании от USB о каком предохранителе на 1А может идти речь? В USB итак встроена защита от КЗ, и она срабатывает гораздо раньше чем 1А, там и 500мА не факт что получится вытащить из него.
          Предохранитель тут по большей части декоративный и скорее всего сгорит в последнюю очередь ))
          • +1
            1. Было указано назначение предохранителя плавкого.
            2. Далеко не все материнские платы и тем более USB-HUB оборудованы ограничителями тока (защита по току), поэтому при К.З. вытащить и больше удастся.
    • 0
      Предохранитель есть на схеме из мануала к 18x lvc. Вот я его и поставил.
  • 0
    Отличная статья!
    Думаю студентам дать в качестве бакланской работы… Очень наглядно и интересно!

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

    1) Что это за шкала времени, как она реализована? Как она связана с системными часами?
    2) Как в операционной системе с дикими, и что самое главное переменными, задержками на обработки прерываний и т.п. можно достичь точности в мкс? Статистика?
    3) Как устроен сам протокол NTP, в чем его отличие от PTP? Как при несимметричности задержек от и до сервера можно произвести синхронизацию с такой точностью?

    Я понимаю, что гугл рулит, но хотелось бы услышать мнение опытного человека! =)
  • 0
    Видел в отделении Сбера за спиной операционистки 3 «часов» с наклейками типа «Банкомат», «Центробанк», и еще какой-то.
    Так разница была порядка 17 минут. И не на одном не совпадало ни с моими кварцевыми, не с iPhone (как я понимаю? он время корректирует сам?).

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