PortDock

PortDock Serial 사용법

시리얼(COM) 송수신·신호선·자동 재연결

이 프로그램은

PortDock Serial 은 PC 의 COM 포트(USB 변환기 포함)로 장비와 데이터를 주고받는 시험 도구입니다.

받은 데이터를 HEX·ASCII 로 보여 주고, 체크섬을 붙여 보내고, 신호선(DTR·RTS·CTS·DSR·RI·CD)을 확인하고, 시험 기록을 파일로 남깁니다.

USB 변환기를 뽑았다 다시 꽂으면 같은 장치를 찾아 저절로 다시 연결합니다(COM 번호가 바뀌어도).

처음 쓰는 순서

  • 처음 켜면 가운데 로그 자리에 «무엇을 하나요?» 카드가 나옵니다. «AT 명령 보내기»·«Modbus 장비 값 읽기» 를 누르면 왼쪽 «용도» 가 맞춰지고 예시 명령(이름 앞 «예:»)이 오른쪽 명령 목록에 들어갑니다. «그냥 보기» 는 «일반» 으로 두고 예시는 넣지 않습니다. «다시 보지 않기» 를 누르면 카드 대신 한 줄 안내가 나옵니다.
  • 0. (선택) 왼쪽 맨 위 «용도» 에서 일반·AT 명령·Modbus RTU 장비·NMEA·GPS 를 고르면 속도·프레임 구분·보내기 형식이 그 용도에 맞춰집니다(«연결 설정» 절).
  • 1. 왼쪽 «포트» 에서 COM 포트를 고릅니다. 목록은 1.5초마다 새로 고쳐지므로 꽂으면 바로 나타납니다.
  • 2. «속도(bps)»·«데이터 비트»·«패리티»·«정지 비트» 를 장비 설명서와 똑같이 맞추고 «연결» 을 누릅니다.
  • 3. 아래 입력칸에 보낼 내용을 쓰고 «보내기» 를 누릅니다(Enter 도 됩니다). 받은 데이터는 가운데 로그에 RX ◀ 로, 보낸 것은 TX ▶ 로 찍힙니다.
  • 4. 시험 기록이 필요하면 도구줄의 «파일로 계속 저장» 을 누르고 파일 이름을 정합니다.

화면 구성

  • 왼쪽: 포트·속도·데이터 비트·패리티·정지 비트, 접힌 «고급 연결»(흐름 제어·RS-485·DTR·RTS), «연결»·«끊기» 버튼, 연결 상태, 접힌 «받기 설정»(프레임 구분·수신 체크섬 검사). 접힌 제목에는 지금 값이 요약되고, 기본값과 다르면 펼친 채 시작합니다. 열고 닫은 상태는 기억합니다.
  • 연결되면 용도·포트·속도·고급 연결·자동 재연결이 «COM3 9600 8N1 [바꾸기]» 한 줄로 접히고, 받기 설정이 위로 올라옵니다. [바꾸기] 로 펼치면 속도·패리티 등을 연결 중에도 바로 바꿀 수 있습니다(포트는 끊은 뒤에). 끊으면 다시 펼쳐집니다.
  • 가운데 위 도구줄(1000 폭에서 한 줄): HEX·ASCII·«둘 다»·«터미널» 보기, «자동 스크롤», «보기 설정 ▾»(시간 간격 열), «파일로 계속 저장», «화면 내용 저장», «지우기». 좁은 창에서는 «☰»(명령·상세).
  • 도구줄 아래 찾기·거르기 줄: 찾기 칸, ▲·▼, «찾은 줄만», «틀림만», 방향(전체·RX·TX·EV). «로그 찾기·거르기» 절을 보세요.
  • 가운데 상태줄: 지금 설정 요약(예: «COM3 9600 8N1»), 출력 신호 DTR·RTS, 입력 신호 CTS·DSR·RI·CD 표시등, 파일 저장 중이면 «● REC»(말풍선에 파일 경로), 오른쪽에 RX·TX 누적 바이트 수와 처리량.
  • 가운데 로그: 시각·방향(RX ◀ / TX ▶ / EV)·내용. 수신 체크섬 검사를 켜면 줄 끝에 «정상»·«틀림» 이 붙습니다.
  • 가운데 아래: 보내기 줄(HEX/ASCII, 입력칸, «Modbus 요청», 체크섬, 줄 끝 붙이기, «보내기»)과 «보낼 바이트» 미리보기, «반복(ms)», «+ 목록에 추가», «⋯ 더보기».
  • 오른쪽: «명령 목록», «트리거», «상세»(로그 줄을 누르면 그 줄의 HEX·ASCII 와 Modbus 풀이).
  • 창이 좁으면(1180px 이하) 오른쪽 칸이 숨고, 도구줄의 «☰ 명령·상세»(1100px 이하에서는 «☰») 버튼으로 펼칩니다. 로그 줄을 누르면 저절로 펼쳐져 «상세» 가 보입니다(Shift·Ctrl 로 여러 줄을 고를 때는 펼치지 않음).
  • 머리줄 📌: 항상 위 — 이 창을 다른 창 위에 늘 보이게 합니다(설정의 «항상 위» 와 같음).
  • 창 제목에 지금 상태가 나옵니다(예: «COM3 115200 8N1 · 연결됨 ● REC — PortDock Serial»). 작업 표시줄에서 어느 창이 어느 포트인지 알 수 있습니다.
  • 창 너비가 900px 이하(화면 반쪽 맞춤 등)면 왼쪽 연결 설정 칸이 접히고, 위에 요약 줄과 «⚙ 연결 설정»·연결 버튼이 나옵니다. «⚙ 연결 설정» 으로 펼치고 ✕ 나 바깥을 눌러 닫습니다.
  • 도구줄에는 «보기 설정»(시간 간격 열: 없음·직전 줄과 간격·응답 시간)과 «터미널» 보기 단추가 있고, 상태줄 오른쪽에 처리량(RX·TX B/s)·프레임 수·«마지막 수신 n초 전» 이 나옵니다.
  • 보내기 줄 둘째 줄: «반복(ms)»·«번»(횟수 — 반복을 켰거나 정해 두었을 때만)·«+ 목록에 추가»·«⋯ 더보기»(문자 간(ms)·«Break»·ms·«파일 보내기…»·반복 횟수). 체크섬 옆 ⚙ 는 체크섬 옵션입니다.
  • 오른쪽 칸 «명령 목록» 아래에 «트리거» 가 있습니다(▸ 를 눌러 펼침).

