Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
|
Запаздывание получаемых данных при работе с LTR114Доброго времени суток. Разрабатываю систему сбора данных на основе LTR114. Посоветуйте, как побороть проблему с запаздыванием данных. |
|||
|
||||
|
|
Re: Запаздывание получаемых данных при работе с LTR114Здравствуйте. А сам исходный пример при этом у Вас работает правильно? Вообще запаздывание данных может быть связано с тем, что Вы действительно выкачиваете данные из LTR114 медленнее, чем модуль их передает. Например, это может происходить, если Вы выкачиваете данные по какому-то программному таймеру, то программный таймер не обеспечивает строгость интервала и имеет какую-то задержку. Вам нужно построить сбор так, чтобы: Есть как минимум два подхода: Так же конечно в любом подходе время обработки и вывода блока данных в Вашей программе должно быть меньше, чем собственно время сбора этого блока, иначе тоже в реальном времени вывода не получится. По поводу LTR114_GetFrame, то данная функция должна вызваться при остановленном сборе данных, т.к. по сути она сама запускает сбор, принимает один кадр и останавливает сбор. |
|||
|
||||
|
|
Re: Запаздывание получаемых данных при работе с LTR114В Recv я передаю буфер, кратный размеру кадра. Также я обрабатываю возвращаемое значение, соответствующее количеству принятых данных. Непонятно, почему возникает ошибка 'неверный номер канала' (или что-то в этом роде). Подскажите, пожалуйста, на сколько быстро работает GetFram? Например, при старте сбора данных выполняется 13 калибровочных циклов (устанавливаю режим калибровки INIT), что довольно долго при низких частотах дискретизации. Возможно, простейшим решением моей проблемы было бы вызывать GetFrame с заданной периодичностью, но есть ли возможность, что я смогу делать это раз в секунду? |
|||
|
||||
|
|
Re: Запаздывание получаемых данных при работе с LTR114Cherny пишет:
Предположительно потому, что Recv() может вернуть значение меньше размера буфера, если за заданное время не прейдет нужное количество слов, при этом возвращенное значение не обязательно кратно размеру кадра (в этом случае часть кадра может прийти в конце одного Recv(), а конец - в начале следующего Recv(), тогда если этот блок как есть передать в ProcessData(), то она выругается на второй блок, т.к. она ожидает, что данные начинаются с начала кадра. Вам нужно тогда это обеспечивать самому (склеивать разорванные кадры). По поводу GetFrame(), то если Вам не нужен потоковый синхронный сбор, а нужно просто текущее значение (т.е. Вас не волнует что между двумя измерениями время будет не строго ровным), то его можно использовать. По крайней мере раз в секунду должно получится (по карайней мере если сам сбор кадра при заданной частоте не занимает время близкое к 1с). Внутренняя калибровка модуля выполняется в режиме INIT только один раз при первом старте и при последующих выполнятся не должна (так можно этот первый раз сделать явно соответствующей функцией) |
|||
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4
Многоканальный телефон:+7 (495) 785-95-25
Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск