2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

AVR Lab устройства на микроконтроллерах AVR

Синхронизация времени с NTP сервером через GSM модем

Суть получения времени с NTP сервера сводится к посылки на него пустого(любого) UDP пакета. В ответ удаленный сервер вернет количество секунд, начиная с 1 января 1900года. Реализация отправки пакета на GSM модуле SIM сводится к нескольким этапам. Вначале необходимо зарегистрироваться в GPRS сети АТ командой, далее открыть соединение с удаленным сервером, затем послать сообщение, принять данные о времени и закрыть соединение. Полученные данные(четыре байта) необходимо преобразовать в формат хотя бы ЧЧ/ММ/СС, хотелось бы и дни и месяцы с годами определять, но мне достаточно знать часы, минуты и секунды. Время полученное с сервера пишем прямо в часы реального времени, которые есть в том же GSM модуле.

АТ команды работы GPRS в порядке их работы:

1)AT+CGATT=1 — команда регистрации в сети GPRS. Вернет ОК в случае успешной регистрации.
Реализующий её макрос:

Константы необходимые макросу:

Аналогично вычисляются остальные настройки.

3) Далее необходимо указать в каком виде будет вводится имя сервера:
AT+CDNSORIP=1-доменное имя сервера.
AT+CDNSORIP=0- имя сервера в виде IP адреса.
Будем использовать AT+CDNSORIP=1 так как IP адреса могут меняться.

Константа для макроса:

4) Открываем соединение.
AT+CIPSTART=”mode”,”domain name”,”port”
Здесь mode тип нашего протокола TCP либо UDP. NTP сервер поддержует UDP протокол.
domain name – адрес НТП сервера. Вот список известных мне НТП серверов:
ntp1.vniiftri.ru
ntp1.vniiftri.ru

port – порт по которому хотим послать запрос. Здесь я наткнулся на проблему. В описания везде указуют порт 123, но по нему ответ не приходит. Отвечает порт 37. Поэтому не удивляйтесь, что у меня не стандартный порт 123 а порт 37(!). Если Ты сможешь разобраться в этой заморочке, расскажи, я писал в несколько фирм, но некто мне не дал четкого ответа. Вообще NTP протокол разный, есть старые версии и есть более новые, вот по 37 порту идет старая версия протокола, вроде бы по 123 порту другой формат протокола, но при попытке послать пустой UDP пакет на 123 порт, в ответ нечего не приходит((. Поэтому я пользуюсь 37.

Команду открытия соединения реализуют два макроса:

Длина строки с НТП именем сервера также хранится в EEPROM и вычисляется аналогично настройкам GPRS.

Следует сказать, что у Нас два НТП сервера и в случае не удачи с первым можно попробовать со вторым.

После всех настроек можно попробовать коннект.

5) Прежде всего регистрируемся в сети GPRS командой AT+CGATT.

В последних трех строках Мы пробуем открыть соединение с NTP сервером по протоколу UDP на 37 порт.

6)Теперь если соединение удастся Нам вернется «0», это ОК (так как мы отключили текстовый информационный ответ от модуля командой ATV=0).
Проверяем ответ от модуля.

Далее если сервер готов к обмену данными он возвращает «8», это CONNECT OK

Если соединение не получится вернется:
4 – ERROR обычно этот ответ говорит о неверном адресе, порте и протоколе.
3 или 9 возвращается, если сервер занят.

Проверяем ответ от сервера.

Если все нормально попробуем послать UDP пакет.
7) Для передачи сообщений удаленному серверу существует команда

Реализуем её макросом

После ввода команды нужно дождаться приглашения для ввода сообщения.
Это знак > .

Чтобы получит овеет от NTP сервера необходимо отправить пустой UDP пакет.

usart0_write(0x1A); //Отправляем пустое сообщение.

Читайте так же:
Регулировка привода переключения передач кпп

В ответ от удаленного сервера могут вернуться следующие сообщения:

SEND OK -сообщение отправлено(но может не доставлено UDP же);
ERROR – соединение не установлено или отключено;
SEND FAIL – передача сообщения не прошла.

Причем эти сообщения будут в текстовом виде, в независимости от формата ответа модема (ATV=1 или ATV=0).

Проверяем ответ от сервера.

Проверка ответа реализована проверкой символа не встречающихся в этих сообщениях
SEND OK
SEND FAIL
ERROR

После получение подтверждения об отправке сообщения необходимо дождаться ответа от NTP сервера. Ответ прейдет четырьмя байтами, это количество секунд, начиная от 1 января 1900 года. Может случится что ответ будет приходит в течении секунды, может в течении часа, а может и вообще не прейти, так как используется UDP протокол, который не гарантирует доставку сообщения.

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

