Форум: Техническая поддержка

Тема: Особенности работы с E-502 (данные с каналов АПЦ)

Вы не вошли.

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

ET
16.06.2020 09:50:36
#1

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

Особенности работы с E-502 (данные с каналов АПЦ)

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

Возник вопрос по последовательности вызовов различных API из состава x502.
А именно: правильно ли при многократном включении и отключении режима регистрации АПЦ экономить на вызовах. Или лучше осуществлять полную последовательность, как это показано в демонстрационных  примерах.

То есть по факту - сейчас "запрокшено" некое состояние перед включением синхронного режима.
Затем (при каждой следующей регистрации) используются только функции конфигурирования, сбора и преобразования данных.
Затем возврат в асинхронный режим (просто останов регистрации).

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

Во всех случаях ошибок API из SDK x502, вроде бы, не возникает.


Спасибо.

16.06.2020 14:22:02
#2

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

Re: Особенности работы с E-502 (данные с каналов АПЦ)

Добрый день.
По идее, с этим не должно быть проблем.
Т.е. если последовательность вызовов (где N - кол-во каналов):

X502_StreamsStop(hnd)
N = N + 1;
X502_SetLChannelCount(hnd, N)
X502_SetLChannel(hnd, N-1, .....)
X502_Configure(hnd);
X502_StreamsStart(hnd)

По описанию похоже, что количество каналов увеличилось, но почему-то не были заполнены сами настройки этого нового канала, точно все параметры, включая индекс (N-1) лог. канала в X502_SetLChannel заданы корректно?
Если все равно не работает, то можете прислать конкретный пример последовательности вызовов конфигурации как перед первым сбором, так и последовательность вызовов при изменении конфигурации, в результате чего получается некорректные данные в новом канале.

ET
17.06.2020 14:39:46
#3

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

Re: Особенности работы с E-502 (данные с каналов АПЦ)

Здравствуйте,
Спасибо за отклик.

"Запрокшенное" состояние - последовательность вызовов о том, что далее обмен будет по USB:

X502_Create()
constexpr int usb_devcnt = 1;
usb_rec_list = static_cast<t_x502_devrec*>(malloc(usb_devcnt * sizeof(t_x502_devrec)));
... = E502_UsbGetDevRecordsList(&usb_rec_list[0], usb_devcnt, 0, nullptr);
... = X502_OpenByDevRecord(handle, &usb_rec_list[0]);

Далее, берем случай для 3 каналов (0,1,2) и 100КГц на канал.
chan_cnt = 3

Конфигурирование

X502_SetRefFreq (handle, ((chan_cnt % 2) ? X502_REF_FREQ_1500KHZ : X502_REF_FREQ_2000KHZ)); 
X502_SetLChannelCount(handle, chan_cnt);
по каждому каналу:
{ 
  X502_SetLChannel(handle, static_cast<uint32_t>(ii), f_chans[ii], f_chan_modes[ii], f_chan_ranges[ii], 0);
  Log_Wrapper ("bh:", handle, " ii:", ii, " f_chans[ii]:", (int)f_chans[ii], " f_chan_modes[ii]:", (int)f_chan_modes[ii], " f_chan_ranges[ii]:", (int)f_chan_ranges[ii]);
}
X502_SetAdcFreq(handle, &f_adc, &f_frame); //  f_adc:300000 f_frame:100000
X502_Configure(handle, 0)

в логах:

17.06.2020 12:49:45.380480 bh:0x694818 ii:0 f_chans[ii]:0 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
17.06.2020 12:49:45.380841 bh:0x694818 ii:1 f_chans[ii]:1 f_chan_modes[ii]:0 f_chan_ranges[ii]:2
17.06.2020 12:49:45.381031 bh:0x694818 ii:2 f_chans[ii]:2 f_chan_modes[ii]:0 f_chan_ranges[ii]:0

Сбор и останов

X502_StreamsEnable(handle, X502_STREAM_ADC);
X502_StreamsStart(handle);
в цикле:
{
 X502_Recv(handle, rcv_buf, read_block_size, READ_TIMEOUT);
 X502_ProcessDataWithUserExt(handle, rcv_buf, .., X502_PROC_FLAGS_VOLT, .., .., nullptr, nullptr, nullptr, nullptr); // blackfin'a физически нет
}
X502_StreamsStop(handle);
X502_StreamsDisable(handle, X502_STREAM_ADC);

Затем просто добавляем еще канал (3) с такой же последовательностью конфигурирования и сбора-останова.

в логах:

17.06.2020 12:50:12.954854 bh:0x694818 ii:0 f_chans[ii]:0 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
17.06.2020 12:50:12.954979 bh:0x694818 ii:1 f_chans[ii]:1 f_chan_modes[ii]:0 f_chan_ranges[ii]:2
17.06.2020 12:50:12.955093 bh:0x694818 ii:2 f_chans[ii]:2 f_chan_modes[ii]:0 f_chan_ranges[ii]:0
17.06.2020 12:50:12.955205 bh:0x694818 ii:3 f_chans[ii]:3 f_chan_modes[ii]:0 f_chan_ranges[ii]:2

X502_SetAdcFreq(handle, &f_adc, &f_frame); //  f_adc:400000 f_frame:100000

Если ПО перегрузить, то просто дополнительно (к последнему варианту) выполняется последовательность, описанная вначале, но количество каналов 4 при этом записывает норм.
Не исключена тонкая ошибка (н-р, с обращением к памяти) где-то в нашем коде, но по крайней мере можете оценить последовательность из SDK?

17.06.2020 19:13:21
#4

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

Re: Особенности работы с E-502 (данные с каналов АПЦ)

А какой именно уровень у этого постоянного значения при некорректных данных? Оно от запуска к запуску всегда одно и то же? И что за напряжение подано на этот канала?

ET
18.06.2020 09:10:01
#5

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

Re: Особенности работы с E-502 (данные с каналов АПЦ)

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

На канале просто шум ("открытый вход"). А записывается/считывается как бы чистый "0".
Я пока снимаю вопрос. Санитайзер памяти намекает на проблемы в прикладном коде. Так что проблема не в SDK x502 или уж точно не только там.  Напишу позже, когда разберусь с ситуацией.

Контакты

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

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

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

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