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

Форум

Вы не вошли.

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

#1 Техническая поддержка » Пример для Е2010 » 02.03.2020 15:39:25

Данила
Ответов: 1

Добрый день.
Не работает пример L7XX.OSC из библиотеки lcomp. Компилирую его без изменений, в параметрах проекта в Command arguments указываю 0 e2010m, плата соответственно E2010, ревизия B. Программа запускается, но опрос не происходит. Индикатор не мигает, на экране все точки с амплитудой 0. С платой Е14-440 (и соответствующими параметрами) при этом пример работает. Модуль E2010 с программой LGraph 2 тоже работает, значит плата исправна. Что нужно изменить в примере для корректной работы?

#2 Re: Техническая поддержка » Синхронизация АЦП и ЦАП E14-440 » 13.12.2019 11:45:56

Poul пишет:

pI умеет только из внутреннего буфера ЦАП и циклические будет гонять только если AutoInit в 1 (обычно это один период синуса напрмер ). pI2 умеет с подкачкой из буфера PC. Синхронизации между этими двумя потоками  нет.

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

#3 Техническая поддержка » Синхронизация АЦП и ЦАП E14-440 » 11.11.2019 10:22:09

Данила
Ответов: 3

Добрый день.
Конфигурация: E14-440, библиотека lcomp, Qt,  Windows 7.
ЦАП генерирует синусоидальный сигнал, который подаётся на вход цепи. На один канал АЦП подаётся сигнал со входа цепи, на другой с выхода.
Когда я использую интерфейс pI, то ЦАП и АЦП почему то работают в разное время, т.е. ЦАП генерирует сигнал некоторое время, а потом АЦП считывает сигнал, когда на входе уже не синусоида, а сигнал постоянного уровня соответствующий последнему выведенному значению.
Когда я использую интерфейс pI2, фаза сигнала на входе цепи имеет случайное значение. Видимо из-за того, что АЦП и ЦАП инициализируются по очереди, и это занимает разное время.
1. Что я делаю не так при использовании pI?
2. Можно ли как-то синхронизировать АЦП и ЦАП, чтобы сигнал на АЦП со входа цепи (с ЦАП) всегда имел одинаковую фазу?

Ниже приведены основные части кода.

void device::setup() // слот для первоначальной настройки
{
    CallCreateInstance(L"lcomp.dll");
    pIUnknown = CreateInstance(0);
    pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
    pIUnknown->Release();
    if(con_int>0)
    pI->QueryInterface(IID_ILDEV2,(void**)&pI2);
    pI->OpenLDevice();
    pI->GetSlotParam(&sl);
    pI->LoadBios("E440");
    pI->PlataTest(); 
    pI->ReadPlataDescr(&ph); 

adcPar.t1.s_Type = L_ADC_PARAM;
adcPar.t1.AutoInit = 0;
adcPar.t1.dRate = 200.0;
adcPar.t1.dKadr = 0.0;
adcPar.t1.dScale = 0;
adcPar.t1.SynchroType = 0;
adcPar.t1.SynchroSensitivity = 0;
adcPar.t1.SynchroMode = 0;
adcPar.t1.AdChannel = 0;
adcPar.t1.AdPorog = 0;
adcPar.t1.NCh = 2;
adcPar.t1.Chn[0] = 0x0;
adcPar.t1.Chn[1] = 0x1;
adcPar.t1.FIFO = 2048;
adcPar.t1.IrqStep = 2048;
adcPar.t1.Pages = 2;
adcPar.t1.IrqEna = 1;
adcPar.t1.AdcEna = 1;

    ULONG tm = 512000;  // выделили память словах (2 байта)
    pI->RequestBufferStream(&tm,L_STREAM_ADC);
    pI->FillDAQparameters(&adcPar.t1);
    pI->SetParametersStream(&adcPar.t1, &tm, (void **)&data, (void **)&sync,L_STREAM_ADC);

dacPar.t1.s_Type = L_DAC_PARAM;
dacPar.t1.AutoInit=0;
dacPar.t1.dRate=100.0;
dacPar.t1.FIFO=512;
dacPar.t1.IrqStep=512;
dacPar.t1.Pages=8;
dacPar.t1.IrqEna=1;
dacPar.t1.DacEna=1;
dacPar.t1.DacNumber=0;

    pI->FillDAQparameters(&dacPar.t1);

    ULONG db=512000;
    pI->RequestBufferStream(&db, L_STREAM_DAC);
    pI->SetParametersStream(&dacPar.t1,&db, (void **)&data1, (void **)&sync1,L_STREAM_DAC);
    for(int i=0;i<4096;i++) data1[i]=((USHORT)(100*sin((2.0*(3.1415926*i)/8)))&0xFFF)|0x0000;

    pI->EnableCorrection();
    hEventData = CreateEvent(0,FALSE,FALSE,NULL);
    pI->SetLDeviceEvent(hEventData);
    qRegisterMetaType <HANDLE>("HANDLE");
    Overflow.setHandle(hEventData); // в Qt для объекта класса QWinEventNotifier задаю событие, о котором будет выдан соответствующий сигнал
}

void device::start() // слот, запускающий поток
{
        if(con_int>0)  // con_int - переменная для выбора интерфейса
        {
    pI2->InitStartLDeviceEx(L_STREAM_ADC);
    pI2->InitStartLDeviceEx(L_STREAM_DAC);
    pI2->StartLDeviceEx(L_STREAM_DAC);
    pI2->StartLDeviceEx(L_STREAM_ADC);}
        else
        {
            pI->InitStartLDevice();
            pI->StartLDevice();
        }
    Overflow.setEnabled(true);
}

