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

Тема: написание плагина для LGraph2

Вы не вошли.

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

02.10.2019 10:57:38
#1

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

написание плагина для LGraph2

Добрый день. Подскажите, пожалуйста. В примерах, написанных на LabWindows вы используете функции из библиотеки CVIRTE.  А при написании в среде разработки Visual Studio есть другие библиотеки, либо можно использовать эту? И если возможно пользоваться этой, то переменные каких типов принимает функция InitCVIRTE?

02.10.2019 11:53:03
#2

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

Re: написание плагина для LGraph2

плагин xy_oscil как пример написан в разных средах. если имеются ввиду библиотеки матобработки CVI, то они только  с CVI будут. для Visual C++ надо искать  или писать свое. Другое дело что  для CVI можно емнип установить как внешний компилятор MSVC. InitCVIRTE это именно инициализация CVI runtime engine и в VC его не нужно вызывать.

02.10.2019 14:29:18
#3

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

Re: написание плагина для LGraph2

Спасибо за ответ))
Подскажите, пожалуйста. У меня при запуске плагина xy_microsoft_visual_c++_2010_express формируется ошибка: "Ошибка плагина XY oscikkoscope (BCB 6.0): Слишком много точек".  В связи с чем это может быть?

02.10.2019 15:53:51
#4

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

Re: написание плагина для LGraph2

Там в коде это есть . видимо слишком много точек собирает ацп и подается на вход плагину. там MAX_SIZE определен.

03.10.2019 13:44:50
#5

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

Re: написание плагина для LGraph2

Подскажите,пожалуйста. а мы можем обращаться не по кадрам,а  поэлементно к данным в режиме реального времени( к каждому элементу кадра) для выполнения каких-либо математических операций?   например выполнить пробег циклом For по каждому элементу?

03.10.2019 14:35:03
#6

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

Re: написание плагина для LGraph2

http://www.lcard.ru/download/lgraph2_plugins.pdf это описание как писать плагины и что можно... я честно говоря плагины  не пишу для L-Graph II и тонкостей не знаю.

03.10.2019 15:31:29
#7

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

Re: написание плагина для LGraph2

Poul пишет:

http://www.lcard.ru/download/lgraph2_plugins.pdf это описание как писать плагины и что можно... я честно говоря плагины  не пишу для L-Graph II и тонкостей не знаю.

К сожалению, там я не нашла ответа на этот вопрос.

03.10.2019 16:05:02
#8

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

Re: написание плагина для LGraph2

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

04.10.2019 09:35:15
#9

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

Re: написание плагина для LGraph2

А какую именно задачу Вы хотите решить с помощью своего плагина?

04.10.2019 13:59:46
#10

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

Re: написание плагина для LGraph2

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

А какую именно задачу Вы хотите решить с помощью своего плагина?

Задача состоит в обработке сигналов. В том числе и их фильтрации. 
Например. Получили определенный объем данных, на выходе должны получить данные с поправочными коэффициентами.
int k[9]={1,7,0,5,...};
int pf_N = 40;
int  n_pf = 0;
double *ptr1, *ptr;
int index1 = DataInfo.chan_kadr_offset[device_index][DataInfo.adc_channels[0]];
ptr1 = &data_str->data_to_plugin[index1]; // данные от ЛГрафа
ptr = &data_str->data_from_plugin[0];      //для ЛГрафа
while(1)
{
    for(int i=0; i<9; i++)
         {*ptr = *ptr1 * k;}
}
Если в такте допустим 110 элементов. то прогоняя каждый раз по 9 элементов у него останется 3 элемента.

04.10.2019 16:55:01
#11

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

Re: написание плагина для LGraph2

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

А какую именно задачу Вы хотите решить с помощью своего плагина?

А вообще мне нужно работая с данными,которые сейчас иметь возможность обратиться к конкретному элементу,и к элементу, который был до этого элемента на 40 позиций ранее

08.10.2019 08:57:50
#12

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

Re: написание плагина для LGraph2

Добрый день. В данном коде происходит простое увеличение амплитуды на заданный коэффициент.
for (i = 0, nch = DataInfo.nch[device_index], n = data_str->n; i < n; i++, ptr += 1)
    {    ptr1 += nch; ptr2 += nch;
        *ptr = *ptr1 * DataInfo.parameters_int[PARM_KOEFFICIENT];
    }