8) Получаем время от сервера.

Теперь как ответ получен в виде четырех байт, его необходимо расшифровать. Я не заморачивался с вычислением года, месяца и дня. Достаточно занести эти настройки в RTC и периодически обновлять час, минуту и секунду RTC.

9) Для преобразования времени к формату ЧЧ/ММ/СС нужно целочисленно разделить полученный код на 86400. Это количество секунд в сутках, далее целочислено умножить этот ответ на 86400 и вычисть из полученного кода полученный ответ. В результате проделанной операции мы получим остаток секунд от полуночи, а далее вычисляем минуты и часы.

В переменных isec, ihours и imin находится время прямом формате.
Для того чтобы занести время в RTC модуля необходимо преобразовать его в BCD формат. Для чего я написал функцию делающее это преобразование BCDFormat(uint8_t hex) и обратное преобразование HEXFormat(uint8_t bcd). Я также прилагаю файл BCD.h.

В конце программы встречается макрос закрывающий соединение.
CIPSHUT
Вот его описание

Макрос завершает соединение и после его выполнения придет ответ
”0” — SHUT OK — соединение закрыто успешно
или
“4” – ERROR – соединение и не открывалось.

Публичный NTP сервер

Компания «Мобатайм Системс» предоставляет возможность воспользоваться своим сервером NTP для получения точного времени. Для настройки синхронизации различных операционных систем, Вы можете воспользоваться инструкциями, которые доступны по ссылкам ниже на этой странице.

Адрес сервера: ntp.mobatime.ru

ImageВ последнее время резко возросло количество случаев NTP-вандализма, направленных против публичного сервера Mobatime. Для обеспечения стабильной работы бесплатного сервиса предоставления точного времени мы вынуждены вводить ограничения в отношении тех IP-адресов, которые генерируют запросы к NTP-серверу с аномально высокой частотой.

Доступ к серверу по протоколу NTP (UDP порт 123) предоставляется бесплатно. Мы будем признательны, если Вы сможете разместить на корпоративном, личном сайте, на форуме наш баннер, кнопку или ссылку на сайт Mobatime Systems.

Мы тратим достаточно серьёзные временные и финансовые ресурсы на создание и поддержку работы сети NTP серверов. Если Вам по роду своей деятельности необходимо наличие точного времени, полученного с нескольких серверов, или непродолжительное отсутствие синхронизации критично для производственных процессов, то при помощи этой формы Вы можете зарегистрироваться. В дополнение к синхронизации времени по протоколу NTP с сервером ntp.mobatime.ru, регистрация бесплатно откроет следующие возможности:

  • Получение времени по протоколу NTP с резервных серверов по мере ввода их в работу
  • Получение точного времени со всех серверов по протоколу Time (TCP порт 37)
  • Получение точного времени со всех серверов по протоколу Daytime (TCP порт 13)
  • Получение уведомлений о смене адресов серверов или о проведении регламентных работ, во время которых они могут быть недоступны
  • Консультации по решению проблем, которые могут возникать при настройке синхронизации
Читайте так же:
Как отрегулировать кпп акцент

Мы гарантируем, что Ваши данные, которые будут сообщены нам во время регистрации, не будут переданы третьим лицам. При заполнении полей формы регистрации, пожалуйста, укажите полные и достоверные сведения. Мы будем признательны, если Вы укажете в запросе Ваши фамилию, имя и отчество, контактный телефон, по которому мы сможем связаться с Вами в случае возникновения каких-либо серьёзных проблем в работе сети NTP серверов. Мы хотели бы знать сферу деятельности Вашей компании, её полное наименование. По Вашему желанию, мы можем разместить информацию о Вашей компании на сайте «Мобатайм Системс» в разделе «Наши клиенты». Для предоставления доступа к расширенным возможностям синхронизации, нам необходимо знать IP адреса серверов, которые будут получать точное время. Эти адреса будут внесены в разрешающее правило файрвола. Обращаем Ваше внимание на то, что запросы на регистрацию будут обрабатываться вручную, начиная с середины сентября, и мы оставляем за собой право отказать в регистрации или закрыть доступ без объяснения причин.

