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 통신을 검증하려 합니다.

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

[복구] [DevLog] 퇴근 후 8시간, 구글 Antigravity IDE로 Modbus TCP 툴 프로토타입 만들기

이전 작성 되었던 블로그의 복구 입니다.

 

📝 Note: 이 글은 현재 개발 중인 프로젝트의 Modbus MonitorModbus Simulatorreadme.md 파일을 기반으로 작성되었습니다.

개발자에게 퇴근 후 시간은 또 다른 창작의 시간입니다. 이번에는 딱 2일, 하루 4시간씩 총 8시간을 투자해 개인 프로젝트로 Modbus TCP/RTU 모니터링 및 시뮬레이션 툴의 프로토타입을 만들어보았습니다.

아직 완성된 프로그램은 아니지만, 구글의 Antigravity IDE 덕분에 짧은 시간 안에 TCP/IP 통신 검증까지 마칠 수 있었습니다. 이 프로젝트의 초기 개발 과정을 공유합니다.


🚀 프로젝트 시작: 왜 직접 만드나?

시중에는 이미 많은 Modbus 툴이 있지만, **"내 입맛에 딱 맞는 테스트 환경"**을 구축하기엔 아쉬움이 있었습니다. 특히 클라이언트(Monitor)와 서버(Simulator) 간에 설정을 매번 따로 잡아줘야 하는 번거로움을 해결하고 싶었습니다.

그래서 **"설정을 공유하는 쌍둥이 프로그램"**을 목표로 개발을 시작했습니다.

🛠️ 개발 환경 및 현황

  • 개발 기간: 2일 (퇴근 후 4시간 × 2일 = 총 8시간)

  • 핵심 도구: Google Antigravity IDE (초기 구조를 잡는 데 결정적 역할)

  • 개발 언어: Python 3.x, PySide6, Pymodbus

  • 현재 상태:

    • TCP/IP Server/Client: 구현 및 검증 완료

    • 🚧 Serial RTU: 코드 구현 완료 (테스트 예정)

    • 🚧 UI/UX: 기능 추가 및 고도화 진행 중


📦 현재까지 구현된 핵심 기능

1. Modbus Monitor (Client) - TCP 검증 완료

현장의 장비 데이터를 모니터링하는 메인 툴입니다. 현재 TCP/IP 통신을 우선적으로 테스트하고 있습니다.

  • MDI 인터페이스: 여러 데이터 영역(Coils, Holding Registers 등)을 개별 창으로 띄워 관리할 수 있는 기본 골격을 완성했습니다.

  • 워크스페이스 저장: 현재 창의 배치와 주소 설정을 JSON으로 저장하는 기능을 구현했습니다.

  • 기능 확장성: 현재는 TCP 위주로 테스트 중이지만, Serial RTU 연결 설정(Baudrate, Port 등) UI도 미리 구성해 두었습니다.

2. Modbus Simulator (Server) - 설정 연동 성공

이 프로젝트의 핵심 아이디어인 "클라이언트 설정 흡수" 기능이 동작합니다.

  • Config Import: Monitor에서 저장한 워크스페이스 파일(.json)을 불러오면, 시뮬레이터가 자동으로 해당 주소 번지와 데이터 영역을 생성합니다. 일일이 주소를 입력할 필요가 없어 테스트가 매우 빨라집니다.

  • 양방향 동기화: 시뮬레이터와 클라이언트가 TCP로 연결된 상태에서, 양쪽의 값 변경이 실시간으로 반영되는 것을 확인했습니다.


⚡ Antigravity IDE와 함께한 8시간

MDI 구조의 GUI와 소켓 통신을 바닥부터 짜려면 꽤 많은 시간이 걸립니다. 하지만 Antigravity IDE를 활용한 덕분에 보일러플레이트 코드를 줄이고 핵심 로직에만 집중할 수 있었습니다.

단 8시간 만에 **"기획 → UI 구성 → TCP 통신 연동"**까지 사이클을 돌려볼 수 있었던 것은 도구의 힘이 컸습니다. 덕분에 퇴근 후 짧은 시간에도 몰입도 높게 개발할 수 있었습니다.

🔮 앞으로의 계획 (To-Do)

이 프로젝트는 이제 막 걸음마를 뗐습니다. 앞으로 퇴근 후 시간을 활용해 다음과 같은 기능을 추가해 나갈 예정입니다.

  1. Serial RTU 검증: 실제 컨버터 장비를 연결해 RTU 통신 안정성을 테스트할 계획입니다.

  2. 데이터 시각화: 단순 테이블 뷰를 넘어, 데이터 변화를 그래프로 보여주는 기능을 고려 중입니다.

  3. 로그(Log) 기능: 통신 패킷과 에러 로그를 기록하여 디버깅을 돕는 기능을 추가하려 합니다.


아직 갈 길이 멀지만, Antigravity IDE와 함께 발전해 나갈 이 프로젝트의 여정을 지켜봐 주세요! 👋

2025년 12월 26일 금요일

다시 만들기

 워크스페이스를 써보려 계정을 만들어 사용하다 보니 계정을 잘못 만들었더군요


그래서 이전 블로그글(몇개 없었지만) 및 기존 계정 초기화 하고 다시 만들었네요


이번엔 재대로 만들었는지 모르겠네요...

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

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