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

Overview

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

Contents

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

 

EDVR (0)

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

Описание: EDVR возникает, когда оборудование GPIB не настроено должным образом, либо неверно имя интерфейса или устройства, переданное функции ibfind.

Возможная причина: Часто ошибки EDVR вызываются неправильным написанием имени интерфейса Вашей платы или имени устройства Вашего прибора. Например, для плат NI имя интерфейса по умолчанию - это GPIB0, но Вы можете набрать его с ошибкой как GPIBO (буква «О» вместо нуля). Эта ошибка также может возникнуть, если неверен индекс платы, переданный функции ibdev. Индекс платы - это числовая часть имени интерфейса для платы GPIB. Многие люди делают неправильное предположение, что это основной адрес платы. Например, я могу установить на свой компьютер плату PCI-GPIB и указать основной адрес 2. Имя интерфейса по умолчанию для платы - GPIB0, поэтому он имеет индекс платы 0, а не 2.

Пути решения:

  • Используйте в утилите настройки GPIB для вашего оборудования настройки по умолчанию (Например, GPIB0 для имени интерфейса и ноль для основного адреса).
  • Чтобы начать сеанс связи с Вашим прибором, используйте функцию ibdev вместо функции ibfind (чтобы избежать использования его имени устройства).
  • Если Вам нужно использовать имена устройств для Ваших приборов, убедитесь, что в разделе Device Templates (шаблоны устройств) в утилите конфигурирования GPIB они правильно настроены (более подробную информацию см. в руководстве пользователя для NI-488.2).
  • В качестве первого параметра в последующих функциях NI-488 используйте дескриптор устройства, возвращенный ibdev или ibfind. Чтобы убедиться, что значение переменной верно, изучите ее написание перед не работающей функцией.

 

ECIC (1)

Условие возникновения: Функция требует, чтобы плата GPIB являлась Ведущим контроллером (CIC).

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

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

Пути решения:

  • Если ожидается, что Ваша плата GPIB должна быть Системным контроллером, используйте ibrsc 1 . Это позволит Вам убедиться в том, что Ваша плата GPIB настроена как Системный контроллер.
  • Если ваша плата GPIB является Cистемным контроллером, то чтобы очистить интерфейс используйте функцию ibsic (или функцию SendIFC). После этого Ваша плата GPIB станет CIC (она также перезапускает связь GPIB на шине).
  • Если Ваша плата GPIB является одним из нескольких контроллеров на шине, то всегда проверяйте бит CIC слова состояния ibsta перед тем, как выполнять любые вызовы функций, для которых требуется, чтобы Ваша плата GPIB имела статус CIC. Если он не отображается, то чтобы отложить дальнейшую обработку до тех пор, пока управление не будет передано на вашу плату GPIB, Вы можете вызвать функцию ibwait (установить маску ожидания для бита CIC).

 

ENOL (2)

Условие возникновения: Функция не обнаружила адресата (-ов).

Описание: Передача данных по GPIB требует одного передающего (Talker, для отправки сообщений данных) и одного или несколько принимающих (Listener, для чтения сообщений данных). ENOL обычно возникает при попытке выполнить операцию записи, которая не предназначена никому из принимающих, или их нет по указанным адресам. Появление ENOL в процессе операции записи обозначает, что адрес GPIB, с которым вы пытаетесь установить связь, не совпадает с адресом GPIB устройства, подключенного к шине.

Возможная причина: Прибор, с которым вы пытаетесь установить связь, не соответствует ожидаемому основному адресу, прибор не включен, или кабель, подключенный к прибору либо отключен, либо сломан.

Пути решения:

  • Убедитесь, что адрес GPIB вашего устройства соответствует адресу GPIB устройства, на которое Вы хотите записать данные.
  • Убедитесь, что кабель правильно подключен к прибору. Чтобы убедиться, что кабель не сломан, попробуйте переставить кабели местами.
  • Убедитесь, что включено не менее двух третей общего числа Ваших устройств.
  • Для адресации Вашего устройства на уровне платы в качестве приемника используйте соответствующий шестнадцатеричный код в функции ibcmd.
  • Чтобы задать основной адрес вашего устройства, вызовите функцию ibpadibsad, если необходимо). Функция ibpad вернет значение предыдущей настройки устройства, и Вы можете проверить, соответствует ли сконфигурированный адрес фактическому адресу устройства.

 

EADR (3)

Условие возникновения: Плата GPIB (GPIB0 или GPIB1) неправильно адресуется.

Описание: EADR возникает, когда плата GPIB является Ведущим контроллером (CIC) и неправильно адресует себя перед выполнением функций чтения и записи. EADR также возвращается функцией ibgts, когда запрашивается функция фонового квитирования, а линия GPIB ATN уже переведена в низкий уровень. В этом случае фоновое квитирование невозможно. Чтобы уведомить вас об этом факте, возвращается ошибка.

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

Пути решения:

  • Никогда не настраивайте плату GPIB на тот же адрес, что и ваше устройство. Вам (почти) всегда следует оставлять плату GPIB настроенной на основной адрес 0 без вторичного адреса. Чтобы правильно настроить адрес Вашей платы, в начале Вашей программы вызовите ibpad 0 и ibsad 0.
  • Перед вызовом ibrd, ibwrt, RcvRespMsg или SendDataBytes убедитесь, что плата GPIB правильно адресована.
  • Избегайте вызова ibgts, кроме как сразу после вызова ibcmd. Функция ibcmd приводит к повышению уровня на линии ATN, которая указывает приборам ожидать сообщений с командами вместо сообщений с данными.

 

EARG (4)

Условие возникновения: Недопустимый аргумент для вызова функции.

