Тема: Все по 2000
Показать сообщение отдельно
Сенсей
 
Регистрация: 16.01.2007
Адрес: Москва
Сообщения: 752
Репутация: 264 Spirit репутация 250: уже авторитет
По умолчанию

Цитата:
Сообщение от Casper Посмотреть сообщение
А я вообще не представляю как быть иначе? Откуда система узнает, на каком из брелоков правильное время??? Если она начнет сама брелок выббирать - вот и будет жопа полная.
Пример реализации:

1. Делаем в брелке таймер, считающий секунды с момента ручной установки времени на этом брелке. При инициализации брелка (замена батарейки) по умолчанию таймер выставляется в -1 и не изменяется, пока время вручную не выставили или не пришла синхро-посылка с базы (см. пункт 4).

2. В базе делаем регистр, где изначально запоминается значение брелочного таймера, а затем продолжается счет секунд

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

4. В посылке "всё спокойно", если время базы было хоть раз синхронизировано с брелком, передаем также текущее время и значение регистра-счетчика. Брелок, получив посылку, сравнивает счетчик со своим и если пришедшее значение меньше местного, обновляет свое время.

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