본문으로 건너뛰기
-
Wooai Knowledge Base
Wooai Knowledge Base
  • 개인정보 처리방침
  • Contact
  • About
  • 개인정보 처리방침
  • Contact
  • About
닫기

검색

Measurement & Testing

계측기 제어의 핵심: H/W 인터페이스와 VISA, SCPI 가이드

By WOOAI
2026-10-10 8 Min Read
0

현대의 연구실과 산업 현장에서는 오실로스코프, 디지털 멀티미터, 전원 공급장치 등 다양한 테스트 장비를 PC와 연결하여 자동화된 측정 시스템을 구축합니다. 이종(異種)의 계측기들을 하나의 시스템으로 매끄럽게 통합하고 원격으로 제어하기 위해서는 하드웨어 연결 방식부터 소프트웨어 통신 규약까지 체계적인 표준이 필요합니다.

이 자동화 시스템을 구성하는 물리적 인터페이스, 통신 미들웨어(VISA), 그리고 명령어 프로토콜(SCPI)의 개념과 장단점을 상세히 정리해 드립니다.

1. 물리적 통신 인터페이스 (Physical Interfaces)

계측기와 제어용 PC를 물리적으로 연결하는 규격입니다. 과거에는 고가의 전용 케이블을 사용하는 GPIB가 절대적인 표준이었으나, 네트워크 기술이 발전하면서 현재는 이더넷 기반의 LXI(LAN eXtensions for Instrumentation)가 산업 표준으로 자리 잡았습니다.

분류설명 (Description)장점 (Pros)단점 (Cons)연결 예시 (Examples)
LXI (LAN / Ethernet)범용 이더넷(LAN) 기술을 계측기 제어에 맞게 확장한 산업 표준– 네트워크 허브를 통해 원거리 및 대규모 연결 가능
– 별도의 비싼 전용 컨트롤러 카드 불필요
– IEEE 1588 (PTP) 지원으로 기기 간 정밀한 시간 동기화 가능
– 사내 IT 방화벽 및 네트워크 보안 정책의 영향을 받음
– 과도한 트래픽 발생 시 통신 지연(Latency) 우려
공유기와 RJ-45 LAN 케이블을 통해 오실로스코프에 IP 주소(예: 192.168.0.10)를 할당하여 연결
GPIB (IEEE-488)1970년대 HP에서 개발한(HPIB) 전통적인 8비트 병렬 버스 인터페이스– 계측기 전용으로 개발되어 통신 안정성과 신뢰성이 매우 높음
– 기기들을 직렬(Daisy-chain)로 계속 이어서 연결 가능
– 케이블이 굵고 뻣뻣하며 포트 및 PCIe 컨트롤러 카드의 가격이 매우 비쌈
– 최대 연결 거리(총 20m)와 속도(최대 1~8MB/s)에 제한이 있음
구형 스펙트럼 분석기 후면의 24핀 커넥터에 쉴드 처리된 굵은 GPIB 케이블 연결
USB (USBTMC)범용 직렬 버스(USB)를 이용한 Test & Measurement Class 통신– 플러그 앤 플레이(Plug & Play) 및 핫스왑 지원으로 설정이 매우 간편함
– 별도 전원 없이 동작 가능한 소형 계측기에 유리함
– 산업 환경에서 노이즈에 취약할 수 있음
– 케이블 길이가 짧음 (최대 5m 제한)
책상 위에서 랩탑과 휴대용 데이터 로거를 일반 USB-A to B 케이블로 직접 연결
RS-232 / Serial직렬 통신 포트 (COM 포트)– 구조가 매우 단순하고 구현 비용이 저렴함
– 구형 장비들과의 호환성이 뛰어남
– 전송 속도가 매우 느리고 1:1 연결만 가능함
– Baud rate, Parity 등 통신 파라미터를 수동으로 맞춰야 함
공장 설비 내부의 구형 프로그래머블 전원 공급장치(DC Power Supply) 제어

2. 소프트웨어 및 미들웨어 표준 (Middleware Standards)

물리적인 선이 연결되었다면, 운영체제(OS)에서 각기 다른 제조사(Keysight, Tektronix, Rohde & Schwarz 등)의 장비를 동일한 방식으로 인식하게 해주는 ‘통역사’ 겸 범용 드라이버가 필요합니다.

