전체 소스
        WATSerialCom_20100624.zip    










RX 이벤트를 사용하여 데이터 받기
        RX 데이터를 버튼을 이용하여 받는 방식을 이용하면 계속 RX 버튼을 눌러야 하는 단점이 있습니다.
        이것을 RX 이벤트를 이용하여 데이터를 받았을 때만 처리하도록 수정해 볼 겁니다.

RX 이벤트용 함수 만들기
        먼저 RX 값을 뿌려줄 EDITBOX를 추가합니다.
        Name : txtRxData
        Multiline : TRUE
        ScrollBars : Vertical

        그리고 RX 값을 HEXA 값으로 표시할 것인지 CHAR 값으로 표시할 것인지를 선택할 체크박스를 추가합니다.
        Name : chkRxHexa
        Text : RX HEXA?

        아시는 분은 아시겠지만 VC 6.0 에서는 쓰레드를 사용하여 MESSAGE 를 날려 주는 불편함이 있었습니다.
        그럼 여기서도 복잡한 쓰레드를 생성해서 MESSAGE를 날려 줘야 하느냐? 고 생각이 드는 분도 계실겁니다.

        다행히 C# 에서는 기본적으로 시리얼RX 이벤트를 제공해 줍니다.
        추가하는 방법도 간단합니다. 
        포트를 OPEN 하기 전에 DataReceived 속성에 RX 시에 실행할 함수를 설정하고 그 함수를 작성하면 됩니다.
       

m_sp1.DataReceived += new SerialDataReceivedEventHandler(EventDataReceived);

       
//Serial Port Event
        void EventDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int iRecSize = m_sp1.BytesToRead; // 수신된 데이터 갯수
            string strRxData;

            if (iRecSize != 0) // 수신된 데이터의 수가 0이 아닐때만 처리하자
            {
                strRxData = "";
                byte[] buff = new byte[iRecSize];

                m_sp1.Read(buff, 0, iRecSize);

                for (int iTemp = 0; iTemp < iRecSize; iTemp++)
                {
                    if (chkRxHexa.Checked)
                        strRxData += " " + buff[iTemp].ToString("X2");
                    else
                        strRxData += Convert.ToChar(buff[iTemp]);
                }
                txtRxData.Text += strRxData;
            }
        }

         아래처럼 RX 값을 CHAR로 표시 또는 HEXA값으로 표시할수 있습니다.

        watSerialcom_RX1.gif 


        이제 RX 버튼이 필요 없으므로 삭제를 해야 합니다. ( 삭제하는 방법은 여러가지입니다.)
        폼디자인에서 RX 버튼을 선택한후 DEL 키를 눌러 지웁니다.
        그리고 함수 (  private void btnRx_Click(object sender, EventArgs e) ) 를 직접 지웁니다.

        지금까지 수신 값을 이벤트를 사용하여 처리해보았습니다.
        다음에는 원하는 데이터를 보낼수 있도록 수정해 보겠습니다.

출처 : http://whiteat.com/zbxe/board_SerialComCS/31641

+ Recent posts