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

개요

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

내용

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

 

ELCK (21)

에러 조건: GPIB 인터페이스가 잠겨 있어 액세스할 수 없습니다.

예상되는 원인: 이 에러는 일반적으로 동일한 인터페이스에 액세스하려는 둘 이상의 프로세스가 있는데 그중 하나의 프로세스가 이미 인터페이스를 잠근 경우 발생합니다. 이 에러는 인터페이스에 적용된 기존 잠금으로 인해 작업을 수행할 수 없는 경우 반환됩니다. 프로세스가 잠금이 존재하지 않는 인터페이스를 잠금 해제하려고 시도하는 경우에도 반환됩니다.

해결책:

  • ELCK 에러를 방지하는 방법은 인터페이스를 다시 잠그려고 시도하기 전에 임의의 시간 동안 기다리는 것입니다. iblck 명령을 사용하여 인터페이스를 잠그는 경우, LockWaitTime을 늘리고 다른 프로세스가 인터페이스에 대한 컨트롤을 해제할 때까지 기다리십시오. 또한 프로세스가 전체 실행 시간 동안 인터페이스를 잠그지 않도록 하십시오.

 

EARM (22)

에러 조건: ibnotify 콜백이 재활성화(Rearm)에 실패했습니다.

예상되는 원인: 이 에러는 NI-488.2 어플리케이션에서 비동기 알림(ibnotify)을 사용할 경우 발생합니다. 이 함수는 하나 이상의 GPIB 이벤트에 대해 어플리케이션에 비동기식으로 알림이 제공되도록 하려는 경우에 유용합니다. 이 이벤트 알림은 콜백 함수에 의해 수행됩니다. 콜백 함수는 ibnotify 호출이 이루어지면 NI-488.2 드라이버에 등록됩니다. 이 에러는 콜백 알림이 잘못된 값을 반환하여 재활성화(Rearm)에 실패했거나 치명적인 드라이버 에러(EDVR)가 발생했음을 나타냅니다.

해결책:

  • 콜백 함수가 반환하는 값이 유효한 ibnotify 마스크 값인지 확인하십시오.
  • 콜백 함수에서 0 값을 반환하여 비동기 이벤트 알림 메커니즘을 등록 해제하십시오. 그런 다음 ibnotify를 호출하여 알림을 다시 활성화하십시오.

 

EHDL(23)

에러 조건: 입력 핸들이 유효하지 않습니다.

예상되는 원인: 몇몇 GPIB 명령은 보드 또는 디바이스의 입력 핸들을 입력 파라미터로 받습니다. 이것이 이 에러의 원인이 될 수 있습니다. 이 에러는 몇 가지 상황에서 발생할 수 있습니다. 다음은 그중 몇 가지 시나리오입니다.

  • 유효한 보드 핸들이 디바이스 핸들 파라미터로 전달되었거나 디바이스 핸들 파라미터가 유효한 보드 핸들로 전달되었습니다.
  • 유효하지 않은 보드 또는 디바이스 설명자가 NI-488.2 함수의 입력으로 전달되었습니다.
  • 0~99의 범위를 벗어나는 보드 ID가 기존 NI-488.2 보드 수준 함수 또는 NI-488.2 루틴으로 전달되었습니다.
    ibconfig 또는 ibmask가 디바이스 유닛 설명자 및 보드 전용 구성 옵션과 함께 호출되었거나 보드 유닛 설명자 및 디바이스 전용 구성 옵션과 함께 호출되었습니다.

해결책:

  • 각 함수를 호출할 때 디바이스 수준 및 보드 수준 함수가 혼동되지 않았는지 확인하십시오.
  • NI 488.2 호출로 전달된 보드 인덱스가 유효한 인덱스 번호인지도 확인하십시오.

 

EWIP (26)

에러 조건: 지정된 입력 핸들에서 대기가 진행 중입니다.

예상되는 원인: 이 에러는 동일한 프로세스에 둘 이상의 스레드가 있으며 둘 이상의 스레드가 동일한 인터페이스에 액세스할 때 발생합니다. EWIP는 지정된 유닛 설명자에서 이미 ibwait 호출이 진행 중임을 나타내며, 스레드가 동일한 설명자를 사용하여 ibwait을 수행하고 있고 다른 스레드가 동일한 설명자에서 ibwait을 호출하려고 시도할 때 발생합니다.

해결책:

  • 언제든 주어진 유닛 설명자에서 하나의 스레드만 ibwait 호출을 수행하십시오.

 

ERST (27)

에러 조건: 인터페이스의 리셋으로 인해 이벤트 알림이 취소되었습니다.

예상되는 원인: ERST는 인터페이스의 리셋으로 인해 이벤트 알림이 취소된 경우 발생합니다. 드라이버에서 보류 중인 ibwait 호출이 다음과 같은 상황에서 ERST를 반환합니다.

  • 동일한 프로세스의 다른 스레드가 ibwait과 동일한 유닛 설명자를 사용하여 ibonl을 호출합니다.
  • 다른 스레드 또는 프로세스가 보드 수준의 ibonl 1을 발행합니다.

다음과 같은 상황에서 ibnotify 콜백이 ERST와 함께 호출될 수 있습니다.

  • 다른 프로세스가 보드 수준의 ibonl 1을 발행합니다.

해결책:

  • 드라이버에서 보류 중인 ibwait 호출과 함께 ibonl을 호출하지 않습니다.
  • 다른 어플리케이션이 ibonl을 호출할 수 없도록 iblck로 인터페이스를 잠급니다.

 

EPWR (28)

에러 조건: 인터페이스의 전원이 끊어졌습니다.

예상되는 원인: EPWR은 인터페이스의 전원이 끊어진 경우 발생합니다. 이는 시스템이 대기 상태로 들어가고 대기 상태에서 돌아올 때 종종 발생합니다.

해결책:

  • 모든 핸들을 오프라인 상태로 만들고 어플리케이션을 다시 초기화합니다.
  • 어플리케이션을 종료하고 시스템을 다시 시작하십시오.
  • PC에서 대기 모드와 최대 절전 모드를 비활성화하십시오.

 

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