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


Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

Вы не вошли.

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

Андрей
19.07.2012 08:57:23
#1

Гость

Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

Используется модуль Е14-440D.
Взаимодействие через Lusbapi.dll (версия 3.4). Реализован (на C#) алгоритм, аналогичный примеру на C++ ReadData (Потоковый сбор данных с АЦП и асинхронный режим работы функции ReadData).
Кроме того, в отдельном потоке запущена периодическая запись в ЦАП (в оба канала). Вызовы функций библиотеки в каждом потоке находятся в критических секциях (lock в C#).

Сокращенный код выглядит примерно так:

Thread_DAC() // Работа с ЦАП (в отдельном потоке)
{
for(;;)
{
  lock(lc) { if (!DAC_SAMPLE() { ...... };  } // ошибка
  Sleep(50); // точность генерации не важна.. просто тестовый сигнал
}
}

Thread_ADC() // Работа с АЦП (в отдельном потоке)
{
for(;;)
{
   lock(lc) { ReadData(); }
   WaitForSingleObject();
   Sleep(1000);
}
}

При длительной работе программы вызов DAC_SAMPLE иногда (1 раз в 4..6 часов) возвращает FALSE, GetLastErrorInfo() при этом возвращает:

Код ошибки 320;
Не выполнилась функция SEND_COMMAND(). Не удалось передать номер команды в LBIOS.

Система: Intel Atom N570, чипсет Intel N10/ICH7, ОС Windows 7 x86 Pro Rus, драйвер Е14-440 версии 6.0.2.0.

Других сбоев в ходе работы не обнаружено. В генерируемом сигнале (выход с ЦАП заведен на 2 канала АЦП) заметен разрыв длительностью ~5 с (т.е. АЦП продолжал собирать отсчеты, а ЦАП не менял выходного значения).
http://img213.imageshack.us/img213/5175/dacadc.png

Может ли причиной ошибки быть слишком частый вызов DAC_SAMPLE() или нехватка скорости USB канала? АЦП работает на частоте 9600 Гц, используется только 3 канала, длительность асинхронного ввода - 5 с.

Андрей
19.07.2012 12:01:31
#2

Гость

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

Дополнение:
Ошибка еще раз воспроизвелась (тот же код 320), доп. информация такая:  время исполнения DAC_SAMPLE() составило при этом 5 с. Длительность блока данных в асинхронном чтении при этом была 12 с, т.е. взаимосвязи этих значений нет.

19.07.2012 12:46:58
#3

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

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

1. Какая ревизия Вашего модуля Е14-440? Чтобы узнать ревизию можно воспользоваться штатной утилитой ModulesViewer.
2. Интервал 5с - это штатный таймаут выполнения команды.
3. Думаю, что в данном случае секции lock можно убрать.
4. А что будет если попробовать заменить функцию DAC_SAMPLE() на TTL_IN(). Эффект повторится?

19.07.2012 13:00:01
#4

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

Вообще я бы первым делом оторвал чтение и оставил только вывод на ЦАП в цикле. Чтобы не думать про потоки и т.п.

Андрей
19.07.2012 13:23:03
#5

Гость

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

1. Ревизия F, модификация 255, версия прошивки 4.1.
4. Попробую сделать (периодический запрос линий ТТЛ тоже нужен).
Проблема с повторение эффекта.. очень редко происходит, а сделать отдельный минимальный тест пока нет возможности.
В принципе эта ошибка для текущей задачи некритичная (фактически сейчас получается 1 сбой на ~150000 вызовов, в итоговой реализации эти вызовы будет единичными и с возможностью повтора), главное, что есть возвращаемый код ошибки, т.е. информирование о проблеме.

Андрей
27.07.2012 10:03:36
#6

Гость

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

Программа непрерывно отработала еще несколько суток подряд, 3 суток без ошибок, потом редко и нерегулярно (4 раза за 2 суток) возникали следующие ошибки:

1. Ошибка при вызове TTL_OUT() Код ошибки 320;
Не выполнилась функция SEND_COMMAND(). Не удалось передать номер команды в LBIOS.

2. Ошибка при вызове DAC_SAMPLE() Код ошибки 318;
Не выполнилась функция PUT_LBIOS_WORD(). В DSP модуля не удалось записать значение в требуемую переменную LBIOS.

Во всех случаях время исполнения команд составило около 5 с.

Михаил
21.09.2013 09:48:32
#7

Гость

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

"Не выполнилась функция PUT_LBIOS_WORD(). В DSP модуля не удалось записать значение в требуемую переменную LBIOS"   -КАК УСТРАНИТЬ,КАК ИСПРАВИТЬ ЧТОБ ЗАПИСЬ БЛОКОВ ПРОХОДИЛА НЕПРЕРЫВНО,БЕЗ ПЕРЕЗАПУСКА ПРОГРАММЫ.

21.09.2013 20:01:15
#8

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

Re: Е14-440D, вызов DAC_SAMPLE() - редкая ошибка 320

Михаил.
1.  Какая ревизия Вашего модуля Е14-440? Чтобы узнать ревизию можно воспользоваться штатной утилитой ModulesViewer.
2. При каких условиях возникает ошибка? На фоне потокового ввода/вывода данных на АЦП/ЦАП?