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

L502. Как отловить момент окончания вывода ЦАП?

Вы не вошли.

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

Евгений64
27.02.2017 14:30:05
#1

Гость

L502. Как отловить момент окончания вывода ЦАП?

Как программно отловить момент окончания вывода ЦАП в синхронном режиме в L502?
Можно было бы функцией X502_OutGetStatusFlags, но в моем случае она не работает, т.к. версия прошивки FPGA = 0.4. Ф-цией X502_GetSendReadyCount ?

Какие еще могут быть варианты?

27.02.2017 15:34:25
#2

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

Re: L502. Как отловить момент окончания вывода ЦАП?

Версия FPGA в модуле обновляется - вместе с lpcie_sdk идет утилита обновления (<путь установки>/tools/lxfw-update и там описано в readme.txt). Если стоит последняя версия lpcie_sdk, то в ней и последняя прошивка.

Если нужно гарантировать, что вывод закончился, то X502_OutGetStatusFlags лучше, т.к. привязано к моменту вывода, в то время как X502_GetSendReadyCount() - возвращает состояние буфера (т.е. еще какое-то время с момента, когда данные считаются из буфера до реального вывода, хотя это фиксированное небольшое время, если сделать еще задержку, то тоже можно использовать).

А для чего нужно отловить этот момент?

Евгений64
27.02.2017 17:14:38
#3

Гость

Re: L502. Как отловить момент окончания вывода ЦАП?

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

А для чего нужно отловить этот момент?

1. Запустить обработку данных, принятых другим устройством;
2. Начать готовить следующую порцию данных.

Евгений64
27.02.2017 18:02:03
#4

Гость

Re: L502. Как отловить момент окончания вывода ЦАП?

Версию обновил. Стала 0.7.
Но X502_OutGetStatusFlags упорно не работает. Возвращает -110.


m_errorCode = X502_Send(m_lcardHandle, commonBuffer, size, 100);

m_errorCode = X502_StreamsStart(m_lcardHandle);

m_errorCode = X502_CheckFeature (m_lcardHandle, X502_FEATURE_OUT_STATUS_FLAGS);
if (m_errorCode == X502_ERR_OK) {
     uint32_t status = 0;    //X502_OUT_STATUS_FLAG_BUF_IS_EMPTY;
     m_errorCode = X502_OutGetStatusFlags(m_lcardHandle, &status);

в этом месте m_errorCode содержит -110 (Неверно задан режим работы модуля X502), но данные выводятся нормально.


Что бы это значило?
Что я не так делаю?

28.02.2017 10:24:06
#5

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

Re: L502. Как отловить момент окончания вывода ЦАП?

Попробуйте обновить sdk с сайта (http://www.lcard.ru/download/lpcie_setup.exe), похоже действительно была проблема в последней версии

Евгений64
28.02.2017 10:48:21
#6

Гость

Re: L502. Как отловить момент окончания вывода ЦАП?

Спасибо, с версией 0.8 полегчало, но после того как DLL-ки руками обновил - установщик драйвера сказал что обновление не требуется и ничего делать не стал. (это нормально?)

28.02.2017 11:53:02
#7

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

Re: L502. Как отловить момент окончания вывода ЦАП?

Драйвер не обновлялся, только библиотеки, так что нормально.

Евгений64
03.03.2017 15:41:23
#8

Гость

Re: L502. Как отловить момент окончания вывода ЦАП?

Все таки флаг X502_OUT_STATUS_FLAG_BUF_IS_EMPTY не означает, что ЦАП отработал и данные покинули карту.

Иначе следующий код должен дождаться конца вывода:

uint32_t status = 0;
X502_OutGetStatusFlags(cardHandle, &status);
while ((status & X502_OUT_STATUS_FLAG_BUF_IS_EMPTY) == X502_OUT_STATUS_FLAG_BUF_IS_EMPTY) {
        Sleep(1);
        X502_OutGetStatusFlags(cardHandle, &status);
    }

А на деле ожидания не происходит. Данные выводятся одновременно с продолжением программы. Т.е. этот флаг не отражает окончания вывода данных.

Тогда возвращаюсь к началу темы: Как отловить в программе момент окончания вывода ЦАП ?
Кроме весьма приблизительных временных задержек ничего не предусмотрено?

03.03.2017 16:50:54
#9

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

Re: L502. Как отловить момент окончания вывода ЦАП?

А в while() вроде должно быть == 0, Вы же должны выйти как раз, когда он будет установлен.

Евгений64
06.03.2017 11:00:30
#10

Гость

Re: L502. Как отловить момент окончания вывода ЦАП?

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

А в while() вроде должно быть == 0, Вы же должны выйти как раз, когда он будет установлен.

Виноват, исправился. Но и в варианте:
while (!(status & X502_OUT_STATUS_FLAG_BUF_IS_EMPTY)) {...

Тоже нет ожидания окончания вывода. Флаг срабатывает когда некий буфер становится пустым, а ЦАП продолжает свою работу.

Вообще интересно, если синхронный вывод еще не закончился, а программа не зная этого выдает команду X502_StreamsStop, как поступит плата? На осциллографе вижу, что вывод продолжается... но нормально-ли это и всегда-ли так будет? А в асинхронный режим переключиться удастся, пока ЦАП еще работает?

Я к чему клоню - если нет готового флага, то попробовать его сделать, пусть и коряво: В конце синхронного вывода сформировать на одном из выходов 1 и завести ее на ввод. А затем считать в асинхронном режиме.

Но лучше, чтобы был предусмотрен флаг окончания вывода.

06.03.2017 17:58:12
#11

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

Re: L502. Как отловить момент окончания вывода ЦАП?

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

Евгений64 пишет:

Вообще интересно, если синхронный вывод еще не закончился, а программа не зная этого выдает команду X502_StreamsStop

Вообще X502_StreamsStop() должен остановить вывод к моменту как команда дойдет до модуля.

Евгений64 пишет:

А в асинхронный режим переключиться удастся, пока ЦАП еще работает?

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

Контакты

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

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

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

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