연결 설정

  • «용도»(포트 위): 무엇에 쓰는지 고르면 여러 칸을 한 번에 맞춥니다. «일반» = 끊김 시간 20ms·체크섬 검사 없음·ASCII + 줄 끝 CR LF(속도는 그대로). «AT 명령» = 115200 8N1·끝 문자 0D 0A 로 끊기·ASCII + CR LF. «Modbus RTU 장비» = 9600 8N1·프레임 구분 Modbus RTU·수신 CRC16 Modbus 검사·보내기 HEX + 체크섬 CRC16 Modbus·줄 끝 없음. «NMEA·GPS» = 9600 8N1(오래된 수신기는 4800 으로 고치세요)·끝 문자 0A(LF)로 끊기·ASCII + CR LF.
  • 고른 뒤에도 각 칸은 그대로 고칠 수 있습니다. 프리셋과 달라지면 «AT 명령 (바꿈)» 처럼 붙고 아래에 다른 칸 이름이 나옵니다. 옆의 ↺ 는 프리셋 값으로 다시 맞춥니다. 보내기 형식(HEX/ASCII)이 바뀌면 입력칸은 비웁니다. 고른 용도는 기억합니다.
  • «포트»: 연결할 COM 포트. USB 장치는 아래에 «USB VID:PID · S/N 일련번호» 가 보입니다. 연결 중에는 포트만 바꿀 수 없고, 나머지 설정은 바로 적용됩니다.
  • 저장해 둔 포트가 목록에 없으면 같은 장치(일련번호, 없으면 VID:PID)를 찾아 고르고, 없으면 첫 포트로 바꾼 뒤 «저장된 COM3 이(가) 없어 COM7 로 바꿨습니다» 처럼 알려 줍니다. 다시 꽂아 COM 번호가 바뀌어도 다음 연결은 새 번호로 합니다.
  • 연결에 실패하면 상태 칸에 빨갛게 «연결 실패 · 이유» 가 나옵니다. 포트가 사용 중이면 다른 프로그램이 쓰고 있는지 확인하세요.
  • «속도(bps)»: 통신 속도. 목록(1200~921600)에서 고르거나 직접 숫자를 넣습니다. 장비와 다르면 글자가 깨져 보입니다.
  • «데이터 비트»: 5·6·7·8 중 하나. 대부분 8 입니다.
  • «패리티»: «없음»·«홀수»·«짝수»·«Mark (1)»·«Space (0)». 장비 설정과 같아야 합니다. Mark·Space 는 9비트 주소 방식 장비용으로, 윈도우 드라이버에 직접 설정합니다(일부 USB 변환기는 받지 않아 연결할 때 이유를 알려 줌).
  • «정지 비트»: 1·1.5·2. 1.5 는 대개 데이터 비트 5 에서만 됩니다(아니면 노란 안내가 나오고, 드라이버가 거절하면 연결할 때 이유를 알려 줌).
  • «고급 연결»(접기): 흐름 제어·RS-485 송신 방향·DTR·RTS 가 들어 있습니다. 접힌 제목에 «RTS/CTS · DTR» 처럼 켜진 것이 보이고, 모두 기본이면 «흐름 제어 없음 · DTR·RTS 끔» 입니다.
  • «흐름 제어»: «없음», «하드웨어(RTS/CTS)», «소프트웨어(XON/XOFF)». 장비가 쓰지 않으면 «없음» 으로 둡니다.
  • DTR·RTS: PC 가 내보내는 출력 신호선입니다. 체크하면 켜집니다. 일부 보드는 DTR 이 바뀌면 리셋되니 주의하세요.
  • «RS-485 송신 방향 (RTS)»: 반이중 RS-485 변환기의 송신기를 RTS 로 켜고 끕니다. «드라이버 토글» 은 윈도우 드라이버가 보내는 동안만 RTS 를 켜고(가장 정확), 드라이버가 받지 않으면 «프로그램 토글» 로 바뀌며 사건 줄에 이유가 남습니다. «프로그램 토글» 은 보내기 전에 RTS 를 켜고 마지막 바이트가 나갈 시간이 지나면 끕니다 — USB 변환기의 지연 때문에 늦게 꺼져 응답 앞부분을 놓칠 수 있습니다. 켜져 있으면 RTS 칸은 잠기고 상태줄에 «RTS ⇄» 가 보입니다. 자동 방향 전환 변환기는 «쓰지 않음». 하드웨어 흐름 제어와는 함께 쓸 수 없습니다.
  • 하드웨어 흐름 제어에서는 RTS 를 드라이버가 제어하므로 RTS 칸이 잠깁니다.
  • «다시 꽂으면 자동 연결»: 켜 두면 장치가 빠졌을 때 «다시 꽂기를 기다리는 중» 이 되고, 같은 장치가 다시 나타나면 저절로 엽니다. 끄면 빠지는 순간 닫힙니다.
  • 같은 장치는 USB 일련번호로 찾습니다. 일련번호가 없는 변환기(CH340 등)는 같은 VID:PID 로 새로 생긴 포트가 하나뿐일 때만 다시 엽니다.
  • 연결된 상태에서도 속도·데이터 비트·패리티·정지 비트·흐름 제어·DTR·RTS 를 바꿀 수 있습니다. 끊지 않고 바로 적용되고, 로그에 «SET baud 9600→115200» 처럼 남습니다.

