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

Тема: консультация по коммутации входов и программному обеспечению

Вы не вошли.

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

02.04.2019 13:04:15
#26

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

Re: консультация по коммутации входов и программному обеспечению

Добрый день! А помогите пож. 15й ответ 2й пункт,( 2. Запустить синхронный ввод как с АЦП так и с цифровых линий, при этом на цифровых линиях можно выставить частоту равной частоте кадра. )  не вполне ясно, как выставить частоту на цифр. линиях равную частоте кадра. Не получается, синхронизировать чтение данных по имп. с цифрового входа.  И еще а L-502 ЕСТЬ В НАЛИЧИИ?

02.04.2019 14:19:55
#27

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

Re: консультация по коммутации входов и программному обеспечению

Добрый день.
Не совсем понятно, что именно не получается. Частота ввода с цифровых линий задается функцией X502_SetDinFreq(), соответственно ее можно задать равной частоте кадра (в примере http://www.lcard.ru/download/examples/l … m_read.zip это определения DIN_FREQ и ADC_FRAME_FREQ, которые должны быть равны), соответственно принятые данные после ProcessData будут разделяться на отсчеты АЦП и цифровых линий и каждому отсчету цифровых линий будет соответствовать один кадр АЦП, и считая их от запуска Вы можете сопоставить по количеству какой отсчет цифровых линий соответствует какому кадру АЦП.

По поводу наличия изделий, свяжитесь с отделом продаж, по почте или телефону (http://www.lcard.ru/contacts)

02.04.2019 15:00:03
#28

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

Re: консультация по коммутации входов и программному обеспечению

имп. 1 млсек на цифр. входе программа не видит, не успевает реагировать на него

02.04.2019 16:14:12
#29

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

Re: консультация по коммутации входов и программному обеспечению

А какая частота у Вас стоит сбора? Если длит. импульса 1 млсек, а частота кадров АЦП не достаточна, то можно в качестве частоты ввода с цифровых линий взять частоту в N раз больше, чем частота кадра, чтобы частота стала достаточной (для 1 мс частота например 4 КГц хватит с запасом), и считать что на каждый кадр приходится N отсчетов с цифровых линий.
На всякий случай, убедитесь, что Вы проверяете весь массив принятых данных с цифровых линий (т.к. в примере выводится только первый элемент)

03.04.2019 13:20:43
#30

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

Re: консультация по коммутации входов и программному обеспечению

Добрый день! А уточните пож. модификацию модуля L-502..., с которым Вы тестировали скорость (ПУНКТ 23).
В отделе продаж нам написали:  Уточните модификацию: http://www.lcard.ru/products/boards/l-5 … =2#qt-ltab
L-502-P-EU-D - такой модификации никогда не было.
А мы хотели купить именно L-502..., на котором Вы тестировали (сейчас у нас Е-502-P-EU-D)/

03.04.2019 16:47:34
#31

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

Re: консультация по коммутации входов и программному обеспечению

От модификации время запуска/останова не зависит. Модификацию Вы выбираете, исходя из того, нужен Вам ЦАП  (буква -D) и сигнальный процессор (-P). У Вас E-502 полная, которой соответствует L-502-P-G-D (EU в E-502 означает наличие интерфейсов USB и Ethernet - для L-502 это понятно не актуально, поэтому и у L-502 модификация называется по другому), если что-то из опций не используется, то можете взять и другую модфицикацию

06.05.2019 20:50:12
#32

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

Re: консультация по коммутации входов и программному обеспечению

Добрый день!
Продолжая заниматься обработкой данных Е-502, хочу уточнить непонятный программный вопрос.  Нас по прежнему интересует скорость преобразования. Следуя Вашему совету сделал синхронизацию потока по импульсу с цифрового входа, но скорость обмена данными также мала  и составляет 3,5 кадра в сек в режиме непрерывного преобразования. В связи с этим возникла идея: можно ли использовать асинхронный ввод кадра, получаем по асинхр. входу с цифровой линии имп. и сразу выполняем команду асинхр. ввод кадра. Скорость выдачи кадров уже должна быть существенная, более 10 Гц, так как ее можно задать от таймера.
Вот это код:   
private void btnAsyncAdcFrame_Click(object sender, EventArgs e) /* асинхронный ввод  */
        {
            if (hnd != null)
            {
                /* устанавливаем параметры модуля */
                lpcie.Errs err = setupParams();

                if (err != lpcie.Errs.OK)
                {
                    MessageBox.Show(X502.GetErrorString(err), "Ошибка настройки параметров АЦП",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (err == lpcie.Errs.OK)
                {
                    UInt32 lch_cnt = hnd.LChannelCount;
                    /* Создаем массив для приема количества отсчетов, равному количеству
                     * логических каналов */
                    double[] adc_data = new double[lch_cnt];
                    err = hnd.AsyncGetAdcFrame(X502.ProcFlags.VOLT, 1000, adc_data);
                    if (err != lpcie.Errs.OK)
                    {
                        MessageBox.Show(X502.GetErrorString(err), "Ошибка приема кадра АЦП",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        /* выводим результат */
                        edtLCh1_Result.Text = adc_data[0].ToString("F7");
                        if (lch_cnt >= 2)
                            edtLCh2_Result.Text = adc_data[1].ToString("F7");
                        else
                            edtLCh2_Result.Text = "";

                        if (lch_cnt >= 3)
                            edtLCh3_Result.Text = adc_data[2].ToString("F7");
                        else
                            edtLCh3_Result.Text = "";

                    }
                }

            }

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

07.05.2019 09:21:37
#33

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

Re: консультация по коммутации входов и программному обеспечению

Асинхронный ввод выполняет запуск сбора, прием одного кадра (массив по одному отсчету на один логический канал, как у Вас и выделяется) и останов. Но для Вашего случая в этой функции нет смысла, он не может быть быстрее синхронного. Таймер тут ничем не поможет (сам по себе таймер может только вносить задержку, но никак ничего не ускорять), если функция будет выполняться 200-300 мс, то на сколько бы Вы таймер не поставили у Вас не будет функция вызываться чаще.
Для быстрого ввода нужен синхронный ввод с АЦП и цифровых линий с определением события перепада по обрабатываемым данным, как описано было в пункте 2 ранее.

07.05.2019 22:24:04
#34

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

Re: консультация по коммутации входов и программному обеспечению

Спасибо! А не подскажете где в принятом массиве искать этот перепад уровня сигнала по цифровой линии для обработки массива данных АЦП. Или как правильнее в программе осуществить эту синхронизацию. Когда я считал количество циклов в режиме непрерывных преобразований, то получилось 3,7 в сек, не сильно быстрее, чем в режиме внешнего старта.

08.05.2019 14:45:07
#35

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

Re: консультация по коммутации входов и программному обеспечению

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

Например, в примере x502_stream_read константа READ_BLOCK_SIZE определяет, сколько отсчетов считывается за раз. Если частота АЦП например стоит 2 МГц и частота цифровых линий 2 МГц, то модуль передает 4 млн отсчетов в секунду, соответственно если READ_BLOCK_SIZE равен 4096*200 как в примере, то у Вас получится 4000000/(4096*200) = 4.88 циклов Recv/ProcessData в секунду (но каждый на много отсчетов). В примере выводится только один отсчет из блока, но это только для примера.

Для обнаружения фронта потоке цифровых линий нужно после ProcessData() пройтись по всему массиву данных с цифровых линий (в примере массив din_data размером din_size) и проверить бит, соответствующий номеру входа, к которому подключен сигнал (первые 16 бит - DI1-DI16, далее DI_SYN1 и DI_SYN2). Если используется вход DI_SYN1, то это соответственно 17 бит и проверка i-го слова может выглядеть

((din_data[i] & (1 << 16)) != 0)

Смена этого условия с FALSE на TRUE означает фронт с 0 на 1. Соответственно Вы фиксируете номер отсчета от начала сбора, в котором это произошло, и исходя из соотношений частот АЦП и цифрового ввода получаете номер отсчета в потоке АЦП, который соответствует этому события и определяете ближайшее начало кадра (исходя из кол-ва лог. каналов).

14.05.2019 22:39:29
#36

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

Re: консультация по коммутации входов и программному обеспечению

Добрый день! Спасибо за ответы, вроде все получается. Есть небольшие недостатки при синхронизации. Если запуск от внешнего имп., то развертка стоит как мертвая, все четко. А если работа в режиме внутреннего запуска и синхронизация по имп. на цифровом входе, то картинка иногда подрагивает, как бы срыв синхронизации. Не сильно, а на 10 - 20 точек по горизонтали. Для синхронизации и в том и другом случае используется один и тот же имп. и вход один. Может у Вас есть советы какие-нибудь по этому вопросу?

16.05.2019 02:40:14
#37

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

Re: консультация по коммутации входов и программному обеспечению

В этом режиме сдвиг может быть больше чем в режиме аппаратной синхронизации, т.к. импульс может прийти не в начале собираемого кадра, но он должен оставаться в пределах одного кадра (одна точка каждого опрашиваемого канала, Tкадра = 1/(Fadc/Nch), где Fadc - частота коммутации каналов, Nch - кол-во опрашиваемых каналов, это если нет настроенной дополнительной межкадровой задержки). Если еще и учитывать, где именно внутри кадра возник импульс, и считать следующей кадр не от нуля времени а с соответствующей задержкой от начала развертки, то точность привязки можно повысить до одно периода коммутации АЦП независимо от кол-ва каналов, который может быть 1/2MГц = 0.5 мкс. Но в любом случае если у Вас есть сдвиг больше чем на один кадр, то скорее всего где-то есть ошибка сопоставления момента определения фронта сигнала синхронизации и момента начала кадра в данных АЦП (возможно при каких-то условиях, раз случается срыв лишь иногда, например если появляется в начале или конце собранного массива)

Контакты

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

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

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

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