Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Покадровая синхронизация

Вы не вошли.

 Поиск | Регистрация | Вход 

Алексей из Тулы
16.12.2015 22:18:23
#1

Гость

Покадровая синхронизация

Доброго времени суток.
Обнаружено странное поведение модуля E14-440 (ревизия Е) в режиме покадровой синхронизации.
После вызова библиотечной функции ADC_START() при чтении через ReadData в overlapped-режиме (строго как в примерах на сопутствующем диске) модуль "подвисает" ровно на 24 секунды. После чего переходит в нормальный режим и начинает корректно снимать сигналы с каналов по "ступеньке" на TRIG.
Размер буфера ввода на это не влияет (при задании размера буфера меньше 0x40 программа ожидаемо падает), ровные 24 секунды и при размере 0x40 и при 1024 * 1024.
Что посоветуете делать, дабы избежать подобных неприятностей?
Заранее спасибо за ответ.

17.12.2015 18:43:54
#2

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,486

Re: Покадровая синхронизация

1. Я правильно понимаю, что на 24 секунды подвисает именно overlappedнутая функция ReadData ()? И при этом не возвращает ошибку?
2. Какая версия библиотеки Lusbapi?

17.12.2015 21:43:43
#3

Участник
Здесь с 17.12.2015
Сообщений: 12

Re: Покадровая синхронизация

Вы правильно понимаете.
Версия библиотеки 3.2. Ошибок никаких нет. Мы просто очень долго ждем. Ждем именно первый кадр. Все последующие кадры идут без задержки.

18.12.2015 13:58:38
#4

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,486

Re: Покадровая синхронизация

1. Сама по себе overlappedнутая функция ReadData() только выставляет системе асинхронный запрос на сбор необходимого кол-ва данных и тут же завершает своё выполнение. В таком режиме функция ReadData() не может 'подвиснуть' на 24 сек.


2. А какая частота сбора данных: AdcRate, InterKadrDelay и KadrRate?


3.

... при задании размера буфера меньше 0x40 программа ожидаемо падает ...

Наверное имеется в виду поле AdcFifoLength, задающее размер FIFO буфера АЦП в DSP модуля? Если это так, то функция SET_ADC_PARS() не позволяет устанавливать этот параметр менее чем 0x40. Как Вы реально устанавливаете размер FIFO буфера АЦП менее 0x40?

18.12.2015 23:05:56
#5

Участник
Здесь с 17.12.2015
Сообщений: 12

Re: Покадровая синхронизация

1. Естественно, сама функция возвращает управление сразу. 24 секунды ждет WaitForSingleObject. Я, наверное, не очень точно изложил основную мысль.
2. Частота сбора влияния на результат не оказывает. Выставлял от 100 до 400 кГц - результат тот-же.
3. Все верно.

21.12.2015 20:13:32
#6

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,486

Re: Покадровая синхронизация

1.

... при задании размера буфера меньше 0x40 программа ожидаемо падает ...

Интересно, как Вы сумели задать AdcFifoLength менее 0x40? И почему при этом ожидаемо падает программа?
2. Чтобы у себя воспроизвести Вашу ситуацию, засылайте мне исходный код Вашей программы.

22.12.2015 16:17:49
#7

Участник
Здесь с 17.12.2015
Сообщений: 12

Re: Покадровая синхронизация

Проблема решена.
1. Скачал свежую версию библиотеки lusbapi.dll 3.4 вместо 3.2;
2. Задал размер буфера AdcFifoLength равным размеру буфера, которым оперирует ReadData. Равным, а не кратным.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск