SCPI

thumb|right|원격 SCPI 명령을 수신하는 텍트로닉스 TDS210 디지털 오실로스코프의 후면 패널에 RS-232 (DE9) 및 IEEE-488 커넥터가 표시되어 있다.
thumb|right|원격 SCPI 명령을 수신하는 리고르 DS1074Z 디지털 오실로스코프의 후면 패널에 USB-B 및 이더넷 (RJ45) 커넥터가 표시되어 있다.

SCPI(Standard Commands for Programmable Instruments, 프로그래밍 가능 계측기를 위한 표준 명령어, "스키피"로도 발음)는 자동 시험 장비 및 전자 테스트 장비와 같은 프로그래밍 가능한 테스트 및 측정 장치를 제어하는 데 사용되는 통사론 및 명령어에 대한 표준을 정의한다.

 개요 
SCPI는 사양인 "표준 코드, 형식, 프로토콜 및 공통 명령어" 위에 추가 레이어로 정의되었다. 이 표준은 모든 계측기에 사용될 공통 통사론, 명령어 구조 및 데이터 형식을 지정한다. 이 표준은 모든 계측기에서 사용할 수 있는 일반 명령어(예: CONFigure 및 MEASure)를 도입했다. 이러한 명령어는 서브시스템으로 그룹화된다. SCPI는 또한 여러 계측기 클래스를 정의한다. 예를 들어, 제어 가능한 모든 전원 공급 장치는 동일한 DCPSUPPLY 기본 기능 클래스를 구현한다. 계측기 클래스는 구현하는 서브시스템과 계측기별 기능을 지정한다.

물리적 하드웨어 통신 링크(물리 계층)는 SCPI에 의해 정의되지 않는다. SCPI는 원래 IEEE-488.1(GPIB) 버스를 위해 생성되었지만, RS-232, RS-422, RS-485, USB, 이더넷, VXIbus, HiSLIP 등과 함께 사용할 수도 있다.

SCPI 명령어는 물리 계층을 통해 계측기로 전송되는 ASCII 텍스트 문자열이다. 명령어는 하나 이상의 키워드로 구성된 일련의 명령어로, 그중 상당수는 매개변수를 사용한다. 사양에서 키워드는 CONFigure로 작성된다. 전체 키워드를 사용하거나 대문자 부분으로만 축약할 수 있다. 쿼리 명령어에 대한 응답은 일반적으로 ASCII 문자열이다. 그러나 대량 데이터의 경우 이진 형식을 사용할 수 있다.

SCPI 사양은 네 권으로 구성된다: 제1권: "구문 및 스타일", 제2권: "명령어 참조", 제3권: "데이터 교환 형식", 제4권: "계측기 클래스". 이 사양은 원래 유료 인쇄 매뉴얼로 출시되었고, 나중에 네 권 모두를 포함하는 무료 PDF 파일로 제공되었다.

 SCPI 역사 
1990년에 처음 출시된 SCPI는 IEEE-488의 추가 계층으로 시작되었다. IEEE-488.1은 물리적 및 전기적 버스를 지정하고 IEEE-488.2는 프로토콜 및 데이터 형식을 지정했지만, 둘 다 계측기 명령어를 지정하지는 않았다. 동일한 유형의 계측기라도 다른 제조업체나 심지어 다른 모델은 다른 명령어 세트를 사용했다. SCPI는 모든 제조업체 및 모델에 공통될 수 있는 표준을 만들었다. SCPI는 IEEE-488.2 데이터 형식의 사용을 요구하지만 IEEE-488.1 버스를 의무화하지는 않는다.

2002-2003년에 SCPI 컨소시엄은 IVI 재단(Interchangeable Virtual Instruments)의 일부가 되기로 투표했다.

 IEEE 488.2 역사 
1987년에 IEEE는 IEEE 488.2-1987 사양인 "IEEE Std 488.1-1987, IEEE 표준 프로그래밍 가능 계측기용 디지털 인터페이스에 사용되는 표준 코드, 형식, 프로토콜 및 공통 명령어"를 도입했으며, 이는 나중에 1992년에 IEEE 488.2-1992로 개정되었다.

IEEE 488.2는 장치 독립적인 통사론을 제공했지만, 계측기별 명령어에 대한 표준은 여전히 없었다. 예를 들어, 멀티미터와 같은 동일한 클래스의 계측기를 제어하는 명령어는 제조업체와 심지어 모델에 따라 달라졌다. 미국 공군과 나중에 휴렛 팩커드가 이 문제를 인식했다. 1989년에 HP는 SCPI의 전신인 TML 언어를 개발했다.

