SCPI instruments
멀티미터, 전원 공급기, 전자 부하, 데이터 수집 장치처럼 SCPI를 쓰는 벤치 계측기를 TCP, 시리얼 회선, 또는 VISA를 통한 USB와 GPIB로 다룹니다. 각각의 연결 방법, "계측기" 카드, 쿼리와 쓰기 명령, 장치 검색, 그리고 완성된 예 두 가지입니다.
SCPI instruments 드라이버는 SCPI를 쓰는 벤치 계측기를 읽고 씁니다. SCPI는 IEEE 488.2 시험 장비의 명령 언어로, 멀티미터, 전원 공급기, 전자 부하, Fluke 1586A Super-DAQ 같은 데이터 수집 장치, 교정기가 쓰며 Keysight, Rigol, Tektronix, Siglent, GW Instek, B&K Precision, Fluke 등이 만듭니다. 각 태그는 계측기에 MEAS:VOLT:DC?나 READ? 같은 쿼리를 보내고 그 응답을 읽으며, 쓰는 태그는 VOLT 5처럼 값을 넣은 명령을 보냅니다. LabVIEW 프로그램이 VISA를 통해 주고받는 일을 블록 다이어그램에 배선하는 대신 패널에서 설정하는 것이고, 값은 다른 모든 태그의 값과 같은 곳에 닿습니다. Logic, 대시보드, 그리고 Process 시험대의 실행입니다.
계측기는 그 장치를 만들 때 고르는 세 가지 방법 가운데 하나로 연결합니다.
| 전송 방식 | 계측기에 연결하는 방법 | 알맞은 대상 |
|---|---|---|
| TCP(LXI 소켓) | 계측기의 호스트와 포트에 있는 SCPI 소켓으로, 대부분의 LXI 계측기는 5025입니다. 이 컴퓨터에는 아무것도 설치하지 않습니다. | LAN 포트가 있는 계측기. |
| VISA(USB, GPIB, 네트워크) | 이 컴퓨터에 설치된 VISA를 통해 계측기의 VISA 리소스 이름으로 연결합니다. 제품은 VISA를 설치하지 않습니다. NI-VISA나 Keysight IO Libraries Suite 가운데 하나가 설치되어 있으면 그것을 씁니다. | USB나 GPIB 인터페이스에 연결된 계측기, 또는 VISA가 자기 이름으로 닿는 네트워크 계측기. |
| 시리얼 회선 위 | 이 드라이버의 시리얼 회선으로, 회선의 다른 계측기와 함께 쓰며 요청은 한 번에 하나씩입니다. | RS-232나 RS-485 포트가 있는 계측기. |
시리얼 회선 위의 계측기는 회선 아래에 놓이므로, 트리의 그 부분은 Generic serial and TCP처럼 드라이버 → 회선 → 장치 → 태그로 읽힙니다. TCP나 VISA로 연결하는 계측기는 드라이버 아래에 놓이고, 다른 어느 드라이버의 장치와도 마찬가지로 폴더에 넣을 수 있어 드라이버 → 폴더 → 장치 → 태그가 됩니다. 장치는 만들어진 쪽에 머뭅니다. TCP와 VISA는 서로 바꿀 수 있지만, 회선과 네트워크 사이를 옮겨 가지는 않습니다.
드라이버 페이지
머리글 아래 줄은 "시리얼 회선에는 버스 하나를 함께 쓰는 계측기가 놓이고, TCP나 VISA로 연결하는 계측기는 드라이버 바로 아래에 놓입니다. 회선이나 장치를 추가한 다음 열어서 쿼리를 설정하십시오."라고 말하고, 페이지에는 위에서부터 차례로 다음이 있습니다.
| 부분 | 담고 있는 것 |
|---|---|
| 시리얼 회선 | 드라이버의 회선으로, 제목 오른쪽의 회선 추가로 늘립니다. 회선, 물리 조합(포트 · 보 레이트 · 형식. 이 드라이버의 회선에는 제한 시간이 없으므로 넣지 않습니다), 장치, 상태, 그리고 열기, 사용, 사용 안 함, 삭제 동작입니다. 비어 있으면 "아직 시리얼 회선이 없습니다."라고 표시합니다. |
| 스캔 범위 | VISA가 나열하는 계측기 말고도 장치 검색이 묻는 주소입니다. 장치 검색을 보십시오. Connector 구성 권한이 있을 때만 그려집니다. |
| 장치 | 회선 위의 장치를 포함한 드라이버의 모든 장치이며, 열은 어느 드라이버의 장치 표와도 같습니다. 제목 오른쪽의 장치 추가로 늘리고, 이것은 TCP 장치를 만듭니다. 비어 있으면 "아직 장치가 없습니다."라고 표시합니다. |
머리글은 괄호 안에 장치 수를 보여 주고, 트리의 드라이버 행은 회선이 하나라도 있으면 두 단계를 모두 셉니다("회선 1개 · 장치 2개"). 드라이버의 모음에는 장치 검색이 있습니다. 드라이버 행을 오른쪽 단추로 누르면 장치 추가, 회선 추가, 새 폴더, 새로 고침, 장치 검색이 나오고, 구분선 뒤에 드라이버 제거가 나옵니다. 열의 새로 만들기… 메뉴에서는 이 드라이버의 항목에 새 장치, 새 시리얼 회선, 새 폴더가 있고, 그 뒤에 회선, 폴더, 장치가 나옵니다. 추가한 드라이버는 회선이나 장치가 있든 없든 트리의 드라이버 폴더 아래에 놓입니다.
시리얼 회선
이 드라이버의 회선은 시리얼 회선에서 설명하는 회선이며, 필드는 Generic serial and TCP 드라이버의 회선과 같습니다. 그 페이지는 "물리 시리얼 버스 하나입니다. 연결된 계기가 함께 쓰는 포트 설정이며, 요청은 한 번에 하나씩 보냅니다."라고 말하고, "물리 회선" 카드에는 이름, 시리얼 포트(새로 고침 포함), 보 레이트, 시리얼 형식이 있으며, 형식은 8비트 여섯 가지와 7비트 네 가지, 열 가지를 모두 고를 수 있습니다. 전송 모드, 응답 제한 시간, 트랜잭션 최소 간격, 슬레이브 검색 카드는 없습니다. 각 계측기가 자기 "계측기" 카드에서 메시지의 끝과 응답을 기다리는 시간을 정하기 때문입니다. 또 계측기는 주소가 아니라 묻는 내용으로 구별하므로, 회선의 "장치" 표에는 유닛 ID 열이 없습니다.
여기서 만든 회선은 사용 안 함 상태로 생기므로, 포트가 열리기 전에 포트 설정을 입력할 수 있습니다. 포트, 보 레이트, 형식은 회선이 사용 안 함일 때만 바꿀 수 있습니다. 회선에서, 또는 그 오른쪽 단추 메뉴에서 장치 추가를 누르면 그 회선에 이 드라이버의 장치를 만듭니다. 회선은 만들어질 때의 드라이버에 계속 속합니다. 다른 드라이버의 장치는 그 회선에 들어가지 않고, 포트 하나는 회선이 어느 드라이버의 것이든 회선 하나에만 속합니다.
드라이버는 회선의 모든 계측기를 위해 포트를 한 번만 열고, 요청을 한 번에 하나씩 보내며 다음 요청 전에 그 응답을 기다립니다. 포트가 열려 있는 동안 DTR을 켜 둡니다. Keysight 34401A나 E36xx 전원 공급기처럼 DTR과 DSR로 출력 속도를 맞추는 계측기는 DTR이 꺼져 있으면 아무것도 보내지 않기 때문입니다. 고장 난 포트는 고장이 계속되는 동안 1초에서 1분까지 두 배씩 늘어나는 대기 뒤에 다시 열고, 그 포트의 모든 계측기는 처음 연결할 때처럼 초기 설정 명령을 다시 보내 다시 준비합니다.
장치
연결
| 필드 | 의미 | 기본값 |
|---|---|---|
| 전송 방식 | 드라이버 아래에 만든 장치: TCP(LXI 소켓), "스테이션이 계측기의 호스트와 포트에 있는 SCPI 소켓에 연결합니다. 대부분의 LXI 계측기는 5025입니다.", 또는 VISA(USB, GPIB, 네트워크), "스테이션이 이 컴퓨터에 설치된 VISA를 통해 VISA 리소스 이름으로 계측기를 엽니다." 둘은 서로 바꿀 수 있습니다. 회선 위의 장치는 대신 자기 회선을 보여 줍니다. | TCP(LXI 소켓) |
| 호스트 | TCP: 계측기의 호스트 이름이나 IP 주소. | 비어 있음 |
| 포트 | TCP: 계측기가 SCPI에 응답하는 포트로, 1에서 65535. 칸이 비어 있으면 5025가 회색으로 보이고 계측기를 그 포트로 부릅니다. | 5025 |
| VISA 리소스 | VISA일 때 호스트와 포트 대신: "VISA가 나열하는 계측기 이름입니다. 예: USB00x09570x1A07MY12345678INSTR, GPIB022INSTR. 장치 검색이 채워 줍니다." NI MAX와 Keysight Connection Expert가 그 계측기에 보여 주는 이름입니다. | 비어 있음 |
| 시리얼 회선 · 고정 | 회선 위의 장치: 회선 이름과 그 아래 포트, 보 레이트, 형식. 읽기 전용입니다. | 추가할 때의 회선 |
새 장치는 TCP 장치입니다. "호스트를 아직 입력하지 않음"이라고 표시하고, 호스트가 생길 때까지 연결하지 않습니다. VISA 장치는 어떤 호스트도 부르지 않고 호스트를 기다리지도 않습니다. VISA로 바꿔도 TCP로 돌아갈 때를 위해 호스트와 포트가 남고, TCP로 바꿔도 리소스가 남습니다. 드라이버가 다룰 수 없는 장치는 저장되지 않고, 작업 기록 줄이 이유를 알립니다.
| 입력한 것 | 작업 기록 줄의 표시 |
|---|---|
| 1에서 65535 밖의 포트 | "1에서 65535 사이의 포트를 입력하거나, 5025을(를) 쓰려면 칸을 비워 두십시오." |
| 리소스가 없는 VISA | "계측기의 VISA 리소스를 입력하거나(예: USB00x09570x1A07MY12345678INSTR) 장치 검색을 실행하십시오." |
| 공백이나 일반 ASCII가 아닌 문자가 든 리소스 | "VISA 리소스에 공백이나 일반 ASCII가 아닌 문자가 들어 있습니다. VISA가 나열하는 그대로 입력하십시오." |
머리글에 보이는 Base URI는 실행 시점의 주소입니다. scpi://tcp/<host>:<port>, scpi://visa/<resource>, scpi://serial/<line id>/<port>/<baud>/<format> 가운데 하나 뒤에 종료 문자(term), 응답 제한 시간(timeout), 쓰기 확인(check), 초기 설정 명령(setup. 하나씩 차례로 이어지며 %0A로 구분합니다)이 붙습니다. 회선 위 장치의 복사본은 그 회선에 머물고, TCP나 VISA 장치의 복사본은 드라이버 자체 단계에 놓입니다.
"계측기" 카드
"연결" 카드 아래의 계측기 카드는 계측기가 무엇이고 스테이션이 어떻게 말을 거는지 보여 줍니다.
| 필드 | 의미 | 기본값 |
|---|---|---|
| 식별 정보(*IDN?) | 읽기 전용: "스테이션이 연결했을 때 계측기가 *IDN?에 답한 내용입니다. 제조사, 모델, 일련번호, 펌웨어가 들어 있습니다." 계측기가 답할 때까지 "아직 응답이 없습니다"라고 표시하고, 장치 연결이 끊기면 다시 그렇게 표시합니다. *IDN?에 답하지 않는 계측기도 식별 정보 없이 그대로 읽습니다. |
|
| 종료 문자 | LF(줄 바꿈), CR LF(캐리지 리턴, 줄 바꿈), CR(캐리지 리턴): "보내는 명령과 읽는 응답마다 끝을 나타냅니다. 대부분의 계측기는 LF를 쓰고, 일부 시리얼 계측기는 CR LF나 CR을 씁니다." | LF(줄 바꿈) |
| 응답 제한 시간 (ms) | 100에서 60000: "쿼리가 응답을, 쓰기가 계측기의 오류 큐를 기다리는 시간입니다. 측정이 느리면 더 길게 잡으십시오." | 2000 |
| 쓰기 확인 | "SCPI는 명령에 응답하지 않으므로, 쓰기는 그 뒤에 계측기에 물어서 확인합니다." 각 선택이 보내는 것은 쓰기에 있습니다. 오류 큐(SYST:ERR?), 없음: 보내면 확인됨, 또는 명령이 끝난 뒤 오류 큐를 보는 완료 확인 후 오류 큐(*OPC?, SYST:ERR?)입니다. | 오류 큐(SYST:ERR?) |
| 초기 설정 명령 | 한 줄에 명령 하나로, 최대 32개, 각각 최대 512자: "스테이션이 연결할 때마다 한 줄에 하나씩 차례로 보냅니다. 예: *RST, CONF:VOLT:DC 10. 그로 인한 오류는 진단 로그에 남습니다." | 비어 있음 |
스테이션이 계측기에 연결할 때마다, 그리고 시리얼 회선이 포트를 다시 열 때마다, 스테이션은 다음 순서로 보냅니다. 쓰기 확인이 오류 큐를 읽을 때는 *CLS, 다음으로 초기 설정 명령, 그다음 오류 큐를 진단 로그로 읽어 들이고(초기 설정 명령이 일으킨 오류는 거기에 남고 장치를 멈추지 않습니다), 마지막으로 *IDN?를 물어 그 응답을 "식별 정보" 필드가 보여 줍니다. 카드가 받지 않는 값은 저장되지 않고, 작업 기록 줄이 이유를 알립니다: "응답 제한 시간은 100에서 60000 ms 사이여야 합니다.", "초기 설정 명령에 둥근 따옴표처럼 일반 ASCII가 아닌 문자가 들어 있습니다. 그런 문자는 어떤 계측기도 읽지 못합니다.", "초기 설정 명령은 32개까지, 각각 512자까지 보낼 수 있습니다." SCPI는 일반 ASCII이므로, 설명서에서 둥근 따옴표나 줄 바꿈 없는 공백째로 복사한 명령은 읽지 못하는 계측기에 보내지는 대신 입력한 곳에서 거부됩니다.
이 컴퓨터의 VISA
제품은 VISA를 함께 싣지도, 설치하지도 않습니다. VISA 장치는 이 컴퓨터에 이미 있는 64비트 VISA 라이브러리(visa64.dll)를 통해 계측기를 엽니다. NI-VISA(LabVIEW가 설치합니다)와 Keysight IO Libraries Suite가 모두 이곳에 두는 라이브러리입니다. 이것이 필요한 것은 VISA 장치뿐이며, TCP나 시리얼 회선의 계측기는 VISA 없이 연결됩니다. 스테이션은 장치를 기다리지 않고 라이브러리를 불러올 수 있는지 스스로 확인합니다. 드라이버 페이지, VISA 장치의 페이지 또는 에이전트가 처음 물을 때, 그리고 없는 동안 30초마다 확인합니다. Connector가 시작되기 전에는 VISA가 있는지 알 수 없으므로 아무것도 표시하지 않습니다. 없는 동안에는 다음과 같습니다.
| 어디에서 | 무엇을 알리는지 |
|---|---|
| VISA 장치의 페이지 | 주의 알림 "이 컴퓨터에는 VISA가 설치되어 있지 않습니다"와 아래의 단계입니다. 두 링크는 NI와 Keysight의 페이지를 컴퓨터의 브라우저에서 엽니다. |
| 드라이버 페이지 | 드라이버에 VISA 장치가 하나 이상 있는 동안 같은 알림을 표시하고, "설치할 때까지 이 드라이버의 VISA 장치는 오프라인 상태로 남고 설정은 그대로 유지됩니다. TCP나 시리얼 회선의 장치는 영향을 받지 않습니다."라고 덧붙입니다. TCP 장치와 시리얼 장치만 있는 드라이버에는 표시하지 않습니다. |
| VISA 장치의 마지막 오류 | 같은 단계를, 드라이버 자체의 원인처럼 영어로 보여 줍니다. 장치는 오프라인으로 남고 설정은 유지됩니다. |
| "전송 방식" 목록 | 계속 VISA를 고를 수 있으므로, VISA를 설치하기 전에 장치를 준비해 둘 수 있습니다. |
| 장치 검색 | "스캔 범위" 카드에 입력한 호스트에만 묻고, 두 페이지와 함께 그렇다고 알립니다: "이 컴퓨터에는 VISA가 설치되어 있지 않아 스캔이 VISA를 통한 USB, GPIB, 네트워크 계측기를 나열하지 못하고 입력한 호스트에만 묻습니다. 나열하려면 64비트 VISA를 관리자 권한으로 설치하십시오" 다음에 NI-VISA와 Keysight IO Libraries Suite의 주소가 이어집니다. 이 문장은 스캔을 마무리하는 줄에 남습니다. |
| 에이전트 | driver_capabilities는 Scpi 드라이버의 prerequisite 아래에 단계를 보여 주며, installed는 false이고 neededBy는 VISA 장치를 가리킵니다. device_discover는 cut에서 같은 내용을 알립니다. |
설치하는 방법:
- NI 페이지 NI-VISA Download에서 NI-VISA를, 또는 Keysight 페이지 IO Libraries Suite Downloads에서 Keysight IO Libraries Suite를 내려받습니다.
- 둘 중 어느 것이든 됩니다. LabVIEW가 있는 컴퓨터에는 NI-VISA가 이미 있습니다. NI 페이지는 내려받기 전에 NI 계정으로 로그인하라고 요청하고, Keysight 페이지는 설치 프로그램에 바로 연결됩니다. 최신 Windows용 설치 프로그램을 받으십시오. 64비트 Windows에서는 둘 다 Ganter Lab이 인식하는 유일한 VISA인 64비트 VISA를 설치합니다.
- 설치 프로그램을 C: 드라이브의 폴더에서 관리자 권한으로 실행하고(Keysight의 설치 프로그램은 다른 드라이브에서 설치되지 않습니다), 요청하면 컴퓨터를 다시 시작합니다.
32비트 라이브러리(visa32.dll)만 설치한 VISA(32비트 Windows용 등)는 인식되지 않습니다. Ganter Lab은 64비트 visa64.dll만 읽습니다.
설치하고 30초 안에 알림이 사라지고, Ganter Lab을 다시 시작하지 않아도 VISA 장치가 지금 설정 그대로 연결됩니다. 네트워크 포트가 있는 계측기는 VISA 없이 TCP로도 연결할 수 있습니다.
태그 주소 지정
이 드라이버의 태그는 계측기에 쿼리를 보냅니다. 그 신호원 카드에는 다음이 있습니다.
| 필드 | 의미 | 기본값 |
|---|---|---|
| 쿼리 | 태그가 묻는 내용으로, 계측기의 프로그래밍 설명서에 적힌 그대로입니다: MEAS:VOLT:DC?, READ?, SOUR:VOLT?, OUTP?. 일반 ASCII이며 최대 512자. 쓰기 전용 태그는 아무것도 묻지 않으므로 쿼리가 필요 없습니다. |
필수 |
| 응답의 값 | 읽는 태그. "비우면 응답 전체를 읽습니다. 숫자를 넣으면 쉼표로 구분된 응답에서 1부터 센 그 값을 읽습니다. 예: READ?의 세 번째 채널은 3." 칸이 비어 있는 동안 "응답 전체"라고 표시합니다. 1에서 1000. | 비어 있음 |
| 쓰기 명령 | 쓰는 태그: "쓰기 때 보내는 것으로, 값이 들어갈 자리에 를 둡니다. 예: VOLT , CURR . Boolean은 1이나 0으로 보냅니다. Boolean 태그에서는 *TRG처럼 가 없는 명령을 true를 쓸 때 보냅니다." | 필수 |
태그의 액세스가 쓰지 않는 필드는 그려지지 않고, 다시 쓸 때를 위해 값을 간직합니다. 데이터 형식은 Boolean, Int32, Int64, Float, Double, String이며 기본은 Float입니다. 필드가 성립하지 않는 태그는 저장되지 않고, 태그 페이지가 무엇이 빠졌는지 알립니다.
| 입력한 것 | 태그 페이지의 표시 |
|---|---|
| 읽는 태그에 쿼리가 없음 | "계측기에 보낼 쿼리(예: MEAS:VOLT:DC?)를 입력하거나 태그를 쓰기 전용으로 바꾸십시오." |
| 둥근 따옴표 같은 일반 ASCII가 아닌 문자가 든 쿼리 | "쿼리에 둥근 따옴표처럼 일반 ASCII가 아닌 문자가 들어 있거나 512자를 넘습니다." |
| 1000을 넘는 응답의 값 | "응답의 값은 1부터 1000까지 셉니다. 응답 전체를 읽으려면 비워 두십시오." |
| 쓰는 태그에 쓰기 명령이 없음 | "쓰기 때 보낼 명령(예: VOLT )을 입력하거나 태그를 읽기 전용으로 바꾸십시오." |
{value}나 {value:FORMAT}이 아닌 중괄호, 또는 두 번째 값 |
"쓰기 명령에 일반 ASCII가 아닌 문자, 나 이 아닌 중괄호, 또는 두 번째 값이 들어 있습니다." |
Boolean이 아닌 태그에서 {value}가 없는 명령 |
"쓰기 명령에서 값이 들어갈 자리에 를 넣으십시오. 없이 명령을 보낼 수 있는 것은 Boolean 태그뿐입니다." |
| 숫자를 꾸미지 않는 서식, 또는 Boolean이나 String 태그에 붙인 서식 | "value: 뒤의 서식은 0.000이나 F2처럼 숫자를 꾸미는 것이어야 하며, 숫자 태그만 서식을 쓸 수 있습니다." |
읽기 전용 신호원 주소 (버스) 줄은 드라이버가 받는 것을 보여 줍니다. 응답 전체를 읽는 태그는 ask=READ?, 그 세 번째 값을 읽으면 ask=READ?&field=3, 읽고 쓰는 태그는 ask=VOLT?&write=VOLT {value}, 쓰기 전용 태그는 write=*TRG입니다.
읽기
태그의 폴링 주기마다 스테이션은 쿼리를 보내고, 응답 제한 시간 안에 종료 문자까지의 응답 하나를 읽습니다. 꺼낸 텍스트, 곧 응답 전체나 태그가 가리키는 값은 모든 드라이버에서와 같이 태그 자신의 단계가 변환하기 전에 태그의 형식으로 읽힙니다(값 변환 경로 참조).
| 응답 내용 | 읽는 방법 |
|---|---|
+1.23456789E+00, -0.5, 12 |
Float나 Double: 그 수. 스테이션의 언어와 상관없이 소수점은 마침표입니다. |
9.91E37 |
SCPI의 비수로, 계측기에 읽은 값이 없을 때의 응답입니다. Float나 Double 태그에서는 NaN이 되고, 태그의 잘못된 읽은 값 단계가 다룹니다. Int32나 Int64 태그에서는 거부됩니다. 과부하를 뜻하는 9.9E37은 그 수 그대로입니다. |
+1.20000000E+01 |
Int32나 Int64: 12. 소수는 거부됩니다. |
1, ON, 0, OFF |
Boolean: 1과 ON은 참, 0과 OFF는 거짓. true, false, yes, no도 읽습니다. |
"Ready, armed" |
String: 따옴표를 뺀 문자이며, 두 번 이어진 따옴표는 하나가 됩니다. 따옴표 안의 쉼표는 값을 나누지 않습니다. |
| 상황 | 읽기가 하는 일 |
|---|---|
| 한 장치에서 같은 쿼리를 보내는 태그 | 그중 가장 짧은 폴링 주기의 절반 동안 응답 하나를 함께 씁니다. 그래서 다채널 READ?의 각 채널을 읽는 태그는 측정 한 번으로 끝납니다. 쓰기가 하나라도 있으면 간직한 응답을 모두 버립니다. |
| 응답 제한 시간 안에 응답이 없음 | 읽기 실패입니다. 장치가 오류 큐를 읽을 때는 스테이션이 이어서 SYST:ERR?를 물으므로, 잘못 적은 쿼리는 -113,"Undefined header" 같은 계측기 자신의 항목을 이유에 담아 실패합니다. 무엇을 보여 줄지는 응답하지 않은 장치에 대한 태그의 정책이 정합니다. |
| 태그의 번호보다 값이 적은 응답 | 읽기 실패이며, 응답에 값이 몇 개인지 알립니다. |
| 태그의 형식에 담을 수 없는 텍스트 | 읽기 실패이며, 그 텍스트를 밝힙니다. |
쓰기
쓰기는 다른 어느 드라이버와도 같은 경로를 지납니다. 쓰기 칸은 공학 값을 받고, 원시 값을 보내기 전에 변환 단계를 거꾸로 거칩니다(Connector 참조). 보내는 명령은 쓰기 명령의 {value} 자리에 값을 넣은 것입니다. 숫자는 고정 문화권으로, 같은 수로 다시 읽히는 가장 짧은 텍스트로 쓰거나 {value:FORMAT}의 .NET 숫자 서식으로 꾸밉니다(CURR {value:0.000}은 1.5를 CURR 1.500으로 보냅니다). Boolean은 모든 SCPI Boolean 매개변수가 받는 1이나 0으로 보내고, 텍스트는 그대로 보내며 필요한 따옴표는 명령 쪽이 가집니다(DISP:TEXT "{value}"). 비수와 무한대는 무엇이든 보내기 전에 거부됩니다. Boolean 태그에서는 *TRG처럼 {value}가 없는 명령을 true를 쓸 때 보내고, false를 쓰면 거부됩니다.
| 쓰기 확인 | 보내는 것 | 쓰기가 알리는 것 |
|---|---|---|
| 오류 큐(SYST:ERR?) | *CLS, 명령, SYST:ERR? |
큐가 오류 없음(0이나 +0,"No error")으로 답하면 완료입니다. 다른 항목은 -222,"Data out of range"처럼 계측기 자신의 말로 쓰기를 거부합니다. 응답이 없으면 무응답이며, 계측기가 값을 받았는지는 알 수 없습니다. |
| 완료 확인 후 오류 큐(*OPC?, SYST:ERR?) | *CLS, 명령, *OPC?, SYST:ERR? |
같지만 계측기가 명령을 마친 뒤입니다. 출력이 안정되거나 릴레이가 전환될 때 씁니다. |
| 없음: 보내면 확인됨 | 명령만 | 보내는 즉시 완료입니다. 오류 큐가 없는 계측기용입니다. 이때 응답이 없는 쿼리는 계측기의 오류 없이 알려집니다. |
쓰기는 읽기와 함께 장치의 큐에서 차례를 기다립니다. 회선 위에서는 회선의 한 번에 하나인 요청을 함께 쓰고, TCP와 VISA에서는 장치 자신의 연결을 씁니다.
장치 검색
드라이버 페이지에는 비워 둘 수 있는 칸이 하나 있는 스캔 범위 카드가 있습니다. "TCP로 탐색할 계측기 주소, 예: 192.168.0.20 또는 192.168.0.20:5025(비우면 VISA가 나열하는 계측기를 찾습니다)". 장치 검색은 다음 두 가지를 차례로 묻습니다.
| 질문 | 언제 | 내놓는 것 |
|---|---|---|
VISA가 나열하는 계측기 리소스 전부(USB, GPIB, 네트워크)를 차례로 열고 *IDN?로 묻습니다. 진행 줄은 하나씩 밝힙니다: "USB00x09570x1A07MY12345678INSTR에 식별 정보를 묻는 중…". |
이 컴퓨터에 VISA가 설치되어 있을 때. 없으면 스캔이 VISA를 받을 곳과 함께 그렇다고 알리고, 그 문장은 스캔을 마무리하는 줄에 남습니다(이 컴퓨터의 VISA). | 답한 계측기 각각을, 리소스가 채워진 VISA 장치로. |
칸의 호스트에 TCP로 *IDN?를 그 포트나 5025로 보냅니다: "192.168.0.20:5025에 식별 정보를 묻는 중…". |
칸에 주소가 있을 때만. | 그 계측기를, 그 호스트와 포트의 TCP 장치로. |
각 계측기는 1.5초 안에 답해야 하며, 답하지 않은 계측기는 내놓지 않습니다. 후보의 이름은 답한 제조사와 모델에서 따오고(Keysight Technologies 34461A), "계측기" 카드의 기본값을 모두 지니며 태그는 없습니다. 계측기는 자기 쿼리 목록을 공개하지 않기 때문입니다: "보고된 태그가 없습니다. 장치를 추가한 다음 편집기에서 태그를 설정하십시오." 이 드라이버의 장치가 이미 쓰는 리소스의 VISA 후보는 구성된 것으로 표시되고 추가 대신 열기를 내놓습니다. TCP로 찾은 계측기는 맞춰 보지 않습니다. 호스트는 계측기에 닿는 곳일 뿐이기 때문입니다. VISA는 컴퓨터의 모든 시리얼 포트를 무엇이 연결되어 있든 없든 리소스로 나열하며(ASRL3::INSTR), 물어보면 거기 있는 것에 쓰게 됩니다. 스캔은 그것들을 빼고, 시리얼 계측기는 이 드라이버의 시리얼 회선에 놓습니다. VISA 장치에 손으로 입력한 시리얼 리소스는 그대로 엽니다. 칸의 내용이 호스트가 아니면 칸 아래에서 거부되고 장치 검색이 회색이 됩니다: "SCPI 스캔은 여기에 쓴 계측기에 TCP로 식별 정보를 요청합니다. IP 주소나 이름을 쓰고, 필요하면 포트를 붙입니다(예: 192.168.0.20 또는 192.168.0.20:5025). VISA가 나열하는 계측기에만 물으려면 비워 두십시오." 스캔의 나머지 동작은 장치 검색에 있습니다.
예: TCP의 멀티미터
네트워크의 Keysight 34461A는 LXI 소켓인 포트 5025에서 SCPI에 답합니다. 그 직류 전압을 읽습니다.
- 드라이버 페이지에서 장치 추가를 누르고 이름을
DMM으로 하고, TCP(LXI 소켓)를 그대로 두고, 호스트에 192.168.0.20을 입력하고 포트는 5025 그대로 둡니다. - 계측기 카드에서 LF(줄 바꿈), 응답 제한 시간 (ms) 2000, 오류 큐(SYST:ERR?)를 그대로 두고, 초기 설정 명령을 두 개,
*RST와CONF:VOLT:DC 10을 차례로 입력합니다. 스테이션이 연결할 때마다 멀티미터가 초기화되고 10 V 레인지의 직류 전압으로 설정됩니다. - 연결되면 "식별 정보" 필드가 멀티미터의 응답을 보여 줍니다. 예를 들면
Keysight Technologies,34461A,MY53212345,A.02.14-02.40-02.14-00.49-02-01입니다. - 태그 추가를 누르고 이름을
Voltage, Double, 읽기 전용으로 하고, 쿼리는READ?, 응답의 값은 비우고, 단위는 V로 합니다.READ?는 설정한 기능으로 한 번 측정하고 그 결과를 답합니다.
Base URI는 scpi://tcp/192.168.0.20:5025?term=lf&timeout=2000&check=errorqueue&setup=*RST%0ACONF:VOLT:DC 10가 됩니다. 에이전트는 도구 호출 두 번으로 같은 일을 합니다.
device_upsert driver=Scpi name=DMM transport=Tcp host=192.168.0.20 port=5025 setupCommands='*RST\nCONF:VOLT:DC 10'
tag_upsert device=DMM name=Voltage opcUaType=Double address='READ?' unit=V
예: RS-232의 전원 공급기
Keysight E3631A는 RS-232 포트에서 9600 보, 데이터 8비트, 패리티 없음, 정지 2비트로 SCPI에 답하며, RS-232에서는 원격 모드로 바꾼 뒤에야 명령을 받습니다. 전압을 설정하고 출력을 켜고 끄고 전류를 읽습니다.
- 드라이버 페이지에서 회선 추가를 누르고 이름을
PSU line으로 하고COM4를 고른 뒤, 보 레이트를 9600, 시리얼 형식을8N2로 하고 회선을 사용으로 바꿉니다. - 회선에서 장치 추가를 누르고 이름을
PSU로 합니다. 계측기 카드에서 응답 제한 시간 (ms)을 3000으로 하고, 초기 설정 명령에는SYST:REM한 줄만 입력하고, 쓰기 확인을 완료 확인 후 오류 큐(*OPC?, SYST:ERR?)로 합니다. 이렇게 하면 쓰기는 출력이 따라온 뒤에야 완료됩니다. - 태그 추가로
Setpoint, Double, 읽기와 쓰기, 쿼리VOLT?, 쓰기 명령VOLT {value}를 만듭니다. - 태그 추가로
Output, Boolean, 읽기와 쓰기, 쿼리OUTP?, 쓰기 명령OUTP {value}를 만듭니다. true를 쓰면OUTP 1, false면OUTP 0을 보내고, 전원 공급기는OUTP?에 1이나 0으로 답합니다. - 태그 추가로
MeasuredCurrent, Double, 읽기 전용, 쿼리MEAS:CURR?, 단위 A를 만듭니다.
Setpoint 태그의 버스 주소는 ask=VOLT?&write=VOLT {value}입니다. 이 전원 공급기처럼 출력이 여럿인 전원 공급기는 선택된 출력에 작용합니다. INST:SEL P6V 같은 두 번째 초기 설정 명령으로 그 출력을 고릅니다. 에이전트의 도구로도 같은 일을 합니다.
serial_line_upsert driver=Scpi name='PSU line' serialPort=COM4 baudRate=9600 serialFormat=8N2
device_upsert driver=Scpi name=PSU transport=SerialLine serialLineId=<id> responseTimeoutMs=3000 setupCommands='SYST:REM' writeCheck=CompletionAndErrorQueue
tag_upsert device=PSU name=Setpoint opcUaType=Double accessType=ReadAndWrite address='VOLT?' writeTemplate='VOLT {value}'
tag_upsert device=PSU name=Output opcUaType=Boolean accessType=ReadAndWrite address='OUTP?' writeTemplate='OUTP {value}'
tag_upsert device=PSU name=MeasuredCurrent opcUaType=Double address='MEAS:CURR?' unit=A
에이전트 도구
driver_capabilities는 이 드라이버를 scpi 아래에서 설명합니다. 세 가지 전송 방식, 이 컴퓨터에 VISA가 있는지(prerequisite 아래에, 설치하는 모든 단계와 함께), 종료 문자, 응답 제한 시간, 쓰기 확인, 초기 설정 명령, 쿼리와 쓰기 명령을 적는 법, 응답을 읽는 법, 장치 검색, 그리고 위의 두 가지 예입니다. device_upsert driver=Scpi는 transport(기본값인 Tcp, Visa, 또는 serialLineId가 있으면 정해지는 SerialLine), TCP에서는 host와 port, VISA에서는 visaResource, 이 드라이버의 회선에는 serialLineId, terminator(Lf, CrLf, Cr. \n, \r\n, \r도 읽습니다), responseTimeoutMs(100에서 60000), writeCheck(ErrorQueue, CompletionAndErrorQueue, None), setupCommands(한 줄에 하나, 또는 \n으로 구분. ''로 지웁니다)를 받습니다. tag_upsert는 쿼리를 address로, valueField(1에서 1000. 0이거나 생략하면 응답 전체), writeTemplate(''로 지웁니다)를 받습니다. serial_line_upsert driver=Scpi는 serialPort, baudRate, serialFormat만 가진 이 드라이버의 회선을 만듭니다. device_discover driver=Scpi는 스캔을 실행하고, target으로 TCP 탐색 대상을 정합니다. 도구가 돌려주는 장치에는 scpi가 있고, 계측기가 답한 뒤에는 그 식별 정보가 들어 있습니다. 태그에도 scpi가 있습니다. 다른 도구는 에이전트 도구에 있습니다.
알아 둘 한계
- Fluke NetDAQ 2640A, 2645A, 2680A, 2686A는 SCPI가 아닌 Fluke 고유의 프로토콜을 쓰므로 이 드라이버로 읽지 못합니다. Fluke 1586A Super-DAQ와 2638A Hydra Series III는 SCPI를 쓰므로 읽습니다.
- IEEE 488.2 이진 블록(
#, 길이, 원시 바이트)으로 보내는 응답, 예를 들어 파형이나 화면 이미지는 읽지 않습니다. 태그가 읽는 것은 텍스트로 쓴 응답입니다. - 제품은 VISA를 설치하지 않습니다. 이 컴퓨터에 NI-VISA도 Keysight IO Libraries Suite도 없으면 USB와 GPIB 계측기에는 닿지 않습니다. TCP와 시리얼 계측기에는 닿습니다.
- 스캔은 VISA의 시리얼 리소스(
ASRL…::INSTR)를 나열하지 않습니다. 시리얼 계측기는 이 드라이버의 시리얼 회선에 놓습니다. - 모든 값은 폴링으로 읽습니다. 드라이버는 서비스 요청(SRQ)도 상태 바이트도 기다리지 않습니다.
- 장치는 시리얼 회선과 네트워크 사이로도, 다른 회선으로도 옮길 수 없습니다. 알맞은 곳에 새로 만들고 옛것을 삭제하십시오.