본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/유틸리티
  3. 시리얼 통신 테스트 프로그램 듀얼 화면 jwRsMonitor

시리얼 통신 테스트 프로그램 듀얼 화면 jwRsMonitor

· 댓글개 · 바다야크

시리얼 통신 테스트 프로그램 jwRsMonitor

jwRsMonitor은 jwRsTester와 같은 시리얼 통신 테스터입니다. jwRsTester는 하나의 시리얼 통신 포트로만 테스트할 수 있다면 jwRsMonitor은 화면을 좌우로 나누어 두 개의 통신 포트로 통신 테스트할 수 있습니다. jwRsMonitor는 수신된 데이터를 쉽게 확인할 수 있도록 노력했으며 터미널을 두어 타이핑만으로도 데이터 전송이 가능합니다. 시리얼 포트의 송신·수신·에러 등의 상태를 볼 수 있으며 초 단위로 자동 전송 기능을 갖추었습니다.

jwRsMonitor 설치·제거 방법

jwRsMonitor는 설치 파일 대신에 실행 파일만 압축하여 제공합니다. 적당한 폴더에 압축 파일을 풀어서 사용하세요.

jwRsMonitor는 실행 중에 생성되는 파일은 exe 파일이 있는 폴더에 저장되며 윈도우 레지스트리를 사용하지 않습니다. 그러므로 jwRsMonitor의 실행 파일과 생성 파일만 제거하면 컴퓨터에서 깨끗하게 사라집니다.

jwRsMonitor 관련 파일

  • jwRsMonitor.exe 실행 파일입니다.
  • jwRsMonitor.ini 환경 파일입니다.
  • SendItem01.txt ... SendItem11.txt  미리 만들어 놓는 전송 데이터입니다.
  • Left.Log 왼쪽 패널의 시리얼 포트 통신에서 발생한 로그 파일입니다.
  • Right.Log 오른쪽 패널의 시리얼 포트 통신에서 발생한 로그 파일입니다.
  • LeftSock.Log 왼쪽 패널의 윈속 포트 통신에서 발생한 로그 파일입니다.
  • RightSock.Log 오른쪽 패널의 윈속 포트 통신에서 발생한 로그 파일입니다.

jwRsMonitor 최신 버전

jwRsMonitor 최신 버전은 1.1.3입니다.

jwRsMonitor-1.1.3.zip
0.42MB

업그레이드된 내용은 아래와 같습니다.

  • Log 파일 이름에 jwRsMonitor를 실행한 날짜와 시간을 넣어 생성합니다.
  • 화면에 출력하는 데이터 선택을 기억하도록 수정했습니다.
  • 시리얼 포트 상태를 출력하는 작은 박스를 1개 행으로 수정했습니다.
  • 터미널의 행 수를 30행으로 늘렸습니다.

jwRsMonitor 이전 버전

jwRsMonitor 1.1.2

jwRsMonitor-1.1.2.zip
0.42MB

  • 터미널의 가로 크기를 40 컬럼으로 변경했습니다.
  • 로그 데이터를 저장하는 버튼과 Ctrl-S 단축키를 추가했습니다.
  • 이전 실행했을 때의 윈도우 위치와 크기로 시작하도록 수정했습니다.
  • 아스키 테이블에서 h10에 대한 오타를 lf로 정정했습니다.

jwRsMonitor 1.1.1 

jwRsMonitor-1.1.1.zip
0.42MB

  • 터미널의 가로 폭이 27컬럼입니다.
  • crc16 계산을 MODBUS-RTU에 맞추었습니다.
  • 통신 설정을 한 번에 지정할 수 있는 팝업 윈도우를 추가했습니다.
  • 간단히 전송 테스트하기 위해 알파벳을 전송하는 [ABC...] 버튼과 숫자를 전송하는 [123...] 버튼을 추가했습니다.
  • crc32 사용성이 별로 없는 것으로 생각돼서 제거했습니다.

이보다 낮은 버전은 여기 링크를 참조하세요.

jwRsMonitor 사용법

jwRsMonitor 초기 실행 화면
jwRsMonitor 초기 실행 화면