В данном случае получается все верно. http://prntscr.com/pga1qk

При этом, если мы пытаемся выполнить тоже действие, только поэлементно,
for (i = 0, nch = DataInfo.nch[device_index], n = data_str->n; i < n; i++, ptr += 1)
    {    ptr1 += nch;
        ptr2 += nch;       
        *ptr = *&ptr1[2*i+nch] * DataInfo.parameters_int[PARM_KOEFFICIENT];
    }
то получаем неверный результат(рисунок 2). http://prntscr.com/pga578

Как правильно обращаться к конкретному элементу, чтобы выполнить это действие,чтобы получить такой же результат как и при работе с указателями?

09.10.2019 10:07:26
#13

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

Re: написание плагина для LGraph2

Терминология несколько странная,  не до конца понятно что такое "поэлементный", т.к. первый цикл и есть "поэлементное" умножение на коэффициент (проход по всем элементам канала, умножение каждого элемента на DataInfo.parameters_int[PARM_KOEFFICIENT] и сохранение в выходной массив).

Если речь идет о том, чтобы обращаться к элементам входного массива не только с тем же индексом, что и в результирующим массиве, а с каким-то сдвигом, как Вы писали до этого (" к конкретному элементу,и к элементу, который был до этого элемента на 40 позиций ранее"), то в Вашем коде элемент со сдвигом на k отсчетов будет ptr1[nch * k] (если нужен элемент после текущей позиции) или ptr1[-nch *k] (если если нужен элемент идущий на k позиций до текущего).

Но также нужно учитывать границы обхода массива, т.е. если Вы обрабатываете элемент с индексом i < k, то элемента на k позиций ранее в этом массиве нет. Т.е.  первые k элементов нужно обрабатывать особым образом, либо отбрасывая (изменяя размер выходного массива), либо заменяя чем-то, либо нужно сохранять k элементов предыдущего блока, чтобы использовать их при обработке нового.

Например, умножение на коэффициент элемента идущего ранее на k позиций, первые k при этом заменены на 0 (увеличение ptr1 перенес в цикл, ptr2 не понял для чего у Вас - выкинул):

int k = 40;


for (i = 0, nch = DataInfo.nch[device_index], n = data_str->n; i < n; i++, ptr += 1, ptr1 += nch)
    {   
        if (i < k)
        {
            *ptr = 0;
        }
        else
        {
              *ptr = ptr1[ -nch * k] * DataInfo.parameters_int[PARM_KOEFFICIENT];
        }
    }

14.10.2019 13:37:12
#14

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

Re: написание плагина для LGraph2

Добрый день. Подскажите,пожалуйста как осуществляется работа плагина. 
У нас есть d_info->input_kadrs_min = 100; т. е. обрабатываем за один раз не менее 100 кадров. А что происходит с данными и переменными,когда мы обрабатываем уже не первый раз?
В расчетной функции PluginDataExchange происходит расчет. В этом расчете мы используем массив из 40 элементов,который изменяется в зависимости от обрабатываемого элемента. этот массив состоит из предшествующих элементов. При первой обработки этих 100 элементов он заполниться. а что будет при последующих обработках. или он изначально будет отталкиваться от объявления и каждый раз обнулять его?  Что необходимо сделать,чтобы массив pf_buf изменял свои значения так, будто мы один раз обрабатываем,т.е. цикл for вызавается один раз?
for (i = 0, n = data_str->n; i < n; i++)
    {   
        pf_buf[i % 40] = ptr1[2 * i];
        pf_temp_sum = 0;
        for (int j = 0; j < 40; j++)
            {           
                if (n_pf >= j) { pf_temp = pf_b_64[j] * pf_buf[n_pf - j]; }
                    else { pf_temp = pf_b_64[j] * pf_buf[pf_N + n_pf - j]; }
                pf_temp_sum = pf_temp_sum + pf_temp;
            }
                ptr[5 * i] = pf_temp_sum / 64;
}

14.10.2019 16:36:54
#15

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

Re: написание плагина для LGraph2

СПАСИБО))) Вопрос решен)

Контакты

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

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

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

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