이 프로그램은
PortDock UDP 는 UDP 데이터그램으로 장비와 데이터를 주고받는 시험 도구입니다.
접속 과정 없이 정한 포트로 받고, 정한 곳(또는 마지막으로 보내온 쪽)으로 보냅니다.
브로드캐스트·멀티캐스트, 에코, 체크섬, 파일 기록을 지원합니다.
처음 쓰는 순서
- 1. «받는 쪽 (이 PC)» 에 «묶을 주소»(보통 0.0.0.0)와 «받을 포트» 를 넣습니다. 장비가 이 PC 로 보내는 포트입니다.
- 2. «보낼 곳 (기본)» 에 장비의 «주소»(IP)와 «포트» 를 넣습니다. 받기만 할 거면 비워도 됩니다.
- 3. «시작» 을 누릅니다. 상태가 «받는 중» 이 되면 준비 끝입니다.
- 4. 아래 입력칸에 보낼 내용을 쓰고 «보내기»(또는 Enter)를 누릅니다. 받은 것은 RX ◀, 보낸 것은 TX ▶ 로 찍히고 상대 주소가 함께 나옵니다.
화면 구성
- 왼쪽: 받는 쪽·보낼 곳, «고급 연결» 접기(브로드캐스트·멀티캐스트), «시작»/«멈춤», 상태, «보내온 상대» 목록, «받기 설정» 접기(수신 체크섬 검사·에코), «파일로 계속 저장».
- «고급 연결»·«받기 설정» 은 평소 접혀 있고 제목 옆에 지금 값(«브로드캐스트 · 239.0.0.1», «체크섬 검사 없음»)이 보입니다. 하나라도 켜 두었으면 펼친 채 시작하고, 열고 닫은 상태는 기억합니다.
- 가운데 위 도구줄: «보기»(HEX·ASCII·«둘 다» — 처음에는 «둘 다»), «자동 스크롤», 누적 바이트 수, «화면 내용 저장», «지우기».
- 도구줄 아래 찾기·거르기 줄: 찾기 칸, ▲·▼, «찾은 줄만», «틀림만», 방향(전체·RX·TX·EV). «로그 찾기·거르기» 절을 보세요.
- 가운데 로그: 시각·방향(RX ◀ / TX ▶ / EV)·상대 주소·내용. UDP 는 데이터그램 하나가 곧 한 줄입니다(프레임 구분이 필요 없음).
- 가운데 아래: 보내기 줄(대상, HEX/ASCII, 입력칸, 체크섬, 줄 끝 붙이기, «보내기»), «보낼 바이트», «반복(ms)», «+ 목록에 추가».
- 오른쪽: «명령 목록», «트리거», «상세»(로그 줄을 누르면 상대 주소·바이트 수·HEX·ASCII).
- 창이 좁으면(1180px 이하) 오른쪽 칸이 숨고 «☰ 명령·상세»(1100px 이하에서는 «☰») 버튼으로 펼칩니다. 로그 줄을 누르면 저절로 펼쳐져 «상세» 가 보입니다.
- 반복 횟수 칸은 반복을 켰거나 횟수를 정했을 때만 보내기 둘째 줄에 보이고, 그 밖에는 «⋯ 더보기» 에서 정합니다.
- 머리줄 📌: 항상 위 — 이 창을 다른 창 위에 늘 보이게 합니다(설정의 «항상 위» 와 같음).
- 창 제목에 지금 상태가 나옵니다(예: «COM3 115200 8N1 · 연결됨 ● REC — PortDock Serial»). 작업 표시줄에서 어느 창이 어느 포트인지 알 수 있습니다.
- 창 너비가 900px 이하(화면 반쪽 맞춤 등)면 왼쪽 연결 설정 칸이 접히고, 위에 요약 줄과 «⚙ 연결 설정»·연결 버튼이 나옵니다. «⚙ 연결 설정» 으로 펼치고 ✕ 나 바깥을 눌러 닫습니다.
- 도구줄에는 «보기 설정»(시간 간격 열: 없음·직전 줄과 간격·응답 시간)가 있고, 상태줄 오른쪽에 처리량(RX·TX B/s)·프레임 수·«마지막 수신 n초 전» 이 나옵니다.
- 보내기 줄 둘째 줄: «반복(ms)»·«번»(횟수)·«+ 목록에 추가». 체크섬 옆 ⚙ 는 체크섬 옵션입니다.
- 오른쪽 칸 «명령 목록» 아래에 «트리거» 가 있습니다(▸ 를 눌러 펼침).
받는 쪽과 보낼 곳
- «묶을 주소 (0.0.0.0 = 모든 랜카드)»: 어느 랜카드로 받을지. 특정 랜카드만 쓰려면 그 PC 쪽 IP 를 넣습니다.
- «받을 포트 (0 = 아무 포트)»: 0 이면 운영체제가 빈 포트를 고르고, 고른 포트가 상태줄에 나옵니다.
- «보낼 곳 (기본)»: 보내기 줄에서 «보낼 곳» 을 고르면 여기로 보냅니다. 실행 중에도 바꿀 수 있습니다.
- 실행 중에 바꾼 보낼 곳은 입력을 멈추고 잠시 뒤 적용됩니다. 적용에 실패하면(예: 주소를 찾을 수 없음) 칸이 빨갛게 되고 «지금도 이전 주소로 되어 있다» 는 안내가 나오며, 고칠 때까지 «보낼 곳» 으로는 보내지 않습니다(이전 주소로 새지 않게). 보내기 줄의 «보낼 곳 (…)» 에는 실제 적용된 주소가 보입니다.
- 보내기 줄의 대상: «보낼 곳», «마지막으로 보내온 쪽», 또는 «보내온 상대» 목록의 특정 주소.
- «보내온 상대» 옆 «보낼 곳으로» 를 누르면 그 주소를 기본 보낼 곳으로 넣습니다.
- 보내온 상대는 최대 256개까지 기억합니다.
- 받는 주소·포트·브로드캐스트·멀티캐스트는 실행 중에 바꿀 수 없습니다(🔒). 멈추고 바꾸세요. 보낼 곳·에코·수신 체크섬 검사는 실행 중에 바꿔도 바로 적용됩니다.
브로드캐스트·멀티캐스트·에코
- «브로드캐스트 허용»: 255.255.255.255 나 192.168.0.255 같은 브로드캐스트 주소로 보내려면 켜고 시작해야 합니다. 꺼진 채로 브로드캐스트 주소를 보낼 곳에 넣으면 경고가 나옵니다.
- «멀티캐스트 그룹»: 224.0.0.0~239.255.255.255 주소를 넣으면 시작할 때 그 그룹에 가입해 받습니다. 범위 밖이면 오류가 나옵니다.
- «멀티캐스트 랜카드»: 가입할 랜카드의 IP. 0.0.0.0 이면 운영체제 기본.
- «다시 가입»: 무선 랜이나 랜카드가 바뀌어 멀티캐스트 수신이 끊기면 눌러 보세요.
- «받은 것 보낸 쪽으로 돌려주기 (에코)»(«받기 설정» 안): 받은 데이터그램을 보낸 주소로 그대로 돌려줍니다. 실행 중에도 켜고 끌 수 있습니다.
- 에코는 1초에 200번을 넘으면 저절로 꺼집니다(상대도 에코하면 끝없이 주고받기 때문). «ECHO OFF …» 줄과 오류가 나옵니다. 자기 자신에게 온 것(브로드캐스트 되돌림)은 에코하지 않습니다.
보내기
입력칸 왼쪽에서 HEX 또는 ASCII 를 고릅니다(처음에는 ASCII). 입력하는 동안 «보낼 바이트» 에 실제로 나갈 바이트가 보이고, 틀리면 이유가 나옵니다.
- HEX 칸에 «hello» 처럼 글자를 쳐서 오류가 나면 옆에 [ASCII 로 보내기] 가 나옵니다. 누르면 친 글 그대로 ASCII 로 바꾸고 바로 보냅니다(아직 시작 전이거나 보낼 곳이 없으면 [ASCII 로 바꾸기] — 바꾸기만).
- HEX: «01 03 0A», «01030A», «0x01,0x03,0x0A» 모두 같은 3바이트입니다. 두 자리씩이어야 합니다.
- ASCII: 글자를 그대로 보냅니다. «\r»(CR), «\n»(LF), «\t», «\0», «\\», «\xNN» 을 쓸 수 있습니다.
- «체크섬»: CRC16 Modbus, CRC16 CCITT, CRC16 XMODEM, CRC8, LRC, BCC (XOR), SUM8, SUM16, CRC-32, CRC (사용자 정의) 중 하나를 붙입니다. 옆 ⚙ 로 계산 범위·자리·바이트 순서를 바꿉니다.
- «줄 끝 붙이기»: «없음»·CR·LF·CR LF. 붙는 순서는 «본문 + 체크섬 + 줄 끝» 입니다.
- 한 번 보내기 = 데이터그램 하나입니다. 너무 크면(약 64KB 초과) 운영체제가 거절합니다.
- 시작 전이거나 내용이 비면 «보내기» 가 잠기고 옆에 이유가 나옵니다. 보낼 곳이 없으면(«마지막으로 보내온 쪽» 인데 아직 받은 게 없음 등) 오류 문구가 나옵니다.
- 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 프로그램과 주고받기). 가져올 때 지금 목록이 있으면 «뒤에 추가»·«목록 바꾸기» 를 칸 안에서 고르고, 바꾼 뒤에도 «되돌리기» 할 수 있습니다.
수신 체크섬 검사
- 종류를 고르면 받은 데이터그램마다 맨 끝 체크섬을 검사해 «정상» 또는 «틀림» 을 붙입니다.
- 데이터그램 맨 끝 바이트가 체크섬이어야 합니다. 뒤에 CR·LF 가 붙어 오면 «틀림» 이 됩니다.
- 파일 로그에는 «[OK]» 또는 «[CHECK FAIL]» 이 붙습니다.
로그와 사건 줄(EV)
- EV 줄은 시작·멈춤·멀티캐스트 가입·에코 켜고 끄기·오류 같은 사건입니다.
- «ICMP port unreachable»: 보낸 곳에서 아무도 듣고 있지 않다는 운영체제 알림입니다. 장비 포트와 전원을 확인하세요.
- 화면에 남길 줄 수(기본 10만)를 넘으면 화면에서만 오래된 줄이 지워집니다. 파일 기록은 그대로입니다.
- 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 찾는 글자 지우기(한 번 더 누르면 거르기 전체 끄기).
저장과 상세
- «화면 내용 저장»: 지금 화면에 남은 줄을 텍스트 파일로 저장합니다. 지금 «보기» 대로(HEX, ASCII, «둘 다» 는 «HEX | ASCII») 쓰고, 거르기가 켜져 있으면 보이는 줄만 씁니다. 첫 줄(# 로 시작)에 보기·거르기·줄 수가 적힙니다. 시각은 설정의 «로그 시각 표시» 를 따르고, 체크섬이 틀린 줄 끝에는 «[CHECK FAIL]» 이 붙습니다. («파일로 계속 저장» 의 줄 모양은 보기와 상관없이 설정 «파일 로그 형식» 을 따릅니다 — 기본 HEX.)
- «파일로 계속 저장»: 파일을 고르면 그때부터 오는 모든 줄을 계속 씁니다. 첫 줄에 설정이 적힙니다. «저장 멈춤» 으로 끝냅니다. 시작한 뒤에만 누를 수 있습니다.
- 로그 줄을 누르면 오른쪽 «상세» 에 그 줄의 상대·바이트 수·HEX·ASCII 가 나옵니다.
설정(⚙)
- «언어»·«테마»·«글자 크기»·«로그 시각 표시»·«화면에 남길 줄 수»·«자동 스크롤» 처음 상태.
- «연결하면 자동으로 파일 로그 시작»: «자동 로그 폴더» 를 고르면 시작할 때마다 «portdock-udp-날짜-시각.log» 에 저장합니다.
- «연결·기록 중에 창을 닫으려 하면 묻기».
- «설정 내보내기»·«설정 가져오기»: 화면 설정과 명령 목록을 JSON 파일로 옮깁니다. «기본값으로» 는 화면 설정만 되돌립니다.
- «항상 위»: 이 창을 다른 창 위에 늘 보이게 합니다(머리줄 📌 과 같은 값).
- «모두 펼치기(전문가 화면)»: 평소 접어 두는 칸(고급 연결·받기 설정·장애 주입·통계·찾는 방법·트리거·자동응답 등)을 펼친 채 보입니다. 켜 둔 채 하나를 접으면 이번 실행 동안만 접힙니다. 끄면 칸마다 기억해 둔 열림 상태로 돌아갑니다.
단축키·팁
- 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 이면 나누지 않습니다.
- 형식·나누기는 다음에 시작하는 파일 기록부터 적용됩니다(지금 쓰는 파일은 그대로).
이 PC 주소·멀티캐스트 랜카드·TTL
- «묶을 주소» 칸을 누르면 이 PC 의 랜카드 주소와 0.0.0.0(모든 랜카드)을 고를 수 있습니다. 왼쪽 «이 PC 주소» 에서 눌러도 됩니다(↻ 다시 읽기). 이 PC 에 없는 주소면 시작 전에 알려 줍니다.
- 멀티캐스트 그룹을 넣거나 «보낼 곳» 이 멀티캐스트 주소(224~239.x.x.x)면 아래 칸이 나옵니다.
- «멀티캐스트 랜카드»: 그룹 가입과 멀티캐스트 보내기에 쓸 랜카드(목록에서 고름). 0.0.0.0 이면 윈도우가 고릅니다 — 랜카드가 여러 개(사내망 + 장비망)면 꼭 장비 쪽을 고르세요.
- «멀티캐스트 TTL»(1~255, 기본 1): 멀티캐스트가 지나갈 수 있는 라우터 수. 1 이면 같은 망 안에서만.
- «보낸 멀티캐스트를 이 PC 도 받기»(기본 켬): 끄면 이 PC 에서 같은 그룹에 가입한 프로그램(이 창 포함)이 우리가 보낸 것을 받지 않습니다.
- 시작하면 사건 줄 «BIND … multicast 239.0.0.1 if 192.168.0.10 ttl 4 noloop» 처럼 실제 설정이 남습니다. «포트가 이미 사용 중» 이면 그 포트를 쥔 프로그램·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} 는 규칙의 응답 횟수를 씁니다 — «횟수 초기화» 로 처음부터. 규칙을 고쳐도(이름이 같으면) 이어서 셉니다.
문제 해결
- 시작할 때 «주소 사용 중»: 다른 프로그램이 그 포트를 쓰고 있습니다. 다른 포트를 쓰거나 그 프로그램을 닫으세요.
- 아무것도 안 들어옴: 장비가 보내는 대상 IP·포트, 윈도우 방화벽 허용, PC 와 장비가 같은 대역인지 확인하세요.
- 브로드캐스트를 보냈는데 오류: «브로드캐스트 허용» 을 켜고 다시 시작하세요.
- 멀티캐스트가 안 들어옴: 그룹 주소, «멀티캐스트 랜카드» 를 확인하고 «다시 가입» 을 눌러 보세요.
- 프로그램이 안 열림: Microsoft Edge WebView2 가 필요합니다(윈도우 11 은 기본 포함).