2025년 12월 28일 일요일

8시간의 프로토타입, 그 이후: "내 입맛에 맞는 Modbus 툴"이 갖춰야 할 디테일들

 지난번, 퇴근 후 딱 이틀(8시간)을 투자해 Google Antigravity IDE와 함께 Modbus TCP 모니터링 툴의 프로토타입을 만들었던 과정을 공유했었습니다.

"돌아만 가는" 프로그램에서 멈추지 않고, 지난 며칠간 퇴근 후 시간을 쪼개어 실제 현장에서 쓸 수 있는 수준으로 다듬는 작업을 진행했습니다.

오늘은 그 과정에서 추가된 Monitor(Client)와 Simulator(Server)의 핵심 업그레이드 내용을 정리해 봅니다.


🚀 무엇이 달라졌나? (Update Overview)

가장 큰 변화는 **'안정성'**과 **'디버깅 편의성'**입니다. 단순히 데이터를 주고받는 것을 넘어, 통신 상태를 눈으로 확인하고 예외 상황에서도 프로그램이 죽지 않도록 구조를 탄탄하게 잡았습니다.

구분초기 프로토타입 (v0.1)현재 버전 (v0.2)
통신 방식TCP/IP 기본 구현TCP/IP + Serial RTU (Dual Support)
안정성UI 프리징 발생 가능성 있음Multi-threading (PollingWorker) 적용
디버깅콘솔 출력 의존전용 Log Window (Rx/Tx 패킷 분석)
시뮬레이터수동 주소 할당 필요Smart Memory (SparseDataBlock) 자동 할당

🛠️ 1. Modbus Monitor: "죽지 않는 클라이언트"

현장 툴은 예뻐야 하는 게 아니라, 튼튼해야 합니다. 모니터링 프로그램이 통신 때문에 멈추거나 꺼지면 안 되기에 내부 구조를 대폭 개선했습니다.

✅ Multi-threading 도입 (UI 프리징 해결)

기존에는 통신 대기 시간 동안 화면이 멈칫하는 현상이 있었습니다. 이제 PollingWorker를 별도 쓰레드로 분리하여, 통신이 지연되더라도 UI는 부드럽게 반응합니다.

✅ 똑똑해진 로그 윈도우 (Log Window)

단순히 "연결됨/끊김"만 보는 건 의미가 없습니다.

  • Rx/Tx 패킷 분석: 실제로 어떤 바이트가 오고 가는지 실시간으로 보여줍니다.

  • FIFO 버퍼: 로그가 무한히 쌓여 메모리를 잡아먹지 않도록 1,000줄 제한을 뒀습니다.

  • Auto-Stop: 통신 에러가 10회 연속 발생하면 자동으로 폴링을 멈추고 사용자에게 알립니다. (무의미한 재시도 방지)


🛠️ 2. Modbus Simulator: "알아서 다 해주는 서버"

시뮬레이터의 존재 이유는 **'모니터링 툴을 편하게 테스트하기 위함'**입니다. 귀찮은 설정 과정을 자동화하는 데 집중했습니다.

✅ Monitor 설정 흡수 (Config Import)

이 프로젝트의 핵심 아이디어입니다. Monitor에서 저장한 .json 워크스페이스 파일을 시뮬레이터가 그대로 읽어옵니다.

"어? 모니터에서 40001번지 보고 있었네? 그럼 난 시뮬레이터에 40001번지 창 띄워줄게."

이 과정이 자동화되어 테스트 준비 시간이 획기적으로 줄어들었습니다.

✅ 스마트 메모리 관리 (Smart Memory Management)

기존에는 시뮬레이터에서 테스트할 번지를 일일이 Add Range로 추가해야 했습니다.

이제는 ModbusSparseDataBlock을 적용하여, 0번지부터 40,000번지까지 표준 주소 대역이 내부적으로 이미 준비되어 있습니다. 클라이언트가 어디를 찌르든, 시뮬레이터는 별도 설정 없이 즉시 응답합니다.

✅ 좀비 프로세스 방지 (Safety Shutdown)

개발하다 보면 프로그램을 껐는데도 백그라운드에서 포트(5020)를 잡고 있는 경우가 많았습니다. 종료 시 실행 중인 서버 쓰레드를 안전하게 정리하는 로직을 추가하여 재실행 시 포트 충돌 문제를 해결했습니다.


⚡ 개발 경험: Serial RTU와 디테일

TCP뿐만 아니라 Serial RTU 기능도 구체화되었습니다. 특히 Baudrate 설정 시 콤보박스를 Editable하게 변경하여, 표준 속도 외에 특수한 통신 속도도 입력할 수 있게 만든 점은 현장 경험을 녹여낸 디테일입니다.

🔮 남은 과제들 (Next Step)

이제 뼈대와 근육은 다 붙었습니다. 다음 단계는 **"피부"**를 입힐 차례입니다.

  • 데이터 시각화: 테이블에 숫자로 찍히는 데이터를 실시간 그래프로 변환하여 추세를 볼 수 있게 만들 예정입니다.

  • 실장비 테스트: 시뮬레이터를 넘어 실제 PLC 및 컨버터 장비와 RTU 통신을 검증하려 합니다.

퇴근 후 개발은 체력과의 싸움이지만, 내가 만든 도구가 점점 똑똑해지는 걸 보는 재미가 쏠쏠합니다. 다음에는 그래프가 움직이는 화면을 들고 오겠습니다! 👋

댓글 없음:

댓글 쓰기

🤖 리틀 로직 봇(Little Logic Bot) 개발 여정기

  "아빠가 설계하고 딸이 완성하는 로직 퍼즐" 만 4~6세 아이들을 위한 초기 코딩 교육용 웹 게임 개발 프로젝트 📌 프로젝트 개요 탄생 배경 이 프로젝트는 펌웨어 엔지니어인 아빠가 딸을 위해 시작한 교육용 게임입니다. 복잡한 텍...