Синхронизировать время на компьютере с gps
GPS приемники можно использовать не только для определения местоположения, но и для получения сигналов точного времени. В статье я покажу как настроить сервер точного времени, использующий в качестве источника GPS и работающий с точностью до нескольких микросекунд. В качестве примера я использую приемник Garmin и ОС FreeBSD, но статья также будет полезна обладателям Linux и Windows.
Подобный топик на хабре уже пробегал, но я считаю, что тему надо раскрыть гораздо подробнее: многие важные детали автор опустил.
6. Подготовка NTP-сервера к использованию
Перед публикацией сервера в сеть, прочитайте разделы документации, касающиеся установки прав доступа и ограничения количества запросов.
Если вы хотите создать NTP-сервер для локальной сети, то можно добавить адрес сервера в параметры DHCP. Однако у меня есть подозрения, что на Windows-клиентах эта опция не работает, а на *nix dchpclient нужно настраивать на каждой машине.
Список клиентов можно посмотреть командой ntpdc -c monlist.
Также написал небольшой скрипт для Zabbix, отслеживающий параметры reach/offset/jitter PPS и выбранного сервера времени. Запуск скрипта нужно добавить в zabbix_agentd.conf:
Перезапустите агент. На сервере соответственно нужно добавить эти item'ы для NTP-сервера. Теперь можно настраивать триггеры и графики.
5.3 ntpd не видит сигнал PPS
Опять же проверьте подключение, например с помощью вольтметра или осцилографа. Я использую карманный дешёвый осциллограф DSO Nano. Так выглядит PPS сигнал:
Не используйте переходники USB-COM: PPS сигнал через них может не идти или идти с задержкой. Как правило, COM-порт всегда присутствует на материнской плате, просто он может быть не выведен на стенку корпуса.
5.4 Большой offset/jitter
Попробуйте выключить буфферизацию COM-порта. Установите в /boot/device.hints:
Посмотрите, нет ли новых версий прошивки для вашего GPS-приемника. (Garmin 18x LVC Firmware download)
Очевидной идеей является повышение скорости передачи данных. Но согласно документации ntpd это нам ничем не поможет. Скорость лучше оставить 4800.
Возможно стоит попробовать изменить системный таймер ОС. В FreeBSD можно прописать в /etc/sysctl.conf:
У меня offset стал «прыгать», когда кондиционер в серверной стал постоянно то включаться, то выключаться.
График зависимости offset PPS и температуры, когда температура стабильна:
Когда кондиционер безобразничает:
Из графика видно, что offset зависит от температуры воздуха в помещении. Связано это, видимо, с несовершенством таймера на сервере. Способы устранения этой проблемы описаны здесь и здесь.
«Хардварным» способом является замена генератора на материнской плате на термокомпенсированный (TXCO). Но это вариант для гуру микроэлектроники и паяльника.
4. Получение времени от GPS с сигналами PPS
Программа ToyNtp
5.1 Don't panic!
Всегда учитывайте, что GPS-приемнику требуется некоторое время, чтобы установить свое местоположение после включения: до получаса для старых моделей, 45 секунд для Garmin 18x. Это время зависит от того, насколько долго приемник был выключен (tanenn). ntpd также требуется определенное время для коррекции хода часов. По моим наблюдениям: 10-20 секунд чтобы «увидеть» приемник, 20-30 минут чтобы offset снизился до оптимального значения. Если ваш reach после нескольких минут работы установился в 377, а offset сокращается (по модулю) — то все в порядке.
4.3 Настройка FreeBSD и ntpd
Поддержка PPS во FreeBSD присутствует довольно давно, поэтому PPS здесь настраивается проще и работает точнее. Пользователи Linux могут обратиться к статье Using a Garmin GPS 18 LVC as NTP stratum-0 on Linux 2.6. Настройки написанные ниже относится к FreeBSD.
Для включения поддержки PPS необходимо пересобрать ядро системы с опцией:
NTP-сервер уже присутствует в системе, но не лишним будет обновить. Для FreeBSD делаем это из портов:
Теперь необходимо добавить в rc.conf строки:
ntpd_program указывает на путь установки ntpd из портов.
Создайте символическую ссылки /dev/gpsX и на /dev/ppsX устройство (например, у меня /dev/cuau0 -> /dev/gps0). Можно воспользоваться командой ln или добавить соответствующие строки в /etc/devfs.conf:
В документации NTP рекомендуется с GPS получать только PPS-импульсы для точного хода часов, а само время — с другого сервера stratum 1. Для этого необходимо добавить в /etc/ntp.conf несколько (4-5) серверов stratum 1 и наш PPS, например:
Драйвер 22 отвечает за PPS. flag3 включает режим коррекции времени ядра (kernel discipline). В документации ntpd написано, что включать kernel discipline совсем не обязательно: ntpd будет работать точнее, если просто выставить minpoll 4. Однако у меня получается как раз наоборот: с flag3 часы идут точнее — так что я предлагаю вам поэкспериментировать с этим параметром самостоятельно.
Можно пойти другим путем: получать и время с GPS и сигналы PPS:
flag1 включает PPS, flag3 — kernel discipline.
Это позволит получать время без использование Интернета, но в этом случае скорее всего понадобится коррекция (аналогично п. 3.2).
После внесения изменений необходимо перезапустить ntpd:
Запустите команду ntpq -p (подробнее о ней рассказано в п. 3.2). Если вы получаете только PPS сигнал, то вывод должен приблизительно быть таким:
Перед PPS(0) должно стоять «o», reach в течении пары минут дойти до 377. Остальные сервера используются для получения времени.
Если вы получаете с GPS еще и NMEA-информацию, то
Перед GPS_NMEA(0) должна стоять *.
Не лишним будет проверить статус PPS. Это можно сделать с помощью команд ntpdc -c kerninfo или ntptime. ntptime дает немного более подробную информацию:
На что нужно смотреть:
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), не больше.
2. GPS-приемник
GPS-приемник можно использовать практически любой — главное, чтобы он поддерживал стандартный протокол NMEA 0183. Протокол NMEA служит для передачи GPS-информации простыми ASCII-строками по последовательному интерфейсу, такому как RS-232. Вместе с географическими координатами NMEA передает еще и точное время, как правило, раз в секунду.
Если вы хотите обеспечить еще большую точность — до нескольких микросекунд, необходимо использовать GPS-приемник, который умеет выдавать сигнал PPS (Pulse per second). PPS-импульс повторяется раз в секунду с очень большой точностью и может быть считан ntpd.
Ниже я рассмотрю оба варианта: сначала обычный NMEA и более подробно PPS.
Список работающих российских публичных серверов statum 1
Одно из требований для работы в цифроых модах - точная синхронизация времени компьютера. Как правило, радиолюбители выполняют эту операцию путем синхронизации часов операционной системы через сеть Интернет.
Но есть альтернативный, и на мой взгляд, более точный способ синхронизации с помощью GPS приемника. Достоинства этого способа синхронизации в том, что нет необходимости соединения с Интернетом. Это особенно полезно при работе на Полевых днях, на даче, в условиях отсутствия Интернета.
В Интернете можно найти несколько программ для реализации этого способа. Я использую бесплатную программу Сергея Кичатова "SatTime" с сайта Астрофорума.
Программа очень компактная (около 200 мб), не требует инсталляции. У меня работает с Windows7 и Windows10. Приемник подключается через COM-порт. У меня работает Bluetooht приемник BT-336, соединяющийся с компьютером через виртуальный COM-порт (дешевый USB адптер "Dexp", если нет встроенного Bluetooht-модуля в компьютере).
Совсем не сложно сделать GPS-приемник самому . Для этого нужен простейший GPS-модуль (например, NEO6MV2) и USB-COM конвертор (или преобразователь COM-TTL, если на вашем ПК есть com-порт). На Aliexpress всё это можно приобрести за адекватные деньги (около 300 руб). На радиорынках это будет стоить несколько дороже, но зато быстрее. Никаких средств программирования не требуется. Необходимо лишь знать скорость работы вашего GPS-модуля с COM-портом. Схема будет выглядеть так:
При использовании конвертера USB-COM питание GPS-модуля осуществляется от самого конветера. Если вы применяете преобразователь COM-TTL, то придется подать на модули внешнее питание от литиевой батареи или от usb-порта.
Ещё лучше - сделать GPS-приемник с Bluetooht-модулем, что позволит разместить приемник в зоне доступности спутников. Схема также достаточно простая. Единственное, возможно, придется настроить Bluetooht-модуль на необходимую скорость передачи вашего GPS-модуля.
- Запускаем её от имени администратора (!) .
- Выбираем COM-порт с которым работает GPS-приемник.
- Настраваем кнопкой [Settings] скорость работы COM-порта, которая зависит от вашего приемника.
- Запускаем работу приемника кнопкой [Open] .
- Ждем соединение приемника со спутниками.
- В строке "Satellites" увидим количество обнаруженных спутников (желательно не менее 4).
- Нажимаем кнопку [Sync> - Ваши часы на ПК засинхронизированы !
Вы увидите, что значение времени в строчках "Global_UTC" и "Local_UTC" идентичны. Строкой ниже - "Difference" Вы увидите расхождение ваших часов с глобальным временем. На моем скриншоте видно, что расхождение всего 0,025 секунды (!). Можно включить режим автоматической синхронизации [Auto Sync] , тогда компьютер будет постоянно синхронизироваться с заданным интервалом (например, 60 сек).
Одно из требований для работы в цифроых модах - точная синхронизация времени компьютера. Как правило, радиолюбители выполняют эту операцию путем синхронизации часов операционной системы через сеть Интернет.
Но есть альтернативный, и на мой взгляд, более точный способ синхронизации с помощью GPS приемника. Достоинства этого способа синхронизации в том, что нет необходимости соединения с Интернетом. Это особенно полезно при работе на Полевых днях, на даче, в условиях отсутствия Интернета.
В Интернете можно найти несколько программ для реализации этого способа. Я использую бесплатную программу Сергея Кичатова "SatTime" с сайта Астрофорума.
Программа очень компактная (около 200 мб), не требует инсталляции. У меня работает с Windows7 и Windows10. Приемник подключается через COM-порт. У меня работает Bluetooht приемник BT-336, соединяющийся с компьютером через виртуальный COM-порт (дешевый USB адптер "Dexp", если нет встроенного Bluetooht-модуля в компьютере).
Совсем не сложно сделать GPS-приемник самому . Для этого нужен простейший GPS-модуль (например, NEO6MV2) и USB-COM конвертор (или преобразователь COM-TTL, если на вашем ПК есть com-порт). На Aliexpress всё это можно приобрести за адекватные деньги (около 300 руб). На радиорынках это будет стоить несколько дороже, но зато быстрее. Никаких средств программирования не требуется. Необходимо лишь знать скорость работы вашего GPS-модуля с COM-портом. Схема будет выглядеть так:
При использовании конвертера USB-COM питание GPS-модуля осуществляется от самого конветера. Если вы применяете преобразователь COM-TTL, то придется подать на модули внешнее питание от литиевой батареи или от usb-порта.
Ещё лучше - сделать GPS-приемник с Bluetooht-модулем, что позволит разместить приемник в зоне доступности спутников. Схема также достаточно простая. Единственное, возможно, придется настроить Bluetooht-модуль на необходимую скорость передачи вашего GPS-модуля.
- Запускаем её от имени администратора (!) .
- Выбираем COM-порт с которым работает GPS-приемник.
- Настраваем кнопкой [Settings] скорость работы COM-порта, которая зависит от вашего приемника.
- Запускаем работу приемника кнопкой [Open] .
- Ждем соединение приемника со спутниками.
- В строке "Satellites" увидим количество обнаруженных спутников (желательно не менее 4).
- Нажимаем кнопку [Sync> - Ваши часы на ПК засинхронизированы !
Вы увидите, что значение времени в строчках "Global_UTC" и "Local_UTC" идентичны. Строкой ниже - "Difference" Вы увидите расхождение ваших часов с глобальным временем. На моем скриншоте видно, что расхождение всего 0,025 секунды (!). Можно включить режим автоматической синхронизации [Auto Sync] , тогда компьютер будет постоянно синхронизироваться с заданным интервалом (например, 60 сек).
В некоторых цифровых режимах, необходимо, чтобы разница времени между вашим компьютером и компьютером корреспондента не превышала одной секунды! Встроенный в Windows метод синхронизации времени, не всегда позволяет достичь нужно точности. Поэтому, будем использовать внешние программы.
Узнать насколько точны часы вашего компьютера, можно на сайте time.is или ntp-servers. Обычно есть небольшое расхождение, которое потребуется скорректировать.
Синхронизация через Log
Программа LogHX3 (автор RX4HX), имеет возможность точно синхронизировать часы вашего компьютера, для этого нажмите на часы правой кнопкой мышки и выберите пункт Synchronize time via Internet, время будет мгновенно скорректированно. Естественно, компьютер с логом должен быть подключен к интернету.
Конечно, есть и другие программы для синхронизации времени и среди них выделяется time-2, которая позволяет скорректировать часы в ручном режиме, без сети и gps.
5.2 ntpd не видит приемник
Если ntpd не видит приемник: reach в ntpq -p застыл на нуле, — необходимо тщательно проверить подключение приемника к серверу. Остановите ntpd и откройте COM-порт в терминале. В FreeBSD:
где /dev/gps0 файл устройства, 4800 — скорость передачи данных.
Изучите логи ntpd. Возможно стоит установить самую свежую версия сервера.
Убедитесь, что общая длина кабеля от порта до приемника не превышает 5 м. В противном случае, вам придется заморачиваться и делать дифференциальную линию для передачи сигнала для защиты от помех. Рекомендуется экранирование кабеля GPS соединить с экранированием USB-кабеля.
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, как сделано здесь.
1. Немного теории
По оценке журнала GPS World, сейчас в мире находится в использовании более миллиарда приёмников GPS, и более 90% из них используются только для получения сигналов точного времени. [19]
Для определения собственных трехмерных координат GPS-приемник рассчитывает расстояние до 4-х спутников. Это расстояние вычисляется путем измерения времени прохождения радиосигнала от спутника. Т.к. скорость света составляет 3×10 8 м/с, то время прохождения сигнала очень мало, и для расчета требуется очень точная синхронизация хода часов на спутнике и приемнике. Поэтому каждый спутник GPS оборудован атомными часами с точностью хода 1 нс/сут, а приемник обеспечивает точность времени около 50 нс [17]. Для определения времени приемнику достаточно получить сигнал с одного спутника (tanenn).
- если у системы нет доступа в Интернет;
- если вам нужна высокая точность времени — единицы микросекунд (мкс);
- если вам нужно синхронизировать распределенную систему от надежного источника времени;
- просто ради интереса :)
Синхронизация через интернет
Если ваш компьютер постоянно подключен к интернет каналу, для синхронизации проще всего использовать бесплатную программу NetTime. Зайдите на страничку, скачайте последнюю версию и запустите установку.
В программе много тонких настроек, где можно выбрать интервалы синхронизации, сервера и тд. Для мгновенной синхронизации, запустите программу и нажмите кнопку Update Now. Вы увидите на сколько было скорректировано время вашего ПК.
NetTime может работать как сервис, а значит встроенную в Windows службу корректировки времени нужно отключить.
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 — в теории это позволит приемнику работать при трех видимых спутниках вместо четырех. Однако не ручаюсь, что эти две опции на что-то влияют.
Синхронизация без интернета и gps
Интересная программа, которая позволяет ручками скорректировать время в компьютере. Понятно что точность ниже, но этого достаточно, чтобы проводить QSO в JT-режимах. Страничка программы time-2.
Для работы в режимах FT8, JT9, JT65, кроме оригинальных программ WSJT и WSJT-X попробуйте JT65-HF, JTDX by UA3DJY, JT65-HF-HB9HQX-Edition, JT65-HF-Comfort by DL3VCO, JT65-HF-Comfort-4 by DL4OCE, MSHV by LZ2HV и дополнительные утилиты к ним, расширяющие возможности JT_Linker by JA2GRC, JT65toThw by JA2BQX, JT_Alert.
Доброго времени суток!
Хочу поделиться опытом создания системы единой синхронизации времени в пределах квартиры/офиса c элементами олдскул и постапокалипсиса.
Всегда хотел сделать часы, не нуждающиеся в коррекции времени. В студенчестве пытался собрать приёмник сигналов синхронизации времени на ДВ (DCF77), даже кварц нужный выпилил. Но сигнал из Германии доходил слабый, да и антенна нешуточная получалась.
Потом появилась возможность синхронизации от GPS. В своё время приобрел RS232 GPS модуль, выдающий информацию о координатах в NMEA, который подключал к чёрно-белому PALM m105 и радовался программе PathAway. Но прогресс на месте не стоял, появились другие задачи и GPS модуль провалялся на полке до текущего момента.
Недостаток синхронизации времени от GPS — необходимость располагать приемник в прямой видимости хотя бы одного спутника, что в разрезе часов не всегда приемлемо. В связи с этим появилась появилась идея беспроводной синхронизации, т.е. приёмник располагается на подоконнике и по радиоканалу раздаёт близлежащим желающим точное время. Городить дуплексный канал, чтобы время синхронизировалось по запросу, счёл излишним. GPS приёмник сам передаёт синхронизацию с заданным периодом.
В качестве радиоканала применил лежащие без дела узлы дохлой автосигнализации (рабочая частота 433мГц). После обновления сетевого оборудования в родной конторе (провайдерской) освободились свитчи отечественного производства LightCOM S100, управление которого строилось на процессоре PIC18F452, так что дополнительных финансовых расходов не предвиделось.
Для избежания дальнейших вопросов ниже по тексту, устройство с GPS-приёмником и передатчиком синхронизации буду называть передатчиком, а часы с приёмником синхронизации — приёмником.
Исторически привык собирать схемы на монтажных платах при помощи МГТФ.
Так что сторонников ЛУТа прошу не пинать. Выпилив процессор приклеил его к монтажке. Схемы передатчика и 2-х часов не привожу, в коде есть пинауты.
Итак начну с передатчика:
Система функционирования передатчика проста. Принимаем USART портом PICa NMEA предложения и достаем оттуда данные о текущем времени, дате и актуальности этих данных. Как только подходит период синхронизации (у меня 4 минуты) — передаём всё это в эфир. Из особенностей схемы передатчика замечу следущее:
— схема питается от 5 вольт, в то время как брелок хочет 12 Вольт. Пришлось городить диодно-конденсаторный удвоитель напряжения.
— чтобы не делать преобразователь уровней из RS232 в TTL вскрыл GPS модуль и вывел TTL сигнал до выходного RS232 преобразователя.
Вот обратная сторона передатчика:
Особенность радиообмена автосигнализации — необходимость в передаче т.н. преамбуле — меандра определенной длительности для выхода приемных цепей и АРУ в стабильный режим (можно почитать спецификацию на keeloq в интернетах). Итак, передав преамбулу, передаём нужные байты и в конце — байт контрольной суммы для уменьшения вероятности ошибок на приёмной стороне.
Первый приемник синхронизации (часы) сделал на основе индикатора от списанного кассового терминала:
Особенность этих часов, да и любых, использующих внешнюю синхронизацию — отсутствие необходимости в собственных точных часах (RTC), обычно реализуемых на микросхемах с кварцами 32768 или имеющихся на борту большинства современных микроконтроллеров. В принципе таки часы можно делать и на RC-генераторе. Главное чтобы точность не значительно плыла за время периода синхронизации.
Схема часов тривиальна. Индикатор подключен в режиме 4-битной шины данных. На вход int0 PICa приходит выход от приёмника автосигнализации. Для реализации отображения больших цифр на 2-х строчном текстовом индикаторе пришлось использовать клиенто-изменяемые символы в cgram. Дизайн символов честно спер.
Найдя в загашнике лампы ИН-14, которые чуть младше меня, не смог удержаться от создания вторых часов:
Схемотехнически, тут также нет особых изысков, но все же:
— индикация стстическая (благо есть много свободных выводов у PICa да и 155ИД1 хватает).
— пришлось вешать на радиатор греющиеся элементы
умножителя напряжения (180Вольт по спецификации на лампы ИН14)
Еще пару дизайнерских ходов для подчёркивания постапокалиптического сюжета:
— решил упаковать часы в противогаз, для чего пришлось сделать манекен головы из монтажной пены и кусков пенопласта:
— в индикацию добавил глюков (покажу на видео)
— добавил зуммер для создания звуков работающего дозиметра
— глюки и сигнал дозиметра формируются с помощью функции rand() в c18, seed которой формируется с участием атмосферных шумов, берущихся в с выхода приёмника.
— переключение минут сопровождается выключением умножителя и красивом потуханием индикации
7. Другие способы синхронизации времени
Помимо NMEA ntpd поддерживает еще массу более экзотических устройств (см. полный список).
Стоит отметить, в первую очередь, возможность синхронизации часов по радиосигналу. Например, в России работает служба RWM, из Франкфурта в Германии вещает станция DCF77. DCF77 неплохо ловится в европейской части России (у меня в Москве уверенный прием). Подружить DCF77 и ntpd несложно, см. статью. Точность такого решения будет ниже, однако оно дешевле варианта с GPS в несколько раз: нужно только купить антенну, никаких знаний радиотехники здесь не требуется.
Умельцы могут настроить синхронизацию по импульсам радио «Маяк» в конце каждого часа. Длина последнего шестого импульса зависит от текущего часа. Но такой способ будет явно хуже по точности, чем обычная синхронизация времени по Интернету.
Точное время можно получать от оператора сотовой связи (hellt). Такая «фича» называется NITZ. Однако не все операторы и не все GSM-устройства её поддерживают. Я проверил свои GSM-модемы Siemens MC55 и Arduino GPRS-shield на чипе SIM900 — таких AT-команд в этих устройствах нет.
Существуют также готовые NTP-сервера с датчиками GPS или ГЛОНАСС, но они, понятно, стоят гораздо дороже.
3.2 Проверка и коррекция
Для проверки нам потребуется использовать команду 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, сервер опрашивает источник раз в 2 4 = 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-сервера не станет достаточно низким.
Выбранный ntpd сервер отмечен *, в то время как наш GPS-приемник помечен как плохой (x). Offset GPS-приемника составляет около -956 мс. По всей видимости, информация передается о предыдущей секунде. Чтобы скорректировать это отставание необходимо под строкой server 127.127.20.0… добавить строку:
Теперь можно снова сделать GPS предпочитаемым сервером. После перезапуска сервера перед GPS_NMEA(0) должна появиться *.
Синхронизация через GPS/ГЛОНАСС
Если у вас нет подключения к интернету (в экспедиции и тд) синхронизируйте время по сигналам спутников, для этого потребуется USB GPS, я использую модель G-STAR IV BU-353S4. Скачайте программу Сергея Кичатова satTime, распакуйте архив в любую папку и запустите.
Подключенный GPS модуль будет имитировать COM-порт (у меня это COM3) выберите в установках программы нужный порт и скорость 4800. Для запуска нажмите Open. Через некоторое время вы увидите кол-во найденных спутников и разницу между временем вашего ПК и GPS.
Для синхронизации нажмите кнопку Sync. Если нужно чтобы время синхронизировалось автоматически, нажмите Auto Sync.
3. Получение времени от GPS (без PPS)
3.1 Настройка GPS и ntpd
Windows администраторы могут установить порт ntpd для Windows и следовать указаниям в этой статье.
- Подключите GPS-приемник к COM-порту сервера (USB переходник тоже должен сработать).
- Создайте символическую ссылку /dev/gpsX на устройство (например, у меня /dev/cuau0 -> /dev/gps0).
- В ntp.conf добавьте строку
Строка 127.127.20.0 означает, что мы используем локальный источник времени, драйвер 20 (NMEA Generic), устройство /dev/gps0.
Если ваше устройство работает на скорости отличной от 4800 бит/c, необходимо задать скорость с помощью команды mode: 0 — 4800 бит/c (по умолчанию, можно не указывать), 16 — 9600, 32 — 19200 и т.д.
5. Возможные проблемы и отладка
Встроенная программа
Для синхронизации времени встроенными средствами Windows 10 из командной строки, наберите: w32tm /resync , так вы сможете (в ручном режиме) синхронизировать время, но только когда компьютер подключен к интернету.
Читайте также: