GPIB 에러 코드 및 공통 솔루션 (1 부)

개요

본 문서는 GPIB 에러 코드용 솔루션을 제공합니다.

내용

하기 자료의 대부분은 Windows 용 NI-488.2 사용자 매뉴얼을 바탕으로 생성되었습니다 (아래 추가 자료 참고).

 

EDVR (0)

에러 조건 : 드라이버 에러.

설명 : GPIB 하드웨어가 제대로 구성되지 않았거나 ibfind 함수에 전달된 인터페이스 이름 또는 디바이스 이름이 올바르지 않으면 EDVR이 반환됩니다.

가능한 원인 : 보드의 인터페이스 이름이나 계측기의 디바이스 이름을 잘못 입력하면 종종 EDVR 에러가 발생합니다. 예를 들어, NI 보드의 기본 인터페이스 이름은 GPIB0이지만 GPIBO로 잘못 표기할 수 있습니다 (숫자 0 대신 알파벳 "O" 표시). 이 에러는 ibdev 함수에 전달된 보드 인덱스가 올바르지 않은 경우에도 발생할 수 있습니다. 보드 인덱스는 GPIB 보드의 인터페이스 이름의 번호 부분임에도 불구하고, 보드 인덱스가 보드의 1차 주소를 의미한다고 착각하는 경우가 많습니다. 예를 들어 컴퓨터에 PCI-GPIB 보드를 설치하고 1차 주소를 2로 지정할 수 있습니다. 보드의 기본 인터페이스 이름은 GPIB0이므로 보드 인덱스는 2가 아닌 0입니다.

​솔루션

  • GPIB 구성 유틸리티에서 GPIB 하드웨어의 기본 설정을 사용합니다. (예: 인터페이스 이름은 GPIB0, 1차 주소는 0).
  • ibfind 함수 대신 ibdev 함수를 사용하여 계측기와 통신을 시작할 수 있습니다 (디바이스 이름을 사용하지 않기 위함).
  • 계측기에 디바이스 이름을 사용해야하는 경우, GPIB 구성 유틸리티의 Device Templates에서 올바르게 구성되었는지 확인하십시오 (자세한 내용은 NI-488.2 사용자 매뉴얼 참조).
  • 후속 NI-488 함수의 첫 번째 파라미터로 ibdev 또는 ibfind에서 반환된 유닛 설명자를 사용하십시오. 값이 손상되지 않았는지 확인하기 위해 실패한 함수 앞 변수를 검사합니다.

 

ECIC (1)

에러 조건 : 함수에서 GPIB 보드가 Controller-In-Charge (CIC)일 것을 요구하는 경우

설명 : 특정 함수는 GPIB 보드가 CIC일 것을 요구합니다. 이에 해당하는 함수 목록은 NI-488.2 함수 참고 매뉴얼(Function Reference Manual)을 참고하시기 바랍니다. (아래 관련 링크 참조). 기본적으로 GPIB 보드는 시스템 컨트롤러가 되지만, 그렇다고 모두 CIC가 되는 것은 아닙니다. 시스템 컨트롤러는 언제든지 CIC가 될 수 있습니다 (주어진 범용 인터페이스 버스에는 하나의 시스템 컨트롤러가 있을 수 있습니다).

가능한 원인 : 흔히 ECIC 에러는 프로그램 시작시 GPIB 보드가 CIC인지 여부를 확인하는 인터페이스 클리어 메시지를 전송하지 않으면 발생합니다.