분류설명 (Description)장점 (Pros)단점 (Cons)활용 예시 (Examples)
VISA
(Virtual Instrument Software Architecture)
다양한 물리적 인터페이스(LXI, GPIB, USB)를 하나의 API로 추상화한 I/O 라이브러리– 인터페이스가 바뀌어도(예: GPIB 장비를 USB 장비로 교체) 제어 소프트웨어 코드를 거의 수정할 필요가 없음
– 대부분의 계측기 제조사가 공통 지원
– NI-VISA, Keysight IO Libraries 등 제조사에서 제공하는 다소 무거운 런타임 드라이버 설치 필수
– 드라이버 간 충돌이 발생할 수 있음
코드 상에서 TCPIP0::192.168.1.10::inst0::INSTR (LXI) 또는 GPIB0::14::INSTR (GPIB) 형태의 리소스 주소를 사용하여 일관되게 접근
IVI
(Interchangeable Virtual Instruments)
기기의 물리적 연결뿐만 아니라 ‘기능 자체’를 추상화한 상위 레벨의 계측기 드라이버 클래스– 장비 제조사나 모델이 완전히 바뀌어도 같은 종류(예: 디지털 멀티미터)라면 코드를 100% 재사용 가능 (하드웨어 종속성 제거)– 초기 프로그래밍 학습 곡선이 높음
– 특정 계측기만이 가진 고유하고 특수한 기능은 표준 API로 제어하기 어려움
IVI-COM 드라이버를 활용해 ‘A사’ 멀티미터와 ‘B사’ 멀티미터를 코드 변경 없이 교체 투입하는 자동화 생산 라인

3. 명령어 프로토콜 (Command Protocols)

통신 채널이 열렸으니 이제 계측기에게 ‘어떤 동작을 수행할지’ 구체적인 명령을 내려야 합니다.

분류설명 (Description)장점 (Pros)단점 (Cons)명령어 예시 (Examples)
SCPI
(Standard Commands for Programmable Instruments)
계측기 제어를 위해 표준화된 텍스트(ASCII) 기반 트리 구조 명령어 규약– 사람이 읽고 이해하기 매우 쉬움 (가독성 우수)
– IEEE 488.2를 기반으로 하여 제조사에 상관없이 기본 명령어(Reset, IDN 등)가 동일함
– 텍스트 문자열을 주고받고 파싱(Parsing)해야 하므로 대용량 이진(Binary) 파형 데이터 전송 시 오버헤드가 발생할 수 있음*IDN? (기기 모델명 및 정보 요청)
MEASure:VOLTage:DC? (DC 전압 측정)
OUTPut ON (출력 활성화)
Raw Socket / TCP/IPVISA 미들웨어를 생략하고 PC에서 계측기의 특정 포트로 직접 소켓 통신을 여는 방식– VISA 라이브러리를 설치할 수 없는 경량 임베디드 환경(Raspberry Pi 등)에서도 제어 가능
– 통신 오버헤드가 적어 처리 속도가 빠름
– 타임아웃, 예외 처리, 연결 끊김 복구 등을 개발자가 직접 코드로 꼼꼼하게 구현해야 함Python의 socket 라이브러리를 이용해 계측기의 5025번 포트에 직접 텍스트 스트림 전송

4. 실전 활용: Python 예제 코드 (PyVISA + SCPI)

LXI 인터페이스(LAN)로 네트워크에 연결된 계측기를 VISA 라이브러리와 SCPI 명령어로 제어하는 가장 표준적인 Python 코드 예시입니다.

import pyvisa
import time

# 1. VISA 리소스 매니저 초기화
rm = pyvisa.ResourceManager()

# 2. LXI 인터페이스(IP 주소)를 통한 계측기 연결
# (네트워크 상의 192.168.0.10 IP를 가진 장비와 통신)
instrument_address = 'TCPIP0::192.168.0.10::inst0::INSTR'
inst = rm.open_resource(instrument_address)

# 3. 연결 확인 (장비 식별자 요청)
# SCPI 표준 명령어인 *IDN? 을 보내고 응답을 읽어옵니다.
idn_response = inst.query('*IDN?')
print(f"* 연결된 계측기 정보: {idn_response}")

# 4. 멀티미터 DC 전압 측정 세팅 및 데이터 수집 예시
inst.write('*RST')                      # 계측기 설정 초기화 (Reset)
time.sleep(1)
inst.write('CONF:VOLT:DC')              # DC 전압 측정 모드로 설정
voltage = inst.query('READ?')           # 측정 실행 및 결과값 읽기
print(f"* 측정된 전압: {voltage} V")