jwRsMonitor의 UI는 좌우 대칭으로 두 개의 화면으로 나누어져 있으며 각각이 시리얼 포트를 선택해서 동시에 2개의 시리얼 포트를 통신 테스트를 할 수 있는 구조입니다. 처음 jwRsMonitor를 실행하면 대부분의 버튼이 회색으로 비활성화되어 있습니다. 작업 순서는 아래와 같습니다.

  1. 시리얼 통신을 위한 포트를 선택하여 open 합니다.
  2. 터미널 패널에서 타이핑하여 상대 시스템으로 Ascii 데이터를 전송합니다.
  3. 또는 미리 전송할 데이터를 작성한 후 버튼 클릭으로 전송합니다.
  4. 전송할 데이터 :Y :M :D와 같은 실시간 값을 조합할 수 있습니다.
  5. 상대 시스템으로부터 수신된 데이터는 문자와 HEX 코드로 화면에 출력됩니다.

serial 모드

jwRsMonitor는 시리얼 포트 외에도 윈소켓으로도 시리얼 테스틀 할 수 있습니다. 시리얼 통신 테스트 프로그램임에도 소켓 통신을 넣은 이유는 오로지 디버깅을 위한 것입니다. 일반적인 경우가 아니므로 무시하셔도 좋습니다. 추후에 자세한 내용을 추가하겠습니다만, 테스트 대상 장비가 같은 네트워크에 물려 있다면 시리얼 케이블을 연결하지 않고도 랜을 통해 테스트할 수 있도록 소켓을 이용하는 것입니다.

이 기능을 이용하려면 상대 테스트 시스템도 소켓 프로그래밍으로 작성되어야 합니다. 입출력을 시리얼 포트와 소켓 중에 선택하게 하고 데이터는 시리얼 데이터를 처리하는 루틴으로 처리하면서 디버깅하는 것이죠. 결국 순전히 디버깅의 편리를 위한 것으로 실무에 적용할 필요도 없다고 생각합니다만, 어쩌면 통신 루틴은 변경하지 않으면서 시리얼 포트와 소켓 포트를 선택해서 통신하도록 제작할 수는 있겠습니다.

시리얼 통신 포트 열기

jwRsMonitor의 두 가지 통신 방법 중 "serial"을 선택하고 시리얼 케이블로 연결된 시스템과의 통신 테스트하는 방법에 대해 설명하겠습니다. "winsock"은 포트를 open하는 방법만 다를 뿐 상대 시스템과 연결이 되면 이후로 테스트 방법은 "serial"과 방법이 똑같습니다.

jwRsMonitor 시리얼 포트 선택
jwRsMonitor 시리얼 포트 선택

"port control"에서 "serial"을 선택합니다. "port"를 클릭하면 시리얼 포트의 번호부터 Baud, Data bits, Parity, Stop bits 등을 선택할 수 있습니다. O.K. 버튼을 클릭하면, 그리고 지정한 번호에 해당하는 시리얼 포트가 있고 다른 애플리케이션이 사용하고 있지 않다면 통신 테스트할 수 있도록 open됩니다.

시리얼 포트 열기 후
시리얼 포트 열기 후

시리얼 포트가 open되면 회색으로 비활성화되어 있던 [abc ...], [123 ...] 버튼이 밝은 색으로 활성화됩니다. 또한, 시리얼 포트 상태의 변화가 화면 상단에 깜빡임으로 표시됩니다.

이글의 이해를 돕기 위해 좌우 시리얼 포트를 open했으며 두 개의 시리얼 포트를 크로스 케이블로 연결했습니다. 좌측 화면에서 데이터를 전송하면 우측 화면에 수신된 데이터가 출력되며, 우측에서 전송한 데이터는 좌축 화면에 출력될 것입니다.

jwRsMonitor 터미널 입력
jwRsMonitor 터미널 입력

jwRsMonitor에는 터미널이 있습니다. 마우스로 "termianl" 패널을 클릭하고 키보드 타이핑하면 입력한 대로 상대 시스템으로 전송됩니다. 상대 시스템과 연결되었는지 확인할 때 가장 간편한 방법입니다.

jwRsMonitor 상대 시스템 연결 테스트

테스트 대상 시스템과 시리얼 케이블로 제대로 연결되었는지 보통 abcdef... 12345...처럼 간단한 문자열을 출력해 보는데요, 이를 간편하게 테스트할 수 있도록 [abc...], [123...] 버튼을 준비했습니다. 버튼에 따라 전송된 데이터가 abcdefg..., 12345... 식으로 이상이 없다면 시리얼 케이블 연결이 이상 없고 선택한 포트도 정상적으로 open되었으며 테스트 대상 시스템도 수신된 데이터로 통신 상태를 간단히 확인할 수 있습니다.

