GPIB를 이용한 컴퓨터간 통신



주요한 소프트웨어: Driver Software>>NI-488.2
주요한 소프트웨어 버전: N/A
문제가 해결된 소프트웨어 버전: N/A
부차적인 소프트웨어:

문제점: 컴퓨터간 통신을 GPIB로 하려면 어떻게 셋팅해야 하나요?

솔루션: 아래의 설명은 컴퓨터간 GPIB 통신의 가이드라인으로서 사용 할 수 있는 내용입니다. 순서대로 따라서 해보시기 바랍니다.

  1. 사용할 두 컴퓨터의 GPIB 셋팅을 모두 default로 하세요 (모든 세팅을 프로그램적으로 할 것입니다).

  2. 컴퓨터 한 대를 Controller로, 나머지 하나를 Non-controller로 정의하세요 (셋팅값을 바꿀 필요는 없습니다).

  3. 다음의 명령어들을 테스트해보기 위해 Interactive Control (IBIC) 을 사용할 수 있습니다. 그리고 나서 나중에 프로그래밍할 때 테스트 해 본 명령어들을 이용하시면 됩니다. 참고로 Interactive Control은 MAX를 통해 실행시킬 수 있습니다. MAX창에서 사용할 GPIB 하드웨어를 선택하고 오른쪽 클릭을 하면 찾을 수 있습니다. Non-controller로 지정한 컴퓨터에서 다음을 차례로 실행시켜 보세요 :

    1. GPIB 보드의 세션을 열기 위해 명령어 ibfind GPIB0을 사용하세요.

    2. 시스템 컨트롤을 풀어주기 위해 명령어 ibrsc 0을 사용하세요 (컴퓨터를 Non-controller로 만들어주는 작업입니다).

    3. Non-Controller의 primary GPIB 주소를 0에서 1로 바꾸기 위해 명령어 ibpad 1을 사용하세요.

    4. ATN line이 풀리고 컴퓨터가 listener로 지정되었는지 체크해 보세요. (LACS는 Status Word에서 high가 됩니다) – 이를 끊임없이 반복적으로 체크하기 위해 loop를 만들 수 있습니다.

    5. 명령어 ibrd #를 이용하여 (여기서 #은 받아들일 데이터의 바이트 수 입니다) Controller가 보낸 명령을 읽을 수 있습니다.
Non-Controller가 listener로 지정될 때까지 d의 단계를 loop를 통해 수행할 것입니다 (즉, ControllerNon-controller에 데이터 메시지를 보냅니다). 그리고 나서 e의 단계를 수행하여 메시지를 읽습니다. 쓰기명령을 할 때에도 이와 비슷하게 접근 할 수 있습니다. 단, listener로 지정되었는지 여부를 보기 위해 기다리는 대신 talker로 지정되었는지 여부를 보기 위해 기다릴 것입니다 (TACS는 Status Word에서 high가 됩니다).

아래의 내용은 이 작업을 수행하도록 짜여진 C 프로그램 예제 입니다 :

static int noncontroller;
static char buffer[100];
static int panelHandle;

int main ()
{
// Open a session to the GPIB board
noncontroller = ibfind ("gpib0");

// Release system control
ibrsc (noncontroller, 0);

// Change primary address from 0 to 1
ibpad (noncontroller, 1);

while (1)
{
// Update Status variable
ibwait (noncontroller, 0);

// Wait until non-controller is listener and ATN line is dropped.
if ((ibsta&LACS)&&(!(ibsta&ATN)))
{
ibrd (noncontroller, buffer, 100); // Read data bytes
buffer[ibcnt] = '\n'; // Add linefeed and 0 to string.
buffer[ibcnt + 1] = 0;
printf ("%s",buffer); print buffer
return 0;
} // first if

// If addressed to talk, send the response "I am a talker"
if ((ibsta&TACS)&&(!(ibsta&ATN)))
{
// Send data across the bus.
ibwrt (noncontroller, "I am a talker", strlen("I am a talker"));
return 0;
} // second if
} // while
} // main
Controller 컴퓨터에서 해야 할 일은 primary 주소가 1인 계측기의 세션을 열어놓고 있는지 확인하는 것입니다 (위에서 셋팅한 것처럼). 예를 들면 :

  1. GPIB 보드의 세션을 열기 위해 명령어 ibfind GPIB0을 사용하세요.

  2. Interface clear message를 버스로 보내기 위해 명령어 ibsic을 사용하세요.

  3. 계측기에 주소가 할당되면 언제든지 remote enable line 을 선언할 수 있도록 명령어 ibsre 1을 사용하세요.

  4. Non-Controller의 세션을 열기 위해 명령어 ibdev 0 1 0 13 1 0을 사용하세요.

  5. Non-Controller에 문자열 데이터를 보내기 위해 명령어 ibwrt "HELLO"를 사용하세요.
Non-controller가 매번 listener로 다시 선언되었는지 여부를 확인하기 위해서는 재선언을 가능하게 하는 것이 좋은 방법입니다. 그렇지 않으면 ENOL error (listener를 찾지 못했다는 에러) 가 발생할 것입니다. 재선언을 가능하게 하기 위해서 명령어 ibconfig ibcreaddr 1를 사용할 수 있습니다 (Controller에서 해야 할 유일한 작업입니다).

이러한 GPIB 기능들과 Status Word 에 관해 더 많은 정보를 원하시면 아래의 링크된 주소를 방문하시기 바랍니다.

관련 링크: Product Manuals: NI-488.2 User Manual for Windows
Product Manuals: NI-488.2 Function Reference Manual for Windows

KnowledgeBase 2I4E7MXH: Disabling a GPIB Interface as System Controller (SC)

첨부:





리포트 날짜: 03/30/1998
마지막 업데이트: 06/04/2003
문서 번호: 17TGL4TR