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

Форум

Вы не вошли.

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

#1 Re: Техническая поддержка » E20-10 ERROR: ADC Thread: STOP_ADC() --> Bad » 12.09.2019 18:20:35

... Вроде разобрался!

1. Не стоило комментировать блок
    // ---- цикл записи получаемых данных и ожидания окончания работы приложения ------------
    while (!IsReadThreadComplete)
    {
                 ......
    }
в теле функции main


2. Заменил код  примера ReadData
// -----------------------------------
    if (!pModule->STOP_ADC())
    {
            ReadThreadErrorNumber = 0x1;
            IsReadThreadComplete = true;
            return 0x0;
    }


на собственный код
// -----------------------
    while (!pModule->STOP_ADC())
    {
        Sleep(10);
        printf("ERROR: STOP_ADC - 1\n");
    }

Алексей

#2 Техническая поддержка » E20-10 ERROR: ADC Thread: STOP_ADC() --> Bad » 12.09.2019 17:15:35

AlexD
Ответов: 1

Добрый  день!

1. Работаю с модулем Е20-10:

Module E20-10 (S/N 6T193838) is ready ... 
   Module Info:
     Module  Revision   is 'B'
     AVR Driver Version is 2.2 (Sep  7 2012)
     PLD    Version     is 2.00.06 (01.09.08)
  Adc parameters:
     ChannelsQuantity =  1
     AdcRate          = 10000.00 kHz
     InterKadrDelay   = 0.00010 ms
     KadrRate         = 10000.00 kHz ,

на основе адаптации примера ReadData для MicroSoft Visual C++ 6.0.



2. В ходе запуска консольной программы модуль периодические выдает ошибку:

ReleaseLInstance() --> OK
ADC Thread: STOP_ADC() --> Bad,

в следующих процедурах

2.1.
DWORD WINAPI ServiceReadThread(PVOID /*Context*/)
{
        ........
    // остановим работу АЦП и одновременно сбросим USB-канал чтения данных
    if(!pModule->STOP_ADC())
    {
        printf("ERROR: STOP_ADC\n");
        ReadThreadErrorNumber = 0x1;
        IsReadThreadComplete = true;
        return 0x0;
    }

2.2.
    // остановим работу АЦП
    // !!!ВАЖНО!!! Если необходима достоверная информация о целостности   .......

    if (!pModule->STOP_ADC())
    {
        printf("ERROR: STOP_ADC - 2\n");
        ReadThreadErrorNumber = 0x1;
    }


3. Как я понимаю это связано с низкоуровневым взаимодействием модуля с ОС Windows.
Есть ли какие нибудь методы "лечения", вставка программных задержек или производить опрос до успешного выполнения?


Алексей

#4 Техническая поддержка » E 502 Запуск измерений по внешнему импульсу на DI_SYN1_RISE » 01.08.2019 19:15:34

AlexD
Ответов: 2

Добрый день!

Необходимо: произвести многоканальные  измерения посредством АЦП, запускаемые по сигналу на DI_SYN1_RISE

0. Переписываю пример кода для L-Card, x502_stream_read.


1. Все хорошо работает в случае запуска измерений посредством программного запуска X502_StreamsStart(hnd);


2. После вставки инструкции на запуск измерений от внешнего импульса 

        err = X502_SetSyncStartMode(hnd, X502_SYNC_DI_SYN1_RISE);

код работает как и прежде, даже в отсутствии физического сигнала на DI_SYN1.
Хотя по идее программа должна ждать прихода сигнала запуска на DI_SYN1


3. Схема соединения контактов analog разъема следующая
- X1 - подключен на источник сигнала;
- DI_SYN1 - подключен на источник синхроимпульса;
- все остальные контакты (включая ANGD, GND32) заземлены за исключением: DAC1, DAC2 - висят в воздухе
-  разъем источника аналогового сигнала и сигнала внешнего синхроимпульса имеют общую землю


4. Программный код следующий

    /* устанавливаем параметры логической таблицы АЦП */
    err = X502_SetLChannelCount(hnd, ADC_LCH_CNT);   

        /* устанавливаем параметры заданного логического канала в логической таблице АЦП.*/
    for (i = 0; (i < ADC_LCH_CNT) && (err == X502_ERR_OK); i++)
        err = X502_SetLChannel(hnd, i, ..., ..., ...., 1);

         /* устанавливаем частоты ввода для АЦП  */
           err = X502_SetAdcFreqDivider(hnd, ADC_FREQ_DIV);
    err = X502_SetAdcInterframeDelay(hnd, 0);

    /* записываем настройки в модуль */
    err = X502_Configure(hnd, 0);

    /* разрешаем синхронные потоки */
    err = X502_StreamsEnable(hnd, X502_STREAM_ADC);

       /* Установка режима генерации частоты синхронизации - тактовой частоты АЦП*/
    err = X502_SetSyncMode(hnd, X502_SYNC_INTERNAL);

    // Установка запуска измерений по внешнему синхроимпульсу
    err = X502_SetSyncStartMode(hnd, X502_SYNC_DI_SYN1_RISE);

    // запуск АЦП на измерение
    err = X502_StreamsStart(hnd);


5. Параметры модуля следующие

Library version: 1.1.13
The following modules are available:
Serial number: 2T222574
Установлена связь со следующим модулем:
Серийный номер          : 2T222574
Наличие ЦАП             : Да
Наличие BlackFin        : Нет
Наличие гальваноразвязки: Да
Индустриальное исп.     : Нет
Наличие интерф. PCI/PCIe: Нет
Наличие интерф. USB     : Да
Наличие интерф. Ethernet: Нет
Версия ПЛИС             : 0.1
Версия PLDA             : 0
Версия прошивки ARM     : 1.0.1.0


6. Не подскажете, порядок вызовов функций настроек для E-502 правильный?
   Рабочий день убил, не вижу ошибки...

Спасибо!
Алексей

Контакты

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

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

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

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