프레임 구분

시리얼은 바이트가 이어서 들어오므로, 어디서 한 줄(프레임)을 끊을지 정해야 합니다. 모든 방식에서 «끊김 시간(ms)» 동안 아무것도 안 오면 쌓인 것을 내보냅니다.

  • 프레임 구분과 «수신 체크섬 검사» 는 왼쪽 «받기 설정» 접기 안에 있습니다. 접힌 제목에 «끊김 시간 20ms · 체크섬 검사 없음» 처럼 지금 값이 보입니다.
  • «끊김 시간(조용한 간격)»: 정해 둔 시간(기본 20ms) 동안 아무것도 안 오면 끊습니다. 대부분 이것으로 충분합니다.
  • «끝 문자»: «끝 문자(HEX)» 에 적은 바이트(예: «0D 0A», «03»)가 오면 바로 끊습니다. 끝 문자도 그 줄에 포함됩니다.
  • «끝 문자(HEX)» 는 보내기 HEX 와 같은 규칙입니다(«0D 0A»·«0D0A»·«0x0D,0x0A»). 이름 CR·LF·CRLF·NUL·STX·ETX·\r·\n 도 됩니다. 칸 아래에 «해석: 0D 0A (2바이트)» 처럼 실제 바이트가 보이고, 틀리면 빨간 이유가 나옵니다.
  • «고정 길이»: «길이» 바이트마다 끊습니다.
  • «Modbus RTU»: 함수 코드로 길이를 아는 응답(05·06, 예외 응답)은 바로 끊고, 나머지는 3.5 문자 시간(최소 3ms)으로 끊습니다. 고르면 «수신 체크섬 검사» 가 CRC16 Modbus 로 바뀌고, 다른 방식으로 바꾸면 원래 값으로 돌아갑니다(그 사이 직접 바꿨으면 그대로 둡니다).
  • 끊김 없이 계속 들어오는 데이터는 16KB 마다 강제로 끊습니다.
  • 연결 중에 바꿔도 바로 적용되고 로그에 «FRAMING …» 줄이 남습니다.

USB 변환기 주의: 대부분의 USB 변환기는 받은 데이터를 약 16ms 단위로 PC 에 넘깁니다. 그래서 16ms 보다 짧은 끊김 시간이나 Modbus RTU 의 3.5 문자 시간은 정확히 구분되지 않을 수 있습니다. 이때 왼쪽에 경고 문구가 나옵니다. 가능하면 끝 문자나 고정 길이를 쓰세요.

보내기