Mobatime Systems предоставляет доступ к публичному NTP серверу LTS (Little Time Server). LTS специально разработан для обслуживания больших локальных сетей: производительность сервера достаточна для обслуживания до 50-ти запросов в секунду; сервер конфигурируется по локальной сети (Telnet), широкий диапазон рабочих температур (-20…+60°С, при влажности 5…95%) и возможность подачи питания на сервер по витой паре (Power over Ethernet, IEEE 802.3af) позволяют монтировать сервер в любом помещении; поддержка протоколов NTP v.4, SNTP, TIME, DAYTIME даёт возможность получать время с сервера практически любому оборудованию; высочайшая точность хода (± 0,005 сек./сутки) обеспечивает точным временем локальные сети любого масштаба и территориальной удалённости. Достаточно низкая цена сервера в сумме с высокой производительностью и неприхотливостью делают его отличным выбором по критерию цена/производительность для обеспечения точным временем локальных сетей.

Настройка сервера Windows 2003 на синхронизацию времени с сервером NTP Mobatime

Вся настройка выполняется из командной строки. Последовательность действий следующая:

net time /setsntp:имя_ntp_сервера_mobatime — указали, что Windows будет синхронизироваться с этим сервером NTP

net stop w32time && net start w32time — перезапустили службу времени Windows

w32tm /resync — отправили команду для принудительной синхронизации на локальный компьютер

В ответ должны получить следующее:

Команда синхронизации отправлена на local computer…
Команда выполнена успешно.

Через некоторое время проверяем журнал событий системы. Если все настроено верно, то в журнале будет информационное сообщение от источника W32Time с кодом (ID) 35 и текстом Служба времени выполняет синхронизацию системного времени с источником времени имя_ntp_сервера_mobatime

Если возникли какие-то проблемы, то в журнал будет записана ошибка с кодом (ID) 29 от источника W32Time и текстом NTP-клиент поставщика времени настроен на получение времени из одного или нескольких источников, однако ни один из этих источников недоступен. Попытки подключения к источнику не будут выполняться в течение ХХ мин. NTP-клиент не имеет источника правильного времени. В таком случае, убедитесь, что файрвол не блокирует соединения с NTP-сервером по протоколу UDP порт 123. Проверьте, что имя NTP-сервера Mobatime указано верно. Для этого в командной строке выполните

Читайте так же:
Скутер регулировка пускового обогатителя

net time /querysntp

В ответ будет выведено имя сервера NTP.

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

w32tm /stripchart /computer:имя_компьютера

На экран будет выводиться информация о дельте локального времени и времени на имя_компьютера до прерывания работы при помощи Ctrl+C.

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

Настройка не входящей в домен Windows XP на синхронизацию времени с сервером NTP Mobatime

Настройка WindowsXP, не включённой в домен, выполняется из GUI. Для настройки синхронизации дважды щелкните по часам в трее. Откроется окно свойств даты и времени. Это же окно можно открыть из Пуск — Панель управления — Дата и время. Переключитесь на последнюю вкладку Время Интернета. Обратите внимание на то, что вкладка появится в окне только при подключении к интернету.

Пропишите имя NTP-сервера Mobatime в соответствующем поле и нажмите кнопку Обновить сейчас. Windows проверит доступность сервера NTP и проинформирует об успешной синхронизации времени.

Настройка FreeBSD на синхронизацию времени с сервером NTP Mobatime

Настройка выполняется под рутовой учётной записью.

Для однократной синхронизации можно воспользоваться

ntpdate сервер_NTP_mobatime

Для синхронизации при каждой загрузке FreeBSD пропишите в rc.conf следующее

ntpdate_enable=»YES»

ntpdate_flags=сервер_NTP_mobatime

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

Создайте (если не существует) файл /etc/ntp.conf Включите в него следующую строку

server сервер_NTP_mobatime prefer

Аргумент prefer указывает на предпочтение этого сервера перед остальными, т.к. Мобатайм Системс предоставляет Вам доступ к Master Time Server — серверу NTP, а не к компьютеру с работающим демоном ntpd.

На следующем этапе настройки нужно прописать в rc.conf

ntpd_enable=»YES»

Теперь FreeBSD будет постоянно сверять свои часы с NTP сервером Mobatime.

Делюсь опытом ESP8266 синхронизация времени с NTP сервером. UnixTime и конвертация времени.

Нашел и отладил утилиты синхронизации времени с NTP сервером, конвертации времени из UNIX формата (число секунд с 01.01.1970) в обычный и обратно. Что очень полезно для программирования событий на ESP 8266. Естественно, чтобы использовать их, необходимо, чтобы ESP8266 была подключена к сети с выходом в интернет. До того, как произойдет синхронизация (может не произойти с первого раза), она пытается это делать каждые 10 секунд, после этого — раз в сутки, т.к. есть встроенные часы по таймеру Tcker.h

