소년포비의 세계정복!!

[C#] 시리얼 통신 소스 코드 본문

프로그램 세상/C#

[C#] 시리얼 통신 소스 코드

소년포비 2009. 10. 9. 11:18

01.using System;  
02.using System.Drawing;  
03.using System.Windows.Forms;  
04.using System.IO.Ports;  
05.using System.Threading;  
06. 
07.namespace Serial  
08.{  
09.    public partial class Form1 : Form  
10.    {  
11. 
12.        public Form1()  
13.        {  
14.            InitializeComponent();  
15. 
16.            //텍스스 박스 초기화;  
17.            //rbText.ScrollBars = RichTextBoxScrollBars.Vertical;  
18. 
19.            //Port  
20.            cmbPort.BeginUpdate();  
21.            foreach (string comport in SerialPort.GetPortNames())  
22.            {  
23.                cmbPort.Items.Add(comport);  
24.            }  
25.            cmbPort.EndUpdate();  
26. 
27.            //SerialPort 초기 설정  
28.            SP.PortName = "COM1";  
29.            SP.BaudRate = (int)19200;  
30.            SP.DataBits = (int)8;  
31.            SP.Parity = Parity.None;  
32.            SP.StopBits = StopBits.One;  
33.            //SP.ReadTimeout = (int)100;  
34.            //SP.WriteTimeout = (int)100;  
35.        }  
36. 
37.        private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)  
38.        {  
39.            if (SP.IsOpen)  
40.            {  
41.                string str = SP.ReadLine();  
42. 
43.                str = str.Trim().Replace("\r\n", "");  
44.                lbResult.Text = str;  
45.                rbText.Text = string.Format("{0}{1}{2}", rbText.Text, "[Received]", str+"\r\n");  
46.                rbText.SelectionStart = rbText.Text.Length;  
47.                rbText.ScrollToCaret();  
48.                //rbText.Text += "[전송된 Data] " + str;  
49.                Thread.Sleep(1000);  
50.            }  
51.        }  
52. 
53.        private void btnOpen_Click(object sender, EventArgs e)  
54.        {  
55.                SP.Open();  
56.                if (SP.IsOpen)  
57.                {  
58.                    //rbText.Text = string.Format("{0}{1}", rbText.Text, "\r\n[Succed] Port Open!!");  
59.                    rbText.Text = "["+SP.PortName.ToString() +"] Port Open Connect!!";  
60.                    lbStatus.Text = "Connect!!";  
61.                    btnOpen.Visible = false;  
62.                    btnPortClose.Visible = true;  
63.                }  
64.                else 
65.                {  
66.                    //rbText.Text = string.Format("{0}{1}", rbText.Text, "\r\n[Fail] Port Open!!");  
67.                    rbText.Text = "[" + SP.PortName.ToString() + "] Port Open Failed!";  
68.                    lbStatus.Text = "[Fail] Port Open!";  
69.                    lbStatus.ForeColor = Color.Red;  
70.                }  
71.        }  
72. 
73.        private void cmbPort_SelectedIndexChanged(object sender, EventArgs e)  
74.        {  
75.            SP.PortName = cmbPort.SelectedItem.ToString();  
76.        }  
77. 
78.        private void cmbBRate_SelectedIndexChanged(object sender, EventArgs e)  
79.        {  
80.            switch (cmbBRate.SelectedIndex)  
81.            {  
82.                case 0 :  
83.                    SP.BaudRate = (int)9600;  
84.                    break;  
85.                case 1:  
86.                    SP.BaudRate = (int)14400;  
87.                    break;  
88.                case 2:  
89.                    SP.BaudRate = (int)19200;  
90.                    break;  
91.                case 3:  
92.                    SP.BaudRate = (int)38400;  
93.                    break;  
94.                case 4:  
95.                    SP.BaudRate = (int)57600;  
96.                    break;  
97.                case 5:  
98.                    SP.BaudRate = (int)115200;  
99.                    break;  
100.                default:  
101.                    SP.BaudRate = (int)19200;  
102.                    break;  
103.            }  
104.        }  
105. 
106.        private void cmbDataBits_SelectedIndexChanged(object sender, EventArgs e)  
107.        {  
108.            switch (cmbDataBits.SelectedIndex)  
109.            {  
110.                case 0:  
111.                    SP.DataBits = 8;  
112.                    break;  
113.                case 1:  
114.                    SP.DataBits = 7;  
115.                    break;  
116.                default :  
117.                    SP.DataBits = 8;  
118.                    break;  
119.            }  
120.        }  
121. 
122.        private void cmbParity_SelectedIndexChanged(object sender, EventArgs e)  
123.        {  
124.            switch (cmbParity.SelectedIndex)  
125.            {  
126.                case 0:  
127.                    SP.Parity = Parity.Even;  
128.                    break;  
129.                case 1:  
130.                    SP.Parity = Parity.Mark;  
131.                    break;  
132.                case 2:  
133.                    SP.Parity = Parity.None;  
134.                    break;  
135.                case 3:  
136.                    SP.Parity = Parity.Odd;  
137.                    break;  
138.                case 4:  
139.                    SP.Parity = Parity.Space;  
140.                    break;  
141.                default:  
142.                    SP.Parity = Parity.None;  
143.                    break;  
144.            }  
145.        }  
146. 
147.        private void cmbStopBits_SelectedIndexChanged(object sender, EventArgs e)  
148.        {  
149.            switch (cmbStopBits.SelectedIndex)  
150.            {  
151.                case 0:  
152.                    //SP.StopBits = StopBits.None;  
153.                    MessageBox.Show("이 값은 지원되지 않습니다");  
154.                    break;  
155.                case 1:  
156.                    SP.StopBits = StopBits.One;  
157.                    break;  
158.                case 2:  
159.                    SP.StopBits = StopBits.OnePointFive;  
160.                    break;  
161.                case 3:  
162.                    SP.StopBits = StopBits.Two;  
163.                    break;  
164.                default:  
165.                    SP.StopBits = StopBits.One;  
166.                    break;  
167.            }  
168.        }  
169. 
170.        private void Form1_Load(object sender, EventArgs e)  
171.        {  
172.            CheckForIllegalCrossThreadCalls = false;  
173.        }  
174. 
175.        private void btnPortClose_Click(object sender, EventArgs e)  
176.        {  
177.            SP.Close();  
178.            rbText.Text += "\r\n" + "[" + SP.PortName.ToString() + "] Port Close!!";  
179.            lbStatus.Text = "Not Connect!!";  
180.            btnOpen.Visible = true;  
181.            btnPortClose.Visible = false;  
182.        }  
183. 
184.        private void Form1_FormClosed(object sender, FormClosedEventArgs e)  
185.        {  
186.            if (SP.IsOpen)  
187.            {  
188.                SP.Close();  
189.            }  
190.        }  
191.    }  
192.} 
using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace Serial
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            //텍스스 박스 초기화;
            //rbText.ScrollBars = RichTextBoxScrollBars.Vertical;

            //Port
            cmbPort.BeginUpdate();
            foreach (string comport in SerialPort.GetPortNames())
            {
                cmbPort.Items.Add(comport);
            }
            cmbPort.EndUpdate();

            //SerialPort 초기 설정
            SP.PortName = "COM1";
            SP.BaudRate = (int)19200;
            SP.DataBits = (int)8;
            SP.Parity = Parity.None;
            SP.StopBits = StopBits.One;
            //SP.ReadTimeout = (int)100;
            //SP.WriteTimeout = (int)100;
        }

        private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (SP.IsOpen)
            {
                string str = SP.ReadLine();

                str = str.Trim().Replace("\r\n", "");
                lbResult.Text = str;
                rbText.Text = string.Format("{0}{1}{2}", rbText.Text, "[Received]", str+"\r\n");
                rbText.SelectionStart = rbText.Text.Length;
                rbText.ScrollToCaret();
                //rbText.Text += "[전송된 Data] " + str;
                Thread.Sleep(1000);
            }
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
                SP.Open();
                if (SP.IsOpen)
                {
                    //rbText.Text = string.Format("{0}{1}", rbText.Text, "\r\n[Succed] Port Open!!");
                    rbText.Text = "["+SP.PortName.ToString() +"] Port Open Connect!!";
                    lbStatus.Text = "Connect!!";
                    btnOpen.Visible = false;
                    btnPortClose.Visible = true;
                }
                else
                {
                    //rbText.Text = string.Format("{0}{1}", rbText.Text, "\r\n[Fail] Port Open!!");
                    rbText.Text = "[" + SP.PortName.ToString() + "] Port Open Failed!";
                    lbStatus.Text = "[Fail] Port Open!";
                    lbStatus.ForeColor = Color.Red;
                }
        }

        private void cmbPort_SelectedIndexChanged(object sender, EventArgs e)
        {
            SP.PortName = cmbPort.SelectedItem.ToString();
        }

        private void cmbBRate_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cmbBRate.SelectedIndex)
            {
                case 0 :
                    SP.BaudRate = (int)9600;
                    break;
                case 1:
                    SP.BaudRate = (int)14400;
                    break;
                case 2:
                    SP.BaudRate = (int)19200;
                    break;
                case 3:
                    SP.BaudRate = (int)38400;
                    break;
                case 4:
                    SP.BaudRate = (int)57600;
                    break;
                case 5:
                    SP.BaudRate = (int)115200;
                    break;
                default:
                    SP.BaudRate = (int)19200;
                    break;
            }
        }

        private void cmbDataBits_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cmbDataBits.SelectedIndex)
            {
                case 0:
                    SP.DataBits = 8;
                    break;
                case 1:
                    SP.DataBits = 7;
                    break;
                default :
                    SP.DataBits = 8;
                    break;
            }
        }

        private void cmbParity_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cmbParity.SelectedIndex)
            {
                case 0:
                    SP.Parity = Parity.Even;
                    break;
                case 1:
                    SP.Parity = Parity.Mark;
                    break;
                case 2:
                    SP.Parity = Parity.None;
                    break;
                case 3:
                    SP.Parity = Parity.Odd;
                    break;
                case 4:
                    SP.Parity = Parity.Space;
                    break;
                default:
                    SP.Parity = Parity.None;
                    break;
            }
        }

        private void cmbStopBits_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cmbStopBits.SelectedIndex)
            {
                case 0:
                    //SP.StopBits = StopBits.None;
                    MessageBox.Show("이 값은 지원되지 않습니다");
                    break;
                case 1:
                    SP.StopBits = StopBits.One;
                    break;
                case 2:
                    SP.StopBits = StopBits.OnePointFive;
                    break;
                case 3:
                    SP.StopBits = StopBits.Two;
                    break;
                default:
                    SP.StopBits = StopBits.One;
                    break;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
        }

        private void btnPortClose_Click(object sender, EventArgs e)
        {
            SP.Close();
            rbText.Text += "\r\n" + "[" + SP.PortName.ToString() + "] Port Close!!";
            lbStatus.Text = "Not Connect!!";
            btnOpen.Visible = true;
            btnPortClose.Visible = false;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (SP.IsOpen)
            {
                SP.Close();
            }
        }
    }
}
C#시리얼 통신 소스 코드입니다....!!
프로그램은 http://bluene.net/blog/514 로 이동하시면 다운로드 받으 실 수 있습니다.

'프로그램 세상 > C#' 카테고리의 다른 글

C# API 사이트  (0) 2009.10.11
Chart Control  (0) 2009.10.09
[C#] 주민번호체크  (0) 2009.10.09
[C#] FTP 업로드  (0) 2009.10.08
[C#] 멀티 업로드  (0) 2009.10.08