System.IO.Ports.SerialPort
이 클래스를 사용 하 여 직렬 포트 파일 리소스를 제어 합니다. 이 클래스는 동기 및 이벤트 구동 I/O, 핀 및 중단 상태에 대 한 액세스 및 직렬 드라이버 속성에 대 한 액세스를 제공합니다. 또한 내부에서이 클래스의 기능을 래핑할 수 있습니다 Stream 개체를 통해 액세스할 수는 BaseStream 속성을 래핑하거나 스트림을 사용 하는 클래스에 전달 합니다.
Example
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();
}
}
}
See also
Favorite site
- [https://msdn.microsoft.com/ko-kr/library/system.io.ports.serialport(v=vs.110.aspx MSDN - SerialPort 클래스]
- C# - RS232 예제 소스 및 실행파일