NI-488.2 소프트웨어 및 LabVIEW를 사용한 시리얼 폴링 및 SRQ 서비스

개요

GPIB 컨트롤러의 기능 중 하나는 버스에 있는 디바이스의 서비스 요청을 감지하고 이에 응답하는 것입니다. GPIB의 서비스 요청 라인(SRQ)은 서비스 요청이 대기 중일 때 컨트롤러에 신호를 보내도록 설계되었습니다. 그 후 컨트롤러는 어떤 디바이스가 SRQ 라인을 지정했는지 확인하고 이에 따라 응답해야 합니다. SRQ 감지 및 서비스에 가장 일반적으로 사용되는 방법은 시리얼 폴입니다. 이 어플리케이션 노트에서는 NI-488.2 소프트웨어가 IEEE 488 디바이스의 서비스 요청을 감지하고 이에 응답하는 방법을 설명합니다. 또한 이 어플리케이션 노트에는 LabVIEW 프로그램에서 NI-488.2 소프트웨어 루틴 및 함수를 구현하는 방법을 보여주는 코드 예제가 포함되어 있습니다.

내용

시리얼 폴링의 필요성--교실 비유

GPIB 컨트롤러와 인스트루먼트 간의 통신은 강사와 학생 사이의 통신과 비교할 수 있습니다. 교실에서는 강사가 수업을 관리하고 활동을 통제합니다. GPIB는 컨트롤러가 언제 태스크를 수행할지 결정하는 유사한 방식으로 작동합니다. 강의실에서는 학생이 큰 소리로 말할 수 있는 권한을 가지고 있어야 하며, GPIB에서는 버스에서 대화하도록 지정되지 않은 디바이스가 통신할 수 없습니다. 그러나 컨트롤러가 컨트롤러와 통신하도록 지시하지 않고도 컨트롤러와 통신을 시작할 수 없는 경우, 어떻게 디바이스가 컨트롤러에 통신할 것을 알릴 수 있습니까?

이 문제는 강의실 아날로그에서 어떻게 학생이 강사가 그렇게 말하지 않으면 강사가 강사와 대화할 수 없다고 생각하면 강사가 강사에게 무언가 할 말을 전달할 수 있습니까? 좋은 방법은 학생이 손을 들어 올리는 것입니다. 마찬가지로, 인스트루먼트는 SRQ라는 하드웨어 라인을 지정할 수 있습니다. 이는 컨트롤러가 디바이스에 주의를 기울여야 한다는 것을 알리는 전용 GPIB 버스의 완전히 별도의 라인입니다.

디바이스가 서비스를 요청해야 하는 이유는 무엇입니까? 일부 경우, 컨트롤러는 디바이스에서 데이터를 요청하고, 쓰기 작업이 완료되면 바로 데이터를 읽을 수 있습니다. 그러나 이는 모든 경우에서 가능한 것은 아닙니다. 때로는 컨트롤러가 데이터를 사용할 수 있기 전에 인스트루먼트에서 데이터를 읽으려고 할 수도 있습니다(인스트루먼트가 데이터를 생성하는데 시간이 오래 걸릴 수 있습니다), 타임아웃 에러가 발생할 수 있습니다. 이 상황은 학생이 문제를 종료하기 전에 학생에게 문제에 대한 답을 묻는 것과 비슷합니다. 이 경우, 교수는 문제를 완료할 때마다 학생이 손을 들어올릴 때까지 기다리도록 합니다. 학생이 손을 들어 올리면, 교수는 학생에게 답을 묻습니다. 그러나 GPIB의 경우, 모든 디바이스가 SRQ 라인을 공유하기 때문에, 컨트롤러는 어떤 디바이스가 서비스를 요청했는지 알지 못합니다. 컨트롤러가 어떤 디바이스가 주의를 요구했는지 확인하려면 시리얼 폴링이 필요합니다.

시리얼 폴링의 이론


시리얼 폴링은 GPIB 디바이스가 서비스를 요청할 때 특정 정보를 얻는 방법입니다. 시리얼 폴을 수행할 때, 컨트롤러는 각 디바이스를 쿼리하여 SRQ 라인을 지정한 디바이스를 검색합니다. 각 디바이스는 상태 바이트 레지스터에 포함된 상태 바이트 값을 반환하여 폴에 응답합니다(그림 1 참조). 사용 가능한 데이터의 존재 또는 에러 조건과 같은 디바이스에 따라 이 값이 결정됩니다. ANSI/IEEE 표준 488.1-1987은 디바이스가 서비스를 요청한 경우 상태 바이트의 RQS 비트(비트 6) 중 하나의 비트가 참이 되도록 지정합니다. 상태 바이트의 다른 비트는 인스트루먼트 제조업체가 정의할 수 있습니다. IEEE 488.1과 호환되는 인스트루먼트에는 인스트루먼트 에러가 발생했는지 또는 디바이스가 셀프 테스트를 수행하는지 결정하는 비트가 있습니다. 이러한 비트 정의는 인스트루먼트 제조업체에서 일치하지 않기 때문에, 서비스 요청의 원인을 결정하는 방법은 각 디바이스에 따라 다릅니다.


