Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
Нет синхронизации при опросеLTR114 + LTR27 (эксперимент 2) Привет LTR support! Несинхронный прием с разных модулей. Экспериментируя с модулями LTR114 + LTR27 на этот раз я наконец Генератор дает синусоиду частотой 25Гц которую я опрашиваю с частотй 250 Гц (сигнал одинаков для всех модулей). Опрос модулей происходит единообразно в нитках модулей. У каждого канала сбрасывается время и значение.
И вот что получается: Т.е. не смотря на то, что частоты опроса равны, наблюдается рассинхронизация каналов из разных модулей. Время рассинхронизации равно времени дискретизации (т.е. 4 мсек). Почему это может происходить? Данные в текстовом виде |
|||
|
||||
|
Re: Нет синхронизации при опросеДобрый вечер. А сдвиг этот фиксированный от запуска к запуску, если проводить несколько экспериментов? |
|||
|
||||
|
Re: Нет синхронизации при опросеАлексей L Card пишет:
Никаких различий по поводу смещения кривой LTR27 нет. Алексей L Card пишет:
frame_end_time_i64 получается после функции приема данных:
Остальные настройки LTR114:
|
|||
|
||||
|
Re: Нет синхронизации при опросеНашел в чем было дело. Я для теста сделал замер времени для LTR27 не после LTR27_Recv(), а до вызова (и забыл вернуть назад). Время работы функции LTR27_Recv и было неточностью. Упс. |
|||
|
||||
|
Re: Нет синхронизации при опросеОк. Отлично, что все разрешилось. Правда немного странно, что возможные задержки Windows не влияют на синхронизацию данных разных модулей |
|||
|
||||
|
Re: Нет синхронизации при опросеАлексей L Card пишет:
Вообще же как оказалось я рано обрадовался. Не зря вы спрашивали всегда ли наблюдаеется рассинхронизация. Т.е. в одной записи дейстительно кривые практически совпадают, а в другой записи может получится рассинхронизация аж до 2 мсек. |
|||
|
||||
|
Re: Нет синхронизации при опросеКак возможное объяснение я могу предложить это Конструкция замера времени после считывания
Не может дать точное время на таких частотах (мы говорим про 250Гц опрос). Как я выяснил эта конструкция не выдает микросекунд при замере (только миллисекунды), хотя и оперирует с 64битным числом. А это значит, что по крайней мере в windows XP расхождение времени двух параметров из разных потоков при замере времени таким способом может достать максимум двух миллисекунд, а в благоприятном случае время может совпадать. |
|||
|
||||
|
Re: Нет синхронизации при опросеТут может быть достаточно много источников ошибки Хотя в общем конечно получать привязку точностью в мс средствами Windows, которая не является ОС реального времени, может быть достаточно проблематично... |
|||
|
||||
|
Re: Нет синхронизации при опросеМожно еще спросить насчет недочитывания из буфера. Может ли недочитывание произойти у LTR27? Тогда при синхронном формировании времен значения LTR27 будут отставать от другого модуля. Вероятно такое я видел здесь Может быть организовывать после LTR27_Recv проверочный цикл чтения, чтобы быть уверенным, что LTR27_Recv считала все данные? |
|||
|
||||
|
Re: Нет синхронизации при опросеЕсли Вы выполняете прием модуля в своем отдельном потоке и между Recv нет длительных операций, то если из-за задержки потока Вы не вычитаете кадр, то при следующем чтении Вы его прочитаете быстрее, т.к. он уже в буфере. Т.е. тогда бы была бы смещена одна точка по интервалу, затем шли бы точки с меньшим интервалом до выравнивания. Если действительно замер времени делается для каждой точки и при построении графика координата по x каждой точки учитывается своя явно измеренная (больно уж подозрительно точная эквидистантность точек у Вас одного графика по оси x для измерения времени в Windows...) |
|||
|
||||
|
Re: Нет синхронизации при опросеПроблема временной маркировки на большой частоте опроса хорошо решается путем увеличения интервала считывая времени из системы. Буквально это делается так - у каждого тега (который на запись) создается большой буфер для значений которые будут записываются на диск. Временная маркировка буфера происходит только в момент его создания, т.е. редко. |
|||
|
||||
|
Re: Нет синхронизации при опросеТ.е. если я правильно понял, Вы делаете замер времени один раз на много кадров, а время приема остальных кадров из серии рассчитывается исходя из частоты опроса кадров. При этом, если я правильно понимаю, сдвиг по времени между сигналами разных модулей как раз и появляется в момент измерения этого времени и сохраняется до следующего измерения. Если это так и использование более точного таймера на это не влияет, то скорее всего это связано с задержками самой Windows, т.к. Windows может передать управление программе, вызвавшей Recv несколько позже, чем действительно прием завершится, и эта задержка в ОС общего назначения не нормируется и может быть случайной. |
|||
|
||||
|
Re: Нет синхронизации при опросеБывает что LTR27_Recv возращает 0. Как это обрабатывать, что происходит с данными? Может быть как раз при этом и происходит недочитывание? |
|||
|
||||
|
Re: Нет синхронизации при опросеТут та же самая логика как и при других значениях. Если функция возвращает 0, то это значит что таймаут истек раньше, чем данные появились в буфере, и соответственно они будут прочитаны при следующем чтении. Это может быть из-за задержек передачи в Windows и крейте. Если запас таймаута меньше возможных задержек, то такое может быть. |
|||
|
||||
|
Re: Нет синхронизации при опросеПродолжение о совместной записи модулей LTR114 и LTR27 (проблема рассинхронизации и как её убрать) Кратко напомню о чем речь: Как я выяснил главная проблема - в получении одинаковой временной маркировки получаемых данных как на LTR27, так и на LTR114. Мы допустим сделали нитки разных модулей и вызываем функцию LTRxx_Recv. Но эти функции работают по разному у разных модулей. LTR27: LTR114: При записие двух модулей результат - синусоиды одного сигнала записанные разными модулями (LTR114/LTR27) не совпадают на графике, LTR27 отстает в среднем на 45 миллисекунд, но временами и больше. https://i.ibb.co/C1SpDN6/image.jpg Нужно заметить, что если работают все одинаковые модули LTR27, то проблема много меньше. Просто ошибка одинакова для всех каналов. После многих тестов, я понял, что есть только два выхода, чтобы оцифрованные сигналы с этих разных модулей маркировались бы правильно по времени. Первый - это когда LTRxx_Recv будет возвращать массив реальных времен для каждого считанного канала. Возможно это когда то реализуют в будущем. Второй вариант реальный - у LTR27 нужно сократить паузы после оцифровки. Т.е. максимально приблизить замер времени после LTRxx_Recv к моменту оцифровки. Этого можно достигнуть увеличив частоту дискретизации минимум на порядок. Иначе говоря, для записи с LTR27 с частотой 10 Гц я задаю опрос модулей LTR27 в 200 Герц. В настойках моего OPC сервера я указываю, что во время записи записывать только каждое 20-е измерение. Если так же записывать и LTR114, то результат будут еще идеальнее. Испробовано для длинных сериях. Результат - отсутствие расхождения кривых разных модулей - идеальная запись! |
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск