이 프로그램은
PortDock SCPI 는 SCPI 로 말하는 계측기(전원 공급기·멀티미터·오실로스코프·신호 발생기·부하 등)에 명령을 보내고 답을 보는 «계측기 터미널» 입니다. VISA(NI-VISA·Keysight IO Libraries)를 설치하지 않아도 됩니다.
- 연결: LAN «소켓»(SCPI raw socket, 보통 TCP 5025)과 시리얼(RS-232).
- 질의·쓰기·읽기와 응답 시간, *IDN? 으로 장비 식별, *RST·*CLS, 오류 큐 비우기(SYST:ERR? 를 0 이 나올 때까지), *OPC? 기다림.
- 명령 이력(↑↓)·명령 목록, 자주 쓰는 SCPI 명령 자동완성, 숫자 응답 반복 측정(값 표·추세·통계·CSV), IEEE 488.2 블록 데이터(#…)의 HEX 미리보기와 파일 저장.
- 무료(GPL-3.0)이고 화면은 한국어·영어입니다.
처음 쓰는 순서
- 1. 장비 앞 패널의 LAN 설정에서 IP 를 확인하고, «소켓»(Sockets·SCPI raw·Port 5025) 기능이 켜져 있는지 봅니다. IP 를 모르면 PortDock Net Scan 으로 찾을 수 있습니다.
- 2. 왼쪽 «연결 방식» LAN → «장비 주소» 에 IP, «포트» 5025(대부분 그대로) → «연결»(F4).
- 3. 연결되면 *IDN? 을 물어 왼쪽 «장비» 칸에 제조사·모델·일련번호·펌웨어가 나옵니다(«연결하면 *IDN? 묻기» 를 끄면 묻지 않음).
- 4. 위 명령 칸에 명령을 넣고 Enter — ? 로 끝나면 «질의»(보내고 답을 기다림), 아니면 «쓰기»(보내기만). 답과 응답 시간이 «마지막 응답» 에, 주고받은 줄이 «통신 기록» 에 남습니다.
- 5. 틀린 명령은 장비의 오류 큐에 쌓입니다. 가끔 «오류 큐 비우기» 로 확인하세요.
- 시리얼(RS-232) 계측기: «연결 방식» 시리얼 → 포트·속도·패리티·정지 비트·흐름 제어를 장비 설정과 같게. 줄 끝도 장비에 맞춥니다(대부분 LF, 일부 CR LF).
화면 구성
- 왼쪽: 연결 방식·주소(또는 포트·속도), «줄 끝», «통신 세부» 접기(응답 기다림·*OPC? 기다림·연결하면 *IDN? 묻기), 연결 버튼과 상태, «장비»(*IDN? 풀이), «자주 쓰는 동작»(*IDN?·*RST·*CLS·오류 큐 비우기·*OPC? 기다림)과 오류 큐 결과.
- 가운데 위: 명령 칸과 [질의] [쓰기] [읽기] [+ 목록에]. 기다리는 동안은 [멈춤](Esc). 칸 아래에 넣은 명령의 뜻(자주 쓰는 명령이면)과 Enter 가 무엇을 할지가 나옵니다.
- 가운데: «마지막 응답» — 답 글(또는 블록 정보·HEX 미리보기·[파일로 저장]), 응답 시간, 실패 이유.
- 아래: 탭 «통신 기록» / «반복 측정».
- 오른쪽: 명령 목록(창이 좁으면 «명령 목록» 버튼으로 엽니다).
- 머리줄 📌: 항상 위 — 이 창을 다른 창 위에 늘 보이게 합니다(설정의 «항상 위» 와 같음).
- 창 제목에 지금 상태가 나옵니다(예: «COM3 115200 8N1 · 연결됨 ● REC — PortDock Serial»). 작업 표시줄에서 어느 창이 어느 포트인지 알 수 있습니다.
- 창 너비가 900px 이하(화면 반쪽 맞춤 등)면 왼쪽 연결 설정 칸이 접히고, 위에 요약 줄과 «⚙ 연결 설정»·연결 버튼이 나옵니다. «⚙ 연결 설정» 으로 펼치고 ✕ 나 바깥을 눌러 닫습니다.
질의·쓰기·읽기
- «질의»: 보내고 답 하나를 기다립니다. 응답 시간은 다 보낸 때부터 답의 끝(줄 끝 또는 블록 끝)까지입니다. 보내기 전에 지난 질의의 늦게 온 답이 남아 있으면 버리고 사건 줄에 «… 바이트를 버렸습니다» 를 남깁니다.
- «쓰기»: 보내기만 합니다. 설정 명령(CONF:VOLT:DC 10, OUTP ON …)에 씁니다.
- «읽기»: 보내지 않고 답 하나를 읽습니다. «쓰기» 로 질의를 보냈거나, 장비가 스스로 보낸 것을 받을 때.
- Enter 는 명령이 ? 로 끝나면 질의, 아니면 쓰기입니다. «;» 로 이은 명령(*CLS;*OPC?)은 하나라도 ? 로 끝나면 질의입니다.
- «줄 끝»: 보낼 때 붙이고 받을 때 답의 끝으로 봅니다. LF 와 CR LF 는 LF 에서 끊고 앞의 CR 을 떼며, CR 은 CR 에서 끊습니다. 연결 중에도 바꿀 수 있습니다.
- 시간이 넘었는데 받은 것이 있으면 «받은 것: …» 으로 보여 줍니다 — 대개 줄 끝 설정이 장비와 다릅니다.
장비 식별·오류 큐·*OPC?
- *IDN?: IEEE 488.2 공통 명령. 답은 «제조사,모델,일련번호,펌웨어» 이고 «장비» 칸에 나누어 보입니다. 모양이 다르면 받은 글을 그대로 보입니다.
- *RST: 장비를 초기 설정으로 되돌립니다(측정 범위·출력 설정이 바뀝니다 — 출력이 켜진 전원에 주의). *CLS: 상태 레지스터·오류 큐를 지웁니다.
- «오류 큐 비우기»: SYST:ERR? 를 «0,"No error"»(또는 +0)가 나올 때까지 최대 50번 묻고, 나온 오류를 «-113 Undefined header» 처럼 보입니다. 50번에도 끝나지 않거나 숫자로 시작하지 않는 답이면 그렇게 알립니다.
- 자주 보는 오류: -113 Undefined header(모르는 명령·철자), -222 Data out of range(범위 밖 값), -410 Query INTERRUPTED(답을 읽기 전에 다음 명령을 보냄), -420 Query UNTERMINATED(답이 없는데 읽음).
- «*OPC? 기다림»: 앞 명령이 다 끝나면 장비가 1 을 답합니다. 스윕·초기화처럼 오래 걸리는 동작 뒤에 씁니다. 기다림은 «통신 세부» 의 «*OPC? 기다림(ms)»(기본 30초).
블록 데이터 (#…)
- 화면 캡처·파형처럼 큰 답은 IEEE 488.2 «정해진 길이 블록» 으로 옵니다: «#» + 자릿수 N + 길이(N 자리) + 데이터. 예: «#41000» 다음에 1000바이트.
- 길이 머리로 끝을 알기 때문에 데이터 속에 LF(0x0A)가 있어도 끊지 않습니다. 블록 뒤 줄 끝은 함께 읽습니다.
- «#0…»(길이 모름)은 줄 끝까지 읽습니다 — 바이너리 속에 줄 끝 바이트가 있으면 잘릴 수 있으니 장비에서 정해진 길이 형식을 고르세요.
- «마지막 응답» 에 머리·길이·글인지 바이너리인지와 앞 1024바이트 HEX 가 보입니다. [파일로 저장] 은 머리를 뺀 데이터를 그대로 저장합니다(PNG·BMP·JPG·GIF 면 그 확장자를 권합니다).
- 한 답은 64MB 까지 받습니다. 통신 기록 줄에는 앞부분만 남깁니다.
반복 측정
- 아래 «반복 측정» 탭: «명령»(숫자로 답하는 질의 — MEAS:VOLT:DC?·READ?·FETC?), «주기(ms)», «횟수»(0 = 멈출 때까지) → «시작». Esc 나 «멈춤» 으로 멈춥니다.
- 주기는 측정 시작 간격입니다. 답이 주기보다 오래 걸리면 끝나자마자 다음을 묻습니다.
- 답의 첫 값(쉼표 앞)을 숫자로 읽습니다. «1.5 V» 처럼 뒤의 단위 글자는 무시합니다. SCPI 의 9.9E37 은 넘침(+OVLD), 9.91E37 은 NaN 으로 보이고 추세에서는 빈 자리입니다.
- 시간 초과는 «실패» 줄로 남기고 계속하며, 연결이 끊기면 멈춥니다.
- 값 표(최근 500줄), 추세(최근 1000개), 통계(개수·최소·최대·평균·표준편차), [CSV 저장](번호·시각·응답 시간·값·응답 글 — 엑셀에서 열림).
자주 쓰는 SCPI 명령
- 명령 칸의 자동완성 목록에는 IEEE 488.2 공통 명령(*IDN?·*RST·*CLS·*OPC?·*WAI·*ESR?·*STB?·*SRE·*ESE·*TST?·*OPT?·*TRG·*SAV·*RCL)과 SCPI 기본(SYST:ERR?·SYST:VERS?·SYST:PRES·STAT:PRES·STAT:OPER:COND?·STAT:QUES:COND?, MEAS:VOLT:DC?·MEAS:CURR:DC?·MEAS:RES?·MEAS:FREQ?, CONF?·READ?·INIT·FETC?·ABOR)만 있습니다. 장비마다 다른 명령은 장비 설명서(Programming Guide)를 보세요.
- 짧은 꼴(MEAS:VOLT:DC?)과 긴 꼴(MEASURE:VOLTAGE:DC?)은 같은 명령입니다. 대소문자는 가리지 않습니다. 목록에 있는 명령이면 칸 아래에 뜻이 나옵니다.
- 명령 목록(오른쪽)에 자주 쓰는 명령을 두고 ▶ 또는 F2·F3·F5~F12 로 보냅니다. 빈 목록의 «예시 넣기» 는 *IDN?·MEAS:VOLT:DC?·SYST:ERR? 를 넣습니다. ? 로 끝나면 질의, 아니면 쓰기로 보냅니다.
Simulator 로 따라하기 (계측기 없이)
실제 계측기가 없으면 PortDock Simulator 를 가짜 계측기로 씁니다(같은 PC).
- 1. PortDock Simulator 를 열고 방식 «TCP 서버 (상대가 접속)», 포트 5025, 프레임 구분 «끝 문자» 0A(LF)로 둡니다.
- 2. 규칙이 없을 때 나오는 [SCPI *IDN? 응답] 예제를 누릅니다. 규칙은 ASCII «*IDN?» → «PORTDOCK,SIM,1» + 줄 끝 CR LF 이고, «와일드카드» 는 꺼져 있습니다 — 꺼 두어야 ?·* 를 글자 그대로 비교합니다.
- 3. «+ 규칙 추가» 로 «MEAS:VOLT:DC?» → «+1.2{rand 0..9}E+00»(받을 때마다 끝자리가 바뀜), «SYST:ERR?» → «+0,"No error"» 를 더합니다(새 규칙은 위 규칙의 방식과 줄 끝을 물려받고 와일드카드는 꺼진 채 시작).
- 4. Simulator «시작». PortDock SCPI 에서 LAN, 장비 주소 127.0.0.1, 포트 5025, 줄 끝 LF → «연결». «장비» 칸에 PORTDOCK · SIM · 1 이 나오면 됩니다(Simulator 는 CR LF 로 답하지만 LF 에서 끊고 CR 을 뗍니다).
- 5. «오류 큐 비우기» → «오류 없음 ✓». «반복 측정» 탭에서 MEAS:VOLT:DC?, 주기 500, 횟수 20 → «시작» → 값 표·추세·통계 → [CSV 저장].
- 6. 규칙이 없는 명령(예: VOLT?)을 질의하면 «응답 없음» 으로 시간 초과가 납니다 — 실제 장비라면 오류 큐에 -113 이 쌓입니다.
- 와일드카드를 켜면 «*IDN?» 의 ? 와 * 가 아무 글자로 읽혀 «XIDN!» 같은 엉뚱한 요청에도 답합니다. SCPI 규칙은 끈 채로 두세요.
범위 밖 (아직 하지 않는 것)
- VXI-11(LAN, RPC 방식 — 포트 111·동적 포트): 다음 판에서 할 일입니다. 지금은 장비의 «소켓(5025)» 을 쓰세요. 대부분의 LAN 계측기는 둘 다 켜져 있습니다.
- HiSLIP(4880)·USBTMC(USB)·GPIB: VISA·드라이버가 필요해 하지 않습니다. USB 만 있는 장비는 장비 쪽 «USB 가상 COM» 설정이 있으면 시리얼로 쓸 수 있습니다.
- 서비스 요청(SRQ)·장치 지우기(Device Clear)·원격/로컬 전환 같은 VISA 기능은 소켓에 없습니다. 장비가 바쁠 때는 *OPC? 로 기다리세요.
통신 기록
- TX ▶ 보낸 명령, RX ◀ 받은 답, EV 사건(연결·끊김·시간 초과·묵은 바이트 버림). 줄 끝 같은 제어 문자는 <CR>·<LF> 로 보입니다. 시간 초과·끊김은 빨간 사건 줄입니다.
- «응답 시간» 을 켜면 RX 줄 옆에 «12.3 ms»(블록이면 «#41000 · 1000 B · 12.3 ms»)가 붙습니다.
- 찾기·거르기, 따라가기, 줄 고르기·복사는 다른 PortDock 프로그램과 같습니다. «화면 저장»(Ctrl+S)은 보이는 줄을 글 파일로, «파일 기록»(Ctrl+Shift+L)은 지금부터 오는 줄을 파일에 계속 덧붙입니다.
- 따라가기: 맨 아래에 있을 때만 새 줄을 따라 내려갑니다. 위로 굴리면 멈추고(새 줄이 와도 읽던 자리 그대로) 오른쪽 아래에 «↓ 맨 아래로 (새 줄 n)» 이 나옵니다. 누르거나 End, 또는 맨 아래까지 굴리면 다시 따라갑니다. 도구줄 «자동 스크롤» 체크가 지금 따라가는지를 보여 줍니다.
- 줄 고르기: 누르면 그 줄, Shift+누르기는 범위, Ctrl+누르기는 하나씩 더하기·빼기. 줄을 눌러도 따라가기는 꺼지지 않습니다.
- 오른쪽 버튼 메뉴: 줄 복사 · HEX 복사 · ASCII 복사 · HEX + ASCII 복사 · C 배열로 복사({0x01, 0x03}) · 이 내용 찾기. 내용 복사(HEX·ASCII·C 배열)는 사건 줄(EV)을 빼고 한 줄에 한 프레임씩 씁니다.
설정 (⚙)
- 언어·테마·글자 크기·기록 시각 형식·화면에 남길 줄 수.
- «연결하면 파일 기록 자동 시작» 과 자동 기록 폴더: 연결할 때마다 «portdock-scpi-날짜-시각.log».
- «설정 내보내기·가져오기» 로 연결 설정·명령 목록·반복 측정 설정을 JSON 파일로 옮깁니다.
- «항상 위»: 이 창을 다른 창 위에 늘 보이게 합니다(머리줄 📌 과 같은 값).
- «모두 펼치기(전문가 화면)»: 평소 접어 두는 칸(고급 연결·받기 설정·장애 주입·통계·찾는 방법·트리거·자동응답 등)을 펼친 채 보입니다. 켜 둔 채 하나를 접으면 이번 실행 동안만 접힙니다. 끄면 칸마다 기억해 둔 열림 상태로 돌아갑니다.
단축키·팁
- F4: 연결·끊기(왼쪽 버튼과 같음).
- Ctrl+L: 화면 기록 지우기(파일 로그는 그대로).
- Ctrl+S: 화면 내용 저장.
- Ctrl+Shift+L: 파일로 계속 저장 켜기·끄기.
- End: 로그 맨 아래로 가서 다시 따라가기.
- Ctrl+C: 고른 로그 줄을 «시각 방향 내용» 으로 복사(지금 보기대로). 입력칸 안에서는 보통 복사.
- Ctrl+F: 로그 찾기 칸으로. 찾기 칸에서 Enter 다음 · Shift+Enter 이전 · Esc 지우기.
- F1 또는 화면의 ? 버튼: 이 도움말. Esc 로 닫습니다.
- 숫자 칸: ↑/↓ 1씩, Shift+↑/↓ 10씩, PageUp/PageDown 100씩, 칸을 누른 뒤 마우스 휠. 속도 칸은 ↑/↓ 로 목록의 다음·앞 속도.
- 대화상자·우클릭 메뉴가 열려 있거나 한글을 조합하는 중에는 단축키가 동작하지 않습니다.
- Enter: 명령 칸에서 질의(? 로 끝남) 또는 쓰기. ↑↓: 앞서 보낸 명령.
- Esc: 기다리는 질의·반복 측정 멈춤(명령 칸 밖에서).
문제 해결
- «연결 거부»: 포트가 다르거나(5025 가 아닌 장비 — 설명서의 «socket port») 장비의 소켓 기능이 꺼져 있습니다. 다른 프로그램(VISA 세션)이 이미 붙어 있으면 장비가 새 접속을 받지 않기도 합니다.
- «응답 없음(시간 초과)»: 질의가 아닌 명령을 질의로 보냈거나, 철자가 틀렸거나(오류 큐 확인), 장비가 느린 측정 중입니다(«응답 기다림» 늘리기 또는 *OPC?).
- «응답이 끝나지 않았습니다»: «줄 끝» 이 장비와 다릅니다(CR 을 쓰는 장비 등).
- -410 Query INTERRUPTED: 답을 읽기 전에 다음 명령을 보냈습니다. «쓰기» 로 질의를 보냈다면 «읽기» 로 답을 먼저 받으세요.
- 시리얼에서 글자가 깨짐: 속도·패리티·데이터 비트, 흐름 제어(장비가 DTR/DSR 나 RTS/CTS 를 쓰는지), 널 모뎀 케이블인지 보세요.
- 프로그램이 열리지 않음: Microsoft Edge WebView2 가 필요합니다(윈도우 11 에는 기본 포함).