준비된 데이터 전송

준비된 데이터를 전송
준비된 데이터를 전송

대부분의 경우 시리얼 통신 테스트는 규칙적인 데이터를 주기적으로 전송하고 수신하는 작업이 많습니다. terminal은 간단한 테스트에 적합해도 주기적으로 보내야 한다면 매우 힘든 작업이 됩니다. jwRsMonitor에는 미리 전송할 데이터를 입력해 둘 수 있는 메모장 같은 입력 패널이 있습니다.

텍스트 입력 패널에 데이터를 입력하고 왼쪽 패널에서는 F5키, 오른쪽 패널에서는 F7키를 누르면 입력한 데이터가 한 번에 전송됩니다. 아울러 데이터에 대한 CRC 정보가 계산되어 화면에 출력됩니다.

준비 데이터는 한 개의 시리얼 포트에 대해서 9개를 준비할 수 있으며, 입력 패널 위에 있는 1부터 9까지 버튼을 클릭해서 선택할 수 있습니다. 입력한 데이터는 자동으로 저장되며, 다음 실행에도 자동으로 입력됩니다.

F5키와 F6키와의 차이(F7키와 F8키와의 차이)

준비된 데이터를 상대 시스템으로 전송하는 버튼으로 두 개가 있습니다. 왼쪽 패널의 경우 F5와 F6 두 개인데요, F5는 최근에 보낸 데이터를 반복해서 전송합니다. 이에 비해 F6키는 현재 시간을 반영하여 전송합니다.

jwRsMonitor의 데이터 입력 패널에는 :Y :M :D처럼 시간을 자동으로 입력할 수 있는 치환자가 있습니다. :Y-:M-:D_:H-:N-:S라고 입력했다면 2022-06-03_22-18-29로 전송되는데요, F5키는 처음 만들어진 시간을 반복해서 전송합니다. F6키는 현재 시간에 맞추어 갱신된 데이터를 전송합니다.

시간 치환자 말고도 HEX 치환자도 있는데요, ~ff로 입력하면 HEX 코드로 ff가 전송됩니다. ~aa~ab~ac 이렇게 입력하면  HEX 코드로 aa, ab, ac가 차례로 전송됩니다. 시간의 경우 2022-06-03_22:18:29처럼 시간 구분에 콜론(:)으로 전송하고 싶다면 :Y-:M-:D_:H~3a:N~3a:S로 작성하면 됩니다.

HEX 문자를 연이어 입력하고 싶다면 '{', '}' 괄호를 사용하면 됩니다. [0x01 0x02 0x03]을 전송하기 위해 ~01 ~02 ~03로 입력해도 되며 {01 02 03}으로 입력해도 됩니다. '{', '}' 괄호 안에서는 앞자리 0을 생략할 수 있습니다. 즉, {01 02 03}을 {1 2 3}으로 입력 가능합니다.

F6(F8)키 사용 시

F6키를 클릭할 때마다 시간 치환자가 현재 시간에 맞추어 전송되므로 테스트 장비 측에서는 시간이 변경되어 입력되는 것을 확인할 수 있습니다.

치환자 목록

치환자는 화면 우측에 있는 "composite" 패널에 설명되어 있습니다. :c 또는 :C는 F6(F8) 키를 누를 때마다 카운터가 1씩 증가하여 전송됩니다. 값을 변경하면서 통신 테스트하는 경우가 많아서 기능을 넣었습니다.

통신 패킷 구성

간단한 통신 패킷 구성
간단한 통신 패킷 구성

시리얼 통신에서 자주 사용하는 통신 패킷을 간단히 구성해서 전송할 수 있습니다. [STX][data][CRC16][ETX]로 구성하여 전송 테스트하는 화면입니다. jwRsMonitor의 CRC16 계산은 MODBUS에 맞추어져 있습니다.

jwRsMonitor 수신 데이터 출력 패널

jwRsMonitor 수신 데이터 출력 패널
jwRsMonitor 수신 데이터 출력 패널

jwRsMonitor는 수신 데이터를 어떻게 하면 빠르고 쉽게 이해할 수 있을까 고심했습니다. 그래서 입/출력을 모두 볼 수 있는 패널과 16개 바이트씩 정리해서 출력하는 패널과 바이트 순서 번호를 확인할 수 있는 패널까지 3개의 화면으로 구성되어 있습니다. 화면 상단에 사용할 패널을 체크할 수 있도록 했습니다. 필요한 패널만 체크해서 사용하세요.

