전체 소스
WATSerialCom_20100623.zip
새로운 프로젝트를 생성
이름 : WATSerialCOM
C#용 프로젝트 생성방법은 http://whiteat.com/31559 를 참고하세요.
타이틀 변경
폼의 [Text] 속성 값을 "C#으로 만드는 시리얼 통신 프로그램"으로 합니다.
폼의 [Name] 속성 값을 "frmMain" 으로 합니다.
컴포트와 보레이트 설정하는 EDITBOX를 추가
2개의 레이블과 2개의 EDITBOX를 추가한후 EDITBOX에 명명합니다.
(레이블은 사용하지 않기 때문에 이름을 특별히 부여할 필요가 없습니다.)
COM PORT용 EDITBOX 이름 : txtComNum
BaudRate 용 EDITBOX 이름 : txtBaudRate
OPEN,CLOSE,SEND,RX 버튼 추가
4개의 버튼을 추가한후 각각의 이름과 TEXT를 붙입니다..
OPEN : btnOpen // 포트 열기
CLOSE : btnClose // 포트 닫기
SEND : btnSend // 데이터 보내기
RX : btnRX // 데이터 받기 ( 지금은 수신 이벤트를 사용하지 않고, 수동으로 받는것을 하겠습니다.)
지금까지 디자인한 폼은 다음과 같을 것입니다.
EDITBOX의 기본값 설정 및 필요한 변수 추가하기
기본 값 설정은 간단합니다. 폼이 생성될때 txtComNum 과 txtBaudRate 에 기본값을 설정해 주면 됩니다.
시리얼 통신을 하기 위해서는 SerialPort 모듈이 필요합니다.
using 으로 System.IO.Ports 를 추가해주고, 실제로 사용할 m_sp1 을 추가해줍니다.
using System.IO.Ports;
SerialPort m_sp1;
OPEN 기능 추가
OPEN 버튼을 더블 클릭하여 OPEN 기능을 추가해줍니다.
private void btnOpen_Click(object sender, EventArgs e)
{
try
{
// m_sp1 값이 null 일때만 새로운 SerialPort 를 생성합니다.
if (null == m_sp1)
{
m_sp1 = new SerialPort();
m_sp1.PortName = txtComNum.Text; // 컴포트명
m_sp1.BaudRate = Convert.ToInt32(txtBaudRate.Text); // 보레이트
m_sp1.Open();
}
btnOpen.Enabled = !m_sp1.IsOpen; // OPEN BUTTON Disable
btnClose.Enabled = m_sp1.IsOpen; // CLOSE BUTTON Enable
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
CLOSE 기능 추가
CLOSE 버튼을 더블클릭하여 CLOSE 기능을 추가해줍니다.
private void btnClose_Click(object sender, EventArgs e)
{
// m_sp1 이 null 아닐때만 close 처리를 해준다.
if (null != m_sp1)
{
if (m_sp1.IsOpen)
{
m_sp1.Close();
m_sp1.Dispose();
m_sp1 = null;
}
}
btnOpen.Enabled = true;
btnClose.Enabled = false;
}
SEND 기능 추가
SEND 버튼을 더블클릭하여 SEND 기능을 추가합니다.
{
m_sp1.Write("ABC");
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
RX 기능 추가
RX 버튼을 더블클릭하여 RX 기능을 추가합니다.
private void btnRx_Click(object sender, EventArgs e)
{
int iRecSize = m_sp1.BytesToRead; // 수신된 데이터 갯수
string strRxData;
try
{
if (iRecSize != 0)
{
strRxData = "";
byte[] buff = new byte[iRecSize];
m_sp1.Read(buff, 0, iRecSize);
for (int iTemp = 0; iTemp < iRecSize; iTemp++)
{
strRxData += Convert.ToChar(buff[iTemp]);
}
MessageBox.Show(strRxData);
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
기능 테스트
하드웨어를 연결하여 실제로 동작하는지 테스트를 해봐도 되는데
가상 시리얼포트가 설치 되어있으면 테스트하기가 더욱 쉬울 겁니다.
COM3에서 SEND 버튼을 12번 누르고 COM4에서 RX 버튼을 눌러
다음처럼 ABC가 12번 들어 왔음을 확인할 수 있다.
여기까지는 거의 하드코딩으로 프로그램을 작성해서 시리얼 통신이 되는지만 확인한 겁니다.~~
다음에는 SEND 와 RX 기능(이벤트 사용)을 보완하여 추가하겠습니다.
출처 : http://whiteat.com/31581
'스터디 > C#.NET:시리얼통신' 카테고리의 다른 글
03_HEXA, CHAR 구분하여 데이터 보내기 (0) | 2013.01.13 |
---|---|
02_이벤트로 수신데이터 받기 (0) | 2013.01.13 |
foreach statement cannot operate on variables of type 에러 해결방법 (0) | 2011.01.21 |
04_gif ( binary 파일) 보내고 받기 (4) | 2010.07.30 |