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

Переполнение буфера LTR11

Вы не вошли.

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

01.02.2017 09:26:02
#1

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

Переполнение буфера LTR11

Происходит переполнение буфера LTR11 при приеме.Какая связь между частотой опроса, размером буфера,размером получаемого массива.Какие параметры необходимо соблюсти для приема без переполнения.Как вовремя откачивать данные
Модуль настроен на 6 каналов , частота опроса =249 .то есть 60 кгц на 6 каналов, на один 10кгц.Это 10 р  в сек прием.
size11=LTR_Recv(&hltr11.Channel,DATA_buf,NULL,n_11,1000);// n11 - ACQBLOCKSIZE=2400
if ((size11 > 0) && (size11 == n_11))//проверка соответсвтия recv и acqblocksize размера массива принятого и размера массива ожидаемого
            {   
                    //INT size11 = n_11;
                INT RES=LTR11_ProcessData(&hltr11,DATA_buf,READY_buf,&size11,1,1);
DATA_buf в RECV = 2400
n_11 в RECV = 2000
DATA_buf , READY_buf в PROCESSDATA = 2400.
и вот так принимаю, делю на 400 .тк 2400/400 = 6 число каналов.
if (kanal==6)
                    {
                        if (jj%kanal== 0) J5+=READY_buf[jj]/400./26.5; // I5                        
                        if (jj%kanal== 1) a7+=READY_buf[jj]/400; // Udy 1Y
                        if (jj%kanal== 2) a8+=READY_buf[jj]/400; // Udy 1Z               
                        if (jj%kanal== 3) U5+=READY_buf[jj]/400;
                        if (jj%kanal== 4) Dmy+=READY_buf[jj]/400;                       
                        if (jj%kanal== 5) Dmz+=READY_buf[jj]/400;
                        //zapis_file25(file_out11);                       
                    }
происходит заполнение буфера на 100 проц.

01.02.2017 09:58:09
#2

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

Re: Переполнение буфера LTR11

Вам нужно откачивать данные с помощью Recv() с той скоростью с которой они поступают от модуля. Если настроено 60 КГц, то нужно вычитывать 60 тыс слов в секунду. Вопрос в том, как вызывается Recv(), так как если он вызывается какому-нибудь программному таймеру, то как правило он не гарантирует точного интервала времени и реальный интервал между событиями таймера может быть больше

01.02.2017 10:26:07
#3

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

Re: Переполнение буфера LTR11

У меня есть поток на прием данных, в нем принимаю 11 и 27 модулем. запускается поток при запуске формы.
то есть если у меня общ. частота сбора на 6 каналов 60 000 гц, размер буфера высчитывается, как 60 000 / 10 = 6000 размер буфера? на 10 .. т.к частота опроса 1 канала = 10 000 гц , чтоесть 10 р в сек . и соответственно все буферы и ACQ_BLOCK_SIZE в RECV делаю равными 6000 ?

01.02.2017 11:21:56
#4

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

Re: Переполнение буфера LTR11

У Вас ещё и сбор с LTR27 идёт в том же потоке? У LTR27 же своя частота (60 КГц там точно нет). Вообще рекомендовал бы использовать свой поток под каждый модуль, тем более разного типа, т.е. иначе нужно чтобы частоты точно совпадали, а у разных модулей они настраиваются по разному.

01.02.2017 11:29:42
#5

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

Re: Переполнение буфера LTR11

Алексей L Card пишет:

У Вас еще сбор с LTR27 идет в том же потока? У LTR27 же своя частота (60 КГц там точно нет). Вообще рекомендовал бы использовать свой поток под каждый модуль, тем более разного типа, т.е. иначе нужно чтобы частоты точно совпадали, а у разных модулей они настраиваются по разному.


Да в том же потоке, а если убрать опрос 27 модуля из потока. оставить опрос 11 модуля только с параметрами , что я писал выше, переполнения не должно быть? правильно я рассуждал про выбор  размера буфера?

01.02.2017 11:35:16
#6

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

Re: Переполнение буфера LTR11

Да, в случае приема только с LTR11 переполнения быть не должно (если только у Вас обработка после ProcessData не будет по времени дольше чем прием блока).
Если я правильно понял, что Вы хотите принимать и обрабатывать блока за 100мс (10 раз в секунду), то да, размер приема получается 6000 отсчетов.

Контакты

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

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

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

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