​솔루션

  • GPIB 보드가 시스템 컨트롤러로 작동하기로 되어 있는 경우, ibrsc 1을 사용하여 GPIB 보드가 시스템 컨트롤러로 구성되어 있는지 확인하십시오.
  • GPIB 보드가 시스템 컨트롤러인 경우 ibsic 함수 (또는 SendIFC 함수)를 사용하여 인터페이스 클리어 메시지를 전송하십시오. 이렇게 함으로써 GPIB 보드를 CIC로 만듭니다 (또한 버스에서 GPIB 통신을 재설정합니다).
  • GPIB 보드가 버스의 여러 컨트롤러 중 하나인 경우, GPIB 보드가 CIC 상태일 것을 요구하는 함수를 호출하기 전에 항상 상태 단어 ibsta의 CIC 비트를 확인하십시오. 확인되지 않는 경우 컨트롤이 GPIB 보드로 전달 될 때까지 ibwait 함수(CIC 비트의 대기 마스크 설정)를 호출하여 추가 처리를 지연시킬 수 있습니다.

 

ENOL (2)

에러 조건 : 함수가 Listener를 감지하지 못함.

설명 : GPIB 통신에는 하나의 Talker(데이터 메시지 작성용)와 하나 이상의 Listener(데이터 메시지 읽기용)가 필요합니다. ENOL은 일반적으로 쓰기 작업이 시도될 때 발생하는 것이 맞지만, 현재 Listener가 지정되지 않았거나 지정된 주소에 Listener가 없습니다. 디바이스 쓰기의 경우 ENOL은 통신하려는 GPIB 주소가 버스에 연결된 디바이스의 GPIB 주소와 일치하지 않음을 보여줍니다.

가능한 원인 : 통신하려는 계측기가 예상 1차 주소에 있지 않거나, 계측기의 전원이 꺼지 있거나, 계측기 케이블이 연결되지 않았거나 끊겼습니다.

​솔루션

  • 사용자 디바이스의 GPIB 주소가 데이터를 쓰고자 하는 디바이스의 GPIB 주소와 일치하는지 확인하십시오.
  • 케이블이 계측기에 제대로 연결되어 있는지 확인하십시오. 케이블을 교체하여 케이블에 손상이 없는지 확인하십시오.
  • 적어도 2/3개의 디바이스들의 전원이 켜져 있는지 확인하십시오.
  • 보드 수준 통신의 경우, ibcmd 함수에서 적절한 hex code를 사용하여 사용자 디바이스를 Listener로 지정합니다.
  • ibpad 함수(필요한 경우 ibsad 포함)를 호출하여 디바이스의 1차 주소를 설정합니다. ibpad 함수는 디바이스의 이전 설정을 반환하고, 설정한 주소가 디바이스의 실제 주소와 일치하는지 확인합니다.

 

EADR (3)

에러 조건 : GPIB 보드(GPIB0 또는 GPIB1)의 주소가 올바르게 지정되지 않았습니다.

설명 : GPIB 보드가 Controller-In-Charge (CIC)이고 읽기 및 쓰기 기능을 수행하기 전에 제대로 주소 지정이 되지 않은 경우 EADR이 발생합니다. 섀도우 핸드셰이크 기능이 요청되고 GPIB ATN 라인이 이미 지정 해제된 경우 EADR은 ibgts 함수에 의해 반환됩니다. 이 경우 새도우 핸드셰이크를 수행할 수 없으며 이를 알리기 위해 에러가 반환됩니다.

가능한 원인 : GPIB 보드가 통신하려는 계측기와 같은 1차 주소로 설정되었습니다.

​솔루션

  • GPIB 보드를 디바이스와 동일한 주소로 설정하지 마십시오. GPIB 보드는 기본(1차) 주소 0과 2차 주소 없이 항상 (거의) 유지해야합니다. 프로그램 시작시 ibpad 0 및 ibsad 0을 호출하여 보드 주소를 올바르게 구성하십시오.
  • ibrd, ibwrt, RcvRespMsg 또는 SendDataBytes를 호출하기 전에 GPIB 보드의 주소가 올바르게 지정되었는지 확인하십시오.
  • ibcmd 호출 직후를 제외하고는 ibgts 호출을 하지 않도록 합니다. ibcmd 함수로 인해 ATN 라인이 지정되고, 계측기는 데이터 메시지 대신 명령 메시지를 수신할 준비가 됩니다.

 

