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


Не изменяется sync при чтении данных c АЦП L783

Вы не вошли.

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

Старосветский Артём
18.03.2012 19:30:24
#1

Гость

Не изменяется sync при чтении данных c АЦП L783

Здравствуйте.

Я пытаюсь создать приложение для работы с АЦП карты L783. Но я столкнулся с некоторыми проблемами.
Приведу совсем простой код, который хочется заставить работать (это порезанный код из примера):

///////////////////////////////////////////////
HRESULT hr;

int* a = 0;
int DSize;
int NCh;

HANDLE hEventData = 0;
PLATA_DESCR_U2 ph;
ADC_PAR adcPar;
USHORT* data;
USHORT* volatile sync;
SLOT_PAR sl;

LUnknown* pIUnknown;
IDaqLDevice* pI = 0;

NCh = 4;
DSize = 16 * 1024;
a = new int[DSize];
memset( a, 0, sizeof( int ) * DSize );

if( CallCreateInstance( _T( "lcomp.dll" ) ) == 0 ) {
    // Failed load library
}
pIUnknown = CreateInstance( 0 );
if( pIUnknown == 0 ) {
    // Failed to get interface
}
hr = pIUnknown->QueryInterface( IID_ILDEV, (void**)&pI );
if( FAILED( hr ) ) {
    // QueryInterface(IID_ILDEV) failed
}
pIUnknown->Release();

pI->OpenLDevice();
pI->GetSlotParam( &sl );
if( FAILED( pI->LoadBios( "L783" ) ) ) {
    // LoadBios() failed
}
if( FAILED( pI->PlataTest() ) ) {
    // PlataTest() failed
}

pI->ReadPlataDescr( &ph );

ULONG tm = 512000;
pI->RequestBufferStream( &tm, L_STREAM_ADC );

adcPar.t1.s_Type = L_ADC_PARAM;
adcPar.t1.AutoInit = 0;
adcPar.t1.dRate = 400.0;
adcPar.t1.dKadr = 0.0;
adcPar.t1.dScale = 0;
adcPar.t1.SynchroType = 3;
adcPar.t1.SynchroSensitivity = 0;
adcPar.t1.SynchroMode = 0;
adcPar.t1.AdChannel = 0;
adcPar.t1.AdPorog = 0;
adcPar.t1.NCh = NCh;
adcPar.t1.Chn[0] = 0x0;
adcPar.t1.Chn[1] = 0x1;
adcPar.t1.Chn[2] = 0x2;
adcPar.t1.Chn[3] = 0x3;
adcPar.t1.FIFO = 1024;
adcPar.t1.IrqStep = 1024;
adcPar.t1.Pages = 128;
adcPar.t1.IrqEna = 1;
adcPar.t1.AdcEna = 1;

pI->FillDAQparameters( &adcPar.t1 );
pI->SetParametersStream( &adcPar.t1, &tm, (void **)&data, (void **)&sync,L_STREAM_ADC );

pI->EnableCorrection();

hEventData = CreateEvent( 0, 0, 0, 0 );
pI->SetLDeviceEvent( hEventData );

pI->InitStartLDevice();
pI->StartLDevice();
WaitForSingleObject( hEventData, INFINITE );

pI->StopLDevice();

// Read data[]
///////////////////////////////////////////////

Этот код работает при AutoInit=0. Но при AutoInit=1 уходит в бесконечное ожидание WaitForSingleObject( hEventData, INFINITE ). В чем проблема?

Вообще-то я хотел бы работать с меткой синхронизации sync. Для примера, я хотел бы заменить WaitForSingleObject() на следующий код:

///////////////////////////////////////////////
USHORT* const sync1 = sync;
USHORT* const sync2 = sync1 + DSize;
while( true ) {
    USHORT * const sync0 = sync;
    if( sync0 < sync1 || sync0 >= sync2 ) {
        break;
    }
    Sleep( 0 );
}
///////////////////////////////////////////////

Но указатель sync вообще не изменяется после вызова StartLDevice(). Ни при AutoInit=0, ни при AutoInit=1. В чем проблема здесь?

19.03.2012 11:07:42
#2

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

Re: Не изменяется sync при чтении данных c АЦП L783

а пример как себя ведет?

Старосветский Артём
20.03.2012 05:35:37
#3

Гость

Re: Не изменяется sync при чтении данных c АЦП L783

В примере стоит AutoInit=0 и используется event. К сожалению, компьютер с картой L783 стоит в лаборатории и я смогу проверить пример с другими настройками только на следующей неделе.
Указатель sync должен меняться в приведенном коде, не так ли? И должен ли срабатывать event при AutoInit=1?

20.03.2012 11:35:55
#4

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

Re: Не изменяется sync при чтении данных c АЦП L783

event при autoinit 1 не срабатывает.... sync должен меняться всегда... Примеры есть и L7XX.OSC и L7XX.TST... они разные

Контакты

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

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

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

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