Также прикладываю утилиты конвертации IP адреса в/из строкового формата.

gerkimuyda
New member
  • #2
enjoynering
Active member
  • #3

стандартные arduino примеры об этом не знают.

Вы бы взяли и рассказали как надо в картинках.

New member
  • #4

стандартные arduino примеры об этом не знают.

Вы бы взяли и рассказали как надо в картинках.

CodeNameHawk
Moderator
  • #5
enjoynering
Active member
  • #6
CodeNameHawk
Moderator
  • #7
Активный участник сообщества
  • #8
enjoynering
Active member
  • #9
Активный участник сообщества
  • #10

Запрос у удаленного NTP всё равно не точен (тем более по примеру в данной теме ), без специальных алго фильтров и сотней опросов, и при единичном запросе его колбасит обычно на +-2 сек.

Зачем вообще зависучей игрушке время?
Напишите в поиске форума "синхронизация" — только по этому слову выпадут десятки тем и скетчей как получить и обработать время по NTP. Каждый, вновь заходящий, без поиска пишет новую тему и новый глюко-скетч, когда в SDK всё строено и вызывается парой команд, да в протоколе WiFi уже есть синхронизация, точность которой и не снилась NTP.

Читайте так же:
Cummins топливный насос регулировка
shuraf
Member
  • #11
Chatlanin
New member
  • #12
Активный участник сообщества
  • #13

А на чем построены графики расхождения кварцев за отсчеты в 0.1 сек от температуры роутера и ESP в мкс ?
Всё в web-свалке, вам надо какую-то опцию включить при сборке проекта (забыл уже, т.к. у меня проектов много, а это было давно) и описать страничку HTML приема отсчетов c отображением в график на javascript и закинуть на диск web ESP. Тогда в любом броузере будет создавать аналогичный график Т.е. в данном случае такой синхронизации хватает для вывода звука на разнесенные колонки и триангуляции на источник звука в пару метров (с учетом скорости ветра)

Для отображения часов обычно ставят GPS и используют стандартный её выход строба секундных отсчетов. Но на Arduino невозможно даже с программным ФАПЧ получить точность внешних событий (изменений на GPIO, хоть по прерыванию) лучше 50 us из-за биений с запретами прерываний в системе.
Если поставите внешний MCU, то с бытовых GPS модулей и программным ФАПЧ сможете синхронизовать только вставку кадров (переключение на рекламу без срыва синхро) в транслируемое аналоговое телевидение и то с биениями.

Серверы времени MobaTime серии DTS

dts

Серверы времени MOBATIME серии DTS — наиболее современное оборудование систем единого времени, разрабатываемое в соответствии с концепцией DTS, предназначенное для эксплуатации в компьютерных сетях. Серверы DTS изготавливаются в различных модификациях, позволяющих реализовать разнообразные функции. Используются для управления вторичными часами системы единого времени и синхронизации разнообразных компьютерных устройств и систем с использованием сетей Ethernet и протоколов NTP и SNTP.

  • Энергетика (генерация, распределение и учёт энергии)
  • Транспорт
  • Банковская сфера и деятельность бирж
  • Телекоммуникации
  • Центры хранения и обработки данных
  • Теле- и радиовещание
Синхронизация PTP-клиентов (PTP Grandmaster)
  • Разъёмы: 1xSFP и 2xRJ45 Ethernet
  • PTP v2 IEEE 1588-2008, PTP v1 не поддерживается
  • Механизм определения задержки: P2P (Peer-to-Peer), E2E (End-to-End)
  • Режим передачи: IPv4, IPv6, Layer2, UDP, Multicast в соответствии с IEEE 1588-2008
  • Master-Slave: только Master (активный или пассивный)
  • Режим: «2-step» или «1 step»
  • Профили: IEEE 1588 приложение J, default profile
Сервер NTP
  • Разъёмы: 1xSFP и 3xRJ45 Ethernet
  • NTP v4 RFC 1305 (совместим с NTP v3)
  • До 10 000 запросов в секунду (суммарно для всех 4-х портов)
Выходы для использования в качестве источника временной и частотной синхронизации
  • 1 выход E1 (разъёмы BNC (RX/TX) и RJ48)
  • 1 выход частоты 10 МГц
  • 1 выход настраиваемый выход частот / синхроимпульсов: 10 МГц, 2048 кГц или 1PPS (RS 422 и токовая петля)
  • 1 выход IRIG-B
  • 2 настраиваемых выхода последовательного интерфейса (RS 232/422/485)
  • 1 выход DCF
Надёжность
  • создание надёжного источника синхронизации
  • работа в режиме «основной / подчинённый» с автоматическим переключением при отказе одного из серверов
Высокая точность
  • в качестве источника внешней синхронизации используются атомные часы ГНСС ГЛОНАСС и GPS
  • для хранения шкалы времени в автономном режиме используются термостатированные кварцевые генераторы или рубидиевый генератор (опция)
Отказоустойчивый режим
Резервирование источников синхронизации
Резервирование выходов синхронизации

Резервирование выходов DTS grandmaster

При подключении серверов оптическим кабелем, основной сервер имеет более низкий стратум NTP, чем подчинённый сервер. Подчинённый сервер работает в пассивном режиме PTP Grandmaster. Выходы частот и синхроимпульсов на обоих серверах всегда работают в обычном режиме. Резервирование выходов файлов последовательного обмена, кода DCF, синхроимпульсов и кода IRIG-B может быть выполнено с применением внешнего блока аварийного переключения.

Читайте так же:
Регулировка клапанов под метан
Резервирование питания
  • 24 VDC, без резервирования
  • 24 VDC + 24 VDC, с резервированием
  • 230 VAC + 24 VDC, с резервированием
  • 230 VAC, без резервирования
Высокая производительность
PTP Grandmaster
Аутентификация ответов NTP
Безопасная и удобная эксплуатация
Информирование об ошибках

Первичные часы, разработанные для использования в среде локальных вычислительных сетей в соответствии с концепцией DTS (Distributed Time System). Сервер может выполнять как синхронизацию с NTP-серверами, расположенными в сети, так и выполнять функции NTP-сервера. В качестве источников внешней синхронизации сервер также может использовать DCF/GPS/ГЛОНАСС приёмник (например, типа УРПТ 4500 или УРПТ 3232).

В качестве первичных часов сервер может обслуживать линию самоустанавливающихся вторичных часов MOBALine (с передачей команд переключения для подсветки часов, программ реле и функцией мирового времени) и/или вторичные часы, подключаемые по интерфейсу RS485 (с передачей команд переключения для подсветки часов). Сервер позволяет производить мониторинг состояния до 31 часов, подключаемых по интерфейсу RS485. Дополнительной возможностью является генерация и отправка последовательных файлов обмена в линии, подключаемой по интерфейсу RS485 или RS232. Вместо линии MOBALine возможно использование линии импульсных часов.

Сервер может служить в локальной сети NTP-сервером и выполнять рассылку таблицы часовых поясов для вторичных NTP-часов, используя групповую (Multicast) передачу пакетов NTP. В качестве "главных" первичных часов сервер способен выполнять синхронизацию подчиненных часовых станций и прочих оконечных устройств с помощью синтезированного DCF-кода или генерирования синхроимпульсов. Наличие четырёх релейных входов ошибок позволяет реализовать контроль подключенных устройств.

Для информирования о возникших ошибках в работе сервера можно использовать отправку E-mail сообщений и SNMP-откликов. Применение протокола SNMP позволяет как опрашивать сервер, так и производить настройку параметров и управление сервером. Сервер может быть подключен в качестве подчинённых первичных часов к модулю CAN станции MTC, позволяющему синхронизировать и контролировать до 16 подчинённых устройств.

Технические данные

, номинальное 15 В

Серверы NTP верхнего уровня, используются для хранения шкалы времени системы в соответствии с концепцией DTS (Distributed Time System). Сервер может выполнять как синхронизацию с NTP-серверами, расположенными в сети, так и выполнять функции NTP-сервера. В качестве источников внешней синхронизации сервер также может использовать DCF/GPS/ГЛОНАСС приёмник (например, типа УРПТ 4500 или УРПТ 3232), код AFNOR-A/C или IRIG-B2.

Сервер оборудован двумя независимыми выходами IRIG/AFNOR (каждый из выходов может быть реализован как аналоговый или цифровой), двумя независимыми интерфейсами для передачи файлов последовательного обмена (программирование при помощи файлов сценариев) и двумя выходами синхроимпульсов (импульсы / частота / код DCF). Сервер может использоваться в качестве основного источника времени для других первичных часов или прочего оборудования. Для контроля внешнего оборудования может использоваться один вход ошибки. Для контроля работоспособности могут использоваться e-mail сообщения и трапы (отклики) SNMP. Управление и настройка параметров сервера может производиться с использованием протокола SNMP.

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

Технические данные

dts

© 2004-2021 Все права защищены
ООО «НЭЛТ ДИСТРИБЬЮЦИЯ» , тел +7 (495) 796-92-14

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector