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


Е-440

Вы не вошли.

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

Борис
05.10.2006 21:08:57
#1

Гость

Е-440

От МПО им. Румянцева
Здравствуйте, я уже писал по поводу трудностей с компиляцией Ваших CINов в среде Microsoft Visual C++. C этим разобрался, хотя и не так как мне советовали в Вашей фирме. Научился компилировать прямо в среде, хотя в L-Card мне говорили, что это даже у них не получается и приходится компилировать с помощью командной строки.

Другая проблема. Может кто - нибудь объяснить, почему у функции ReadData под Labview (она считывает массив данных из буфера устройства) при частоте ADCRate в 1 кГц и межканальной задержке 1 мс для выдачи порции данных в 1000 слов требуется аж 6- 7 секунд, т.е на это время устройство повисает и вешает все, в том числе и компьютер. Вообще, как быстро выполняется команда ReadData и отчего это зависит. Я сегодня мерял, так при больших частотах ADCRAte скорость выполнения этой команды около полсекунды, что уже плохо для real-time приложений, а при более низких частотах, как я уже писал, эта команда зависает до 6 секунд, что вообще странно. Что это - глюк устройства или так оно и работает?

Александр
06.10.2006 11:00:33
#2

Гость

Re: Е-440

Здравствуйте!
  Проблема долгого ожидания данных связана, скорее всего, с тем, что Вы не изменяли размер FIFO, а в Вашем случае это необходимо сделать. Согласно принципу работы модуля, данные считываются из оперативной памяти DSP по половинкам FIFO. Размер FIFO по умолчанию - 12288 слов. При этом даже если Вы заказываете порцию данных 1000 слов, модуль не вышлет их раньше, чем накопится половина FIFO, т.е. 6144 слов.
  Для решения этой проблемы Вам надо изменить размер FIFO и установить его равным  2048 слов. Это выполняется путем соответствующего изменения поля  FifoLength структуры ADC_PARS_E440  с последующим вызовом функции FILL_ADC_PARS(). Подробно об этом написано в главе 2.5.4.3 Технического описания и Руководства программиста модуля Е-440.

"...на это время устройство повисает и вешает все, в том числе и компьютер." - скорее всего, Вы выполняете цикл ожидания получения данных в самом CINе, не выходя из него. В этом случае действительно, пока данные не будут получены и, соответственно, в CINе будет крутиться цикл, программа будет "висеть". Именно поэтому в наших примерах в CINе (Wait_CIN) происходит только проверка факта получения данных, а сам цикл ожидания сформирован в LabVIEW, и при этом никаких торможений и зависаний не происходит. Сама функция RedData() выполняется очень быстро, т.к. она только делает запрос на получение данных и тут же завершается.

Борис
09.10.2006 20:58:37
#3

Гость

Re: Е-440

Да, Александр, спасибо, я уже тоже разобрался. В этой связи не подскажете еще, как все таки работает процесс считывания данных из FIFO?

Я запускаю команду WDataRead (кажется, так пишется), задаю количество счттываемых байт 1024 при объеме FIFO 2048. Считываю их с частотой 1024 герц.

Данные копятся 1 сек до середины FIFO и моментально (или не совсем моментально - какие временные параметры этого процесса?) считываются в буфер на компьютере. Пока происходит это считывание - что происходит с вновь поступающими данными? Они пишутся в FIFO опять с нулевого адреса вместо передвнных на компьютер, или продолжают писаться по адресам, следующим за 1024 (середины FIFO)?
В вашем описании я, к сожалению, этого не нашел.

Спасибо за содействие
Борис

Александр
11.10.2006 10:20:43
#4

Гость

Re: Е-440

Принцип действия модуля Е440 и низкоуровневые программные вопросы подробно описаны в документе "Модуль Е440.Техническое описание и Руководство программиста" (это касательно того, как заполняется FIFO). В главе 2.4.2 упомянутого Руководства читаем: "После того как первая половинка буфера полностью заполнится готовыми данными с АЦП, дается команда на их передачу в PC (в тоже время НЕ ПРЕКРАЩАЕТСЯ сбор данных во вторую половинку FIFO буфера). После накопления данных во второй половинке FIFO буфера опять дается команда на их передачу в PC и продолжается сбор данных уже в первую половинку. И так до бесконечности по циклу, пока не придет команда из PC на останов работы АЦП."
  В описании примеров для LabVIEW акцент делался только на привязке этой платы к среде LabVIEW, а принцип ее действия и общие вопросы программирования там не освещлись, т.к. они уже подробно описаны в вышеупомянутом Руководстве.
  Моментально данные в буфер ПК, конечно, не попадут. Они должны быть доставлены по интерфейсу USB, скорость 1 МБ/сек. Исходя из этого можно рассчитать время попадания данных из FIFO в буфер ПК для любого их объема при наличии необходимого запроса на их получение. Но, конечно, это время может служить только для оценки, т.к. оно не учитывает сетпень загрузки системы и еще какие-то факторы, котрые могут влиять на быстродействие работы в ОС Windows в каждом конкретном случае.
  И еще нужно добавить: Windows не является ОС реального времени. Поэтому если стоит задача сделать Real Time систему, то вряд ли это получится реализовать в LabVIEW.

Владимир
31.10.2006 10:03:04
#5

Гость

Re: Е-440

Здравствуйте, подключил Е-440 используя имеющийся пример для LabView - все прекрасно работает, но только 4 канала. Нужна помощь в разработке CIN,s, который обслуживал 12 каналов и давал возможность менять коэффициент усиления. Очень прошу помочь!

31.10.2006 10:36:52
#6

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Е-440

ну возьмите и исправте CIN с 4 каналов на 12...

Владимир
31.10.2006 16:46:48
#7

Гость

Re: Е-440

Уважаемый Poul, увы, совсем плохо программирую. Пробовал исправить СИ программу, но она в моей оболочке не компилируется - требует дополнительные модули. На этом я все бросил, а сейчас надо. Может, если Вам это не трудно, возмете на себя эту проблему.

01.11.2006 10:06:44
#8

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Е-440

а там не надо CIN править надо ему входные параметры изменить с 4 на 12 и массив с номерами соответсвенно не из 4х а из 12....