이 프로그램은
PortDock TCP 는 이더넷(TCP/IP)으로 장비와 데이터를 주고받는 시험 도구입니다.
PC 가 장비에 접속하는 «클라이언트», 장비가 PC 에 접속하는 «서버», 둘 사이에 끼어 양쪽 통신을 기록하는 «중계(모니터)» 세 방식을 씁니다.
받은 데이터를 HEX·ASCII 로 보여 주고, 체크섬을 붙여 보내고, 시험 기록을 파일로 남깁니다.
처음 쓰는 순서
- 1. 왼쪽 «방식» 을 고릅니다. 장비가 서버(접속을 기다림)면 «클라이언트 (장비에 접속)», 장비가 PC 로 접속해 오면 «서버 (장비가 접속)».
- 2. 클라이언트면 장비의 «주소»(IP)와 «포트» 를, 서버면 «묶을 주소» 와 기다릴 «포트» 를 넣습니다.
- 3. «접속»(클라이언트) 또는 «듣기 시작»(서버)을 누릅니다. 상태가 «접속됨» 또는 «듣는 중» 이 되면 준비 끝입니다.
- 4. 아래 입력칸에 보낼 내용을 쓰고 «보내기»(또는 Enter)를 누릅니다. 받은 것은 RX ◀, 보낸 것은 TX ▶ 로 찍힙니다.
화면 구성
- 왼쪽: «방식»·주소·«포트», «고급 연결» 접기(즉시 전송·재접속), «접속»/«듣기 시작» 버튼(실행 중에는 클라이언트 «끊기», 서버·중계 «듣기 멈춤»), 상태, (서버) «접속한 상대» 목록, «받기 설정» 접기(프레임 구분·수신 체크섬 검사·에코), «파일로 계속 저장».
- «고급 연결»·«받기 설정» 은 평소 접혀 있고 제목 옆에 지금 값(«Nagle 끔 · 재접속 2초», «끊김 시간 20ms · 체크섬 검사 없음»)이 보입니다. 기본값과 다르면 펼친 채 시작하고, 열고 닫은 상태는 기억합니다.
- 가운데 위 도구줄: «보기»(HEX·ASCII·«둘 다» — 처음에는 «둘 다»), «자동 스크롤», RX·TX 누적 바이트 수, «화면 내용 저장», «지우기».
- 도구줄 아래 찾기·거르기 줄: 찾기 칸, ▲·▼, «찾은 줄만», «틀림만», 방향(전체·RX·TX·EV). «로그 찾기·거르기» 절을 보세요.
- 가운데 로그: 시각·방향(RX ◀ / TX ▶ / EV)·(서버면 상대 주소)·내용. 수신 체크섬 검사를 켜면 «정상»·«틀림» 이 붙습니다.
- 가운데 아래: 보내기 줄((서버) «받는 쪽», HEX/ASCII, 입력칸, 체크섬, 줄 끝 붙이기, «보내기»), «보낼 바이트», «반복(ms)», «+ 목록에 추가».
- 오른쪽: «명령 목록», «트리거», «상세»(로그 줄을 누르면 그 줄의 상대 주소·바이트 수·HEX·ASCII).
- 창이 좁으면(1180px 이하) 오른쪽 칸이 숨고, 도구줄의 «☰ 명령·상세»(1100px 이하에서는 «☰») 버튼으로 펼칩니다. 로그 줄을 누르면 저절로 펼쳐져 «상세» 가 보입니다(Shift·Ctrl 로 여러 줄을 고를 때는 펼치지 않음).
- 보내기 둘째 줄의 «⋯ 더보기»: 문자 간 지연·파일 보내기…·(반복이 꺼져 있으면) 반복 횟수. 반복 횟수 칸은 반복을 켰거나 횟수를 정했을 때만 줄에 보입니다.
- 머리줄 📌: 항상 위 — 이 창을 다른 창 위에 늘 보이게 합니다(설정의 «항상 위» 와 같음).
- 창 제목에 지금 상태가 나옵니다(예: «COM3 115200 8N1 · 연결됨 ● REC — PortDock Serial»). 작업 표시줄에서 어느 창이 어느 포트인지 알 수 있습니다.
- 창 너비가 900px 이하(화면 반쪽 맞춤 등)면 왼쪽 연결 설정 칸이 접히고, 위에 요약 줄과 «⚙ 연결 설정»·연결 버튼이 나옵니다. «⚙ 연결 설정» 으로 펼치고 ✕ 나 바깥을 눌러 닫습니다.
- 도구줄에는 «보기 설정»(시간 간격 열: 없음·직전 줄과 간격·응답 시간)가 있고, 상태줄 오른쪽에 처리량(RX·TX B/s)·프레임 수·«마지막 수신 n초 전» 이 나옵니다.
- 보내기 줄 둘째 줄: «반복(ms)»·«번»(횟수)·«+ 목록에 추가»·«문자 간(ms)»·«파일 보내기…». 체크섬 옆 ⚙ 는 체크섬 옵션입니다.
- 오른쪽 칸 «명령 목록» 아래에 «트리거» 가 있습니다(▸ 를 눌러 펼침).
연결 설정
- «방식»: 위의 탭 [클라이언트 | 서버 | 중계] — 클라이언트(장비에 접속), 서버(장비가 접속), 중계(모니터, 아래 «중계(모니터)»). 방식마다 주소·포트를 따로 기억하므로 탭을 바꿔도 다른 방식의 주소(예: 클라이언트의 장비 IP)를 0.0.0.0 으로 덮어쓰지 않습니다. 실행 중에는 바꿀 수 없습니다.
- «주소»(클라이언트): 접속할 장비의 IP 주소나 이름. 예: «192.168.0.10».
- «묶을 주소 (0.0.0.0 = 모든 랜카드)»(서버): 어느 랜카드로 접속을 받을지. 보통 0.0.0.0 으로 둡니다. 특정 랜카드만 쓰려면 그 PC 쪽 IP 를 넣습니다.
- «포트»: 클라이언트는 장비의 포트(예: Modbus TCP 502), 서버는 기다릴 포트. 서버에서 0 이면 운영체제가 빈 포트를 고릅니다.
- «즉시 전송 (Nagle 끔)»(«고급 연결» 안): 작은 데이터를 모으지 않고 바로 보냅니다. 장비 시험에는 켜 두는 것이 좋습니다.
- «끊기면 자동 재접속»(클라이언트): 접속이 끊기거나 실패하면 «재접속 간격(ms)»(200 이상, 기본 2000)마다 다시 시도합니다. 끄면 한 번 끊기면 멈춥니다. 한 번의 접속 시도는 3초까지 기다립니다.
- «받은 것 그대로 돌려주기 (에코)»(서버, «받기 설정» 안): 받은 데이터를 보낸 상대에게 그대로 돌려줍니다. 실행 중에도 켜고 끌 수 있습니다.
- 실행 중 버튼은 클라이언트면 «끊기», 서버·중계면 «듣기 멈춤» 입니다(F4 도 같음).
- 클라이언트로 502 포트에 접속했는데 프레임 구분이 «Modbus TCP» 가 아니면 «Modbus TCP 로 보기» 알림줄이 한 번 나옵니다. 누르면 요청·응답이 하나씩 끊기고 상세에 풀이가 나옵니다.
- 에코는 1초에 200번을 넘으면 저절로 꺼집니다(상대도 에코하면 끝없이 주고받기 때문). 이때 «ECHO OFF …» 줄과 오류 문구가 나옵니다.
- 서버는 최대 64개 접속을 받습니다. 넘으면 거절하고 «REJECT …» 를 남깁니다.
- 실행 중에는 방식·주소·포트·즉시 전송·재접속 설정이 잠깁니다(🔒). 에코·프레임 구분·수신 체크섬 검사는 실행 중에 바꿔도 바로 적용됩니다.
- 재접속 대기·멈춤 상태줄에는 백엔드가 알려 준 마지막 실패 이유가 함께 나옵니다.
접속한 상대(서버)
- 서버로 듣는 중이면 왼쪽 «접속한 상대» 에 붙어 있는 장비 주소가 보입니다. 아직 없으면 «아직 없음». 둘 이상이면 «모두 끊기 (n)» 로 한 번에 끊습니다(듣기는 계속).
- 상대 옆 «끊기» 를 누르면 그 접속만 끊습니다. 주소가 길면(IPv6) 줄임표로 줄이고 마우스를 올리면 전체가 보입니다 — «끊기» 는 늘 보입니다.
- 보내기 줄 왼쪽 «받는 쪽» 에서 «모두에게» 또는 특정 상대를 고릅니다.
- 보낼 상대가 하나도 없으면 «보내기» 가 잠깁니다.
- 고른 상대가 끊기면 «모두에게» 로 바뀌지 않고 «(끊김) 주소» 로 남으며, 다른 상대를 고를 때까지 «보내기»·«반복»·목록의 ▶ 가 잠깁니다(이유: «고른 상대가 끊겼습니다»). 반복 중이었으면 멈추고 로그에 EV 줄을 남깁니다.
- 같은 IP 에서 다시 접속하면(포트는 보통 바뀜) 아래에 «같은 주소에서 다시 접속했습니다» 와 «이 상대로 보내기» 버튼이 나옵니다. 저절로 바꾸지는 않습니다.
- «모두에게» 로 보냈는데 일부 상대에게만 나갔으면 «3개 중 2개에 보냄» 처럼 알려 줍니다.
프레임 구분
TCP 는 데이터를 이어진 흐름으로 넘기므로, 어디서 한 줄(프레임)을 끊을지 정합니다. 접속마다 따로 끊고, 모든 방식에서 «끊김 시간(ms)» 동안 아무것도 안 오면 쌓인 것을 내보냅니다.
- «끊김 시간(조용한 간격)»: 정한 시간(기본 20ms) 동안 조용하면 끊습니다.
- «끝 문자»: «끝 문자(HEX)» 에 적은 바이트(예: «0D 0A»)가 오면 바로 끊습니다. 끝 문자도 그 줄에 포함됩니다.
- «끝 문자(HEX)» 는 «0D 0A», «0D0A», «0x0D 0x0A», «CR LF»·«CRLF»(이름: CR LF CRLF NUL STX ETX) 모두 됩니다. 칸 아래에 «해석: 0D 0A (2바이트)» 처럼 읽은 결과가 나오고, 읽을 수 없으면 빨갛게 이유를 보여 줍니다. 비어 있으면 끊김 시간으로만 끊는다고 알려 줍니다.
- «고정 길이»: «길이» 바이트마다 끊습니다.
- 끊김 없이 계속 들어오는 데이터는 16KB 마다 강제로 끊습니다.
- 실행 중에 바꿔도 바로 적용됩니다.
Modbus TCP 장비 값 읽기 따라하기
Modbus TCP 장비(PLC·인버터·전력계·게이트웨이)의 레지스터를 한 번 읽어 보는 순서입니다. 값을 계속 읽고 표로 보려면 PortDock Modbus Master 가 더 편합니다.
- 1. 탭 «클라이언트», 주소에 장비 IP, 포트 502 → «접속». 처음이면 «Modbus TCP 로 보기» 알림줄이 나옵니다 — 누르면 프레임 구분이 «Modbus TCP (MBAP 길이)» 가 됩니다.
- 2. 보내기 줄의 «Modbus…» 로 요청 창을 엽니다. 국번(슬레이브 ID) 1, 함수 03, 시작 주소(40001 표기면 «4xxxx 표기»), 개수 10.
- 3. «입력칸에 넣기» → 보내기 줄이 HEX·체크섬 없음·줄 끝 없음으로 맞춰지고 MBAP 머리(트랜잭션 ID)가 붙은 요청이 들어갑니다. «보내기».
- 4. 응답 줄을 누르면 «상세» 에 MBAP 풀이와 «40001 = 1812 (0x0714)» 처럼 요청과 짝지은 값이 나옵니다(같은 트랜잭션 ID). 예외면 이름(예: 02 없는 주소)이 나옵니다.
- 응답이 없으면 IP·포트·국번(게이트웨이 뒤 RTU 장비면 그 국번)을 확인하세요.
보내기
입력칸 왼쪽에서 HEX 또는 ASCII 를 고릅니다. 입력하는 동안 «보낼 바이트» 에 실제로 나갈 바이트와 개수가 보입니다. 입력이 틀리면 그 자리에 이유가 나옵니다.
- HEX: «01 03 0A», «01030A», «0x01,0x03,0x0A» 모두 같은 3바이트입니다. 띄어쓰기·쉼표·세미콜론·하이픈으로 나눌 수 있습니다. 두 자리씩이어야 합니다.
- ASCII: 글자를 그대로 보냅니다. 특수 문자는 «\r»(CR), «\n»(LF), «\t»(탭), «\0»(0x00), «\\»(역슬래시), «\xNN»(HEX 두 자리 바이트, 예: «\x02»)로 씁니다.
- «체크섬»: CRC16 Modbus(낮은 바이트 먼저), CRC16 CCITT·CRC16 XMODEM(높은 바이트 먼저), CRC8, LRC, BCC (XOR), SUM8, SUM16(높은 바이트 먼저), CRC-32(낮은 바이트 먼저), CRC (사용자 정의) 중 하나를 붙입니다. 옆 ⚙ 로 계산 범위·자리·바이트 순서를 바꿉니다.
- «줄 끝 붙이기»: «없음»·CR·LF·CR LF 중 하나를 맨 뒤에 붙입니다. 받을 때 줄을 끊는 «끝 문자» 와는 별개입니다.
- 붙는 순서는 «본문 + 체크섬 + 줄 끝» 입니다. 체크섬은 기본으로 본문 전체(첫 바이트부터)로 계산하고 줄 끝은 계산에 넣지 않습니다(⚙ 옵션으로 범위·자리를 바꿀 수 있음).
- 예: «STATUS?» + CR LF, 또는 HEX «01 03 00 00 00 0A» + CRC16 Modbus → «01 03 00 00 00 0A C5 CD».
- 보내기에 실패하면(2초 안에 못 씀 등) 그 접속은 믿을 수 없으므로 닫고 «SEND FAIL …» 을 남깁니다.
- HEX↔ASCII 를 바꾸면 입력 내용이 같은 바이트의 새 표기로 바뀝니다(예: «41 54 0D 0A» ↔ «AT» + CR LF 이스케이프). 못 읽는 내용이면 글자는 그대로 두고 알림줄에 이유가 나옵니다.
- 바꿀 때 체크섬이 켜져 있으면 확인 창 대신 알림줄에 «체크섬 … 이 켜져 있습니다» 와 «체크섬 끄기» 버튼이 나옵니다.
반복과 명령 목록
- «반복(ms)»: 체크하면 지금 입력을 정한 간격(10ms 이상)으로 계속 보냅니다. 앞 송신이 끝나지 않았으면 그 차례는 건너뜁니다.
- 접속이 끊기면 반복이 꺼지고, 다시 붙어도 저절로 켜지지 않습니다.
- «+ 목록에 추가»: 지금 입력(모드·체크섬·줄 끝 포함)을 오른쪽 «명령 목록» 에 추가합니다. 이름은 바로 고칠 수 있습니다.
- 서버에서는 명령도 «받는 쪽» 에 고른 상대에게 보냅니다.
- 명령 목록은 프로그램을 껐다 켜도 남아 있습니다.
- 목록의 ▶ 는 바로 보내기(이름 칸에서 Enter·더블클릭도), ✎ 는 «입력칸으로 불러오기», ⧉ 는 복제, ✕ 는 지우기입니다. 지우면 5초 동안 아래 알림의 «되돌리기» 로 되살릴 수 있습니다(확인 창은 뜨지 않음).
- 순서 바꾸기: 이름 왼쪽 ↑·↓, 또는 이름 칸에서 Alt+↑/↓.
- 목록이 비어 있으면 «예시 넣기» 로 자주 쓰는 명령 예시를 넣을 수 있습니다(이름 앞 «예:»). Serial 은 «용도» 에 맞춰 AT·ATI·AT+GMR 또는 Modbus FC03·FC04 읽기, TCP 는 *IDN?(SCPI)·HTTP 요청·Modbus TCP 읽기(프레임 구분이 Modbus TCP 면 Modbus TCP 읽기 둘), UDP 는 글자·*IDN?·HEX 하나씩입니다. 쓰기 명령은 넣지 않습니다.
- «+ 목록에 추가» 를 누르면 새 명령의 이름 칸에 포커스가 가서 바로 이름을 고칠 수 있습니다. 로그 줄의 오른쪽 버튼 «명령 목록에 추가» 로 받은·보낸 바이트를 그대로(HEX, 체크섬·줄 끝 없이) 넣을 수도 있습니다.
- «목록 내보내기»·«목록 가져오기»: 명령 목록만 JSON 파일로 옮깁니다(다른 PC·다른 PortDock 프로그램과 주고받기). 가져올 때 지금 목록이 있으면 «뒤에 추가»·«목록 바꾸기» 를 칸 안에서 고르고, 바꾼 뒤에도 «되돌리기» 할 수 있습니다.
수신 체크섬 검사
«수신 체크섬 검사» 에서 종류를 고르면, 받은 줄마다 맨 끝 체크섬이 맞는지 보고 «정상» 또는 «틀림» 을 붙입니다.
- 프레임 구분이 «끝 문자» 이고 줄이 그 끝 문자로 끝나면, 끝 문자를 떼고 그 앞의 체크섬을 검사합니다.
- 줄이 체크섬 길이보다 짧으면 표시하지 않습니다.
- 파일 로그에는 «[OK]» 또는 «[CHECK FAIL]» 이 붙습니다.
- 프레임이 잘못 끊기면 체크섬도 «틀림» 이 됩니다. 먼저 프레임 구분을 확인하세요.
로그와 사건 줄(EV)
RX·TX 줄 사이에 EV 줄로 접속·끊김 같은 사건이 찍히고, 파일 로그에도 남습니다.
- CONNECT 192.168.0.10:502: 클라이언트가 접속했습니다.
- CONNECT FAIL …: 접속에 실패했습니다(장비 꺼짐, 주소·포트 틀림, 방화벽 등). 자동 재접속이 켜져 있으면 다시 시도합니다.
- LISTEN 0.0.0.0:5000: 서버가 이 주소·포트에서 기다리기 시작했습니다.
- ACCEPT 192.168.0.20:51234: 상대가 서버에 접속했습니다.
- ACCEPT ERROR …: 접속을 받다가 오류가 났습니다.
- REJECT … — 최대 접속 수 64: 접속이 너무 많아 거절했습니다.
- CLOSE 주소 (이유): 접속이 끝났습니다. 이유는 «closed by peer»(상대가 끊음), «disconnected by user»(내가 끊음), 또는 오류 내용입니다.
- STOP LISTEN: 서버 듣기를 멈췄습니다.
- ECHO ON / ECHO OFF: 에코를 켜거나 껐습니다. 초당 200번을 넘어 저절로 꺼지면 이유가 함께 붙습니다.
- SEND FAIL 주소: 그 상대에게 보내지 못했습니다.
- TRIGGER «이름»: 트리거가 맞았습니다(«— 반복 멈춤»·«— 파일 기록 멈춤» 이 붙을 수 있음). 화면에만 나옵니다.
- REPEAT 끝 (n번 보냄): 반복 횟수를 다 보냈습니다. 화면에만 나옵니다.
- LOG NEXT 새 이름 / LOG PART 2 (prev 옛 이름): 파일 로그를 크기·시간으로 나눠 다음 파일로 이어 썼습니다(두 파일에 남음).
- 따라가기: 맨 아래에 있을 때만 새 줄을 따라 내려갑니다. 위로 굴리면 멈추고(새 줄이 와도 읽던 자리 그대로) 오른쪽 아래에 «↓ 맨 아래로 (새 줄 n)» 이 나옵니다. 누르거나 End, 또는 맨 아래까지 굴리면 다시 따라갑니다. 도구줄 «자동 스크롤» 체크가 지금 따라가는지를 보여 줍니다.
- 줄 고르기: 누르면 그 줄, Shift+누르기는 범위, Ctrl+누르기는 하나씩 더하기·빼기. 줄을 눌러도 따라가기는 꺼지지 않습니다.
- 오른쪽 버튼 메뉴: 줄 복사 · HEX 복사 · ASCII 복사 · HEX + ASCII 복사 · C 배열로 복사({0x01, 0x03}) · 다시 보내기(TX 줄 — 그 바이트 그대로) · 명령 목록에 추가 · 이 내용 찾기. 내용 복사(HEX·ASCII·C 배열)는 사건 줄(EV)을 빼고 한 줄에 한 프레임씩 씁니다.
로그 찾기·거르기
도구줄 바로 아래 줄에서 로그를 찾고 거릅니다. 거르기는 보기만 바꾸며 기록은 그대로 남습니다(파일 로그에도 영향 없음).
- 찾기 칸: «01 03» 처럼 2자리 HEX 묶음이면 바이트로, 그 밖은 글자로(대소문자 무시) 찾습니다. 옆 칸에서 «자동»·«HEX»·«글자» 를 직접 고를 수 있습니다(«0A» 처럼 헷갈릴 때). 사건 줄(EV)은 글자로 찾을 때 설명 글에서 찾습니다.
- 찾은 줄은 노랗게 보이고, ▲·▼(또는 Enter·Shift+Enter)로 앞뒤 찾은 줄로 옮겨 고릅니다. «3/17» 은 17개 중 세 번째라는 뜻입니다(고른 줄이 찾은 줄이 아니면 «–/17»).
- «찾은 줄만»: 찾은 줄만 보입니다. «틀림만»: 수신 체크섬이 «틀림» 인 줄만 보입니다. 방향 칸: «전체»·RX·TX·EV.
- 거르는 중에는 오른쪽에 «120 / 5,000줄 보임» 처럼 나오고, ✕ 로 모두 끕니다. 거르는 중에도 새 줄은 계속 들어오고, 조건에 맞으면 보입니다.
- 도구줄의 «CHECK FAIL n»: «지우기» 뒤로 체크섬이 틀린 줄 수입니다(틀린 줄이 있을 때만 보임). 누르면 «틀림만» 이 켜지고 꺼집니다.
- 단축키: Ctrl+F 찾기 칸으로, Enter 다음, Shift+Enter 이전, Esc 찾는 글자 지우기(한 번 더 누르면 거르기 전체 끄기).
저장과 상세
- «파일로 계속 저장»: 실행 중에 누르면 고른 파일에 RX·TX·EV 를 계속 덧붙입니다. 다시 누르면(«저장 멈춤») 멈춥니다.
- 파일 한 줄 모양(HEX 형식): «2026-10-17 21:05:03.123 RX [192.168.0.10:502] 01 03 02 00 64 [OK]». CSV 형식은 마지막 칸(peer)에 상대 주소가 들어갑니다.
- «화면 내용 저장»: 지금 화면에 남은 줄을 텍스트 파일로 저장합니다. 지금 «보기» 대로(HEX, ASCII, «둘 다» 는 «HEX | ASCII») 쓰고, 거르기가 켜져 있으면 보이는 줄만 씁니다. 첫 줄(# 로 시작)에 보기·거르기·줄 수가 적힙니다. 시각은 설정의 «로그 시각 표시» 를 따르고, 체크섬이 틀린 줄 끝에는 «[CHECK FAIL]» 이 붙습니다. («파일로 계속 저장» 의 줄 모양은 보기와 상관없이 설정 «파일 로그 형식» 을 따릅니다 — 기본 HEX.)
- «지우기»: 화면 로그와 RX·TX 바이트 수를 비웁니다. 파일 로그는 그대로입니다.
- 로그 줄을 누르면 오른쪽 «상세» 에 시각·상대 주소·바이트 수·HEX·ASCII 가 나옵니다(따라가기는 그대로).
- ASCII 보기에서 제어 문자는 «<CR>», «<LF>», «<STX>» 처럼, 그 밖은 «<1B>» 처럼 보입니다. 0x80 이상은 설정의 «글자 인코딩» 으로 읽습니다.
경고·안내 문구의 뜻
- «포트 0 은 운영체제가 빈 포트를 고릅니다. 실제 포트는 시작 후 상태줄에 나옵니다.»: 서버 포트를 0 으로 둔 경우입니다. 장비가 정해진 포트로 접속한다면 그 번호를 넣으세요.
- «서버를 처음 열면 윈도우 방화벽 허용 창이 뜰 수 있습니다(관리자 권한 필요).»: 허용하지 않으면 다른 PC·장비가 접속하지 못합니다. 창이 뜨면 허용을 누르세요.
- 에코가 저절로 꺼짐(«에코를 껐습니다: 1초에 200번 초과»): 상대도 받은 것을 돌려주는 중일 수 있습니다. 한쪽 에코를 끄세요.
- 설정 창 «폴더를 고르지 않으면 자동 로그가 시작되지 않습니다.»: «연결하면 자동으로 파일 로그 시작» 을 켰다면 «고르기» 로 폴더를 정하세요.
- 설정 창 «연결·기록 중에는 가져올 수 없습니다. 먼저 멈추세요.»: 먼저 «멈춤»·«저장 멈춤» 을 하세요.
설정(⚙)
- «언어»: 한국어·English.
- «테마»: «윈도우 설정 따름»·«밝게»·«어둡게».
- «글자 크기(px)»: 11~18.
- «로그 시각 표시»: «시:분:초.밀리초», «날짜 + 시각», «UTC», «시작부터 지난 시간 (지우면 다시)». 화면과 «화면 내용 저장» 에 적용됩니다(파일 로그는 늘 날짜 + 시각).
- «화면에 남길 줄 수»: 1,000~1,000,000(기본 100,000). 넘치면 화면에서만 오래된 줄을 지웁니다.
- «새 줄이 오면 자동 스크롤»: 프로그램을 켤 때 «자동 스크롤»(따라가기)의 처음 상태. 켜 두어도 위로 굴리면 멈춥니다.
- «연결하면 자동으로 파일 로그 시작»: «자동 로그 폴더» 를 고르면 시작할 때마다 «portdock-tcp-날짜-시각.log» 에 저장합니다.
- «연결·기록 중에 창을 닫으려 하면 묻기»: 실수로 창을 닫아 시험이 끊기는 것을 막습니다.
- «설정 내보내기»·«설정 가져오기»: 화면 설정과 명령 목록을 JSON 파일로 옮깁니다. 다른 PortDock 프로그램의 파일은 받지 않습니다.
- «기본값으로»: 화면 설정만 되돌립니다(명령 목록은 그대로).
- «항상 위»: 이 창을 다른 창 위에 늘 보이게 합니다(머리줄 📌 과 같은 값).
- «모두 펼치기(전문가 화면)»: 평소 접어 두는 칸(고급 연결·받기 설정·장애 주입·통계·찾는 방법·트리거·자동응답 등)을 펼친 채 보입니다. 켜 둔 채 하나를 접으면 이번 실행 동안만 접힙니다. 끄면 칸마다 기억해 둔 열림 상태로 돌아갑니다.
단축키·팁
- F4: 시작·멈춤(왼쪽 버튼과 같음).
- Ctrl+L: 화면 기록 지우기(파일 로그는 그대로).
- Ctrl+S: 화면 내용 저장.
- Ctrl+Shift+L: 파일로 계속 저장 켜기·끄기.
- Esc: 반복 보내기 멈춤(입력칸 밖에서 — 입력칸 안의 Esc 는 그 칸의 동작).
- End: 로그 맨 아래로 가서 다시 따라가기.
- Ctrl+C: 고른 로그 줄을 «시각 방향 내용» 으로 복사(지금 보기대로). 입력칸 안에서는 보통 복사.
- Ctrl+F: 로그 찾기 칸으로. 찾기 칸에서 Enter 다음 · Shift+Enter 이전 · Esc 지우기.
- F1 또는 화면의 ? 버튼: 이 도움말. Esc 로 닫습니다.
- 숫자 칸: ↑/↓ 1씩, Shift+↑/↓ 10씩, PageUp/PageDown 100씩, 칸을 누른 뒤 마우스 휠. 속도 칸은 ↑/↓ 로 목록의 다음·앞 속도.
- 대화상자·우클릭 메뉴가 열려 있거나 한글을 조합하는 중에는 단축키가 동작하지 않습니다.
- 보내기 입력칸에서 ↑/↓: 앞서 보낸 내용(이력).
- F2·F3·F5~F12: 그 키를 준 명령 보내기(명령 목록의 «키» 칸).
- 입력칸에서 Enter: 보내기(보낼 상대가 있을 때).
- 창이 좁으면 «☰ 명령 목록» 으로 오른쪽 칸을 펼치고, ✕ 나 바깥을 눌러 닫습니다.
- 장비가 클라이언트인지 서버인지 모르면, 장비 설정 화면에서 «서버 IP»(장비가 접속할 곳)를 넣는 칸이 있는지 보세요. 있으면 이 프로그램을 서버로 씁니다.
- 이 PC 의 IP 는 윈도우 명령 프롬프트에서 ipconfig 로 확인할 수 있습니다.
입력 이력·명령 단축키
- 보내기 입력칸에서 ↑/↓: 앞서 보낸 내용을 다시 불러옵니다(최근 50개, HEX/ASCII 모드도 함께). 같은 내용을 또 보내면 맨 뒤로 옮겨질 뿐 두 번 쌓이지 않습니다. 프로그램을 껐다 켜도 남습니다.
- 고치던 글은 잃지 않습니다 — 처음 ↑ 를 누를 때 지금 글을 따로 두었다가, 맨 아래에서 ↓ 를 누르면 그대로 돌아옵니다. 한글을 조합하는 중에는 ↑/↓ 가 움직이지 않습니다.
- 이력은 «보내기» 버튼과 입력칸 Enter 로 보낸 것만 남깁니다(반복·명령 목록·다시 보내기는 남기지 않음).
- 명령 단축키: 명령 목록 각 줄의 «키» 칸에서 F2·F3·F5~F12 중 하나를 고르면 그 키로 바로 보냅니다(입력칸에 있어도 됨). F1(도움말)·F4(연결)는 쓸 수 없고, 다른 명령이 쓰는 키는 «F7 — «이름»» 처럼 회색으로 보여 고를 수 없습니다.
- 단축키는 내보낸 명령 목록 파일에도 들어갑니다. 복제한 명령에는 붙지 않고, 가져올 때 이미 쓰는 키는 빠집니다. 대화상자·우클릭 메뉴가 열려 있으면 동작하지 않습니다.
시간 간격 열·처리량·반복 횟수
- 도구줄 «보기 설정» 의 «시간 간격 열»: «직전 줄과 간격» 은 바로 앞 RX·TX 줄부터 지난 시간(+12 ms), «응답 시간 (TX→RX)» 은 마지막으로 보낸 TX 부터 이 RX 까지의 시간입니다. 시각 옆 열에 나오고 줄 복사(Ctrl+C)·«화면 내용 저장» 에도 들어갑니다. 사건 줄(EV)은 비어 있습니다.
- 시각은 1ms 단위입니다. USB 변환기·운영체제의 전달 지연(수 ms)이 섞여 있으니 장비의 정확한 응답 시간은 오실로스코프로 보세요.
- 상태줄 오른쪽: «RX 1.2 KB/s · TX 0 B/s» 는 최근 1초 동안의 처리량, «프레임 120/30» 은 «지우기» 뒤로 받은·보낸 줄 수, «마지막 수신 3초 전» 은 마지막으로 받은 때입니다. 받는 중에 10초 넘게 조용하면 빨갛게 바뀝니다.
- «반복(ms)» 옆 «번» 칸: 이 횟수만큼 보내고 저절로 멈춥니다(0 = 끌 때까지 계속). 옆에 «보냄 3/10» 처럼 보낸 수가 나오고, 다 보내면 «REPEAT 끝 (10번 보냄)» 사건 줄이 남습니다(화면에만).
트리거
오른쪽 칸 «트리거» 를 펼쳐 «+ 트리거» 로 만듭니다. 받은 줄(RX)에 패턴이 들어 있으면 고른 동작을 합니다.
- 패턴 — HEX: «01 03 ?? **»(?? = 아무 1바이트, ** = 0바이트 이상). ASCII: «ALARM*» 처럼(? = 아무 1바이트, * = 0바이트 이상, \r \n \xNN 이스케이프, 글자 ? 는 \x3F). 줄 안 어디에든 있으면 맞고, 대소문자를 가립니다. 자동응답 규칙에서 «와일드카드» 를 켠 것과 같은 규칙입니다.
- 동작: «색칠»(색을 고를 수 있음) · «소리»(짧은 삐 소리) · «반복 멈춤» · «기록 멈춤»(파일로 계속 저장을 끔) · «사건 줄»(«TRIGGER «이름»» EV 줄) · «깜빡임»(창이 뒤에 있으면 작업 표시줄이 깜빡임). 반복·기록을 멈추면 «— 반복 멈춤» 처럼 사건 줄에 함께 남습니다.
- 줄마다 맞은 횟수가 «3번» 처럼, 머리에 모두 합친 «맞은 횟수 n» 이 나옵니다. «횟수 지우기» 로 0 부터. 체크를 끄면 그 트리거만 쉽니다. 지우면 5초 동안 «되돌리기» 할 수 있습니다.
- 트리거는 화면에서만 동작합니다(색·사건 줄은 화면 기록, 파일 로그에는 남지 않음). 목록은 프로그램을 껐다 켜도 남습니다.
체크섬 옵션·CRC-32·범용 CRC
보내기 줄과 «수신 체크섬 검사» 의 체크섬 옆 ⚙ 를 누르면 옵션 창이 열립니다. 옵션이 켜져 있으면 ⚙• 로 보입니다.
- «앞에서 빼고 계산할 바이트 수»: STX·주소 같은 머리 n바이트를 계산에서 뺍니다.
- «끝에서 이만큼 앞에 넣기»: 체크섬을 끝에서 m바이트 앞에 넣습니다(ETX 앞 등). 그 m바이트는 계산에서도 빠집니다. 예: «\x02AB\x03» + BCC, 앞 1·끝 1 → 02 41 42 [03] 03. 줄 끝 붙이기(CR LF)는 따로 맨 뒤에 붙습니다.
- «바이트 순서 뒤집기»: 2·4바이트 체크섬의 순서를 바꿉니다. 기본은 CRC16 Modbus·CRC-32 가 낮은 바이트 먼저, CCITT·XMODEM·SUM16·범용 CRC 가 높은 바이트 먼저입니다.
- 수신 검사도 같은 옵션을 따릅니다 — 앞 n바이트를 빼고 계산해 끝에서 m바이트 앞의 체크섬과 비교합니다(끝 문자 방식이면 끝 문자를 먼저 뗌).
- «CRC-32»: ISO-HDLC(zip·이더넷과 같은 것), 4바이트. «CRC (사용자 정의)»: 너비 8·16·32, poly·init·xorout(HEX), refin·refout 을 reveng 카탈로그 표기 그대로 넣습니다. «미리 정한 값» 에 CRC-16/ARC·KERMIT·X.25·DNP·CRC-32/MPEG-2·CRC-32C 등이 있습니다. 값이 너비를 넘으면 빨갛게 이유가 나오고 보내지 않습니다.
- 체크섬 옵션은 명령 목록에도 함께 저장·내보내기됩니다.
글자 인코딩·파일 로그 형식
설정(⚙)의 «글자·파일 로그» 칸입니다.
- «글자 인코딩»: UTF-8(기본)·CP949(EUC-KR)·Latin-1·ASCII. ASCII 보기·복사·저장과 ASCII 로 보내는 글자에 씁니다. 이 인코딩으로 읽을 수 없는 바이트는 «<C7>» 처럼, 제어 문자는 «<CR>» 처럼 보입니다. 보낼 글자가 그 인코딩에 없으면 «보낼 바이트» 에 이유가 나오고 보내지 않습니다(\xNN 이스케이프는 늘 그 바이트). 로그 찾기의 한글은 UTF-8 바이트로 찾습니다 — CP949 줄은 HEX 로 찾으세요.
- «파일 로그 형식»: HEX(예전과 같음) · ASCII(글자) · HEX + ASCII · CSV(엑셀용 «ts,dir,len,hex,ascii,check,note,peer», UTF-8 BOM). CSV 의 = + - @ 로 시작하는 칸은 엑셀이 수식으로 읽지 않게 앞에 ' 를 붙입니다. CSV 를 고르면 저장 파일 이름도 .csv 로 제안합니다.
- «크기로 나누기(MB)»·«시간으로 나누기(시간)»: 넘으면 «이름-002.log», «이름-003.log» … 로 이어 씁니다. 옛 파일 끝에 «LOG NEXT 새 이름», 새 파일 처음에 «LOG PART 2 (prev 옛 이름)» 사건 줄이 남습니다. 0 이면 나누지 않습니다.
- 형식·나누기는 다음에 시작하는 파일 기록부터 적용됩니다(지금 쓰는 파일은 그대로).
파일 보내기·문자 간 지연
- 보내기 줄 «문자 간(ms)»: 모든 송신(보내기·반복·명령·다시 보내기)에서 바이트 사이에 이만큼 쉽니다. 버퍼가 작아 글자를 놓치는 느린 장비용입니다. 0 이면 한꺼번에.
- «파일 보내기…»: 파일을 고르고(열기 대화상자) 바이트 그대로 보냅니다 — 체크섬·줄 끝을 붙이지 않습니다. 최대 32MB.
- «나누기»: «덩어리» 는 정한 크기(기본 256바이트)씩, «줄 단위» 는 LF·CR LF·홀로 CR 뒤에서 끊어 줄마다 보냅니다. «문자 간 지연» 은 바이트 사이, «줄·덩어리 사이 지연» 은 줄(덩어리) 사이에 쉬는 시간입니다.
- 보내는 동안 진행 막대와 «보내는 중 45% (1,843/4,096 바이트)» 가 대화상자와 보내기 줄 아래에 나오고, 로그에는 줄·덩어리마다 TX 줄이 찍힙니다. «보내기 취소» 로 그 자리에서 멈추면 «SEND CANCELLED 1843/4096» 사건 줄이 남습니다. 연결이 끊기면 멈춥니다.
- 대화상자를 닫아도 보내기는 계속됩니다. 파일을 고르면 크기와 예상 시간(속도·지연으로 계산)이 나옵니다.
중계(모니터) — HMI ⇄ PLC 사이 엿보기
«방식» 의 «중계 (모니터 — A ⇄ 이 PC ⇄ B)» 는 이 PC 를 두 장비 사이에 끼웁니다. A(예: HMI·SCADA)가 B(예: PLC) 대신 이 PC 에 접속하면, 접속마다 B 로 새로 이어 주고 오가는 것을 모두 기록합니다.
- 1. «A 가 접속할 이 PC 주소»(보통 0.0.0.0)와 «포트»(예: 502), «이어 줄 장비 (B)» 의 주소·포트(PLC 의 IP·502)를 넣고 «듣기 시작».
- 2. A 의 접속 대상 IP 를 이 PC 주소로 바꿉니다(왼쪽 «이 PC 주소» 에서 확인). 접속이 오면 «RELAY A주소 ⇄ B주소» 줄이 남고 «이어진 쌍» 에 A 주소가 보입니다.
- 기록의 방향: «A→B ▶» 는 A 가 B 로 보낸 것(파일 로그·복사에서는 RX), «◀ B→A» 는 B 의 응답(TX). 상대 칸은 A 의 주소. 방향마다 프레임 구분기를 따로 써서 한쪽이 쪼개 보내도 섞이지 않습니다.
- 데이터는 받는 즉시 그대로 넘깁니다(프레임 구분·체크섬 검사는 기록에만 쓰고 넘기는 바이트는 바꾸지 않음). 자동응답·에코는 쓰지 않습니다.
- 한쪽이 끊으면 다른 쪽도 닫고 «CLOSE A ⇄ B (B 쪽이 끊음)» 처럼 먼저 끊은 쪽을 남깁니다. 다시 잇지 않습니다 — A 가 다시 접속하면 새 쌍이 생깁니다. B 에 접속하지 못하면 «RELAY FAIL …» 을 남기고 A 를 닫습니다.
- 끼워 넣기: 보내기 줄 맨 왼쪽에서 «A 쪽으로»/«B 쪽으로» 를 고르고 보냅니다(받는 쪽으로 특정 쌍도 고를 수 있음). 끼워 넣은 것은 «INJECT → A/B» 사건 줄 다음에 그 방향으로 기록됩니다. 실제 장비에 명령이 들어가므로 조심하세요.
- 상대 옆 «끊기» 는 그 쌍(A·B 둘 다)을 닫습니다.
Modbus TCP
- «프레임 구분» 의 «Modbus TCP (MBAP 길이)»: MBAP 머리의 길이 칸으로 요청·응답을 하나씩 끊습니다. 둘이 붙어 와도·쪼개져 와도 한 줄씩 나옵니다. 길이 칸이 이상하면(260바이트 초과 등) «끊김 시간(ms)»(기본 1000)으로 끊습니다.
- 상세 칸: 고른 줄이 MBAP 모양이면 «Modbus TCP · 요청/응답» 아래 트랜잭션 ID·길이 칸(틀리면 빨갛게)·Unit ID(= 국번)·함수·주소·개수·값을 풀어 보입니다. 맨 위 한 줄 요약 «id1 FC03 HR 0..9 (10)».
- «요청과 짝»: 고른 줄이 응답이면 같은 상대·같은 트랜잭션 ID 의 요청(반대 방향 — 중계에서는 HMI 쪽 RX 요청)을 거슬러 찾아 «40001 = 1812 (0x0714)» 같은 주소 붙은 값 표를 보입니다. U16·S16·HEX·F32 ABCD·F32 CDAB 와 주소 표기(0 기준/4xxxx)를 고를 수 있고, 예외 응답은 «예외 02 없는 주소 (Illegal Data Address)» 처럼 이름이 나옵니다. 국번·함수·바이트 수가 맞을 때만 짝짓습니다.
- 보내기 줄의 «Modbus…»: 국번(슬레이브 ID, MBAP 의 Unit ID 칸에 들어감)·함수·주소(0 기준/PLC 표기)·개수(또는 값)로 MBAP 머리까지 붙은 요청을 만듭니다. «입력칸에 넣기» 는 보내기 줄을 HEX·체크섬 없음·줄 끝 없음으로 맞춥니다(Modbus TCP 에는 CRC 가 없음). «목록에 추가» 로 명령 목록에.
- «MBAP 트랜잭션 ID 자동 증가»(프레임 구분이 Modbus TCP 일 때 보임, 기본 켬): 보낼 때마다 앞 2바이트를 1씩 늘려 넣습니다 — 반복·명령 목록·다시 보내기 모두. 보낼 바이트가 MBAP 모양이 아니면 그대로 보냅니다.
- 장비 흉내가 필요하면 오른쪽 «자동응답» 에 «{req 0..1} 00 00 00 05 {req 6} 03 02 00 64» 처럼 트랜잭션 ID·Unit ID(국번)를 돌려주는 규칙을 쓰세요(아래 «응답 템플릿»).
이 PC 주소(랜카드)
- 서버·중계의 «묶을 주소» 칸을 누르면 이 PC 의 랜카드 주소(연결 안 된 것은 «연결 안 됨»)와 0.0.0.0(모든 랜카드)을 고를 수 있습니다. 직접 적어도 됩니다.
- 왼쪽 «이 PC 주소» 에 연결된 랜카드의 IPv4/접두사·이름이 나옵니다. 누르면 그 주소로 묶고, 마우스를 올리면 설명·넷마스크·게이트웨이가 보입니다. ↻ 로 다시 읽습니다(케이블을 꽂은 뒤 등).
- 이 PC 에 없는 주소를 적으면 시작 전에 알려 줍니다. 시작하다 «이 PC 에 없는 주소» 로 실패하면 오류 문구 끝에 이 PC 주소 목록이 붙습니다.
- «포트가 이미 사용 중» 으로 실패하면 그 포트를 쥔 프로그램 이름과 PID 를 함께 보여 줍니다(관리자 권한 없이 — 시스템 프로그램은 PID 만).
자동응답
오른쪽 칸 «▸ 자동응답» 은 Simulator 와 같은 규칙으로 받은 줄에 답합니다 — 장비 흉내를 따로 띄우지 않고 이 창에서 바로.
- 머리의 «켜기» 로 켜고 끕니다(켜면 초록색). 꺼도 규칙은 남아 있고, 켜면 바로 답합니다. 규칙·켜기·비교 옵션은 껐다 켜도 남습니다.
- 규칙: «받으면» 패턴(HEX/ASCII, «정확히»/«포함», HEX 와일드카드 ??·**) → «응답»(체크섬·줄 끝·지연). 위에서부터 처음 맞는 하나만 답하고, 응답마다 통신 기록에 «AUTO 이름» 이 남습니다.
- ASCII 패턴은 글자 그대로 비교합니다(새 규칙 기본 — SCPI «*IDN?» 를 그대로). 규칙의 «와일드카드» 를 켜면 ? = 아무 1글자, * = 0개 이상입니다. 10/18 이전에 저장한 규칙은 켜진 채로 읽어 동작이 바뀌지 않습니다.
- 규칙이 없으면 [Modbus RTU 03 응답] [SCPI *IDN? 응답] [에코] 예제 버튼으로 시작합니다. 새 규칙은 바로 위 규칙의 방식(HEX/ASCII·정확히/포함·응답 형식·줄 끝)을 물려받습니다.
- «끝 문자 떼고 비교»: 받은 줄 끝의 끝 문자(프레임 구분)와 CR·LF 를 떼고 비교합니다. «안 맞은 요청 기록(NO MATCH)»: 어느 규칙에도 안 맞으면 «NO MATCH — closest: 이름» 을 남깁니다.
- 응답은 받은 상대에게 갑니다(TCP 서버는 그 접속, UDP 는 보낸 쪽 주소). 우리가 보낸 응답이 그대로 되돌아오면 다시 답하지 않아 끝없는 주고받기를 막습니다.
- 카드 위 숫자는 응답한 횟수, «횟수 초기화» 로 0. 틀린 규칙은 빨갛게 되고 그것만 빠집니다.
- 이 칸은 연결에 곁들이는 간단한 자동응답입니다. 규칙이 많거나 장비 흉내(먼저 보내기·장애 흉내 포함)가 목적이면 PortDock Simulator 를 쓰세요 — 칸 아래에도 이 안내가 있습니다.
응답 템플릿 ({…} 자리)
응답 칸에 {…} 자리를 쓰면 받을 때마다 채워 보냅니다. HEX·ASCII 어느 쪽에도 쓰고, 칸 옆 «자리 넣기» 로 커서 자리에 넣을 수 있습니다.
- {req} 요청 전체 · {req 0..1} 요청 0~1번 바이트(끝 포함) · {req 6} 한 바이트 · {req 2..} 2번부터 끝까지 · {req -2..-1} 끝에서 2바이트(음수는 끝에서, -1 = 마지막).
- {counter} 이 규칙이 지금까지 응답한 횟수(0부터) 1바이트 · {counter 2}·{counter 4} 바이트 수 · 뒤에 le 면 리틀 엔디언(기본 빅 엔디언) · {counter dec} 10진 글자. «횟수 초기화» 로 0 부터 다시.
- {rand 0..100} 그 사이(끝 포함) 무작위 값(크기는 최댓값에 맞춰 1·2·4바이트) · {rand 0..1000 2 le} 크기·순서 지정 · {rand 10..99 dec} 10진 글자.
- {time} 지금 시각 «HH:MM:SS» 글자 · {time %Y-%m-%d %H:%M:%S} 형식 지정 · {unix} 유닉스 초 · {unix ms} 밀리초.
- {crc 종류} 이 자리 앞의 모든 바이트로 계산한 체크섬을 여기에 · {crc bcc 1..-1} 범위 지정(체크섬 자리를 뺀 응답 바이트 기준) · 끝에 swap 이면 바이트 순서 뒤집기. 종류: crc16-modbus·crc16-ccitt·crc16-xmodem·crc8·lrc·bcc·sum8·sum16·crc32.
- 순서: 자리 채우기 → {crc} 자리 → 규칙의 «체크섬»(전체에) → «줄 끝». 그래서 «01 03 02 {req 4..5}» + 체크섬 CRC16 Modbus 도, «01 03 02 {req 4..5} {crc crc16-modbus}» 도 같은 결과입니다.
- 예) Modbus TCP 보유 레지스터 2개 읽기 응답 — 받으면 «?? ?? 00 00 00 06 ?? 03 **», 응답 «{req 0..1} 00 00 00 07 {req 6} 03 04 00 64 00 C8». 트랜잭션 ID(0~1번)와 MBAP Unit ID(6번, 국번)를 요청 그대로 돌려줘서 마스터가 짝을 맞춥니다. MBAP 에는 CRC 가 없으므로 체크섬은 «없음».
- 예) 시퀀스 번호가 붙는 장비 — «ACK {counter dec}\r\n»(ASCII). 예) STX…ETX 뒤 BCC — «02 {req 1..-2} 03 {crc bcc 1..-1}».
- 요청이 짧아 {req 9} 같은 자리를 채울 수 없으면 보내지 않고 통신 기록에 «AUTO 이름 — 요청 범위 …» 를 남깁니다. 알려진 이름(req·counter·rand·time·unix·crc)이 아닌 { 는 글자 그대로 나갑니다(예: {"ok":1}). «{req» 같은 글자를 그대로 보내려면 ASCII 에서 \x7B 로 쓰세요.
- «자세히» 의 «예시 요청» 에 요청을 적으면(패턴과 같은 HEX/ASCII) 규칙에 맞는지와 실제로 나갈 응답 바이트를 바로 보여 줍니다. 횟수 0·무작위 예시 값으로 채운 것이라 실제 값은 매번 다릅니다.
장애 흉내·응답 돌리기
규칙 카드의 «▸ 자세히» 를 펼치면 상위 프로그램의 시간 초과·재시도·상태 변화 처리를 시험할 수 있습니다. 켜 둔 것은 카드 아래 작은 표시(«지연 10~50ms», «3번째마다 버림» 등)로 늘 보입니다.
- «지연 범위»: 처음 값~끝 값(ms) 사이에서 매번 무작위로 늦게 답합니다(흔들림). 끝 값이 처음 값 이하이면 처음 값으로 고정 지연. 기록에 «AUTO 이름 +37ms» 처럼 실제 지연이 남습니다.
- «N번째마다 무응답»: 이 규칙에 맞은 N번째·2N번째… 요청에는 답하지 않습니다(0 = 끔). «확률(%)로 무응답»: 그 확률로 답하지 않습니다. 버린 요청은 «DROP 이름 — …» 사건 줄로 남고 응답 횟수에는 들어가지 않습니다.
- «응답 돌리기»: «+ 응답 추가» 로 응답을 여러 개 두면 맞을 때마다 «차례로»(1 → 2 → … → 1) 또는 «무작위» 로 바꿔 보냅니다. 장비 상태(대기 → 동작 → 완료)가 바뀌는 흉내에 씁니다. 기록에 «AUTO 이름 [2/3]» 처럼 몇 번째 응답인지 남습니다.
- «차례로» 와 {counter} 는 규칙의 응답 횟수를 씁니다 — «횟수 초기화» 로 처음부터. 규칙을 고쳐도(이름이 같으면) 이어서 셉니다.
문제 해결
- CONNECT FAIL 이 계속 남: 장비 전원·랜 케이블, IP·포트, PC 와 장비가 같은 대역(예: 192.168.0.x)인지 확인하세요.
- «이미 시작돼 있거나 시작하는 중입니다»: 이 프로그램에서 이미 실행 중입니다. «멈춤» 후 다시 하세요.
- 서버를 열 때 «… 액세스 …» 또는 «이미 사용 중» 오류: 다른 프로그램이 그 포트를 쓰고 있습니다. 다른 포트를 쓰거나 그 프로그램을 닫으세요.
- 서버를 열었는데 장비가 접속하지 못함: 윈도우 방화벽 창에서 허용했는지, 장비가 접속할 IP 가 이 PC 의 IP 인지 확인하세요.
- 데이터가 합쳐지거나 쪼개져 보임: TCP 는 보낸 단위를 지켜 주지 않습니다. «끝 문자»·«고정 길이» 로 끊거나 끊김 시간을 조정하세요.
- 체크섬이 «틀림»: 체크섬 종류, 프레임 구분, 장비가 머리 바이트를 계산에서 빼는지 확인하세요.
- «연결된 상대가 없습니다»: 아직 접속한 상대가 없거나 끊겼습니다.
- 윈도우 7 은 지원하지 않습니다. 윈도우 10·11 을 쓰세요.
- 프로그램이 열리지 않음: Microsoft Edge WebView2 가 필요합니다. 윈도우 11 에는 들어 있고, 설치 프로그램이 없으면 받아 설치합니다(인터넷 필요). 인터넷이 없는 PC 는 WebView2 런타임 설치 파일을 따로 설치하세요.