реклама на сайте
подробности

 
 
> Как реализовать точное время?, В сети из AVR с числом хопов не менее 4-х
Дон Амброзио
сообщение Mar 7 2008, 14:47
Сообщение #1


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Имеется сеть девайсов. Конфигурация: иерархическая звезда. Пакет чтобы дойти до девайса самого нижнего уровня делает 4 хопа. Часы реального времени находяться в корневом узле иерархии. Время доставки пакета из коревого узла в узел, находящийся на самом нижнем уровне иерархии сосавляет от 2 до 30 секунд (в зависимости от загруженности сети)

Вопрос: как обеспечить , чтобы локальные часы (реализованные на базе таймера ATmega) на всех девайсах расходились друг относительно друга не более, чем на 0,5 Сек ?


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Mar 7 2008, 15:10
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Дон Амброзио @ Mar 7 2008, 16:47) *
Вопрос: как обеспечить , чтобы локальные часы (реализованные на базе таймера ATmega) на всех девайсах расходились друг относительно друга не более, чем на 0,5 Сек ?

Можно пойти путем RTCP (real-time control protocol):
Завести два таймера во всех устройствах сети, один для RTC, второй - системный (независимый).
Системный таймер не привязан к реальному времени, но тикает точно (скажем с интервалом 1ms).

Далее пусть есть некий Хост (X) на котором задано точное реальное время, и Slave (S) RTC которого надо синхронизировать с Х.

Процедуру синхронизации можно сделать так:
1. S посылает синхропакет с показаниями своего системного таймера.
2. X отправляет этот пакет обратно, добавив к нему показания своего системного таймера и своего RTC.
3. S получает пакет от X, вычисляет Round-trip-delay, но основе текущего значения системного таймера и данных своего системного таймера в пришедшем пакете.

4. S делит round-trip-delay пополам, прибавляет получившееся число к значению RTC от Host'a и записывает в свой RTC.

5. S шлет к X принятый пакет, добавляя в него показания своего RTC и системного таймера.
6. X вычисляет Round-trip-delay на основе показаний своего системного таймера, прибавляет 1/2 от этого числа к показаниям RTC от S и если ошибка будет в допустимых пределах, уведомляет S о том, что синхронизация прошла успешно и расчитанную ошибку на своей стороне.

На этом процедура синхронизации заканчивается.

И так раз в сутки-час-минуту, чем чаще будете синхронизироваться тем меньше будет ошибка.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 7 2008, 17:46
Сообщение #3


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(defunct @ Mar 7 2008, 18:10) *
посылает синхропакет с показаниями своего системного таймера.

Только не понятно зачем гонять "туда и обратно" значение своего системного таймера когда его можно просто запомнить "у себя"? Или это значение просто служит уникальным ID пакета?

Потом находить время следования пакета путём деления пополам "времени одного оборота" не корректно... У меня пакет "туда" может добираться 2 сек, а "обратно" - 30 сек (или наоборот)..

Потом у меня слейвов более 200 штук (на самом нижнем уровне иерархии). Так что хост "захлебнётся" от кучи запросов синхронизации от слэйвов


Мне не телесистемах предложили такие варианты с использованием счётчика времени транспорта пакета (как счётчик времени жизни в интернетовских пакетах). Проблемно сделать.. Потому что во-первых, нужно считать как время отстоя пакета в озу так и время переползания из озу одного контроллера в озу другого.. А во вторых, надо в пакете предусматривать соответсвующее поле для хранения времени транспорта... А если измениться это поле, то надо заново пересчитывать CRC.. Кроче целая куча проблем


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 07:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016