전체 소스
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 시에 실행할 함수를 설정하고 그 함수를 작성하면 됩니다.
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값으로 표시할수 있습니다.
이제 RX 버튼이 필요 없으므로 삭제를 해야 합니다. ( 삭제하는 방법은 여러가지입니다.)
폼디자인에서 RX 버튼을 선택한후 DEL 키를 눌러 지웁니다.
그리고 함수 ( private void btnRx_Click(object sender, EventArgs e) ) 를 직접 지웁니다.
지금까지 수신 값을 이벤트를 사용하여 처리해보았습니다.
다음에는 원하는 데이터를 보낼수 있도록 수정해 보겠습니다.
출처 : http://whiteat.com/zbxe/board_SerialComCS/31641
'스터디 > C#.NET:시리얼통신' 카테고리의 다른 글
03_HEXA, CHAR 구분하여 데이터 보내기 (0) | 2013.01.13 |
---|---|
01_포트 열기/닫기 데이터 보내기/받기 (0) | 2013.01.13 |
foreach statement cannot operate on variables of type 에러 해결방법 (0) | 2011.01.21 |
04_gif ( binary 파일) 보내고 받기 (4) | 2010.07.30 |