이 문서에서는 범용 인터페이스 버스 (GPIB) 에러 코드에 대한 해결책을 제공합니다.
다음 자료의 대부분은 Windows용 NI-488.2 사용자 매뉴얼을 바탕으로 생성되었습니다(아래 관련 자료 참고).
에러 조건: 드라이버 에러.
설명: GPIB 하드웨어가 올바르게 구성되지 않거나, 인터페이스 이름 또는 ibfind 함수에 전달된 디바이스 이름이 올바르지 않으면 EDVR이 반환됩니다.
예상되는 원인: 보드의 인터페이스 이름이나 인스트루먼트의 디바이스 이름을 잘못 쓸 때 EDVR 에러가 발생하는 경우가 많습니다. 예를 들어, NI 보드의 기본 인터페이스 이름은 GPIB0이지만, GPIBO(0이 아닌 "oh")로 잘못 작성할 수 있습니다. ibdev 함수에 전달된 보드 인덱스가 올바르지 않은 경우에도 이 에러가 발생할 수 있습니다. 보드 인덱스는 GPIB 보드의 인터페이스 이름의 숫자 부분이지만, 많은 사람들이 보드의 주요 주소라고 잘못 가정합니다. 예를 들어, PCI-GPIB 보드를 컴퓨터에 설치하고 2의 주요 주소를 제공할 수도 있습니다. 보드의 기본 인터페이스 이름은 GPIB0이기 때문에 보드 인덱스는 0이 아니라 2입니다.
해결책:
에러 조건: 함수는 GPIB 보드가 CIC (Controller-In-Charge)이어야 합니다.
설명: 특정 함수의 경우 GPIB 보드가 CIC이어야 합니다. 이러한 함수는 NI-488.2 함수 참조 매뉴얼(아래 관련 링크 참조)에 설명되어 있습니다. 기본으로, GPIB 보드는 시스템 컨트롤러가 되지만, 이는 담당 컨트롤러와는 다릅니다. 시스템 컨트롤러는 언제든지 CIC가 될 수 있습니다(주어진 범용 인터페이스 버스에 하나의 시스템 컨트롤러가 있을 수 있습니다).
예상되는 원인: GPIB 보드가 CIC인지 확인하기 위해 프로그램을 시작할 때 인터페이스를 지우지 않아도 ECIC 에러가 발생하는 경우가 자주 있습니다.
해결책:
에러 조건: 함수가 리스너를 감지하지 않았습니다.
설명: GPIB 통신에는 하나의 토커(데이터 메시지 쓰기)와 하나 이상의 리스너(데이터 메시지 읽기)가 필요합니다. 일반적으로 ENOL은 쓰기 작업이 시도되었지만, 지정된 주소에 리스너가 없거나 리스너가 없을 때 발생합니다. 디바이스 쓰기에서 ENOL은 통신하려는 GPIB 주소가 버스에 연결된 디바이스의 GPIB 주소와 일치하지 않음을 나타냅니다.
예상되는 원인: 통신하려는 인스트루먼트가 예상되는 주요 주소에 있지 않거나, 인스트루먼트의 전원이 켜져 있지 않거나, 인스트루먼트의 케이블이 연결이 끊겼거나 깨졌습니다.
해결책:
에러 조건: GPIB 보드(GPIB0 또는 GPIB1)의 주소가 올바르지 않습니다.
설명: EADR은 GPIB 보드가 CIC (Controller-In-Charge)이고 읽기 및 쓰기 함수를 읽기 전에 적절하게 주소를 지정하지 않을 때 발생합니다. 또한 쉐도우 핸드쉐이크 기능이 요청되고 GPIB ATN 라인이 이미 지정되지 않은 경우 함수 ibgts에 의해 EADR이 반환됩니다. 이 경우, 쉐도우 핸드쉐이크는 가능하지 않으며 에러가 반환되어 이를 알려줍니다.
예상되는 원인: GPIB 보드는 통신하려는 인스트루먼트와 같은 주요 주소로 설정되어 있습니다.
해결책:
에러 조건: 함수 호출에 유효하지 않은 인수.
설명: 유효하지 않은 인수가 함수 호출에 전달되면 EARG 결과가 발생합니다.
예상되는 원인: 다음은 몇 가지 예입니다: 0에서 17 사이의 범위가 아닌 값으로 ibtmo를 호출합니다(가능한 타임아웃 값은 0에서 17 사이의 값의 테이블에 대응하며, 기본값은 13이며, 이는 10초 타임아웃을 나타냅니다); 두 번째 파라미터의 높은 바이트에 설정된 의미없는 비트로 ibeos를 호출하거나, 유효하지 않은 주소로 ibpad (또는 ibsad)를 호출합니다.
해결책:
에러 조건: GPIB 보드는 필요에 따라 시스템 컨트롤러가 아닙니다.
설명: GPIB 보드에 시스템 컨트롤러 기능이 없는 경우, ESAC 결과는 ibsic, ibsre, SendIFC, 또는 EnableRemote가 호출될 때 발생합니다.
예상되는 원인: GPIB 보드가 시스템 컨트롤러가 되도록 설정되어 있지 않습니다.
해결책:
에러 조건: I/O 작동 강제 종료.
설명: EABO는 어떤 이유로 인해 I/O 작업이 취소되었음을 나타냅니다.
예상되는 원인: EABO 오류는 일반적으로 읽기 또는 쓰기 작업 중 타임아웃의 결과이지만, I/O 작업이 진행 중일 때 ibstop 함수, ibclr 함수 또는 유사한 함수를 호출하여 발생할 수도 있습니다. PCI 버스 마스터링(사용자 컴퓨터의 BIOS 있는 옵션)이 활성화되어 있지 않은 경우, PCI-GPIB 보드를 사용하여 쓰기 작업 중에 타임아웃을 받을 수 있습니다. 읽는 인스트루먼트가 이전 명령을 이해하지 못하여 사용자에게 쓸 내용이 없는 경우 읽기 작업 중 타임아웃을 받을 수 있습니다. 인스트루먼트가 사용할 수 없는 이유는 다음과 같습니다.
해결책:
에러 조건: 존재하지 않는 GPIB 보드.
설명: ENEB는 GPIB 설정 유틸리티에서 지정한 I/O 주소에 GPIB 보드가 존재하지 않을 때 발생합니다. 이 문제는 보드가 시스템에 물리적으로 연결되어 있지 않거나, 설정 중 지정된 I/O 주소가 실제 보드 셋팅과 일치하지 않거나, 기본 I/O 주소와 시스템이 충돌하거나, 보드의 인터페이스 이름이 디바이스와 연관된 보드의 인터페이스 이름과 다를 때 발생합니다.
해결책:
에러 조건: 데이터 전송을 위해 DMA를 사용할 때 에러가 발생합니다.
설명: EDMA는 NI-488.2 드라이버가 DMA를 사용하여 GPIB를 통해 데이터의 전송을 시도할 때 시스템 DMA 에러가 발생하는 경우 발생합니다.
해결책:
에러 조건: 비동기 I/O가 진행 중일 때 함수를 사용할 수 없습니다.
설명: EOIP는 비동기 I/O 작업이 끝나지 않았는데 다른 GPIB 호출이 이루어진 경우 발생합니다. 비동기 I/O 작업이 진행 중일 때에는 ibstop, ibnotify, ibwait 또는 ibonl 함수만 사용할 수 있습니다. 다른 GPIB 호출이 시도될 경우 EOIP가 반환됩니다.
예상되는 원인: 비동기 I/O가 진행 중일 때 지원되지 않는 GPIB 함수 호출이 이루어졌습니다.
솔루션:
에러 조건: 작업을 실행할 수 없음.
설명: ECAP는 GPIB 보드에서 작업을 실행할 수 없거나 소프트웨어에서 특정 기능이 비활성화되었는데 해당 기능이 필요한 호출이 이루어진 경우 발생합니다.
솔루션:
에러 조건: 파일 시스템 오류입니다.
설명: EFSO는 ibrdf 또는 ibwrtf 호출이 파일 작업을 수행하는 중에 문제가 발생한 경우입니다. 구체적으로, 이 에러는 함수가 액세스 중인 파일을 열거나 만들거나 찾거나 쓰거나 닫을 수 없음을 나타냅니다. 이 조건의 구체적인 운영 체제 에러 코드는 ibcntl에 포함되어 있습니다.
해결책:
에러 조건: 명령 바이트 전송 에러입니다.
설명: EBUS는 디바이스 함수 실행 중에 특정 GPIB 버스 에러가 발생하는 경우 발생합니다. 모든 디바이스 함수는 주소 지정 및 기타 버스 관리 작업을 수행하기 위해 명령 바이트를 보냅니다. 디바이스는 기본 구성 또는 ibtmo 함수에 지정된 제한 시간 내에 이러한 명령 바이트를 받습니다. EBUS는 이러한 명령 바이트를 보낼 때 시간 초과가 발생한 경우 발생합니다.
예상되는 원인: GPIB 디바이스가 GPIB 컨트롤러에 연결되어 있지 않습니다. 모든 계측기가 꺼져 있거나, 계측기 중 하나에서 에러가 발생하여 핸드쉐이킹 라인을 지정하고 있거나, 보드에서 GPIB 케이블이 분리되었거나, GPIB 케이블이 손상되었을 수 있습니다.
해결책:
에러 조건: 시리얼 폴 상태 바이트가 손실되었습니다.
설명: ESTB는 ibrsp 함수에 의해서만 보고됩니다. ESTB는 자동 직렬 폴에서 수신된 하나 이상의 직렬 폴 상태 바이트가 저장 공간 부족으로 인해 버려졌음을 나타냅니다. 몇 개의 이전 상태 바이트는 남아 있지만, 가장 오래된 바이트는 ibrsp 호출에 의해 반환되고 있습니다.
예상되는 원인: 인스트루먼트가 반복적으로 SRQ 라인을 지정하고 있습니다.
해결책:
에러 조건: SRQ가 ON 위치에 고정되어 있습니다.
설명: ESRQ는 상태 워드(ibsta)의 RSQ 비트가 반환되면 ibwait 함수가 반환되도록 구성한 디바이스 레벨의 ibwait 호출에 의해서만 반환될 수 있습니다. ESRQ는 GPIB SRQ 라인이 ON에 고정되어 있기 때문에 RQS를 기다리는 것이 불가능함을 나타냅니다.
예상되는 원인: 이 상황은 케이블 문제가 SRQ 라인이 지정된 상태로 유지되도록 하는 경우, 소프트웨어에 알려지지 않은 디바이스가 SRQ 라인을 지정하는 경우(소프트웨어가 이 디바이스를 알지 못하므로 디바이스를 직렬 폴링하여 SRQ 라인을 지정 해제할 수 없음), GPIB 버스 테스터(또는 이와 비슷한 장비)가 SRQ 라인을 지정되도록 강제하는 경우 등으로 발생할 수 있습니다.
해결책:
에러 조건: 테이블 문제.
설명: ETAB은 FindLstn 함수와 FindRQS 함수가 실행 중일 때만 발생합니다. ETAB은 이러한 함수가 사용하는 테이블에 문제가 있음을 나타냅니다.
예상되는 원인: FindLstn의 경우, ETAB은 주어진 테이블에 리스너가 찾은 주소를 모두 보관할 충분한 공간이 없음을 의미합니다. FindRQS의 경우, ETAB은 주어진 테이블에 있는 디바이스 중에서 서비스를 요청한 디바이스가 없음을 의미합니다.
해결책:
에러 조건: GPIB 인터페이스가 잠겨 있어 액세스할 수 없습니다.
예상되는 원인: 이 에러는 일반적으로 동일한 인터페이스에 액세스하려는 두 개 이상의 프로세스가 있고 한 프로세스가 이미 인터페이스를 잠근 경우 발생합니다. 이 에러는 인터페이스에 적용된 기존 잠금으로 인해 작업을 수행할 수 없는 경우 반환됩니다. 프로세스가 잠금이 존재하지 않는 인터페이스를 잠금 해제하려고 시도하는 경우에도 반환됩니다.
솔루션:
에러 조건: ibnotify 콜백이 재활성화(Rearm)에 실패했습니다.
예상되는 원인: 이 에러는 NI-488.2 어플리케이션에서 비동기 알림(ibnotify)을 사용할 경우 발생합니다. 이 함수는 하나 이상의 GPIB 이벤트에 대해 어플리케이션에 비동기식으로 알림이 제공되도록 하려는 경우에 유용합니다. 이 이벤트 알림은 콜백 함수에 의해 수행됩니다. 콜백 함수는 ibnotify 호출이 이루어지면 NI-488.2 드라이버에 등록됩니다. 이 에러는 콜백 알림이 잘못된 값을 반환하여 재활성화(Rearm)에 실패했거나 치명적인 드라이버 에러(EDVR)가 발생했음을 나타냅니다.
해결책:
에러 조건: 입력 핸들이 유효하지 않습니다.
예상되는 원인: 몇몇 GPIB 명령은 보드 또는 디바이스의 입력 핸들을 입력 파라미터로 받습니다. 이것이 이 에러의 원인이 될 수 있습니다. 이 에러는 몇 가지 상황에서 발생할 수 있습니다. 다음은 그중 몇 가지 시나리오입니다.
해결책:
에러 조건: 지정된 입력 핸들에서 대기가 진행 중입니다.
예상되는 원인: 이 에러는 동일한 프로세스에 두 개 이상의 스레드가 있고 두 개 이상의 스레드가 동일한 인터페이스에 액세스할 때 발생합니다. EWIP는 지정된 유닛 설명자에서 이미 ibwait 호출이 진행 중임을 나타내며, 스레드가 동일한 설명자를 사용하여 ibwait을 수행하고 있고 다른 스레드가 동일한 설명자에서 ibwait을 호출하려고 시도할 때 발생합니다.
솔루션:
에러 조건: 인터페이스의 리셋으로 인해 이벤트 알림이 취소되었습니다.
예상되는 원인: ERST는 인터페이스의 리셋으로 인해 이벤트 알림이 취소된 경우 발생합니다. 드라이버에서 보류 중인 ibwait 호출이 다음과 같은 상황에서 ERST를 반환합니다.
다음과 같은 상황에서 ibnotify 콜백이 ERST와 함께 호출될 수 있습니다.
해결책:
에러 조건: 인터페이스의 전원이 끊겼습니다.
예상되는 원인: EPWR은 인터페이스의 전원이 끊어진 경우 발생합니다. 이는 시스템이 대기 상태로 들어가고 대기 상태에서 돌아올 때 종종 발생합니다.
해결책: