|
|
Синхронизация в LTR-EU
Расскажите поподробнее про принципы синхронизации сбора данных в системе LTR-EU.
Читал документацию, но не понял принцип действия
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Синхронизация в LTR-EU
Попробую описать тезисно принцип синхронизации модулей АЦП в LTR.
- Все данные в LTR-EU от LTR-модулей складываются в единый буфер FIFO в порядке их поступления вместе с синхрометками и в том же порядке эти данные отправляются в компьютер (если режим не автономный)
- Синхрометка - это специальный различимый формат, сигнализирующий о наступлении синхрособытия.
- Независимо поддерживаются два типа синхрометок, возникающих от двух независимых синхрособытий.
- В LTR-EU есть возможность предварительной настройки на несколько синхрособытий:
1) <<Внешняя синхронизация>>: от фронта/спада на одном из входов DIGIN1, DIGIN2 крейта LTR-EU.
2) <<Внутренняя синхронизация>>: программная (через Blackfin LTR-EU), или по периодическим секундным интервалпм (апаратный таймер).
3) <<Внутренняя синхронизация с трансляцией на линии DIGOUT1, DIGOUT2 крейта LTR-EU>>: тоже самое, что <<Внутренняя синхронизация>>,
но с той разницей, что синхрособытие в виде фронта транслируется также наружу на линию DIGOUT1, DIGOUT2, например, для многокрейтовой
синхронизации.
- На верхнем программном уровне LTR-сервер, принимая по интерфейсу поток данных и меток (в том же порядке, в котором он был положен в FIFO LTR-EU),
отделяет синхрометки от данных, условно разбивая поток данных на участки до и после поступления синхрометки, привязывая тем самым данные к времени поступления
синхрометок.
- Точность привязки при таком методе - до 1-го периода сбора данных от самого быстрого модуля LTR, который складывал данные в буфер.
- Собственно принцип синхронизации крейта LTR-EU не требует синхронного запуска потока данных от разных LTR-модулей, в то время как некоторые модули LTR имеют и собственные входы синхронизации в зависимости от своей специфики - это даёт в ряде случаев дополнительные возможности синхронизации на уровне модулей.
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Синхронизация в LTR-EU
Типичный пример применения внешней синхронизации в LTR-EU - исследование вибраций в роторной машине.
На DIGIN1, DIGIN2 подаются импульсные синхросигналы от датчиков оборотов и угла ротора. На АЦП заводятся вибросигналы из разных точек машины. Имеем синхронную многоканальную систему сбора данных с точностью синхронизации до 2,5 мкс (если применён хотя бы одни LTR11 на частоте 400 кГц сбора данных).
|
|
|
Re: Синхронизация в LTR-EU
Приведите, пожалуйста, пример использования внутренней генерации метки СТАРТ модулем LTR42.
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Синхронизация в LTR-EU
Максим. Например, есть два крейта LTR, с которых на верхнем программном уровне мы получаем потоки сэмплов. Эти сэмплы были оцифрованы в каждом из этих крейтов синхронно с генератором данного крейта. У генератора крейта максимальное отклонение частоты может быть порядка 0,005%. Значит, максимальный теоретический разброс между генераторами 0,01%. Относительная начальная задержка получения этих потоков данных тоже неизвестна.
СТОИТ ЗАДАЧА: засинхронизировать эти асинхронные потоки от разных крейтов (между собой). Для решения этой задачи устанавливаем по одному LTR41(42,43) в каждом из этих крейтов, сигнал СТАРТ c одного модуля LTR4x подаём на другой. Программно настраиваем одни из них на режим "внутренней синхронизации" с "трансляцией на выход", а другой - на режим "внешний", тем самым, образуя связку ведущий-ведомый в паре LTR4x. Во время заранее запущенных потоков сбора данных с обоих крейтов программно подаём сигнал внутренней генерации одной метки на ведущий LTR4x. При этом, происходит следующее: ведущий LTR4x посылает сигнал СТАРТ ведомому и одновременно вставляет синхропакет СТАРТ в поток данных своего крейта (до того, как эти данные попадут в буфер), ведомый LTR4x моментально принимает сигнал СТАРТ и тут же вставляет аналогичный синхропакет в поток данных ведомого крейта. Программа верхнего уровня, собирая эти два потока, поймав в этих потоках синхропакеты (т.е. синхрометки), теперь может совместить временные шкалы этих потоков в месте нахождения синхрометок. Точность синхронизации на момент синхронизации будет до периода сбора данных от самого быстрого АЦП в крейте. Долговременный уход будет обусловлен 0,01%-ным относительным разбросом частот генераторов. Для компенсации долговременной разбежки фаз генераторов данную процедуру синхронизации можно повторять, не прекращая потоковый сбор данных.
|
|
|
Re: Синхронизация в LTR-EU
Спасибо, Александр, за пояснения.
Получается для синхронизации сбора данных на одном крейте необходимо:
1. запустить сбор данных с модулей крейта;
2. сгенерировать внутреннюю синхрометку СТАРТ модулем LTR42;
3. читаем сэмплы данных от модулей, и пока не получена синхрометка "отбрасываем";
4. как только получили синхрометку в массивах tmark от модулей - программно анализируем эти массивы и совмещаем по этой синхрометке.
Выходит, что аналогичным образом можно совмещать по метке СЕКУНДА, т.е. принимать массивы данных и совмещать их по меткам СЕКУНДА с одинаковым значением?
|
|
|
Re: Синхронизация в LTR-EU
Забыл включить вопрос в предыдущее сообщение.
В документации по LTR42 в п. 5.5 "Чтение значения счетчиков меток" написано, что "При выполнении функции LTR42_Open() происходит обнуление счетчиков как секундных меток, так и меток СТАРТ".
При остановке генерации меток LTR42_StopSecondMark(), последующей остановке модуля функцией LTR42_Close() и запуске через некоторое время LTR42_Open();LTR42_StartSecondMark() c ltr_server принимаются предыдущие инкрементированные метки.
Т.е. метки не обнуляются. Только если закрыть ltr_server и открыть снова, то они естественно обнулятся (версия ltr_server 1.5.3.0)
|
|
|
Re: Синхронизация в LTR-EU
Что необходимо сделать, чтобы синхрометки обнулились при след. выполнении функции LTR42_Open()?
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Синхронизация в LTR-EU
Максим, кажется, Вы правильно меня поняли. При ожидании самой первой пары синхрометок (после запуска системы) данные можно отбрасывать до момента приёма синхрометок, если Вам предыстория не нужна.
В системе LTR имеется две независимых синхрометки с условным названием "метка старт" и "секундная метка", которые можно использовать параллельно для синхронизации от двух независимых событий. Эти две метки программно различимы, кроме того, что немаловажно, LTR-сервер вставляет в формат транслируемой метки её порядковый номер, что удобно для периодическом характере синхронизации и для контроля отсутствия потерь при приёме синхрометок.
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Синхронизация в LTR-EU
Для периодической синхронизации нескольких крейтов LTR между собой удобно использовать режим не программного запуска синхрометки на ведущем LTR4x, а режим автоматического периодического запуска с секундной метки с секундным интервалом. Либо вообще внешнюю синхронизацию на всех LTR4x можно использовать, если есть 1 или 2 внешних источников синхронизации, например синхроcигналы от GPS.
|
|
|
Re: Синхронизация в LTR-EU
"режим автоматического периодического запуска с секундной метки с секундным интервалом"
Пытаюсь понять как это реализовать:
1. Открываем каналы связи с модулями крейта, конфигурируем модули, задаем частоту дискретизации АЦП необходимую для получения сэмплов нужного нам размера, но старт сбора данных не запускаем.
2. Запускаем генерацию синхрометок СЕКУНДА на LTR4x.
3. Запускаем проверку поля _ltr42api.TLTR42.Channel.tstamp (в котором обновляются синхрометки генерируемые модулем LTR42) в обработчике таймера раз в 1000 мс.
4. Как только значение СЕКУНДА в поле инкрементировалось - запускаем сбор данных с модулей, получаем сэмпл необходимого нам размера за секунду. Сразу после получения останавливаем сбор данных, но каналы связи не закрываем.
Или может я не правильно понял. Поправьте, пожалуйста.
|
|
- Сотрудник "Л Кард"
- Здесь с 18.04.2014
- Сообщений: 810
|
Re: Синхронизация в LTR-EU
Счетчики меток обнуляются при установлении связи между крейтом и сервером, т.е. для USB - при подключении крейта к компьютеру, а для TCP/IP - при установлении соединения с крейтом.
В пределах жизни одного соединения с крейтом нумерация сплошная. This behavior is by design
Можно просто учитывать и вычитать номер первой метки, полученной приложением.
|
|
|
Re: Синхронизация в LTR-EU
Спасибо, Александр Е.
При старте генерации меток записываю значение метки до старта. Затем вычитаю это значение из полученных.
Просто думал, что-то неправильно делаю...
|
|
|
Re: Синхронизация в LTR-EU
Поправлюсь.
"3. Запускаем проверку поля _ltr42api.TLTR42.Channel.tstamp (в котором обновляются синхрометки генерируемые модулем LTR42) в обработчике таймера раз в 1000 мс."
Оказывается это поле не обновляется, пока не вызвать какую-либо из функций, обращающейся к модулю LTR4x.
Видимо для мониторинга инкрементации меток лучше выделить канал, например на модуле LTR11 и проверять метки принятые с него.
|
|
- Сотрудник "Л Кард"
- Здесь с 18.04.2014
- Сообщений: 810
|
Re: Синхронизация в LTR-EU
Конечно, tstamp обновляется только при обработке каких-нибудь принятых данных, ведь DLL просто экспортирует набор функций, там нет никакого фонового потока или чего-то подобного.
Если Вам нужно слушать метки до начала сбора полезных данных, то я бы сделал в читающем потоке пуск заранее и фильтрацию (до сих пор данные выбрасывать, от сих до сих - отдавать на верхний уровень приложения или что-то в этом роде).
|
|
- Инженер-электронщик
- Откуда: "Л Кард"
- Здесь с 21.04.2014
- Сообщений: 4,597
|
Re: Синхронизация в LTR-EU
В развитие темы. Технически возможна "прокачка" крейтов LTR-EU-8/16 с установкой в них опорного генератора со стабильностью частоты 2,5 ppm (отклонение частоты не более 0,00025%) с модулем ФАПЧ, позволяющим транслировать опорную частоту от одного крейта LTR к остальным через 50-омные коаксиальные кабели с разъёмами BNC с применением разветвителей 50 Ом. Практически, это даст возможность однократно засинхронизировать потоки сбора данных по синхрометкам, а далее, синхронность между крейтами будет поддержана на аппаратном уровне.
Проблема только в одном: неизвестен спрос на данное решение. При заинтересованности прошу высказываться!
|