입력칸 왼쪽에서 HEX 또는 ASCII 를 고릅니다. 입력하는 동안 «보낼 바이트» 에 실제로 나갈 바이트와 개수가 보입니다. 입력이 틀리면 그 자리에 이유가 나옵니다.

  • HEX: «01 03 0A», «01030A», «0x01,0x03,0x0A» 모두 같은 3바이트입니다. 띄어쓰기·쉼표·세미콜론·하이픈으로 나눌 수 있습니다.
  • HEX 는 두 자리씩이어야 합니다. «013» 처럼 홀수 자리면 «HEX 자릿수가 홀수입니다» 가 나옵니다.
  • ASCII: 글자를 그대로 보냅니다. 특수 문자는 «\r»(CR), «\n»(LF), «\t»(탭), «\0»(0x00), «\\»(역슬래시), «\xNN»(HEX 두 자리 바이트, 예: «\x02»)로 씁니다.
  • 예: «AT\r\n», «\x02DATA\x03».
  • «체크섬»: 본문 뒤에 붙일 체크섬을 고릅니다(아래 «체크섬 종류» 참고).
  • «줄 끝 붙이기»: «없음»·CR·LF·CR LF 중 하나를 맨 뒤에 붙입니다. 처음 켜면(저장값이 없을 때) ASCII + CR LF 로 시작해 «AT» 만 쓰고 Enter 하면 됩니다.
  • ASCII 입력이 줄 끝 글자로 끝나는데 «줄 끝 붙이기» 도 켜져 있으면 «줄 끝이 두 번 붙습니다» 알림줄이 나옵니다. «줄 끝 끄기» 를 누르거나 입력의 줄 끝 글자를 지우세요.
  • 붙는 순서는 «본문 + 체크섬 + 줄 끝» 입니다. 체크섬은 본문만으로 계산하고, 줄 끝은 계산에 들어가지 않습니다(⚙ 옵션으로 범위·자리를 바꿀 수 있음).
  • ASCII 에 체크섬을 켜 두면 입력칸 옆에 노란 «+CRC16 Modbus 2바이트» 표시가 나옵니다.
  • 장비를 다시 꽂기를 기다리는 중에는 보낼 수 없습니다.
  • 송신이 너무 오래 걸리면(흐름 제어로 막힘 등) «송신 시간 초과 — n/m 바이트만 나감 (흐름 제어·CTS 확인)» 오류가 나옵니다.
  • HEX↔ASCII 를 바꾸면 입력 내용이 같은 바이트의 새 표기로 바뀝니다(예: «41 54 0D 0A» ↔ «AT» + CR LF 이스케이프). 못 읽는 내용이면 글자는 그대로 두고 알림줄에 이유가 나옵니다.
  • 바꿀 때 체크섬이 켜져 있으면 확인 창 대신 알림줄에 «체크섬 … 이 켜져 있습니다» 와 «체크섬 끄기» 버튼이 나옵니다.

Modbus 장비 값 읽기 따라하기

Modbus RTU 장비(온도 조절기·인버터·전력계 등)의 레지스터 값을 읽는 순서입니다. 예: 국번(슬레이브 ID) 1 인 장비의 보유 레지스터 40001 부터 10개.

  • 1. 장비 설명서에서 통신 설정(속도·패리티 — Modbus 는 «짝수» 가 흔함)과 국번, 읽을 주소를 확인하고 왼쪽 연결 설정을 맞춘 뒤 «연결» 합니다.
  • 2. 왼쪽 «프레임 구분» 을 «Modbus RTU» 로 고릅니다. «수신 체크섬 검사» 가 저절로 CRC16 Modbus 가 됩니다. 잊고 요청 창으로 먼저 보내면 «받기도 Modbus 로 볼까요?» 알림줄이 한 번 나옵니다 — [예, Modbus 로] 가 같은 일을 합니다.
  • 3. 보내기 줄의 «Modbus 요청» 을 누릅니다(창 아래 «따라하기 보기» 가 이 절을 엽니다). «국번» 1, «함수» 03 보유 레지스터 읽기, 시작 주소 표기를 «4xxxx 표기» 로 하고 40001, «개수» 10 을 넣습니다.
  • 4. 주소 아래에 «40001 → 0 기준 0 (0x0000)» 처럼 실제로 보낼 주소가 나옵니다. 설명서가 «주소 0»·«0x0000» 처럼 쓰면 «0 기준» 을 고르고 그 숫자를 그대로 넣습니다. 값이 한 칸씩 밀려 나오면 이 표기부터 의심하세요. «0 기준» 칸에 40001·30001 처럼 넣으면 노란 안내가 나오고 «4xxxx 표기로 바꾸기» 로 바로 고칠 수 있습니다.
  • 5. 미리보기가 «01 03 00 00 00 0A» 이면 «보내기»(또는 창 안에서 Enter). CRC16 Modbus 를 붙인 «01 03 00 00 00 0A C5 CD» 가 바로 나가고 창이 닫힙니다. 연결 전이면 «먼저 연결하세요» 로 막힙니다. 보내기 줄에 넣어 고쳐 보내려면 «입력칸에 넣기»(HEX·«CRC16 Modbus»·줄 끝 없음으로 맞춰짐).
  • 6. 응답(RX)이 옵니다. 요청 창으로 보낸 요청은 기억해 두었다가, CRC 가 맞는 같은 국번·함수의 응답이 오면 그 줄을 저절로 고릅니다. 오른쪽 «상세» 의 «요청과 짝» 에 «40001 = 1812 (0x0714)» 처럼 주소 붙은 값이 나오고, 위 고르기로 U16·S16·HEX·F32 ABCD·F32 CDAB 와 주소 표기(0 기준/4xxxx)를 바꿉니다(주소 표기는 요청 창에서 쓰던 것으로 시작). 예외 응답(함수 코드 + 0x80)이면 «예외 02 없는 주소 (Illegal Data Address)» 처럼 이름이 나옵니다 — 주소·개수가 장비 범위 안인지 확인하세요. 응답이 없으면 국번·속도·패리티·배선(A/B)을 확인하세요.
  • 자주 읽는 요청은 «목록에 추가» 로 명령 목록에 넣고, «반복(ms)» 으로 주기적으로 읽을 수 있습니다.
  • 주소 표기: 00001~ 코일(FC01·05·0F), 10001~ 입력 접점(FC02), 30001~ 입력 레지스터(FC04), 40001~ 보유 레지스터(FC03·06·10). 9999 를 넘는 주소는 400001 처럼 6자리로 씁니다. 함수와 앞자리가 맞지 않으면 이유를 알려 줍니다.
  • 개수 한도(규격): 코일·입력 접점 읽기 2000, 레지스터 읽기 125, 여러 코일 쓰기 1968, 여러 레지스터 쓰기 123. 국번 0 은 쓰기 함수에서만 쓸 수 있고(모든 장비에 쓰기), 응답이 없습니다.
  • 쓸 값은 쉼표·공백으로 나누고 10진수·0x16진수·음수(2의 보수로 보냄)를 씁니다. 코일은 1(ON)·0(OFF)이고 첫 값이 시작 주소입니다. 코일 하나 쓰기(05)는 ON = FF 00, OFF = 00 00 으로 나갑니다.