EARG (4)

에러 조건 : 함수 호출에 대한 인수가 잘못되었습니다.

설명 : 유효하지 않은 인수가 함수 호출에 전달되면 EARG가 발생합니다.

가능한 원인 : 다음은 몇 가지 예입니다. 0~17 범위에 속하지 않는 값을 갖는 ibtmo를 호출하는 경우 (가능한 타임아웃 값은 0~17 범위의 테이블에 해당함. 기본값은 13이며 10초 타임아웃), 두 번째 파라미터의 상위 바이트에 의미없는 비트가 설정된 ibeos를 호출하는 경우, 또는 잘못된 주소로 ibpad (또는 ibsad)를 호출하는 경우

솔루션

  • NI-488.2 기능 참조 설명서(아래의 관련 링크 참조)를 참고로 사용자의 파라미터가 유효한지 확인하십시오.
  • 보드 수준 기능에서 디바이스 설명자를 사용하거나 디바이스 수준 기능에서 보드 설명자를 사용하지 않도록 합니다.

 

ESAC (5)

에러 조건 : GPIB 보드가 시스템 컨트롤러가 아닙니다.

설명 : GPIB 보드에 시스템 컨트롤러 기능이 없을 때 ibsic, ibsre, SendIFC 또는 EnableRemote가 호출되면 ESAC 결과가 표시됩니다. 

가능한 원인 : GPIB 보드가 시스템 컨트롤러로 구성되지 않았습니다.

솔루션

  • ibrsc 1을 호출하거나 GPIB 구성 유틸리티를 사용하여 GPIB 보드 시스템 컨트롤러 기능을 부여합니다.

 

EABO (6)

에러 조건 : I/O 작업이 중단되었습니다.

설명 : EABO에서 특정 사유로 I/O 작업이 취소되었다고 표시합니다.

가능한 원인 : EABO 에러는 일반적으로 읽기 또는 쓰기 작업 중 타임아웃으로 인해 발생하지만 I/O 작업이 진행되는 동안 ibstop 함수, ibclr 함수 또는 이와 유사한 함수를 호출하여 발생할 수도 있습니다. PCI 버스 마스터링(컴퓨터 BIOS의 옵션)이 활성화되어 있지 않으면 PCI-GPIB 보드로 쓰기 작업 중에 타임아웃이 발생할 수 있습니다. 리딩(Reading) 중인 계측기가 이전 명령을 이해할 수 없는 경우, 읽기 작업 중에 타임아웃이 발생할 수 있으므로 사용자에게 표시할 내용이 없습니다. 계측기에 아무 메시지도 표시되지 않는 경우가 있습니다.

  • 계측기로 보내는 메시지의 철자가 잘못되었을 수 있습니다. 예를 들어, "*IDN?" IEEE 488.2 규격 계측기용 일반적인 식별 쿼리입니다. 그런데 이를 계측기가 이해할 수 없는 "*IND?"로 잘못 기입하기 쉽고, 이럴 경우 계측기는 사용자가 읽을 수 있는 메시지 문자열을 생성하지 않습니다.
  • 계측기에 보내는 메시지에 계측기가 이해할 수 없는 명령이 포함될 수 있습니다. 예를 들어, 이전 예제에서 "*IDN?" 메시지는 IEEE 488.2 규격 계측에서만 해석될 수 있습니다. 계측기가 IEEE 488.2 규격에 부합하지 않는 구형 장비인 경우, "*IDN?"을 인식하지 못하기 때문에 계측기는 메시지 문자열이 생성하지 않습니다.
  • 계측기는 종료를 위해 특정 EOS(문자열 끝) 문자를 사용할 수 있지만, 사용자가 메시지 끝에 이 문자를 붙이는 것을 깜박할 수 있습니다. 예를 들어 계측기가 '줄 바꿈(linefeed)'을 EOS 문자로 인지하는 경우, "ID?"에는 응답이 없어도 "ID?\n" (여기서 \n은 IBIC의 줄 바꿈을 의미)에는 응답할 수 있습니다..
  • EOI (5개의 버스 관리 라인 중 하나를 종료 또는 식별)를 종결 방법으로 사용할 수 있지만, 계측기에 메시지 전송이 끝난 후 EOI 라인을 사용하라고 설정하지 않으면, 수행하는 모든 리딩(reading) 작업은 타임아웃됩니다.

