MFC : 시리얼통신 rs232 pc to board

wsung·2026년 1월 7일

전체 구조

[ UI (Dialog) ]
   ↓ (버튼 / 체크박스 / 콤보박스 이벤트)
[ CRS232SwitchLEDMonitorDlg ]
   ↓
[ 패킷 생성 MakePacket() ]
   ↓
[ RS232 WriteFile ]
   ↓
[ 보드 (LED 제어) ]
  • UI는 이벤트만 발생시키고
  • 실제 동작은 Dialog 클래스가 담당

Dialog 클래스의 역할

class CRS232SwitchLEDMonitorDlg : public CDialogEx
-> 이 클래스가 모든 것을 관리함

핵심 멤버 변수 구조

HANDLE m_hCom;        // 실제 COM 핸들
BOOL   m_bComOpen;    // 열려있는지 여부

m_hCom → OS 리소스
m_bComOpen → 논리 상태 판단

: 실무에서도 항상 같이 씀

LED 상태

BYTE m_ledState; // 0000 0000

| 비트  | LED  |
| ---- | ---- |
| bit0 | LED1 |
| bit1 | LED2 |
| bit2 | LED3 |
| bit3 | LED4 |

예: LED1 + LED3 → 0000 0101 → 0x05

UI 이벤트 구조 (MFC 핵심)

BEGIN_MESSAGE_MAP(CRS232SwitchLEDMonitorDlg, CDialogEx)
    ON_BN_CLICKED(IDC_BTN_COM, &CRS232SwitchLEDMonitorDlg::OnBnClickedBtnCom)
    ON_BN_CLICKED(IDC_CHK_LED1, &CRS232SwitchLEDMonitorDlg::OnBnClickedChkLed1)
    ON_CBN_SELCHANGE(IDC_CB_COMPORT, &CRS232SwitchLEDMonitorDlg::OnCbnSelchangeCbComport)
END_MESSAGE_MAP()

-> "어떤 UI → 어떤 함수" 연결표

버튼 / 체크박스 이벤트 흐름

[ 체크박스 클릭 ]
   ↓
OnBnClickedChkLed1()
   ↓
m_ledState 비트 변경
   ↓
SendLedPacket()

LED 비트 제어 원리

패킷 구조 이해

STX   | CH   |     CMD     |     LEN         |      DATA    |   SUM     | ETX
02    30 31       30 45       30 30 30 32        30     33      36        03


| 필드  | 설명   |
| ---- | ------ |
| STX  | 0x02   |
| CH   | "01"   |
| CMD  | "0E"   |
| LEN  | "0002" |
| DATA | "03"   |
| SUM  | 체크섬  |
| ETX  | 0x03   |

※ 숫자처럼 보여도 전부 ASCII
※ 0x30 = '0'

MakePacket() 함수 역할

“프로토콜 담당”

SendLedPacket() 구조

SendLedPacket()
{
    m_ledState → "03"
    MakePacket()
    WriteFile()
}

-> 데이터 → 패킷 → 전송

콤보박스 구조 이해

OnCbnSelchangeCbComport()
{
    Close COM
    Reset LED
    Reset UI
}

-> “포트 변경 = 시스템 리셋”

profile
0부터 시작하는 백엔드

0개의 댓글