Описание: EARG возникает, когда вызову функции передается неверный аргумент.

Возможная причина: Ниже приведены некоторые примеры: Вы вызываете ibtmo со значением вне диапазона от 0 до 17 (возможные значения тайм-аута соответствуют таблице значений от 0 до 17, по умолчанию 13, что представляет собой тайм-аут в 10 секунд); вы вызываете ibeos с бессмысленным набором бит, установленных в старший байт второго параметра; или вы вызываете ibpad (или ibsad) с недопустимыми адресами.

Пути решения:

  • Чтобы убедиться, что Ваши параметры подходят, см. Справочное руководство по функциям NI-488.2 (см. «Ссылки по теме» ниже).
  • Не используйте дескриптор устройства в функции уровня платы или дескриптор платы в функции уровня устройства.

 

ESAC (5)

Условие возникновения: Плата GPIB не работает Системным контроллером так, как это требуется.

Описание: ESAC возникает, когда вызываются ibsic, ibsre, SendIFC или EnableRemote, в то время как плата GPIB не обладает возможностями Системного контроллера.

Возможная причина: Плата GPIB не настроена на выполнение функций Системного контроллера.

Пути решения:

  • Предоставьте плате GPIB возможности Системного контроллера с помощью утилиты конфигурирования GPIB, или вызвав ibrsc 1.

 

EABO (6)

Условие возникновения: Прервана операция ввода-вывода.

Описание: EABO указывает, что операция ввода-вывода была отменена по какой-то причине.

Возможная причина: Ошибка EABO обычно является результатом таймаута во время выполнения операции чтения или записи. Также она может стать результатом вызова функции ibstop, функции ibclr или аналогичных во время выполнения операции ввода-вывода. Если не включен PCI bus mastering (опция в BIOS вашего компьютера), Вы можете получить таймаут во время операций записи на плате PCI-GPIB. Во время операций чтения Вы можете получить таймаут, если прибор, который Вы считываете, не понял предыдущую команду, поэтому ему нечего Вам передавать. Есть несколько причин, по которым прибору нечего передавать:

  • Сообщение для прибора, возможно, было написано неправильно. Например, "* IDN?" является распространенным идентификационным запросом для приборов, совместимых с IEEE 488.2. Это сообщение можно напечатать с ошибкой как «*IND?», и прибор не сможет ее распознать. Поэтому он не будет генерировать доступную для считывания строку сообщения.
  • Сообщение для прибора может содержать команду, которую прибор не распознает. Например, сообщение "*IDN?" из предыдущего примера распознается только приборами, совместимыми с IEEE 488.2. Если Ваш прибор является устаревшим устройством, не совместимым с IEEE 488.2, то он не будет понимать «*IDN?». Поэтому он не будет генерировать доступную для считывания строку сообщения.
  • В качестве способа завершения строки прибор может использовать определенный символ EOS (конец строки). Но Вы можете забыть добавить его в свое сообщение. Например, если Ваш прибор ожидает символ перевода строки в качестве EOS, тогда «ID?» работать не будет, а «ID?\n» будет (где \n представляет собой в IBIC символ перевода строки).
  • В качестве метода завершения Вы можете ожидать увидеть EOI (конец или идентификатор, одна из пяти линий для управления шинами), но если прибор не меняет линию EOI при окончании отправки своего сообщения, любая операция чтения, которую вы выполняете, завершится по таймауту.

Пути решения:

  • Убедитесь, что Ваши сообщения состоят из команд, которые прибор распознает. Обратитесь к руководству пользователя устройства для получения списка возможных команд.
  • Чтобы убедиться, должен ли Ваш прибор находиться в режиме GPIB или 488.2, для того чтобы быть приемником GPIB, ознакомьтесь с руководством пользователя.  Часто приборы способны реагировать только на стандартные команды после того, как они были переведены в этот режим. При получении нестандартной они выдадут ошибку даже несмотря на то, что была отправлена верная команда.
  • Убедитесь, что Вы используете правильный способ завершения команды для Вашего прибора. Всегда используется подсчет количества байт (Когда Вы ожидаете получить в сообщении определенное количество байтов), но некоторые приборы используют EOS и количество байт, некоторые используют EOI и количество байт, а некоторые используют только количество байт. Для получения информации о возможных способах завершения работы с прибором изучите руководство пользователя Вашего устройства.
  • Если методом завершения является EOS, то обязательно добавьте в конец вашего сообщения символ завершения. Вы можете указать символ завершения в утилите конфигурирования GPIB, но драйвер NI-488.2 не будет автоматически добавлять его за Вас.
  • Увеличьте период ожидания для операций ввода-вывода с помощью команды ibtmo.
  • Если вы получите все данные и затем ошибку EABO, то найдите используемый символ конца строки (например, перевод строки LF или возврат каретки CR) и с помощью функции ibeos настройте плату GPIB на завершение чтения при получении этого символа.

 

ENEB (7)

Условие возникновения: Не существующая плата GPIB.

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

Пути решения:

  • Определите базовый адрес ввода-вывода для Вашей платы, посмотрев его в утилите конфигурирования GPIB. Проверьте диспетчер ресурсов вашей системы, чтобы узнать, пытается ли другая плата использовать часть или весь этот диапазон адресов. Убедитесь, что имя интерфейса Вашей платы совпадает с именем интерфейса платы, на связь с которой настроено Ваше устройство (см. Раздел Базы Знаний 2368N85R, приведенный ниже).
  • Для устаревших плат убедитесь, что перемычки и dip-переключатели на плате настроены на те же параметры ресурсов, на какие она настроена в утилите конфигурирования GPIB.
  • Выключите компьютер и убедитесь, что плата плотно вставлена в гнездо.

 

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