# 5. 연결 세션 정상 종료
inst.close()

5. IVI (Interchangeable Virtual Instruments)

IVI (Interchangeable Virtual Instruments)는 계측기 제어 소프트웨어에서 하드웨어 종속성을 완전히 제거하여, 동일한 종류의 계측기라면 제조사나 모델이 바뀌어도 제어 소프트웨어 코드를 수정하지 않고 그대로 교체(Interchangeability)할 수 있도록 설계된 표준 아키텍처입니다.

5-1) IVI의 핵심 도입 배경과 목적

IVI Foundation(Keysight, National Instruments, Rohde & Schwarz, Tektronix 등이 참여)에서 표준 규격을 제정 및 관리합니다.

  • 하드웨어 교체 비용 절감: 생산 라인이나 ATE(자동 시험 장비) 수명 주기(10~20년) 동안 특정 계측기가 단종되거나 고장 날 경우, 타사 최신 기기로 교체해도 기존 테스트 소프트웨어를 재컴파일하거나 재작성할 필요가 없습니다.
  • 시뮬레이션 기능 지원: 실제 하드웨어 계측기가 PC에 연결되어 있지 않아도 가상 드라이버 모드로 동작시켜 애플리케이션 로직을 오프라인에서 사전 개발/검증할 수 있습니다.
  • 상태 캐싱(State Caching): 이미 계측기에 설정된 파라미터와 동일한 명령은 실제 버스를 통해 다시 보내지 않고 드라이버 단에서 걸러내어 전체 통신 속도 및 테스트 처리 속도를 최적화합니다.
5-2) IVI 드라이버의 계층 구조

IVI는 크게 IVI-C (ANSI C 표준 기반)와 IVI-COM (Microsoft COM 기반) 두 가지 구현 아키텍처로 나뉘며, 구조는 아래와 같이 상위 추상화 계층부터 물리적 버스까지 단계적으로 분리되어 있습니다.

  • IVI Class Driver (클래스 드라이버):
    • 계측기 종류별 공통 표준 인터페이스를 제공합니다 (예: 모든 DMM은 전압 측정, 저항 측정 기능이 존재).
    • 주요 표준 클래스:
      • IviDmm: 디지털 멀티미터
      • IviScope: 오실로스코프
      • IviFgen: 함수 발생기(Function Generator)
      • IviPwrSup: DC 전원 공급장치
      • IviSpecAn: 스펙트럼 분석기
      • IviSwtch: RF/신호 스위치 매트릭스
  • IVI Specific Driver (계측기 전용 드라이버):
    • 계측기 제조사(Keysight, Tektronix 등)가 직접 배포합니다.
    • 클래스 드라이버의 표준 함수 호출을 해당 기기가 실제로 이해하는 원시 명령어(SCPI 문자열 등)로 변환해 전달합니다. PNG
  • Configuration Store (설정 관리자):
    • 소프트웨어 코드 안에는 MyDMM과 같은 논리 이름(Logical Name)만 작성해 두고, 실제 어떤 제조사 드라이버와 물리 주소(예: GPIB0::14::INSTR 또는 TCPIP0::192.168.1.10::inst0::INSTR)를 바인딩할지는 외부 XML/구성 설정 파일에서 지정합니다. PNG
5-3) 코드 적용 구조 예시 (Python / IVI-COM 개념)

다음은 DMM(멀티미터)을 제어할 때 하드웨어 모델에 직접 의존하지 않고 IVI 클래스 인터페이스를 사용하는 구조 예시입니다.

5-3-1) 외부 구성(Logical Name 매핑)

IVI 구성 파일(IviConfigurationStore.xml) 또는 설정 유틸리티에서 논리 이름을 지정합니다:

  • Logical Name: ProductionDMM
  • Driver 매핑: 현재는 Agilent34401 지정, 주소는 GPIB0::22::INSTR
5-3-2) 애플리케이션 코드 (Python 예시)
import comtypes.client

# 1. 특정 하드웨어 모델이 아닌 표준 DMM 클래스 인터페이스(IviDmm) 생성
dmm = comtypes.client.CreateObject("IviDmm.IviDmm")

# 2. 하드웨어 주소 대신 Logical Name을 넘겨 초기화
#    (IDQuery=True, Reset=True)
dmm.Initialize("ProductionDMM", True, True)

# 3. 표준 IVI API로 측정 구성 (DC 전압, 10V 레인지, 5.5자리 분해능)
#    -> 기기 제조사가 Keysight든 Fluke든 함수 규격이 완전히 동일함
dmm.Configure(
    Function=1,  # IviDmmFunctionDCVolts
    Range=10.0,
    Resolution=0.001
)

# 4. 측정값 읽기 (Timeout 2초)
reading = dmm.Read(2000)
print(f"측정 전압: {reading:.4f} V")

# 5. 세션 종료
dmm.Close()
5-3-3) 장비 교체 시 작업 절차
  • 기존 코드: 단 한 줄도 재컴파일하거나 변경할 필요 없음.
  • 교체 작업:
    1. 새 장비(예: Keithley 2000 DMM) 연결
    2. IVI 구성 유틸리티에서 ProductionDMM이 가리키는 드라이버를 Keithley2000으로 변경하고 연결 인터페이스(예: USB/LAN) 주소만 업데이트

5-4) 장점과 한계점

구분내용
장점 • 장비 노후화/단종 시 소프트웨어 유지보수 비용 최소화 (코드 재사용률 100%)
• 오프라인 시뮬레이션 지원으로 장비 없이도 개발 가능
• 계측기 I/O 최적화(상태 캐싱)로 통신 오버헤드 감소
한계점 • 초기 드라이버 아키텍처 학습 곡선이 높음 PNG
• 특정 계측기만의 독자적인 최첨단 특화 기능은 클래스 표준 API에 정의되어 있지 않아 클래스 드라이버만으로는 제어가 불가능함 (이 경우 Specific Driver 확장 기능을 직접 써야 하므로 호환성이 일부 깨짐)

6. SCPI(Standard Commands for Programmable Instruments)

SCPI(Standard Commands for Programmable Instruments)는 계측기를 제어하기 위해 규격화된 텍스트(ASCII) 기반의 범용 명령어 표준 규약입니다. IEEE 488.2 표준을 기반으로 하며, 제조사(Keysight, Tektronix, Rohde & Schwarz 등)에 관계없이 유사한 문법 구조로 장비를 설정하고 측정값을 읽어올 수 있도록 설계되었습니다.

6-1) 계층적 트리 구조 (Hierarchical Tree Structure)

SCPI 명령어는 파일 시스템의 폴더 경로처럼 콜론(:)으로 계층을 구분하는 트리 구조를 사용합니다.

ROOT (최상위)
 ├── SOURce
 │    └── VOLTage
 │         ├── [LEVel]
 │         └── PROTection
 ├── MEASure
 │    ├── VOLTage
 │    │    └── DC?
 │    └── CURRent
 │         └── DC?
 └── OUTPut
      └── [STATe]
  • 경로 구분 (:): 하위 노드로 이동할 때 사용합니다.
  • 루트 복귀 (:): 명령어 맨 앞에 콜론을 붙이면 최상위 루트 노드로 이동하여 해석을 시작합니다.
    • 예: :MEASure:VOLTage:DC?

6-2) 기본 문법 규칙

(6-2-1) 대문자와 소문자 (단축형과 완전형)
  • 매뉴얼에는 보통 MEASure:VOLTage:DC와 같이 대문자와 소문자가 섞여 표기됩니다.
  • 대문자 부분: 필수 입력인 단축형(Short Form)입니다.
  • 전체 단어: 완전형(Long Form)입니다.
  • 대소문자를 구분하지 않으므로 다음은 모두 동일하게 동작합니다:
    • MEAS:VOLT:DC? (단축형 사용 – 가장 보편적)
    • measure:voltage:dc? (소문자 단축형)
    • MEASURE:VOLTAGE:DC? (완전형)
    • (주의: MEASU:VOLT:DC?처럼 단축형과 완전형의 중간 길이는 문법 에러 발생)
(6-2-2) 명령문(Command) vs 질의문(Query)
  • 설정 명령 (Command): 뒤에 파라미터를 붙여 장비 상태를 변경합니다.
    • SOURce:VOLTage 5.0 (전압을 5V로 설정)
    • OUTPut ON (출력 켜기)
  • 질의문 (Query): 끝에 물음표(?)를 붙여 장비에 현재 설정값이나 측정값을 요청합니다.
    • MEASure:VOLTage:DC? (측정된 DC 전압 반환)
    • SOURce:VOLTage? (현재 설정된 전압값 질의)