break 시그널 전송

break 시그널 전송
break 시그널 전송

시리얼 통신에는 break 신호를 전송할 수 있습니다. 바이트 값 0을 전송하면 break 신호인 줄로 아시는 분이 많은데, break 신호를 주는 방법이 따로 있습니다. 아마도 break 신호를 받았을 때 수신 버퍼에 0이 있어서 이렇게 생각하시는 것 같습니다만, 아닙니다. 또한, break 신호를 전송하 후에는 특정 함수를 호출하기 위해 약속된 바이트를 이어서 전송합니다. 즉, break 신호+'A' 이렇게 전송하는 것이죠. 이런 경우 [break] 버튼 앞에 'A'를 입력하고 [break] 버튼을 클릭하면 됩니다. '123'처럼 여러 개의 문자를 입력할 수도 있습니다.

모뎀 제어 명령 메뉴

모뎀 제어 명령 메뉴
모뎀 제어 명령 메뉴

좌우 모니터마다 전화기 모양의 버튼이 있습니다. 이 버튼을 이용하여 모뎀 제어 명령을 실행할 수 있는데요, 애써 만들었지만, 과연 사용하는 일이 있을까 싶습니다. 모뎀 사용하는 곳이 아직 있나요? 그래도 혹시나 하는 생각에 제거하지 않았습니다.

winsock 모드

jwRsMonitor에는 시리얼 케이블 없이도 통신 테스트할 수 있는 winsock 모드를 제공합니다. 서두에 말씀을 드렸습니다만, 이 기능을 사용하기 위해서는 테스트 대상 시스템도 소켓 프로그래밍으로 작성해야 합니다.

jwRsMonitor의 winsock 모드
jwRsMonitor의 winsock 모드

winsock 모드에서 jwRsMonitor가 서버라면 winsock을 선택하고 Sever Mode부터 체크하여 클라이언트로부터 접속 요청에 대기합니다.

jwRsMonitor가 클라이언트라면 "winsock"을 선택하고 [connect] 버튼을 클릭한 후 서버 IP를 해서 연결을 시도합니다. 서버와 연결이 되면 serial 모드에서처럼 통신 테스트를 진행합니다.

jwRsMonitor 로그 저장 버튼

jwRsMonitor은 송수신 상태를 로그를 작성합니다만, 로그 버퍼를 모두 채우거나 프로그램을 종료해야 파일에 저장됩니다. 그러므로 로그 내용을 확인하려면 그때마다 프로그램을 종료하고 다시 실행해야 하는데 매우 번거롭습니다. 최근 로그를 확인하시려면 [save log] 버튼을 클릭하세요. 로그 파일에 내용이 추가되어 저장됩니다.

0007.237  TrDatChg  Status        00000045  [00][00][00][00]
0007.238  Trigger   Status        00000045  
0007.238  TrDatChg  Timer         00000048  [01][00][00][00]
0007.389  Trigger   Timer         00000048  
0007.390  TrDatChg  Status        00000045  [00][00][00][00]
0017.654  Dispatch  WriteCom      00000034  ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg
                                            hijklmnopqrstuvwxyz
0017.703  Trigger   Status        00000045  
0017.703  TrDatChg  Timer         00000048  [01][00][00][00]
0017.803  Trigger   Timer         00000048  
0017.803  TrDatChg  Status        00000045  [00][00][00][00]
0019.958  Dispatch  WriteCom      0000000A  0123456789
0019.974  Trigger   Status        00000045  
0019.975  TrDatChg  Timer         00000048  [01][00][00][00]
0020.075  Trigger   Timer         00000048  
0020.075  TrDatChg  Status        00000045  [00][00][00][00]
0021.996  Dispatch  ReadCom       00000034  ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg
                                            hijklmnopqrstuvwxyz
0021.996  Trigger   Avail         00000034  
0021.996  TrDatChg  Timer         00000038  [01][00][00][00]
0022.098  Trigger   Timer         00000038  
0022.907  Dispatch  ReadCom       0000000A  0123456789
0022.907  Trigger   Avail         0000000A  
0022.907  TrDatChg  Timer         00000038  [01][00][00][00]
0023.009  Trigger   Timer         00000038

저장된 로그 내용의 일부분입니다.

SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.