그림 1. 상태 바이트 레지스터

ANSI/IEEE Standard 488.2-1987은 특정한 서비스 요청 조건을 정의하여 이 문제를 해결하여, 한 모델이 모든 488.2 호환 디바이스의 상태 바이트를 설명하도록 합니다. IEEE 488.2 표준은 마지막 섹션에서 설명된 IEEE 488.1 상태 바이트를 기반으로 하고 확장합니다(그림 2 참조). IEEE 488.2는 RQS 비트를 IEEE 488.1 표준과 마찬가지로 정의합니다. IEEE 488.2는 메시지 사용 가능 (MAV) 비트와 이벤트 상태 비트 (ESB)를 추가합니다. 디바이스가 이전에 데이터를 쿼리한 후 보낼 대기 중인 데이터 메시지가 있는 경우 MAV 비트가 설정됩니다. ESB 비트는 표준 이벤트 상태 레지스터에 정의된 표준 이벤트 중 하나가 발생했음을 나타냅니다. 표준 이벤트 상태 활성화 레지스터에서 대응하는 비트를 설정하여, 어떤 표준 이벤트가 ESB를 설정할지 정의합니다. 이러한 이벤트에는 전원 켜기, 사용자 요청, 명령 에러, 실행 에러, 디바이스 의존 에러, 쿼리 에러, 컨트롤 요청, 작업 완료가 포함됩니다. 서비스 요청 활성화 레지스터에서 대응하는 비트를 설정하여, ESB 또는 MAV가 설정되거나 제조업체 정의 조건이 발생할 때 인스트루먼트가 SRQ 라인을 지정하도록 설정할 수 있습니다.


그림 2. IEEE 488.2 상태 보고 모델

직렬 폴링을 위한 LabVIEW 함수

LabVIEW GPIB 488 서브팔레트에 포함된 다음 함수는 LabVIEW 시리얼 폴링을 수행하는데 필수적입니다:

GPIB 시리얼 폴 (NI-488, ibrsp)은 시리얼 폴을 수행하고 단일 디바이스에서 상태 바이트 값을 반환합니다. 디바이스가 서비스를 요청했는지 확인하려면 프로그램이 Status Byte 값에서 RQS 비트를 수동으로 확인해야 합니다.

GPIB 기다림 (NI-488)은 특정 GPIB 버스에서 지정된 상태 워드 마스크가 나타내는 상태를 기다립니다. Status Word는 기타 GPIB 정보와 같이 SRQ 라인의 상태(비트 12, SRQI), 디바이스가 서비스(비트 11, RQS)를 요청했는지 여부를 포함하는 글로벌 변수(16비트)입니다. 통과된 벡터가 0이면 지정된 케이스를 기다리지 않고 ibsta 또는 Status Word를 업데이트합니다. 그러나 마스크가 비트 12(SRQI)를 확인하도록 설정된 경우, 함수는 GPIB 기다림에 주소가 지정된 특정 GPIB 보드에 대해 특정 라인이 지정될 때까지 기다립니다.

GPIB RQS 기다림 (NI-488에서 비트 11의 마스크가 포함된 ibwait)은 비트 11의 마스크와 함께 [GPIB 기다림] 함수를 사용하는 것과 비슷하지만 비트 12를 기다릴 때 GPIB 보드의 주소 대신 특정 디바이스 주소의 GPIB 주소를 사용하는 것과 비슷합니다. 이 함수는 특정 디바이스가 서비스 요청을 받을 때까지 기다리고, 보드(여러 디바이스가 연결될 수 있는 디바이스)가 서비스 요청을 받을 때까지 기다리지 않습니다. 이 함수는 RQS 비트가 지정되거나 타임아웃이 초과될 때까지 기다립니다.

다음 예는 LabVIEW GPIB 함수를 사용하여 SRQ 및 디바이스를 시리얼 폴링하는 방법을 보여줍니다.

