"SerialTest" 라고 프로젝트를 생성했다.
요렇게 간단히 화면을 디자인.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace SerialTest { public partial class Form1 : Form { SerialPort sPort; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { btnOpen.Enabled = true; btnClose.Enabled = false; cboPortName.BeginUpdate(); foreach (string comport in SerialPort.GetPortNames()) { cboPortName.Items.Add(comport); } cboPortName.EndUpdate(); cboPortName.SelectedItem = "COM4"; txtBaudRate.Text = "9600"; CheckForIllegalCrossThreadCalls = false; } private void btnOpen_Click(object sender, EventArgs e) { try { if (null == sPort) { sPort = new SerialPort(); sPort.DataReceived += new SerialDataReceivedEventHandler(sPort_DataReceived); sPort.PortName = cboPortName.SelectedItem.ToString(); sPort.BaudRate = Convert.ToInt32(txtBaudRate.Text); sPort.DataBits = (int)8; sPort.Parity = Parity.None; sPort.StopBits = StopBits.One; sPort.ReadTimeout = (int)500; sPort.WriteTimeout = (int)500; sPort.Open(); } if (sPort.IsOpen) { btnOpen.Enabled = false; btnClose.Enabled = true; MessageBox.Show("시리얼 포트를 연결했습니다."); } else { btnOpen.Enabled = true; btnClose.Enabled = false; } } catch (System.Exception ex) { MessageBox.Show(ex.Message); } } private void btnSend_Click(object sender, EventArgs e) { byte[] byteSendData= new byte[200]; int iSendCount =0; try { if(true == chkSndHexa.Checked) { foreach (string s in txtSend.Text.Split(' ')) { if (s != null && s != "") { byteSendData[iSendCount++] = Convert.ToByte(s, 16); } } sPort.Write(byteSendData, 0, iSendCount); } else { sPort.Write(txtSend.Text); } } catch (System.Exception ex) { MessageBox.Show(ex.Message); } } void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { int intRecSize = sPort.BytesToRead; string strRecData; if (intRecSize != 0) { strRecData = ""; byte[] buff = new byte[intRecSize]; sPort.Read(buff, 0, intRecSize); for (int iTemp = 0; iTemp < intRecSize; iTemp++) { if (chkRecHexa.Checked) { strRecData += buff[iTemp].ToString("X2") + " "; } else { strRecData += Convert.ToChar(buff[iTemp]); } } txtRec.Text += strRecData; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if (null != sPort) { if (sPort.IsOpen) { sPort.Close(); sPort.Dispose(); sPort = null; } } } private void btnClose_Click(object sender, EventArgs e) { if (null != sPort) { if (sPort.IsOpen) { sPort.Close(); sPort.Dispose(); sPort = null; } } btnOpen.Enabled = true; btnClose.Enabled = false; } private void btnClear_Click(object sender, EventArgs e) { txtRec.Clear(); } } }소스는 이렇게 하면 되고...
com0com 을 이용해 COM4와 COM5 를 매칭.
com0com 설치 하는법 참조.
모니터링 할 Putty를 COM5 에다 연결.
테스트 준비 완료.
포트 연결.
보낼 데이터를 기록하고... "Send" 를 클릭하면...
데이터가 싸악~~~
터미널에서 키보드를 두둘기면... 아래 프로그램에 나타남....
"Rec Hexa" 가 체크 되어 있으면 전송된 값을 Hexa 코드로 보여줌.
"Snd Hexa" 가 체크 되어 있으면 Hexa 코드로 전송함.
Good ... -_-)b