​솔루션

  • 메시지가 계측기가 이해하는 명령어로 구성되어 있는지 확인하십시오. 가능한 명령어 목록은 디바이스의 사용자 설명서를 참고하십시오.
  • 계측기가 GPIB Listener가 되기 위해 GPIB 또는 488.2 모드에 있어야 하는지에 대한 내용은 사용자 매뉴얼에서 확인하십시오. GPIB 또는 488.2 모드에 있는 계측기의 경우, 표준 명령어에만 응답하는 경우가 종종 있고, 표준 명령어가 아니면 유효한 명령이 보내졌음에도 불구하고 에러 메시지를 표시합니다.
  • 계측기에 올바른 종단 방법을 사용하고 있는지 확인하십시오. 바이트 수(수신할 것으로 예상되는 특정 바이트 수)는 항상 사용되지만, 일부 계측기는 EOS와 바이트 수를 사용하고 일부는 바이트 수만 사용합니다. 장비와 함께 사용할 수있는 종료 방법에 대해서는 디바이스의 사용 설명서를 확인하십시오.
  • EOS가 종료 방법인 경우 해당 종료 문자를 메시지 끝에 추가하십시오. GPIB 구성 유틸리티에서 종료 문자를 지정할 수는 있지만 NI-488.2 드라이버는 해당 종료문자를 자동으로 추가 않습니다!
  • ibtmo 명령을 사용하여 I/O 작업의 타임아웃 기간을 연장하십시오.
  • 모든 데이터를 수신한 후 EABO 에러가 발생하면, 특정 문자열 끝(예: 줄 바꿈 또는 캐리지 리턴)을 찾고 ibeos 기능을 사용하여 해당 문자의 읽기를 종료하도록 GPIB 보드를 설정하십시오.

 

ENEB (7)

에러 조건 : 존재하지 않는 GPIB 보드.

설명 : GPIB 구성 유틸리티에 지정된 I/O 주소에 GPIB 보드가 없는 경우 ENEB가 발생합니다. 이러한 문제는 보드가 실제로 시스템에 연결되어 있지 않거나, 설정 중에 지정된 I/O 주소가 실제 보드 설정과 일치하지 않거나, 기본 I/O 주소와의 시스템 충돌이 있거나 보드의 인터페이스 이름이 디바이스와 연결된 보드의 인터페이스 이름과 다를 경우 발생합니다.

솔루션

  • GPIB 구성 유틸리티에서 확인 후 보드의 기본 I/O 주소를 결정합니다. 다른 보드가 이 주소 범위의 일부 또는 전부를 사용하려고 하는지 확인하려면 시스템의 자원 관리자에서 점검하십시오. 보드의 인터페이스 이름이 디바이스가 통신하도록 구성된 보드의 인터페이스 이름과 동일한지 확인하십시오 (아래 링크 된 KnowledgeBase 2368N85R 참조).
  • 레거시 보드의 경우, 보드의 점퍼 및 딥 스위치가 GPIB 구성 유틸리티의 리소스 설정과 동일하게 설정되어 있는지 확인하십시오.
  • 컴퓨터의 전원을 끄고 보드가 슬롯에 단단하게 장착되어 있는지 확인하십시오.

 

본 문제 해결에 대한 내용은 GPIB 에러 코드 및 공통 솔루션 (2부) 및 GPIB 에러 코드 및 공통 솔루션 (3부)에서 계속됩니다.