Коды и основные причины ошибок GPIB (часть 3)

Overview

В этой статье представлены пути устранения ошибок GPIB с различными кодами.

Contents

Большая часть следующего текста взята из Руководства пользователя NI-488.2 для Windows (см. Дополнительные материалы).

 

ELCK (21)

Условие возникновения ошибки: Интерфейс GPIB заблокирован и недоступен.

Возможная причина: Эта ошибка обычно возникает, когда два или более процесса хотят получить доступ к одному и тому же интерфейсу, и один процесс уже заблокировал интерфейс. Эта ошибка выдается, когда операция не может быть выполнена из-за существующей блокировки интерфейса. Она также выдается, когда процесс пытается разблокировать интерфейс в том случае, если такой блокировки не существует.

Решение:

  • Способ избежать ошибки ELCK состоит в том, чтобы ожидать в течение случайного количества времени, прежде чем пытаться снова заблокировать интерфейс. Если для блокировки интерфейса Вы используете команду iblck, то увеличьте LockWaitTime и ждите, пока другой процесс откажется от управления интерфейсом. Также убедитесь, что процессы не блокируют интерфейс на весь период выполнения.

 

EARM (22)

Условие ошибки: обратный вызов ibnotify не удалось перезапустить.

Возможная причина: Эта ошибка возникает, когда в приложениях NI-488.2 мы используем асинхронное уведомление (ibnotify). Эта функция полезна, если Вы хотите, чтобы Ваше приложение было асинхронно уведомлено о возникновении одного или нескольких событий GPIB. Это уведомление о событии осуществляется с помощью функции обратного вызова. Функция обратного вызова регистрируется драйвером NI-488.2, когда сделан вызов ibnotify. Эта ошибка путем возврата недопустимого значения или появления неустранимой ошибки драйвера EDVR) указывает на то, что это уведомление о обратном вызове не удалось перезапустить.

Решения:

  • Убедитесь, что значение, возвращаемое Вашей функцией обратного вызова, является действительным значением маски ibnotify.
  • Чтобы отменить регистрацию механизма уведомления об асинхронных событиях, верните из Вашей функции обратного вызова нулевое значение. Затем вызовите ibnotify, чтобы повторно включить уведомление.

 

EHDL (23)

Условие возникновения ошибки: Дескриптор ввода недействителен.

Возможная причина: Несколько команд GPIB принимают дескриптор ввода платы или устройства в качестве входного параметра, который может быть источником этой ошибки. Эта ошибка может возникнуть при нескольких обстоятельствах. Некоторые сценарии перечислены ниже:

  • Действительный дескриптор платы передается как параметр дескриптора устройства или наоборот.
  • Недопустимый дескриптор платы или устройства передается в качестве ввода любой функции NI-488.2.
  • Идентификатор платы за пределами диапазона 0-99 передается традиционной функции уровня платы NI-488.2 или подпрограмме NI-488.2
    ibconfig или же ibmask вызываются с дескриптором модуля устройства и опцией конфигурации только платы или с дескриптором модуля платы и опцией конфигурации только устройства.

Решения:

  • При вызове соответствующих функций проверьте, не смешаны ли функции уровня устройства и уровня платы.
  • Также проверьте, является ли индекс платы, переданный вызову NI 488.2, действительным номером индекса.

 

EWIP (26)

Условие возникновения ошибки: На указанном дескрипторе ввода выполняется ожидание (Wait).

Возможная причина: Эта ошибка возникает в сценариях, в которых в одном и том же процессе находятся несколько потоков, и когда два или более потока обращаются к одному и тому же интерфейсу. EWIP обозначает, что вызов ibwait уже выполняется для указанного дескриптора модуля и возникает, когда поток уже выполняет ibwait используя тот же дескриптор, а другой поток пытается вызвать ibwait по тому же дескриптору.

Решение:

  • Убедитесь, что в любой рассматриваемый момент времени только один поток выполняет вызов ibwait на данном дескрипторе модуля.

 

ERST (27)

Условие возникновения ошибки: Уведомление о событии было отменено из-за сброса интерфейса.

Возможная причина: ERST возникает, когда уведомление о событии было отменено из-за сброса интерфейса. Вызов ibwait, ожидающий в драйвере, возвращает ERST в следующих ситуациях:

  • Другой поток в том же процессе вызывает ibonl, используя тот же дескриптор модуля, что и ibwait
  • Другой поток или процесс выдает ibonl 1 уровня платы.

Обратный вызов ibnotify может быть вызван с помощью ERST в следующих ситуациях:

  • Другой процесс выдает ibonl 1 уровня платы.

Решения:

  • Не вызывать ibonl при помощи вызовов ibwait, все еще ожидающих в драйвере.
  • Запретить другим приложениям вызывать ibonl, заблокировав интерфейс с помощью iblck

 

EPWR (28)

Условие возникновения ошибки: Пропало питание интерфейса.

Возможная причина: EPWR выдается, когда питание на интерфейсе пропадает. Это часто происходит, когда система переходит в режим ожидания и возвращается из него.

Решения:

  • Переведите все дескрипторы в автономный режим и повторно инициализируйте приложение.
  • Выйдите из приложения и перезапустите систему.
  • Отключите режимы ожидания и гибернации на ПК.

 

Эта информация по устранению неполадок продолжена в материале Коды и основные причины ошибок GPIB (часть 1) а также Коды и основные причины ошибок GPIB (часть 2)