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


Проблемы с считыванием данных Е440

Вы не вошли.

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

Виталий
22.09.2008 09:49:40
#1

Гость

Проблемы с считыванием данных Е440

Добрый день!

Сейчас пишу проект для оцифровки данных с помощью E14-440. При испытаниях софта возник ряд проблем, хотелось бы услышать комментарии специалистов компании на их счет
1. При задании размера буфера через функцию SET_ADC_PARS (поле AdcFifoLength структуры ADC_PARS_E440) реакция системы не совсем понятна. Т.е. судя по задержки при реальном считывании данных половинками буферов новое значение вроде бы установилось. Однако если я вызову функцию GET_ADC_PARS, то поле AdcFifoLength=12288.
Если же я принудительно запишу в DSP через PUT_LBIOS_WORD по адресу L_CUR_ADC_FIFO_LENGTH_E440 новое значение, то все работает нориально. Это нормальное поведение системы?
2. При работе в синхронном режиме (через ReadData) при некоторых настройках считывания часть возвращаемых данных не соответсвует реальному (мусор). Конкретно это проявляется при такой настройке, измерения ведутся по одному каналу с единичным усидением, считывается 1024 отсчета (один полубуфер) с периодом мужду кадрами 0,5 мс (общее время оцифровки 511 мс). При этом часть данных соответствует опорному сигналу (константа 2 В), а часть - некие "прыгающие" отрицательные значения. Если же я устанавливаю период 1 мс или более между кадрами, то все возвращаемые данные соответствуют опорному сигналу. Работа ведется в диф. режиме. Схема подключения - источник с заземленным выходом.
В чем может быть проблема?

22.09.2008 10:37:59
#2

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

Re: Проблемы с считыванием данных Е440

1. Параметры переданные через посредство интерфейсной функцией SET_ADC_PARS()
вступают в действие ТОЛЬКО после выполнения функции START_ADC(). Об этом, кстати,
упомянуто в Тех.описании при рассмотрении функции SET_ADC_PARS().
А если Вы хотите убедиться в том, что Ваше значение длины FIFO буфера правильно
передалось в E14-440 (до выполнения START_ADC()), то можно просто прочитать
содержимое ячейки L_ADC_FIFO_LENGTH_E440 в DSP модуля, используя функцию GET_LBIOS_WORD().
2. Попробую воспроизвести Вашу ситуацию.

22.09.2008 15:14:26
#3

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

Re: Проблемы с считыванием данных Е440

Мне не удалось повторить Вашу ситуацию. Может быть пришлёте исходники Вашей программы?

Виталий
22.09.2008 18:20:12
#4

Гость

Re: Проблемы с считыванием данных Е440

А куда выслать код?
Еще хочется отметить, что в DSP по адресу L_ADC_FIFO_LENGTH_E440 после выполнения функции SET_ADC_PARS действительно находится корректное значение размера буфера. Однако функция GET_ADC_PARS возвращает не верное значение, и в ячейке L_CUR_ADC_FIFO_LENGTH_E440 значение не правильное. Не могли бы Вы пояснить в чем разница между ячейками L_ADC_FIFO_LENGTH_E440 и L_CUR_ADC_FIFO_LENGTH_E440.
Краткое пояснение с чем данный вопрос вообще связан. При работе в асинхронном режиме (использую очередь из 2х запросов, как в примерах ReadData) обнаружил, что иногда очередной запрос выполняется мгновенно (сразу после вызова), хотя реально данные еще не должны быть считаны, но система уже событие в структуре OVERLAPPED помечает как случившееся.
Частично данная пробле была связана с тем, что  модуль возвращает данные половинками буфера и при этом, если число возвращаемых данных не есть целое число половинок, то формально задержки между вызовами функции ReadData будут разными. Однако при этом почему то в массиве считанных отсчетов иногда проскакивал "мусор", т.е. как будто было выделено место в памяти, но не инициализировано. Разрешилась проблема путем задания размера буфера при считывании таким, чтобы считываемое число отсчетов было строго целое число полубуферов. Вот тут и выснилась проблема, что просто вызовом функции SET_ADC_PARS размер буфера меняется "как то не полностью". А если явно прописать в ячейку L_CUR_ADC_FIFO_LENGTH_E440 размер, то все работает как часы.
Могу прислать пример кода длл-ки WINAPI что я пишу для использования в LabVIEW. Может кому из пользователей будет полезным в будущем.

Виталий
22.09.2008 18:53:06
#5

Гость

Re: Проблемы с считыванием данных Е440

Код отправил

23.09.2008 13:28:55
#6

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

Re: Проблемы с считыванием данных Е440

1. По адресу L_CUR_ADC_FIFO_LENGTH_E440 находится ТЕКУЩЕЕ значение длины FIFO буфера АЦП, т.е. то, которое в данный момент может использоваться драйвером DSP. По адресу L_ADC_FIFO_LENGTH_E440 находится то значение, которое будет использоваться  после выполнения функции START_ADC(), т.е. будет просто скопировано в L_CUR_ADC_FIFO_LENGTH_E440. Так что явная запись в L_CUR_ADC_FIFO_LENGTH_E440 из программы, в принципе, может привести к сбоям сбора данных с АЦП.
2. Ответ по исходникам отправил почтой.