void device::run() // слот, связанный с сигналом о переполнении буфера
{
        if(con_int>0)
        {
        pI2->StopLDeviceEx(L_STREAM_ADC);
        pI2->StopLDeviceEx(L_STREAM_DAC);
        }
        else
        pI->StopLDevice();
        for(int i=0;i<2048;i++)
            {
            Signal[0][i] = ((short *)(data))[2*i];
            Signal[1][i] = ((short *)(data))[2*i+1];
            }
// Тут идёт обработка сигнала и вычисления
        if(con_int>0)
        {
        pI2->InitStartLDeviceEx(L_STREAM_ADC);
        pI2->InitStartLDeviceEx(L_STREAM_DAC);
        pI2->StartLDeviceEx(L_STREAM_DAC);
        pI2->StartLDeviceEx(L_STREAM_ADC); 
        }
        else
        {
        pI->InitStartLDevice();
        pI->StartLDevice();
        }
}

#4 Re: Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 04.05.2016 14:42:34

Здравствуйте! Провел эксперимент: питание оборудования осуществлялось от аккумуляторов, со входа АЦП снимался сигнал с помощью осциллографа. Реальный сигнал монотонно изменялся от -1В до 1В. При регистрации сигнала с помощью модуля наблюдались выбросы. Могут ли ошибки в программе влиять на значения, получаемые от АЦП? Я имею ввиду, что ошибка в значении появляется именно при вызове функции ADC_SAMPLE, а не при дальнейшей обработке полученного значения.

#5 Re: Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 20.04.2016 12:13:35

Опробуем указанные рекомендации. Утилита также была бы кстати.

#6 Re: Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 18.04.2016 11:44:50

Здравствуйте! Хотелось бы узнать, есть ли продвижение в данном вопросе.

#7 Re: Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 31.03.2016 17:33:42

1. 6C4988, Rec. C. Возможно он не 2003г., но старше остальных.  Да, за все часы проверки ошибок с ним не возникало.
2. Сбои носят скорее случайный характер. Частота сбоев зависит от операционной системы. На Windows 7 сбои возникают примерно раз в 2 часа. На Windows 8 и 10 сбои появляются намного чаще.

#8 Re: Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 30.03.2016 10:10:06

1)8D525235, Rev. F;
2)9D984960, Rev. G;
3)7D358636, Rev. F.
Ранее описанная ошибка возникает на каждом из этих модулей.

#9 Re: Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 29.03.2016 17:04:41

1.Lusbapi v.3.4.
2.Данная проблема не возникала при использовании старых модулей (~2003г.). Так что проблемы со схемой подключения быть не должно.

#10 Техническая поддержка » ADC_SAMPLE, lusbapi, E14-440. » 28.03.2016 14:06:00

Данила
Ответов: 13

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

float __fastcall GetData(void)
{float U1, U2, U3;
short r1,r2,r3;
U1 = 0.0;
U2 = 0.0;
U3 = 0.0;
if(!pE440->ADC_SAMPLE(&r1, (WORD)(0x01)))
       {Application->MessageBoxA("Не удалось", "ОШИБКА", MB_OK);} // 1
if(!pE440->ADC_SAMPLE(&r2, (WORD)(0x40)))
       {Application->MessageBoxA("Не удалось", "ОШИБКА", MB_OK);}// 64
if(!pE440->ADC_SAMPLE(&r3, (WORD)(0x48)))
       {Application->MessageBoxA("Не удалось", "ОШИБКА", MB_OK);} // 72
U1 = (10 / 8000.0) * r1 - 4.795;
U2 = (2.5 / 8000.0) * r2;
U3 = (-2.5 / 8000.0) * r3;
bufH = U1 / 1.0;
bufM = U2 / 1.0;
bufIr = U3;
Rr=r2;
	return (bufH, bufM, bufIr, Rr);
}

Для примера приведу последовательные значения r2: 238, 425, 595, 750, 473, 1178. Значение должно монотонно возрастать, однако одно из значений выпадает.
Драйвера и прошивка последней версии. Использую Borland C++ Builder 6.0.

#11 Техническая поддержка » Обновление прошивки E14-440 » 29.02.2016 18:32:37

Данила
Ответов: 1

Здравствуйте. Возникла ранее описанная проблема http://www.lcard.ru/forums/viewtopic.php?id=9666 Есть 2 модуля: 1) №8D525235, при попытке обновить прошивку выдает ошибку 1009; 2) №9D984060, прошивка обновляется успешно, но проблема остается. Установлена библиотека LCOMP от 29.06.2015, ОС Windows XP.

#12 Re: Техническая поддержка » Ввод/вывод данных с помощью E14-440 на labview » 08.06.2015 15:08:20

Poul пишет:

Ну там АЦП прилично буферизуется. Значит такие параметры установлены...

При запуске примера осциллографа скорость отклика меньше секунды. На какие именно параметры стоит обратить внимание?

#13 Техническая поддержка » Ввод/вывод данных с помощью E14-440 на labview » 08.06.2015 13:55:40

Данила
Ответов: 3

Использую модуль E14-440 и библиотеку виртуальных инструментов для labview 7.1. На основе примеров генератора и осциллографа пытался реализовать их комбинацию в одной программе. Программа генерирует сигнал синусоидальной формы. Выход ЦАП пока что подключен к входу АЦП. Сигнал генерируется корректно, отображается на экране осциллографа также корректно. Столкнулся со следующей проблемой: время отклика осциллографа на изменение сигнала составляет до 10 секунд. Достоверно установлено, что на выходе ЦАП сигнал изменяется достаточно быстро. В чем может быть проблема? Возможно ли реализовать данную программу с использованием вышеуказанных средств?

Контакты

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

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

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

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