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


Цифровой вывод. Взаимодействие с ЦАП.

Вы не вошли.

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

04.07.2025 18:23:28
#1

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

Цифровой вывод. Взаимодействие с ЦАП.

Устройство E20-10.
Win10, Qt6.
Проблема с потоковой записью в ЦАП. Единичная запись по отсчетам работает - на выходе устройства можно увидеть сигнал. Но хотелось бы "правильно" записывать данные потоком.

Основные части кода:

 // Настройки ЦАП
    dacPar.t1.s_Type = L_DAC_PARAM;
    dacPar.t1.AutoInit=1;  
    dacPar.t1.dRate=1000.0;
    dacPar.t1.FIFO=1024;   
    dacPar.t1.IrqStep=1024; 
    dacPar.t1.Pages=32;
    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
    
  _pI->EnableCorrection();

  hEventData = CreateEvent(0,FALSE,FALSE,NULL);  
  _pI->SetLDeviceEvent(hEventData)
  qRegisterMetaType <HANDLE>("HANDLE");

  _dataReady.setHandle(hEventData);

....
  // Далее соединяем сигнал/слот
connect(&_dataReady, &QWinEventNotifier::activated, this, &MainWindow::sendData);
...
  // Запускаем сбор
   pI2->InitStartLDeviceEx(L_STREAM_DAC);
   pI2->StartLDeviceEx(L_STREAM_DAC);

  // Далее жду прерывания от устройства и записываю данные в слоте sendData
...

#define DSize 32*1024

void MainWindow::sendData()
{
    static qint32 data[DSize];
    _pI2->StopLDeviceEx(L_STREAM_DAC);

    for(int i = 0; i < DSize; i++) 
    {
        USHORT value = ((USHORT)(1024*sin((2.0*(3.1415926*i)/1024)))&0xFFF)|0x0000;
        data1[i] = value;
    }

    _pI2->InitStartLDeviceEx(L_STREAM_DAC);
    _pI2->StartLDeviceEx(L_STREAM_DAC);    
} 

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

Что я делаю не так?
Не понимаю значение переменных в структурах
    dacPar.t1.FIFO=1024;   
    dacPar.t1.IrqStep=1024;
    dacPar.t1.Pages=32;

И как рассчитываются исходя из этого объемы данных, которые нужно записать/считать.
Частота дискретизации нужна 1МГц.