체크섬 종류

  • CRC16 Modbus: Modbus RTU 의 CRC. 낮은 바이트가 먼저 붙습니다. 예: «01 03 00 00 00 0A» → «C5 CD».
  • CRC16 CCITT: 다항식 0x1021, 시작값 0xFFFF. 높은 바이트 먼저.
  • CRC16 XMODEM: 다항식 0x1021, 시작값 0x0000. 높은 바이트 먼저.
  • CRC8: 다항식 0x07, 시작값 0x00. 1바이트.
  • LRC: 모든 바이트 합의 2의 보수. 1바이트.
  • BCC (XOR): 모든 바이트를 XOR. 1바이트.
  • SUM8: 모든 바이트 합의 아래 8비트. 1바이트.
  • SUM16: 모든 바이트 합 16비트. 높은 바이트 먼저 2바이트.
  • CRC-32: ISO-HDLC(zip·이더넷과 같은 것). 낮은 바이트 먼저 4바이트.
  • CRC (사용자 정의): 너비·poly·init·refin·refout·xorout 을 직접 넣는 범용 CRC. 높은 바이트 먼저.

기본은 입력한 본문 전체(첫 바이트부터)로 계산해 맨 뒤에 붙입니다. STX 같은 머리를 빼거나 ETX 앞에 넣는 장비는 체크섬 옆 ⚙ 옵션을 쓰세요(«체크섬 옵션·CRC-32·범용 CRC» 절).

