GPIB 에러 코드 및 일반적인 해결책(2부)

개요

이 문서에서는 GPIB 에러 코드에 대한 해결책을 안내합니다.

내용

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

 

EDMA  (8)

에러 조건: 데이터 전송을 위해 DMA를 사용할 때 에러가 발생합니다.

설명: EDMA는 NI-488.2 드라이버가 DMA를 사용하여 GPIB를 통해 데이터의 전송을 시도할 때 시스템 DMA 에러가 발생하는 경우 발생합니다.

해결책:

  • 하드웨어의 EDMA 문제는 GPIB 구성 유틸리티를 사용하여 GPIB 보드가 DMA 리소스를 사용하지 않도록 재구성함으로써 해결할 수 있습니다.
  • 소프트웨어의 EDMA 문제는 ibdma 함수를 사용하여 DMA를 비활성화함으로써 해결할 수 있습니다.

 

EOIP (10)

에러 조건: 비동기 I/O가 진행 중일 때는 함수를 사용할 수 없습니다.

설명: EOIP는 비동기 I/O 작업이 끝나지 않았는데 다른 GPIB 호출이 이루어진 경우 발생합니다. 비동기 I/O 작업이 진행 중일 때는 ibstop, ibnotify, ibwait 또는 ibonl 함수만 사용할 수 있습니다. 다른 GPIB 호출이 시도될 경우 EOIP가 반환됩니다.

예상되는 원인: 비동기 I/O가 진행 중일 때 지원되지 않는 GPIB 함수 호출이 이루어졌습니다.

해결책: 

  • 추가로 GPIB 호출을 생성하기 전에 드라이버와 어플리케이션을 재동기화하십시오. 재동기화는 다음 함수 중 하나를 사용하여 수행됩니다. ibnotify: ibnotify 콜백으로 전달된 ibsta 값이 CMPL을 포함하면 드라이버와 어플리케이션이 재동기화됩니다. ibwait: 반환된 ibstaCMPL을 포함하면 드라이버와 어플리케이션이 재동기화됩니다. ibstop: 이 함수는 드라이버와 어플리케이션이 즉시 재동기화되도록 비동기 I/O 작업을 취소합니다. ibonl: 이 함수는 드라이버와 어플리케이션이 즉시 재동기화되도록 비동기 I/O 작업을 취소하고 인터페이스를 재설정합니다.

 

ECAP (11)

에러 조건: 작업을 실행할 수 없습니다.

설명: ECAP는 GPIB 보드에서 작업을 실행할 수 없거나 소프트웨어에서 특정 기능이 비활성화되었는데 해당 기능이 필요한 호출이 이루어진 경우 발생합니다.

해결책: 

  • 호출의 유효성을 확인하거나 GPIB 인터페이스 보드와 드라이버에 필요한 기능이 있는지 확인하십시오.

 

EFSO (12)

에러 조건: 파일 시스템 에러입니다.

설명: EFSOibrdf 또는 ibwrtf 호출이 파일 작업을 수행하는 중에 문제가 발생한 경우 발생합니다. 구체적으로, 이 에러는 함수가 액세스 중인 파일을 열거나 만들거나 찾거나 쓰거나 닫을 수 없음을 나타냅니다. 이 조건의 구체적인 운영 체제 에러 코드는 ibcntl에 포함되어 있습니다.

해결책: 

  • 지정한 파일 이름, 경로 및 드라이버가 올바른지 확인하십시오.
  • 파일의 액세스 모드가 올바른지 확인하십시오. 예를 들어, 읽기 전용 파일에 대해 쓰기를 시도하지 않습니다.
  • 드라이버에 파일을 보관할 공간이 충분한지 확인하십시오.

 

EBUS (14)

에러 조건: 명령 바이트 전송 에러입니다.


설명: EBUS는 디바이스 함수 실행 중에 특정 GPIB 버스 에러가 발생하는 경우 발생합니다. 모든 디바이스 함수는 주소 지정 및 기타 버스 관리 작업을 수행하기 위해 명령 바이트를 보냅니다. 디바이스는 기본 구성 또는 ibtmo 함수에 지정된 제한 시간 내에 이러한 명령 바이트를 받습니다. EBUS는 이러한 명령 바이트를 보낼 때 시간 초과가 발생한 경우 발생합니다.