IEC는 IEEE와 병행하여 IEC 60625-2-1993 (IEC 625)으로 자체 표준을 개발했다. 2004년에 IEEE와 IEC는 각 표준을 "이중 로고" IEEE/IEC 표준 IEC 60488-2-2004 파트 2: 코드, 형식, 프로토콜 및 공통 명령어로 통합했으며, 이는 IEEE 488.2-1992 및 IEC 60625-2-1993을 대체한다.

 명령어 통사론 
계측기로 보내는 SCPI 명령어는 설정 작업(예: 전원 공급 장치 켜기) 또는 쿼리 작업(예: 전압 읽기)을 수행할 수 있다. 쿼리는 명령어 끝에 물음표를 추가하여 계측기로 발행된다. 일부 명령어는 계측기를 설정하고 쿼리하는 데 모두 사용할 수 있다. 예를 들어, 계측기의 데이터 수집 모드는 ACQuire:MODe 명령어를 사용하여 설정하거나 ACQuire:MODe? 명령어를 사용하여 쿼리할 수 있다. 일부 명령어는 계측기를 동시에 설정하고 쿼리할 수 있다. 예를 들어, *CAL? 명령어는 일부 장비에서 자체 보정 루틴을 실행한 다음 보정 결과를 반환한다.

유사한 명령어는 계층적 또는 "트리" 구조로 그룹화된다. 예를 들어, 계측기에서 측정을 읽는 모든 명령어는 "MEASure"로 시작한다. 계층 내의 특정 하위 명령어는 콜론(:) 문자로 중첩된다. 예를 들어, "DC 전압 측정" 명령어는 MEASure:VOLTage:DC? 형식을 취하고, "AC 전류 측정" 명령어는 MEASure:CURRent:AC? 형식을 취한다.

 :MEASure
 :VOLTage
 :DC?
 :AC?
 :CURRent
 :DC?
 :AC?
 ...

 대소문자 
위 명령어 통사론에서는 명령어가 혼합 대소문자로 표시되지만, SCPI는 대소문자를 구분하지 않는다.

예를 들어, VOLTage의 경우 다음은 모두 유효한 표현이다: VOLTAGE, voltage, Voltage, VoLtAgE.

 명령어 축약 
명령어 통사론은 일부 문자를 대문자와 소문자가 혼합된 형태로 보여준다. 명령어를 대문자 부분만 보내는 것으로 축약하는 것은 대문자와 소문자를 모두 보내는 명령어와 동일한 의미를 갖는다.

예를 들어, "SYSTem:COMMunicate:SERial:BAUD 2400" 명령어는 RS-232 직렬 통신 인터페이스를 2400 bit/s로 설정한다. 이 명령어는 "SYST:COMM:SER:BAUD 2400"으로 축약될 수도 있다. 쿼리 명령어 "SYSTem:COMMunicate:SERial:BAUD?" 또는 "SYST:COMM:SER:BAUD?"는 계측기에 현재 보드율을 보고하도록 지시한다.

유효한 명령어는 각 명령어의 짧은 형식과 긴 형식뿐이며, 다른 모든 하위 집합 변형은 유효하지 않다.

예를 들어, COMMunicate의 경우 COMM(짧은 형식) 및 COMMUNICATE(긴 형식)만 유효하며, COM, COMMUN, COMMUNIC와 같은 하위 집합은 유효하지 않으며, COMMUNICATED와 같이 문자가 추가된 것도 유효하지 않다.

 명령어 연결 
여러 명령어를 단일 문자열로 계측기에 보낼 수 있다. 이들은 세미콜론(;) 문자로 구분된 단순 명령어로 구성된다.

예를 들어, "DC 전압을 측정한 다음 AC 전류를 측정"하는 명령어는 MEASure:VOLTage:DC?;:MEASure:CURRent:AC?와 같이 발행된다.

콜론(:)으로 시작하는 단순 명령어는 명령어 트리의 루트를 기준으로 해석된다. 그렇지 않으면 이전 명령어의 마지막 노드를 암시적으로 참조한다(이미 별표로 시작하는 경우가 아니면). 예를 들어,

 :SOURce:FREQuency:STARt 100;STOP 200

은 다음 메시지에 대한 약어이다.

 :SOURce:FREQuency:STARt 100;:SOURce:FREQuency:STOP 200

 인수 
일부 명령어는 하나 이상의 추가 인수를 허용하거나 요구한다. 인수는 명령어 뒤에 오며, 공백으로 명령어와 구분된다. 예를 들어, 계측기의 트리거 모드를 "일반"으로 설정하는 명령어는 "TRIGger:MODe NORMal"로 주어질 수 있다. 여기서 "NORMal"이라는 단어는 "TRIGger:MODe" 명령어의 인수로 사용된다. 여러 인수가 제공될 때 인수는 쉼표로 구분된 목록으로 작성된다. 예를 들어, 디지털 멀티미터에서 AC 전압 측정을 수행하고, 미터의 10 VRMS 측정 범위를 사용하며, 측정된 전압 값을 4-1/2 자리 분해능으로 표시하는 쿼리 명령어는 "MEASure:VOLTage:AC? 10,4"와 같이 작성된다.

 정수 인수 
정수 인수를 허용하는 명령어의 경우, 값은 여러 컴퓨터 숫자 형식으로 지정될 수 있다: 십진법, 십육진법, 팔진법, 이진법. 마지막 세 가지 형식은 SCPI가 기반으로 하는 IEEE 488.2에 의해 정의된다. 십진법 숫자(밑 10)에는 접두사가 없으며, 십육진법 숫자(밑 16)에는 #H 또는 #h가 접두사로 붙고, 팔진법 숫자(밑 8)에는 #Q 또는 #q가, 이진법 숫자(밑 2)에는 #B 또는 #b가 접두사로 붙는다. 십육진법 숫자는 대문자 (ABCDEF), 소문자 (abcdef) 또는 혼합 대소문자 (aBcDeF)를 사용할 수 있다. 팔진법의 경우 숫자 "0"(영)과의 시각적 혼동을 최소화하기 위해 문자 "O" 대신 문자 "Q"가 선택되었다.

다음 인수 예시는 숫자적으로 동일하다.
 십진법: 26
 십육진법: #H1A 또는 #h1a
 팔진법: #Q32 또는 #q32
 이진법: #B11010 또는 #b11010

 488.2 명령어 
SCPI는 IEEE 488.2 사양 위에 추가 계층으로 정의되었기 때문에 SCPI 준수 장치는 다양한 488.2 명령어도 인식해야 한다. 이러한 명령어는 별표 * 문자로 시작하기 때문에 비공식적으로 별표 명령어(또는 스타 명령어)로 알려져 있을 수도 있다.

SCPI 제1권 섹션 4.1.1에 따르면, 모든 SCPI 장치는 다음 488.2 명령어를 구현해야 한다. 실제로는 일부 저가형 테스트 장비는 이러한 488.2 명령어의 하위 집합만 지원하거나, 명령어를 수락하지만 아무런 작업도 수행하지 않을 수 있다. 사용자는 이러한 모든 488.2 명령어가 지원된다고 가정하기 전에 각 장비의 공식 프로그래머 설명서를 확인해야 한다.

 *CLS
 *ESE
 *ESE?
 *ESR?
 *IDN?
 *OPC
 *OPC?
 *RST
 *SRE
 *SRE?
 *STB?
 *TST?
 *WAI

SCPI 제1권 섹션 4.1.2에 따르면, 위에 나열되지 않은 다른 모든 488.2 명령어는 선택 사항이며 SCPI에서 요구하지 않는다.

 *AAD
 *CAL?
 *DDT
 *DDT?
 *DLF
 *DMC
 *EMC
 *EMC?
 *GMC?
 *IST?
 *LMC?
 *LRN?
 *OPT?
 *PCB
 *PMC
 *PRE
 *PRE?
 *PSC
 *PSC?
 *PUD
 *PUD?
 *RCL
 *RDT
 *RDT?
 *SAV
 *TRG
 *RMC
 *SDS

 같이 보기 
 IEEE-488 (GPIB)
 가상 계측기 소프트웨어 아키텍처 (VISA)
 계측기 드라이버
 TCP/UDP의 포트 목록 - TCP 포트 5025 및 UDP 포트 5025의 scpi-raw

 각주 

 외부 링크 

 SCPI 조직, 공식 웹사이트
 사양
 SCPI-1999, 제1-4권, 819페이지 PDF 파일, 무료 다운로드 (IEEE 488.2 & IEC 60488-2에 지정된 별표 (*) 명령어는 포함되지 않음)
 IEEE 488.2-1992, 254페이지 PDF 파일, 2025년 기준 미화 54달러 (IEEE/IEC 60488-2-2004로 대체됨)
 IEEE/IEC 60488-2-2004, 264페이지 PDF 파일, 2025년 기준 미화 388달러

 프로그래밍 매뉴얼 예시 
 멀티미터
 텍트로닉스 DMM6500, 1202페이지 PDF 파일.
 오실로스코프
 키사이트 인피니움 제품군, 1896페이지 PDF 파일.
 로데슈바르즈 MXO 4 시리즈, 848페이지 PDF 파일.
 텍트로닉스 MSO 4/5/6 제품군, 2050페이지 PDF 파일.

분류:전자 테스트 장비
분류:전자공학
분류:입출력