반복과 명령 목록

  • «반복(ms)»: 체크하는 순간의 입력을 정한 간격으로 계속 보냅니다. 옆에 «반복 중: 01 03 …» 으로 보내는 내용이 보입니다. 반복 중에 입력을 고쳐도 반복 내용은 바뀌지 않으니, 바꾸려면 껐다 다시 켜세요.
  • 연결이 끊기면 반복이 꺼지고 로그에 «REPEAT 멈춤 (연결 끊김)» 이 남습니다. 다시 연결돼도 저절로 켜지지 않습니다.
  • 간격이 실제 송신 시간보다 짧으면 송신이 쌓이므로, 프로그램이 쓸 수 있는 최소 간격으로 올려서 보냅니다(경고 문구가 나옵니다).
  • «+ 목록에 추가»: 지금 입력(모드·체크섬·줄 끝 포함)을 오른쪽 «명령 목록» 에 추가합니다. 이름은 입력 앞부분으로 정해지고, 바로 고칠 수 있습니다.
  • 명령 목록은 프로그램을 껐다 켜도 남아 있습니다.
  • 목록의 ▶ 는 바로 보내기(이름 칸에서 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 줄이 찍힙니다. 연결·설정 변경·신호선 변화 같은 사건이며, 파일 로그에도 그대로 남습니다.

  • OPEN: 포트를 열었습니다. 예: «OPEN COM3 9600 8N1 flow=none DTR=0 RTS=0».
  • FRAMING: 프레임 구분 방식. 예: «FRAMING gap 20ms», «FRAMING terminator [0D 0A] gap 100ms», «FRAMING modbus-rtu @9600».
  • RXCHECK: 수신 체크섬 검사 종류가 바뀌었습니다(끄면 «none»).
  • SET: 연결 중 설정이 바뀌었습니다. 예: «SET baud 9600→115200, DTR 0→1». 장치를 기다리는 중이면 «(다시 연결될 때 적용)» 이 붙습니다.
  • LOST: 장치가 빠지거나 읽기 오류로 연결이 끊겼습니다. 뒤에 이유가 붙습니다.
  • RECONNECT: 같은 장치를 다시 열었습니다. COM 번호가 바뀌면 «RECONNECT COM3 → COM5» 처럼 나옵니다. 기다리는 중 자동 연결을 끄면 «RECONNECT cancelled».
  • CLOSE: 포트를 닫았습니다.
  • CTS ON/OFF, DSR ON/OFF, RI ON/OFF, CD ON/OFF: 장비 쪽 입력 신호선이 바뀌었습니다(0.1초마다 확인).
  • LOG START: 파일 저장을 시작했습니다. 그때의 포트 설정이 함께 적혀 로그만 봐도 조건을 알 수 있습니다.
  • REPEAT 멈춤 (연결 끊김 / 보내기 오류): 반복 보내기가 꺼진 이유입니다. 이 줄은 화면에만 나오고 파일 로그에는 남지 않습니다.
  • TRIGGER «이름»: 트리거가 맞았습니다(«— 반복 멈춤»·«— 파일 기록 멈춤» 이 붙을 수 있음). 화면에만 나옵니다.
  • REPEAT 끝 (n번 보냄): 반복 횟수를 다 보냈습니다. 화면에만 나옵니다.
  • LOG NEXT 새 이름 / LOG PART 2 (prev 옛 이름): 파일 로그를 크기·시간으로 나눠 다음 파일로 이어 썼습니다(두 파일에 남음).
  • SEND CANCELLED 보낸/전체: 파일 보내기(또는 문자 간 지연 송신)를 취소했습니다.
  • BREAK 100ms: Break 신호를 보냈습니다.
  • RS485 드라이버 토글(RTS_CONTROL_TOGGLE)을 받지 않아 …: 드라이버가 토글을 거절해 프로그램이 RTS 를 켜고 끕니다.
  • 따라가기: 맨 아래에 있을 때만 새 줄을 따라 내려갑니다. 위로 굴리면 멈추고(새 줄이 와도 읽던 자리 그대로) 오른쪽 아래에 «↓ 맨 아래로 (새 줄 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 01 03 00 00 [OK]». 사건 줄은 «… EV OPEN …». ASCII·HEX + ASCII·CSV 형식은 «글자 인코딩·파일 로그 형식» 절을 보세요.
  • «화면 내용 저장»: 지금 화면에 남은 줄을 텍스트 파일로 저장합니다. 지금 «보기» 대로(HEX, ASCII, «둘 다» 는 «HEX | ASCII») 쓰고, 거르기가 켜져 있으면 보이는 줄만 씁니다. 첫 줄(# 로 시작)에 보기·거르기·줄 수가 적힙니다. 시각은 설정의 «로그 시각 표시» 를 따르고, 체크섬이 틀린 줄 끝에는 «[CHECK FAIL]» 이 붙습니다. («파일로 계속 저장» 의 줄 모양은 보기와 상관없이 설정 «파일 로그 형식» 을 따릅니다 — 기본 HEX.)
  • «지우기»: 화면 로그와 RX·TX 바이트 수를 비웁니다. 파일 로그는 그대로입니다.
  • 로그 줄을 누르면 오른쪽 «상세» 에 그 줄의 바이트 수·HEX·ASCII 가 나옵니다(따라가기는 그대로).
  • 프레임 구분이 «Modbus RTU» 이거나 줄 끝의 CRC16 Modbus 가 맞으면 «상세» 에 Modbus 풀이(국번, 함수 코드, 시작 주소·개수 같은 항목, «값», CRC «정상»/«틀림»)가 함께 나옵니다. 그 밖의 줄은 «Modbus 로 볼 수 없음 (CRC 불일치)» 한 줄만 나옵니다.
  • «요청과 짝»: 고른 줄이 응답이면 바로 앞의 반대 방향 요청(RX 응답이면 TX 요청)과 짝지어 «국번 1 · FC03 … · 40001~40010 (10개)» 와 «40001 = 1812 (0x0714)» 같은 값 표를 보입니다. 국번·함수·바이트 수·CRC 가 맞을 때만 짝짓고, 가장 가까운 요청이 맞지 않거나 같은 요청의 응답이 이미 있었으면 짝짓지 않습니다. 명령 목록·반복으로 보낸 요청도 됩니다. 쓰기 응답은 «정상 — 장비가 쓰기를 받았습니다».
  • ASCII 보기에서 제어 문자는 «<CR>», «<LF>», «<TAB>», «<STX>», «<ETX>», «<ACK>», «<NAK>», 그 밖은 «<1B>» 처럼 보입니다. 0x80 이상은 설정의 «글자 인코딩»(UTF-8·CP949·Latin-1·ASCII)으로 읽고, 읽을 수 없으면 «<C7>» 처럼 보입니다.

경고 문구의 뜻

  • «장치를 다시 꽂기를 기다리는 중이라 보낼 수 없습니다.»: 장치가 빠져 재연결을 기다리는 중입니다. 케이블을 다시 꽂으면 저절로 이어집니다.
  • «반복 간격 a ms 는 실제 송신 시간보다 짧아 b ms 간격으로 보냅니다.»: 지금 속도로는 정한 간격 안에 다 못 보냅니다. 간격을 늘리거나 속도를 올리세요.
  • «소프트웨어 흐름 제어 중에는 0x11(XON)·0x13(XOFF) 바이트가 …»: 보낼 데이터에 0x11·0x13 이 있어 흐름 제어 신호로 먹힐 수 있습니다. 이진 데이터를 보낸다면 흐름 제어를 «없음» 이나 하드웨어로 바꾸세요.
  • «하드웨어 흐름 제어(RTS/CTS)에서는 RTS 를 드라이버가 제어합니다.»: 안내입니다. RTS 를 직접 바꾸려면 흐름 제어를 끄세요.
  • «끝 문자가 비어 있어 끊김 시간으로만 끊습니다.»: «끝 문자(HEX)» 칸이 비었습니다. «0D 0A» 처럼 넣으세요. 칸이 틀리면(홀수 자리, HEX 아닌 글자) 빨간 이유가 나오고 역시 끊김 시간으로만 끊습니다.
  • «USB 변환기는 보통 16ms 단위로 …»: USB 포트에서 짧은 끊김 시간이나 Modbus RTU 를 쓸 때 나옵니다. «프레임 구분» 절을 보세요.
  • 설정 창 «폴더를 고르지 않으면 자동 로그가 시작되지 않습니다.»: «연결하면 자동으로 파일 로그 시작» 을 켰다면 «고르기» 로 폴더를 정하세요.
  • 설정 창 «연결·기록 중에는 가져올 수 없습니다. 먼저 멈추세요.»: 설정 가져오기는 화면을 새로 고치므로 먼저 «끊기»·«저장 멈춤» 을 하세요.

설정(⚙)

  • «언어»: 한국어·English.
  • «테마»: «윈도우 설정 따름»·«밝게»·«어둡게».
  • «글자 크기(px)»: 11~18.
  • «로그 시각 표시»: «시:분:초.밀리초», «날짜 + 시각», «UTC», «시작부터 지난 시간 (지우면 다시)»(연결한 시각, «지우기» 뒤에는 지운 시각부터 셉니다). 화면과 «화면 내용 저장» 에 적용됩니다(파일 로그는 늘 날짜 + 시각).
  • «화면에 남길 줄 수»: 1,000~1,000,000(기본 100,000). 넘치면 화면에서만 오래된 줄을 지웁니다.
  • «새 줄이 오면 자동 스크롤»: 프로그램을 켤 때 «자동 스크롤»(따라가기)의 처음 상태. 켜 두어도 위로 굴리면 멈춥니다.
  • «연결하면 자동으로 파일 로그 시작»: 켜고 «자동 로그 폴더» 를 고르면, 연결할 때마다 «portdock-serial-날짜-시각.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: 보내기(연결돼 있고 보낼 바이트가 있을 때).
  • 창이 좁으면 «☰ 명령·상세» 로 오른쪽 칸을 펼치고(로그 줄을 눌러도 펼쳐짐), ✕ 나 바깥을 눌러 닫습니다.
  • 연결 설정·프레임 구분·입력 내용·명령 목록은 다음에 켤 때 그대로 남아 있습니다.

입력 이력·명령 단축키

  • 보내기 입력칸에서 ↑/↓: 앞서 보낸 내용을 다시 불러옵니다(최근 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 이면 한꺼번에. 0 이 아니면 «⋯ 더보기» 버튼에 «문자 간 n ms» 가 보입니다.
  • «파일 보내기…»(«⋯ 더보기» 안): 파일을 고르고(열기 대화상자) 바이트 그대로 보냅니다 — 체크섬·줄 끝을 붙이지 않습니다. 최대 32MB.
  • «나누기»: «덩어리» 는 정한 크기(기본 256바이트)씩, «줄 단위» 는 LF·CR LF·홀로 CR 뒤에서 끊어 줄마다 보냅니다. «문자 간 지연» 은 바이트 사이, «줄·덩어리 사이 지연» 은 줄(덩어리) 사이에 쉬는 시간입니다.
  • 보내는 동안 진행 막대와 «보내는 중 45% (1,843/4,096 바이트)» 가 대화상자와 보내기 줄 아래에 나오고, 로그에는 줄·덩어리마다 TX 줄이 찍힙니다. «보내기 취소» 로 그 자리에서 멈추면 «SEND CANCELLED 1843/4096» 사건 줄이 남습니다. 연결이 끊기면 멈춥니다.
  • 대화상자를 닫아도 보내기는 계속됩니다. 파일을 고르면 크기와 예상 시간(속도·지연으로 계산)이 나옵니다.

Break·터미널 보기

  • «Break»(보내기 줄 «⋯ 더보기» 안): TX 줄을 옆 칸의 시간(ms, 기본 100) 동안 0(스페이스)으로 붙잡는 신호를 보냅니다. LIN·DMX, 일부 장비의 «주의» 신호, 부트로더 진입에 씁니다. 앞서 넣은 송신이 다 나간 뒤에 보내고, 로그에 «BREAK 100ms» 가 남습니다.
  • 도구줄 «터미널»: 받은 글자를 프레임 구분과 상관없이 이어 붙여 CR·LF 로 줄을 나누고(CR LF 는 한 번), ANSI 색(ESC [ … m)을 입혀 보입니다 — 리눅스 콘솔·부트 로그·AT 응답을 읽기 좋습니다. 긴 줄은 접어 보입니다.
  • 터미널 보기의 «색 입히기 (ANSI)» 를 끄면 색 없이 글자만 보입니다. 커서 이동·화면 지우기 같은 다른 ESC 시퀀스는 버리고, 탭은 4칸, 백스페이스는 앞 글자를 지웁니다.
  • 터미널 보기는 받은 것(RX)만 보입니다. 보낸 것·사건 줄은 «HEX»·«ASCII» 보기로 돌아가 보세요. 글자는 설정의 «글자 인코딩» 으로 읽고, 최근 5,000줄까지 남깁니다(«지우기» 로 비움).

자동응답

오른쪽 칸 «▸ 자동응답» 은 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} 는 규칙의 응답 횟수를 씁니다 — «횟수 초기화» 로 처음부터. 규칙을 고쳐도(이름이 같으면) 이어서 셉니다.

문제 해결

  • 포트가 안 보임: 장치 관리자에서 COM 포트가 보이는지, 변환기 드라이버(CH340·FTDI·CP210x 등)가 설치됐는지 확인하세요. 목록은 1.5초마다 새로 고쳐집니다.
  • «… 는 이미 열려 있습니다»: 이 프로그램에서 그 포트를 이미 열었거나 여는 중입니다.
  • «Access is denied»(액세스 거부): 다른 프로그램(터미널, 다른 PortDock 창 등)이 그 포트를 쓰고 있습니다. 그 프로그램을 닫고 다시 연결하세요.
  • 글자가 깨짐: 속도·데이터 비트·패리티·정지 비트가 장비와 다릅니다.
  • 데이터가 합쳐지거나 쪼개져 보임: USB 변환기의 16ms 전달 단위 때문일 수 있습니다. 끊김 시간을 늘리거나 «끝 문자»·«고정 길이» 를 쓰세요.
  • 체크섬이 «틀림»: 체크섬 종류가 맞는지, 프레임이 제대로 끊겼는지, 장비가 머리 바이트(STX 등)를 계산에서 빼는지 확인하세요. 끝 문자는 «끝 문자» 방식일 때만 떼고 검사합니다.
  • 송신 시간 초과: 흐름 제어 때문에 상대가 받지 않는 상태입니다. 흐름 제어를 «없음» 으로 하거나 CTS 표시등을 확인하세요.
  • 뽑았다 꽂았는데 다시 연결되지 않음: 일련번호 없는 변환기를 여러 개 꽂아 두면 어느 것인지 알 수 없어 기다립니다. «끊기» 후 포트를 골라 다시 연결하세요.
  • «이 포트(드라이버)는 parity mark … 을(를) 받지 않습니다»: 그 변환기는 Mark·Space 패리티나 1.5 정지 비트를 지원하지 않습니다. 다른 변환기(FTDI 등)를 쓰거나 장비 설정을 바꾸세요.
  • RS-485 로 보냈는데 응답 앞부분이 깨짐: «프로그램 토글» 이 RTS 를 늦게 끄는 것입니다. «드라이버 토글» 이나 자동 방향 전환 변환기를 쓰세요. 응답이 아예 없으면 A/B 배선과 종단 저항을 확인하세요.
  • 윈도우 7 은 지원하지 않습니다. 윈도우 10·11 을 쓰세요.
  • 프로그램이 열리지 않음: 화면 표시에 Microsoft Edge WebView2 가 필요합니다. 윈도우 11 에는 들어 있고, 설치 프로그램이 없으면 받아 설치합니다(인터넷 필요). 인터넷이 없는 PC 는 WebView2 런타임 설치 파일을 따로 받아 설치하세요.