예상되는 원인: GPIB 컨트롤러에 연결된 GPIB 디바이스가 없습니다. 모든 계측기가 꺼져 있거나, 계측기 중 하나에서 에러가 발생하여 핸드쉐이킹 라인을 지정하고 있거나, 보드에서 GPIB 케이블이 분리되었거나, GPIB 케이블이 손상되었을 수 있습니다.

해결책:

  • 모든 계측기가 올바르게 작동하고 있고 통신하려는 계측기에 전원이 켜져 있는지 확인하십시오.
  • 모든 계측기를 분리한 다음 하나씩 연결하면서 어느 계측기가 문제의 원인이 되는지 확인하십시오.
  • 느슨하게 연결되었거나 결함이 있는 케이블이 없는지 확인하고, 계측기의 2/3 이상에서 전원이 켜져 있는지 확인하십시오(IEEE 488 사양의 요구 사항).
  • 드라이버가 명령 바이트를 보내기에 타임아웃 기간이 너무 짧은 경우, 타임아웃 기간을 늘리십시오.

 

ESTB (15)

에러 조건: 시리얼 폴 상태 바이트가 손실되었습니다.

설명: ESTBibrsp 함수에 의해서만 보고됩니다. ESTB는 자동 직렬 폴에서 수신된 하나 이상의 직렬 폴 상태 바이트가 저장 공간 부족으로 인해 버려졌음을 나타냅니다. 몇 개의 이전 상태 바이트는 남아 있지만, 가장 오래된 바이트는 ibrsp 호출에 의해 반환되고 있습니다.

예상되는 원인: 계측기가 SRQ 라인을 반복적으로 지정하고 있습니다.

해결책:

  • ibrsp를 더 자주 호출하여 대기열을 비웁니다.
  • ibconfig 함수를 사용하여 자동 풀링을 비활성화(옵션 IbcAUTOPOLL)하거나 GPIB 구성 유틸리티에서 자동 폴링을 비활성화하십시오.

 

ESRQ (16)

에러 조건: SRQ가 ON 위치에 고정되어 있습니다.

설명: ESRQ는 상태 워드(ibsta)의 RSQ 비트가 반환되면 ibwait 함수가 반환되도록 구성한, 디바이스 레벨 ibwait 호출에 의해서만 반환될 수 있습니다. ESRQ는 GPIB SRQ 라인이 ON에 고정되어 있기 때문에 RQS를 기다리는 것이 불가능함을 나타냅니다.

예상되는 원인: 이 상황은 SRQ 라인이 지정된 상태로 유지되도록 하는 케이블 문제, 소프트웨어에 알려지지 않은 디바이스가 SRQ 라인을 지정하는 경우(소프트웨어가 이 디바이스를 알지 못하므로 SRQ 라인을 지정 해제하도록 디바이스를 직렬 폴링할 수 없음), GPIB 버스 테스터(또는 이와 비슷한 장비)가 SRQ 라인이 지정되도록 강제하는 경우 등으로 인해 발생할 수 있습니다.

해결책:

  • 버스에 있는 디바이스 중 하나(어플리케이션에서 사용하지 않는 디바이스 포함)가 SRQ 라인을 지정하고 있는지 확인하십시오. 필요 시 GPIB에서 분리하십시오.
  • GPIB 케이블을 살펴보고 커넥터가 올바르게 장착되어 있는지 확인하십시오.

 

ETAB (20)

에러 조건: 테이블 문제입니다.

설명: ETABFindLstn 함수와 FindRQS 함수가 실행 중일 때만 발생합니다. ETAB는 이러한 함수가 사용하는 테이블에 문제가 있음을 나타냅니다.

예상되는 원인: FindLstn의 경우, ETAB는 주어진 테이블에 리스너가 찾은 주소를 모두 보관할 공간이 충분하지 않음을 의미합니다. FindRQS의 경우, ETAB는 주어진 테이블에 있는 디바이스 중에서 서비스를 요청한 디바이스가 없음을 의미합니다.

해결책:

  • FindLstn의 경우, 결과 배열의 크기를 늘립니다.
  • FindRQS의 경우, 어플리케이션에서 사용하지 않는 다른 디바이스가 SRQ를 지정하고 있는지 확인하십시오. 필요 시 GPIB에서 분리하십시오.

 

본 문제 해결에 대한 내용은 GPIB 에러 코드 및 일반적인 해결책(1부)GPIB 에러 코드 및 일반적인 해결책(3부)에서 계속됩니다.