LabVIEW 예제 1 (그림 3)에서 명령이 NI Instrument Simulator에 작성됩니다. 이 명령에는 작업 완료 이벤트가 이벤트 상태 레지스터(ESR)에 등록된 경우 서비스 요청(SRQ)을 생성하는 인스트루먼트에 대한 설명이 포함되어 있습니다. 처음 두 개의 명령은 서비스 요청 활성화 레지스터와 이벤트 상태 활성화 레지스터(IEEE-488.2 스펙)에 이 명령을 씁니다. 세 번째 명령은 인스트루먼트 시뮬레이터가 사인파를 생성하도록 요청하고, 마지막 명령은 작업 완료 이벤트를 생성합니다. 코드의 다음 섹션은 상태 워드의 비트 12를 확인하여 SRQ가 생성될 때까지 기다립니다. 생성된 경우, 디바이스 시뮬레이터에서 시리얼 폴을 수행하여 상태 바이트를 읽고 SRQ가 생성된 이유를 파악합니다. 비트 5가 설정되어 있고 비트 6이 설정되어 있는 경우(작업 완료 비트가 설정된 이벤트 상태 레지스터로부터), 컨트롤러는 디바이스 시뮬레이터에서 데이터를 읽습니다. ESR 레지스터를 지워야 합니다. 이렇게 하면 인스트루먼트가 원하지 않는 서비스 요청을 생성하지 못합니다.



그림 3. LabVIEW 예제 1

LabVIEW 예제 2(그림 4)는 디바이스가 서비스 요청을 기다리는 또 다른 방법을 보여줍니다. 그러나 이 마지막 예에서, 프로세서는 다른 작업을 수행하지 않고 정지하고 기다립니다. 첫 번째 예에서, 디바이스가 서비스를 요청할 때까지 기다리는 동안 다른 작업이 병렬로 실행되었을 수 있습니다.



그림 4. LabVIEW 예제 2

직렬 폴링 LabVIEW GPIB 488.2 함수

GPIB 488.2 함수는 시리얼 폴링을 위한 새로운 기능을 추가하여 하나의 GPIB 명령으로 여러 디바이스를 폴링할 수 있도록 합니다. LabVIEW는 이러한 함수를 GPIB 488.2 함수 서브팔레트(AllSpoll 및 FindRQS)에 포함시켰습니다.

AllSpoll은 단일 루틴 호출로 여러 장치를 직렬 폴링할 수 있습니다. AllSpoll은 폴링된 각 인스트루먼트의 상태 바이트를 미리 정의된 배열로 놓습니다. 각 디바이스의 상태 바이트에서 수동으로 RQS 비트를 확인하여 해당 디바이스가 서비스를 요청했는지 확인해야 합니다.

FindRQS 는 여러 장치를 직렬 폴링할 수 있습니다. 디바이스 중 하나가 SRQ를 지정하여 서비스를 요청하는 경우, 루틴은 서비스를 요청하는 첫번째 디바이스의 인덱스와 상태 바이트 값을 반환합니다.

SRQ 를 지정한 인스트루먼트가 하나만 알고 있으며 어떤 인스트루먼트와 시리얼 폴 응답 바이트를 알고 싶다면, FindRQS 함수를 사용하십시오. 하나 이상의 인스트루먼트가 SRQ를 지정했을 수 있다고 의심되는 경우, 모든 디바이스에서 시리얼 폴 응답 바이트를 받으려면 AllSpoll을 사용하십시오. 상태 바이트가 비트 6을 설정한 경우, 이는 디바이스가 서비스를 요청했음을 의미합니다. 즉, 디바이스가 서비스를 요청할 때 상태 바이트의 값은 최소한 16진수 40입니다.

LabVIEW 예제 3(그림 5)는 LabVIEW NI-488.2 함수를 사용하여 직렬 폴링을 수행하는 방법을 보여줍니다. 이 GPIB 488.2 예제는 위의 GPIB 예제와 매우 유사합니다. 대부분의 LabVIEW GPIB 함수는 "GPIB 쓰기" 및 "GPIB 읽기" 대신 "보내기" 및 "받기"와 같은 LabVIEW GPIB 488.2와 동등한 함수로 대체되었습니다. "GPIB 시리얼 폴" 대신 "ReadStatus" 및 "Test SRQ" 대신 "GPIB 기다림"을 사용하고 마스크를 0으로 설정합니다. 또한 이 예제는 시프트 레지스터를 사용하여 While 루프 사이클 사이에 에러 클러스터를 전달하여 프로그램에서 가능한 에러를 더 잘 컨트롤하는 방법을 보여줍니다.



그림 5. LabVIEW 예제 3

요약

이 어플리케이션 노트는 GPIB 컨트롤러가 NI-488 소프트웨어를 사용하여 버스에서 IEEE 488 디바이스의 서비스 요청을 감지하고 이에 응답하는 방법을 설명합니다. 또한 LabVIEW GPIB 함수를 시리얼 폴 디바이스에 사용하는 방법을 보여주는 LabVIEW 코드 예제도 포함되어 있습니다.

Was this information helpful?

Yes

No