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

L791 SetParametersStream

Вы не вошли.

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

22.09.2017 09:43:57
#1

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

L791 SetParametersStream

Добрый день.
при использовании функции

SetParametersStream
Описание :
Вызов этой функции настраивает плату АЦП/ЦАП на заданные параметры ввода
или вывода данных.
Определение :
IFC(ULONG) SetParametersStream(PDAQ_PAR sp, ULONG *UsedSize, void** Data,
void** Sync, ULONG StreamId = L_STREAM_ADC) = 0;
Параметры :
sp - структура, которая описывает параметры ввода или вывода данных
( ADC_PAR,DAC_PAR или другая в зависимости от типа поля s_Type);
UsedSize - переменная, в которой будет возвращено количество реально
используемой памяти (в отсчетах АЦП);
Data - переменная, в которой будет возвращен адрес начала большого буфера;
Sync - переменная, в которой будет возвращен адрес переменной синхронизации;
StreamId - дескриптор потока (L_STREAM_ADC, L_STREAM_DAC или другой);

UsedSize - переменная, в которой будет возвращено количество реально
используемой памяти (в отсчетах АЦП)
То есть если запуск сбора не запущен, то вернет 0?
И задавать этот параметр отличным от 0 бессмысленно?

22.09.2017 15:32:48
#2

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

Re: L791 SetParametersStream

это имеется ввиду что если выделили 512к буфер, а для сбора использовали 64 страницы  с irqstep 1024 то реально задействовано будет 64к и это будет возвернуто в этой переменной.

25.09.2017 07:01:17
#3

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

Re: L791 SetParametersStream

512к буфер согласно документации на L791 это предел
Вопрос в другом
при вызове
SetParametersStream размер буфера устанавливается?
То есть я могу указать карте - буфер какого размера использовать БЕЗ НАЧАЛА сбора или размер буфера определяет контроллер карты по своим собственным усмотрениям?

25.09.2017 08:33:12
#4

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

Re: L791 SetParametersStream

Ситуация такая: перед запуском сбора в синхронном режиме, SetParametersStream возвращает в переменной UsedSize значение 0. Почему так может быть?
Настройки:
        TLogChannel_parameters* chPar = NULL;
        IDaqLDevice* pInterface = (IDaqLDevice*)pI_void;
        ADC_PAR parAdc;
        parAdc.t2.s_Type = L_ADC_PARAM;
        parAdc.t2.FIFO = 1024;
        parAdc.t2.IrqStep = 1024;
        parAdc.t2.Pages = 64;
        parAdc.t2.AutoInit = 1;
        parAdc.t2.dRate = measures_frequency_kHz;
        parAdc.t2.dKadr = kadrs_delay_ms;
        parAdc.t2.Reserved1 = 0;
        parAdc.t2.SynchroType = 0;
        parAdc.t2.SynchroSrc = 0;
        for (int i = 0; i < countLogCh; i++) {
            parAdc.t2.Chn[ i ] = CalcPortBits(lcLogChannelsParam[ i ]->numLogicalChannel, lcLogChannelsParam[ i ]->rangeADC, lcLogChannelsParam[ i ]->collectedMode != 0);
        }
        parAdc.t2.NCh = lcLogChannelsParam.size();
        parAdc.t2.IrqEna = 0;
        parAdc.t2.AdcEna = 1;

FillDaqParameters и RequestBufferStream отрабатываются нормально.

25.09.2017 13:24:29
#5

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

Re: L791 SetParametersStream

вообще должен вернуть  Pages*IrqStep. посмотрю -проверю.

25.09.2017 13:34:26
#6

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

Re: L791 SetParametersStream

в последней версии библиотеки для 791 не только 512 можно. Она стала похожа на 780 и 783 платы. можно задавать любой буфер. Но обязательно использовать прерывания, тк по ним она оперирует с маленьким буфером заполняемым по BusMaster.

10.10.2017 09:08:00
#7

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

Re: L791 SetParametersStream

adcParams.t2.IrqStep = 1024;
//adcParams.t2.Pages = 4*countLogCh; //countLogCh =5
// по идее буфер равен  adcParams.t2.Pages * adcParams.t2.IrqStep =1024*4*5= 20480
pInterface->FillDAQparameters(&adcParams.t2);
ULONG tm = 1024*4*countLogCh;
// tm =20480
//Выделяет память в ОЗУ компьютера под большой кольцевой буфер. Память выделяется с выравниванием размера на 4096 байт.
pInterface->RequestBufferStream(&tm, L_STREAM_ADC);
Size = 0;
pInterface->SetParametersStream(NULL, &Size, (void**)&data,void**)&sync, L_STREAM_ADC);
//получаем Size=10240

Почему?
И буфер выделяется в байтах или в ULONG?

10.10.2017 13:34:44
#8

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

Re: L791 SetParametersStream

буфер согласно описанию выделяется в USHORT. Для большинства модулей это в отсчетах, но у 791 отсчет 32 бита...  именно поэтому половинка и тоже согласно описанию в отсчетах АЦП (для 791 это 10240 отсчета)

Контакты

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

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

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

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