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


проблема с LTR11

Вы не вошли.

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

Михаил
08.11.2012 16:03:20
#1

Гость

проблема с LTR11

Здравствуйте!

Новичок в использовании ваших модулей. Сейчас подключил LTR11 и запустил немного изменённый пример(добавил в таблицу считывание всех 32 логических каналов в диапазоне 10В + вывод на экран, а не в файл). А проблема в том, что при изменении напряжения выводятся старые величины. Загрузка fifo-буфера 100%. При перезапуске программы показываются новые, теперь корректные значение, но при изменении напряжения они по-прежнему не меняются.

Поставил LGraph, в ней всё корректно, загрузка fifo - 0%. В чём может быть проблема? И как уменьшить скорость заполнения fifo-буфера или проблема не в нём?

Всем заранее спасибо!

08.11.2012 16:51:06
#2

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

Re: проблема с LTR11

Здравствуйте.

Частота сбора данных в LTR11 задается с помощью полей ADCRate.prescaler и ADCRate.divider (формулу смотрите в ltr11api.pdf). Соответственно с этой скоростью (максимум 400КГц) после запуска сбора данных данные будут поступать от модуля в сервер и сохранятся в его FIFO-буфере. При выполнении LTR_Recv() Вы считываете самые старые несчитанные до этого данные. Соответственно, если вы будете считывать медленней, чем они будут поступать, то расхождение во времени между прочитанными данными и поступаемыми будет увеличиваться.

Соответственно, время обработки и вывода данных у Вас должно быть меньше, чем время поступления от модуля количества отсчетов, указанного в LTR_Recv(). Если Вы все принятые отсчеты выводите, например, на консоль, то это условие может не выполняться при больших частотах сбора.

Михаил
08.11.2012 16:58:43
#3

Гость

Re: проблема с LTR11

Хм, т.е. получается, что из fifo-буфера не выкидываются старые данные при переполнении, я думал, что наоборот.
Спасибо!

08.11.2012 16:59:55
#4

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: проблема с LTR11

Добавлю, что 400 кГц - это 1,6 Мбайт/c, поскольку слово в LTR 32-битное.

Алексей (L-Card)
08.11.2012 17:05:46
#5

Гость

Re: проблема с LTR11

Переполнение вообще при нормальной работе допускать не стоит. Переполнение все же нештатная ситуация, приводящая к разрыву данных (причем не обязательно кратному размеру кадра).

Михаил
08.11.2012 17:26:32
#6

Гость

Re: проблема с LTR11

Можно тогда ещё один вопрос: сейчас спорили с другим инженером, который после того вопроса реализовал Start/Stop метод считывания(при каждом считывании Start, после окончания Stop, сбрасывающий буфер). Вопрос в том, чем может  быть плох такой метод при долговременной работе (время измеряется в годах)?

P.S. И просто на всякий случай: fifo-буфер один на каждый LTR или общий для крейта?

Алексей (L-Card)
08.11.2012 18:02:02
#7

Гость

Re: проблема с LTR11

Если Вам не нужен постоянный непрерывный сбор, то такой метод вполне подойдет. Т.е. в таком варианте время между одним циклом Start->Recv->Process->Stop и следующим может несколько варьироваться и строго не определено. В остальном все ок.

При Stop() очищается буфер именно конкретного LTR-модуля (на потоки данных от остальных модулей не влияет - сервер и обеспечивает независимую работу с разными модулями). fifo из которого считываются данные по Recv() на каждый модуль свой.

Михаил
08.11.2012 18:10:26
#8

Гость

Re: проблема с LTR11

Спасибо за оперативные ответы!