(6-2-3) 파라미터 구분
  • 키워드와 파라미터 사이: 공백(Space) 한 칸을 둡니다.
    • 예: VOLT 3.3 (O), VOLT:3.3 (X)
  • 여러 파라미터 간 구분: 쉼표(,)를 사용합니다.
    • 예: CONFigure:VOLTage:DC 10, 0.001 (10V 레인지, 1mV 분해능)
(6-2-4) 복합 명령 (세미콜론 ;)

여러 명령을 한 줄로 묶어서 전송할 때 세미콜론(;)을 사용합니다.

  • 같은 계층 내 이동:
    • SOURce:VOLTage 5.0;CURRent 1.0 (SOURce 노드가 유지된 채 VOLTage와 CURRent를 차례로 설정)
  • 다른 계층으로 이동 (루트 콜론 필요):
    • SOURce:VOLTage 5.0;:OUTPut ON (세미콜론 뒤에 콜론(:)을 붙여 루트로 복귀 후 OUTPut 진입)

6-3) 주요 파라미터 데이터 타입

파라미터 타입설명사용 예시
Numeric (수치)정수, 부동소수점, 지수 표기 및 단위 포함 가능10, 3.14, 1E6, 500mV, 10MHz
Special Numeric특수 키워드 (최댓값, 최솟값, 기본값)VOLT MAX, VOLT MIN, VOLT DEF
Boolean (불리언)상태 온/오프ON / OFF, 또는 1 / 0
Discrete (열거형)미리 정의된 키워드 중 선택TRIGger:SOURce INTernal, BUS, EXTernal
String (문자열)따옴표로 감싼 ASCII 문자열DISPlay:TEXT "TEST PASS"

6-4) IEEE 488.2 공통 명령어 (Common Commands)

트리 구조와 무관하게 *로 시작하며, 모든 표준 계측기에서 공통으로 지원하는 핵심 명령입니다.

  • *IDN?: 계측기 식별 정보 반환 (제조사, 모델명, 시리얼 번호, 펌웨어 버전)
    • 응답 예: Keysight Technologies,34461A,MY12345678,A.02.17-02.40
  • *RST: 계측기를 공장 기본(Reset) 상태로 초기화
  • *CLS: Clear Status (에러 큐 및 이벤트 레지스터 초기화)
  • *OPC?: Operation Complete (이전 명령 실행이 완전히 끝났는지 확인, 완료 시 1 반환)
  • *WAI: Wait to Continue (이전 작업이 끝날 때까지 다음 명령 실행 보류)

6-5) 실제 SCPI 제어 통신 흐름 예시 (Python / PyVISA)

import pyvisa

# 리소스 매니저 초기화 및 계측기 연결
rm = pyvisa.ResourceManager()
inst = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")

# 1. 공통 명령: 기기 확인 및 초기화
print(inst.query("*IDN?"))  # 질의: 식별 정보 출력
inst.write("*RST")          # 설정: 리셋

# 2. SCPI 계층 명령: 전원 공급기 설정 예시
inst.write("SOURce:VOLTage:LEVel 12.0")  # 전압 12V 설정
inst.write("SOURce:CURRent:LEVel 1.5")   # 전류 한도 1.5A 설정
inst.write("OUTPut:STATe ON")            # 출력 활성화

# 3. 측정 명령
measured_volt = inst.query("MEASure:VOLTage:DC?")  # DC 전압 측정 질의
print(f"측정값: {float(measured_volt)} V")

# 종료
inst.close()

SCPI는 사람이 직관적으로 읽고 디버깅하기 쉽다는 강력한 장점이 있으나, 텍스트 파싱 오버헤드가 있으므로 오실로스코프의 대용량 파형 원시 데이터 등을 읽을 때는 바이너리 블록(IEEE 488.2 Definite Length Arbitrary Block) 전송 방식을 함께 혼용합니다.

같이 있으면 좋은글

  • 기존 VISA 통신의 한계를 극복하기 위한 HiSLIP 프로토콜
작성자

WOOAI

Follow Me
다른 기사
Previous

AC Power Supply & Grid Simulator

Next

Transformer에 대한 이야기

Category

  • Measurement & Testing

보관함

  • 2026년 10월
  • 2026년 9월

카테고리

  • Measurement & Testing
Copyright 2026 — Wooai Knowledge Base. All rights reserved. Blogsy WordPress Theme