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


Е502 - синхронный/асинхронный режимы

Вы не вошли.

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

29.03.2016 08:33:41
#1

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

Е502 - синхронный/асинхронный режимы

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

29.03.2016 10:36:39
#2

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

Re: Е502 - синхронный/асинхронный режимы

Хотя на нижнем аппаратном уровне ввод только синхронный, однако на верхней уровне есть функции, которые предоставляют функциональность асинхронного ввода.

Вы вполне можете разрешить потоковый синхронный сбор только от АЦП и на фоне сбора данных с АЦП вызывать в произвольное время X502_AsyncInDig(), которое вернет последнее значение цифровых линий (т.е. по сути модуль считывает в этом режиме синхронно с частотой 2МГц данные с цифровых линий, но не выдает наверх, а обновляет последнее значение у себя и это последнее значение Вы читаете асинхронно функциями верхнего уровня, что с верхнего уровня не отличается от асинхронного ввода).

Вывод асинхронный есть изначально через X502_AsyncOutDig().

30.03.2016 08:16:01
#3

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

Re: Е502 - синхронный/асинхронный режимы

Замечательно! Тогда последний уточняющий вопрос - вот я задаю список каналов и период получения данных с АЦП. Естественно перечисленные каналы АЦП измеряются с частотой 2 МГц, потом пауза, рассчитанная девайсом на основе заданного периода повторения и т.д. А цифровой ввод? В асинхронном режиме он тоже с паузой обновляется или непрерывно с частотой 2МГц?
Т.е. вопрос наверное можно переформулировать в общем виде так: эта пауза в синхронном режиме между измерениями группы каналов - она вроде как "псевдо-пауза", т.е. измерения все равно идут, только в буфер не заносятся данные? Если это так, тогда все отлично, и асинхронный поток на ввод можно сделать независимым от синхронного..

30.03.2016 08:46:46
#4

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

Re: Е502 - синхронный/асинхронный режимы

Как следует из принципа работы ( www.lcard.ru/download/e-502_users_guide.pdf , п. 3.3 ), в E-502 на уровне аппаратуры модуля, включая логику FPGA, реализован только синхронный ввод-вывод.
Соответственно, все функции асинхронного ввода, реализованные на верхнем программном уровне, фактически асинхронно выхватывают из синхронного потока текущее значение данных. В этом смысле, на верхнем уровне процесс асинхронного ввода становится независим от синхронного.

А при асинхронном выводе, наоборот, данные асинхронно попадают в буфер для синхронного вывода с установленной частотой вывода, и если  буфер опустошается, то аппаратура E-502 сохраняет на выходах последнее обновлённое значение (по данному каналу ЦАП или по каналу DOUT<15:0>).

30.03.2016 09:13:05
#5

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

Re: Е502 - синхронный/асинхронный режимы

Межкадровая задержка относится только к вводу данных АЦП, а на ввод с цифровых линий не влияет - они просто считываются непрерывно всегда с заданной частотой (по умолчанию 2МГц). Более того, частота ввода с АЦП и с цифровых входов может настраиваться разной, т.е. если Вам даже понадобится более медленный ввод с АЦП, то обновление значения цифровых линий все равно может выполняться с частотой 2МГц.

30.03.2016 14:08:29
#6

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

Re: Е502 - синхронный/асинхронный режимы

Большое спасибо. Это именно то, что мне и нужно. Вопрос можно закрыть.

05.04.2016 09:14:36
#7

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

Re: Е502 - синхронный/асинхронный режимы

В продолжении темы возник вопрос. Вот основной цикл измерений:

   X502_StreamsStart(m_dev);
    while(m_bRun)
    {
        X502_Recv(m_dev, (uint32_t*)buffer, 10, 2000);
        X502_ProcessAdcData(m_dev, (uint32_t*)buffer, adc_data, (uint32_t*)&adc_size, X502_PROC_FLAGS_VOLT);
        app->adc_queue.enqueue(QByteArray((char*)adc_data, sizeof(double) * adc_size));

        for(int i = 0; i < 4; i++)
        {
            app->m_out = i;
            X502_AsyncOutDig(m_dev, app->m_out, 0);
            X502_AsyncInDig(m_dev, (uint32_t*)&inp_data);
            app->inp_data[i] = inp_data;
        }
    }
    X502_StreamsStop(m_dev);

на цифровые входы ничего не подается, но inp_data биты 14-й и 15-й стоят в "1". Интересно почему?

05.04.2016 10:26:11
#8

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

Re: Е502 - синхронный/асинхронный режимы

Если на входы ничего не подано и нет подтяжки к какому-то уровню, то в общем случае нельзя сказать в каком он состоянии и какое значение с него будет считано. Также отмечу, что старшие линии в E502 объединены с линиями синхронизации (см. например в руководстве программиста главу "Отличия при работе с модулям L502 и E502" пункт 7), поэтому видимо немного отличаются электрически и их неопределенное состояние разрешается в сторону 1, а не 0 как у остальных. Т.е. то что Вы считали - это вполне нормально, но если ничего не подключено, то в принципе нельзя закладываться на то, что именно будет считано.

05.04.2016 11:43:30
#9

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

Re: Е502 - синхронный/асинхронный режимы

Спасибо, понятно. Еще вопрос - вызовы чтения/записи цифровых сигналов из разных потоков программы выполняются без проблем? естественно с учетом битовых масок..

05.04.2016 13:42:19
#10

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

Re: Е502 - синхронный/асинхронный режимы

Да, должно работать, по крайней мере библиотека писалась с учетом возможности вызова из разных потоков.