Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
|
||||
|
Сбор данных с LTR27Здравствуйте! ПО ИС верхнего уровня под Windows работает в цикле с периодом Т=100 мс (возможно увеличить до 200-250 мс). Предполагаемый порядок работы с LTR27: LTR27_Start Вопросы: |
|||
|
||||
|
Re: Сбор данных с LTR27Здравствуйте. С точки зрения Павел Л пишет:
, то это возможно, если использовать механизм синхрометок для синхронизации старта модулей, то разбег между каналами разных модулей будет в пределах периода дискретизации АЦП (для этого крейты должны быть соединены через линии разъема синхронизации SYNC и один быть ведущим, генерирующим сигналы синхронизации для остальных - ведомых). При очень длительной работе, если разбег генераторов крейтов может привести в конце концов к увеличению разбега для разных крейтов больше требуемой точности, то понадобится также синхронизация по секундным меткам. Другой вопрос, что подразумевается под Павел Л пишет:
. Если вопрос привязки отсчетов к абсолютному времени, то аппаратной привязки к времени отсчетов нет в крейте нет, только если использовать программную с некоторыми допущениями. За время начала можно использовать время перед командой для генерации метки СТАРТ всем модулям, то ошибка во времени будет равна времени выполнения команды, что строго говоря для ОС общего назначения как Windows не регламентировано (хотя скорее всего будет находится в нужных пределах в случае если ОС не "притормазит" из-за чего-то). По поводу цикла опроса, то с моей точки зрения более простым и надежным способом с точки зрения цикла опроса будет вместо последовательного опроса модулей создать отдельно поток под каждый модуль, который будет принимать данные от своего модуля, отслеживая момент синхрометки СТАРТ для начала сохранения данных и передавать эти отсчеты в основной поток регистрации (или сохранять в очередь, чтобы основной поток их забрал уже в своем основном цикле). Кроме того, при наличии очереди между потоками можно избежать пропуск данных, если из-за загрузки ОС по какой-то причине таймер основного потока пропустит цикл (если это допустимо), т.к. опять же Windows не ос реального времени и насколько и не может гарантировать, что обработчик таймера будет каждые 100мс при любых условиях (загрузке и т.п.). Выбор между LTR27 и LTR11 все же связан с задачей измерения, а не столько с задачей сбора, и должен исходить из нее. По ценам стоит обратится в офис продаж. |
|||
|
||||
|
Re: Сбор данных с LTR27По погрешности времени |
|||
|
||||
|
Re: Сбор данных с LTR27Без меток времени модули будут запускаться последовательно и соответственно их отсчеты будут сдвинуты. В принципе 100мс достаточно большая погрешность, если в это время уложится время старта всех модулей, то наверное можно использовать и без меток. Можете проверить. В принципе LTR27_Recv() можно и вызывать последовательно из основного потока. Вообще модуль сам выдает данные с заданной частотой и они попадают в очередь уже в ltrd, поэтому если нужное кол-во отсчетов уже принято, то LTR27_Recv() должно выполнится относительно быстро. Другой вопрос, что эти подходы сильно зависят от задержек самой ОС Windows. |
|||
|
||||
|
Re: Сбор данных с LTR27К сожалению, крейтов LTR у нас нет и проверить не могу. Допустим, Что будет если не собирать данные вовремя. Будут ли затираться старые данные новыми, или новые будут отбрасываться? |
|||
|
||||
|
Re: Сбор данных с LTR27Да, после старта модуль начинает пересылать данные в ltrd с частотой, соответствующей настроенной частоте АЦП. Эти данные помещаются в очередь в ltrd. LTR27_Recv() считывает заданное количество слов из начала очереди (если за заданный таймаут так нужного кол-ва слов и не появилось, то возвращает только те слова, что есть в очереди с указанием размера). Timeout = 0 означает использование таймаута по умолчанию для соединения, который можно установить через LTR_SetTimeout(), если один раз после открытия соединения с модулем вы сделаете LTR_SetTimeout с 0, то тогда Timeout=0 будет означать, что функция просто проверит наличие данных в ltrd и вернет от 0 до NSAMPLES слов (в зависимости от того, сколько их в буфере ltrd) |
|||
|
||||
|
Re: Сбор данных с LTR27Здравствуйте Алексей! Будет ли работать этот фрагмент, чтобы опрос 64-х модулей уложить в 100 мс?
|
|||
|
||||
|
Re: Сбор данных с LTR27Во первых для каждого модуля LTR27 должна быть своя структура TLTR27 (т.е. в Recv первый параметр вроде <r27[ i ]). С точки зрения адреса, то в простейшем случае последние нужные отсчеты будут в массиве buff с номерами size - NChan (первый канал первого субмодуля) до size - 1 (второй канал последнего) (далее этот массив из NChan элементов нужно передать в ProcessData()). Но это если LTR27_Recv() всегда будет возвращать размер кратный NChan, что не обязательно (если прием придется в момент когда принята только часть кадра). Поэтому в общем случае нужно еще учитывать, что нужно брать отсчеты начиная с индекса, кратного NChan от начала приема. Чтобы это могло уложится в 100мс нужно, чтобы: Если нужно сохранять данные идущие со строгим периодом, то мне кажется будет проще настроить модуль на частоту 100 Гц и принимать с ненулевым таймаутом по одному кадру (NChan отсчетов), тогда не будет проблем с выравниванием кадром (вы всегда принимаете по одному кадру) и т.п. Будет ли это успевать опять же определяется задержками Windows и в интерфейсе при приеме данных... |
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск