Страница 314 из 326
Re: Arduino Mega Server
Добавлено: Чт окт 17, 2019 11:41 am
serghei
Вопрос намного интереснее и шире.В идеальном состоянии , это когда все рутера и свичи с контроллерами сидят на гарантированном питании , синхронизации по сети достаточно как она реализована в дистрибутиве. Хотя год назад была проблема с ними , когда дефолтный сервер времени упал.
Чтобы перевести на железные часы , надо код перекомпилировать и залить заново. ESP32 умеет обновляться по воздуху , но опять же руками.
Так что если АМС занимается серьёзными делами , желательно всё таки работать от часов. Во всяком случае батарейки на 3 года хватит. Корректировать время можно и руками , хотя бы раз в месяц. Как это автоматизировать я не знаю.
Re: Arduino Mega Server
Добавлено: Чт окт 17, 2019 8:19 pm
Loriot
nick7zmail, да, вы отписывались когда-то по поводу использования rtcSync(), я именно так и попытался отредактировать код.
Может, я не совсем корректно выразился: я планирую использовать AMS, в составе которого есть аппаратные часы реального времени на основе DS3231(макет собираю с DS1307, но не важно), подключение к интернету есть (Ethernet). В процессе работы синхронизируем все часы (системные и те, что на основе DS1307) с серверами в Интернет, а если сеть недоступна (допустим, аварийный режим), то начинаем синхронизировать время в контроллере (системное) с модулем RTC (на основе DS1307), как только появляется сеть — переходим опять на синхронизацию через Интернет. Неужели никто так не делал?
Re: Arduino Mega Server
Добавлено: Пт окт 18, 2019 6:58 am
eGorka
Если есть нормальные(DS3231) часы, то и смысл синхронизации через Интернет пропадает, разве что раз в год.
Re: Arduino Mega Server
Добавлено: Пт окт 18, 2019 7:06 am
nick7zmail
Loriot писал(а): Чт окт 17, 2019 8:19 pm
nick7zmail, да, вы отписывались когда-то по поводу использования rtcSync(), я именно так и попытался отредактировать код.
Может, я не совсем корректно выразился: я планирую использовать AMS, в составе которого есть аппаратные часы реального времени на основе DS3231(макет собираю с DS1307, но не важно), подключение к интернету есть (Ethernet). В процессе работы синхронизируем все часы (системные и те, что на основе DS1307) с серверами в Интернет, а если сеть недоступна (допустим, аварийный режим), то начинаем синхронизировать время в контроллере (системное) с модулем RTC (на основе DS1307), как только появляется сеть — переходим опять на синхронизацию через Интернет. Неужели никто так не делал?
ой ой...зачем такие грабли? Оо
У меня сейчас нет кода под рукой, не могу глянуть...но если мне память не изменяет - существует только время на контроллере (системное, как вы говорите). Оно либо берется с инета, либо берется с rtc модуля, либо выставляется в 00:00:00 01/01/1970 если нет ни того не другого. Т.е. если подключена библиотека rtc - оно в любом случае будет браться с rtc. В наших возможностях только время от времени синхронизировать rtc с инетом, если он есть.
А так как вы хотите сделать - это во первых надо покапаться в библиотеке rtc, во вторых иметь динамическую загрузку библиотек, что, если я не ошибаюсь, arduino IDE не поддерживает.
Re: Arduino Mega Server
Добавлено: Пн окт 21, 2019 10:01 pm
Loriot
Доброго времени суток! У меня опять вопросы по синхронизации внутренних (системных) часов с часами интернета и внешних (аппаратных) часов реального времени. Есть вот такой код:
Arduino Mega Server
version 0.16
...
#define RTC_FEATURE
#define NTP_FEATURE
...
byte timeProvider = TIME_RTC;
...
void setup() {
...
rtcSync();
}
void loop() {
...
if (cycle5m) {
rtcSync();
}
...
}
-----------------------------------------------------
void rtcSync() {
setSyncProvider(getNtpTime);
Serialprint("...getNtpTime... \n");
if (timeStatus() != timeNotSet) {
Serialprint("...set!... \n");
time_t t = getNtpTime();
RTC.set(t);
setSyncProvider(RTC.get);
}
}
Я ввел вызов функции rtcSync() один раз в setup() и циклический в loop(). Вот результаты наблюдений, как ведет себя программа на реальном железе (на макете):
1. При включении питания и отсутствии соединения Ethernet, время стартует с 00:00.
2. Если выключить питание, восстановить соединение Ethernet, включить питание, то время стартует с правильного текущего значения.
Что в программе я делаю не так? rtcSync() я не менял, она в исходном виде. Логически не могу понять строку:
timeStatus() != timeNotSet
Когда системное время не синхронизировано или установлено, почему то считываем время интернета и записываем в аппаратные часы. Почему время в аппаратных часах не сохраняется при выключении и повторной подаче питания? С батарейкой всё норм.
Re: Arduino Mega Server
Добавлено: Вт окт 22, 2019 10:17 am
nick7zmail
Loriot писал(а): Пн окт 21, 2019 10:01 pmПочему время в аппаратных часах не сохраняется при выключении и повторной подаче питания? С батарейкой всё норм.
Хороший вопрос.
Варианта 2.
1) софт (неправильно подключена или используется библиотека)
2) хардварная неисправность (неверное подключение или заводской брак платы)
Рекомендую залить пару простеньких скетчей из экзамплов к библиотеке ртс, проверить работают ли они и не сбрасываются ли...потом только продолжать эксперименты с АМС.
Re: Arduino Mega Server
Добавлено: Вт окт 22, 2019 10:38 am
serghei
Первоначальная синхронизация через сериал командер. В дальнейшем в любое время вручную ( нажать одну кнопочку). С двумя модулями проблем не было. От встроенной батарейки работают третий год.
Re: Arduino Mega Server
Добавлено: Вт окт 22, 2019 9:14 pm
Loriot
Сейчас проверил модуль RTC (DS1307) отдельно на arduino uno, простенький скетч вывода времени - время идет правильное, осталось записанным в модуль в ходе моих вчерашних экспериментов. Установил модуль обратно в AMS с отключенным Ethernet кабелем - время стартует с 00:00. Установил обратно в uno cо скетчем вывода времени - действительно время идет, но обнулилось. Видно, так как я использую функцию rtcSync() - неправильно или содержимое функции некорректное.
Сериал коммандер когда-то использовал - синхронизирует неверно (точно не помню, что именно, кажется ошибка на несколько часов), при загрузке htm файлов - запись происходит с многочисленными ошибками, поэтому коммандер больше не использую, только карт-ридер.
UPD. Если в rtcSync() заменить две строки:
time_t t = getNtpTime();
RTC.set(t);
на одну строку:
RTC.set(now());
то, кажется, всё работает как положено! Буду тестировать дальше.
Re: Arduino Mega Server
Добавлено: Вс дек 29, 2019 10:22 am
alexsis_76
Здравствуйте друзья!!!
Поздравляю с наступающим Новым Годом!!!)))
Re: Arduino Mega Server
Добавлено: Вс дек 29, 2019 10:55 am
eGorka
alexsis_76 писал(а): Вс дек 29, 2019 10:22 am
Здравствуйте друзья!!!
Поздравляю с наступающим Новым Годом!!!)))
Взаимно!
Всего, чего хочется, да побольше!