You are on page 1of 17

Ng ng Hin Hc Vin Hi Qun 2011

HNG DN VIT PHN MM TEST RS232 CHO VI IU KHIN VI VISUAL STUDIO C# 2008

Cho cc bn, hm nay ngy 05/08/2011, ang ngh php v nh bun qu khng c vic g lm. Nn lm bi TUT hng dn anh em newbie si C# 2008 giao tip vi vi iu khin. Nh chng ta bit y chi vi iu khin m ko giao tip vi PC th ch c g phi ni c. Trn cc din n cng bn lun v vn ny kh nhiu nht l vi VB6, VC++ Nhng vi C# th c l l hi t. t ra th ti cng au u khi mi lm v ko tm thy ti liu ng . C l im mnh ca C# chng ta ko cn phi ni n na. Bi TUT s i su vo phn giao tip cn phn C# cc bn nn c qua v n. Ni chung l n kh d tip thu so vi thng VB c k v VC++ phc tp. Bi TUT vit cho newbie nn ti rt c gng lm cho n chi tit cc bn d hiu hn. Trc khi vo chng ta s im qua 1 s ni dung trong TUT ny: SerialPort vi C# 1 s hiu ng (phn ng) ca C#

1. u tin l m VC# ln, v to 1 project mi. File / New / Project

Ng ng Hin Hc Vin Hi Qun 2011


Chn Windows Forms Application v t tn cho chng. a n cho chng ta 1 giao din ca lp trnh Form. Ging nh cc bn lm bng VB vy

2. Tip n l chng ta s xy dng giao din nh hnh bn di

Nh hnh trn cu trc rt n gin ch ch ComboBox, Button v TextBox COM, BaudRate, Data Bits, Parity, Stop Bit l cc ComboBox

Ng ng Hin Hc Vin Hi Qun 2011


Kt ni, Ngt, Xa, Thot v SEND l cc Button Cn li 2 ng trng c vin xung quanh chnh l cc TextBox Chng ta s tin hnh to v t tn cho chng.
ToolBox ch cc Control. y s dng Common Control Button lm nt nhn Combox hp iu khin cha cc Text

TextBox ch vn bn, dung hin th d liu nhn v truyn i

V nh phi t tn cho chng sau mi ln ko ra

Ng ng Hin Hc Vin Hi Qun 2011


Properties : Ni thay i cc thuc tnh ca i tng. Tn s c t y. y chnh l tn ca i tng.

Ko xung bn di, t tn Text. Tn ny s hin th ln Button

Tng t nh vy vi cc phn cn li, chng ta s xy dng c giao din

Ng ng Hin Hc Vin Hi Qun 2011

Thm 1 cht mm, mui chng ta s c giao din nh hnh bn di

Giao din nh vy l xong, phn quan trng chnh l code

Ng ng Hin Hc Vin Hi Qun 2011


Trc khi n code ta s gii thch ni dung ca giao din cng nh tn ca cc control cho tin trong vic tham kho code.

Ci ny l lch cho p thi

cbCom cbRate cbBits cbParity cbBit txtSend

txtkq

Ca Menu

btKetNoi btXoa btNgat btThoat

btSend

Ca StatusStrip1

3. Phn CODE
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; // Thm 3 em ny vo l OK, si SerialPort using System.IO; using System.IO.Ports; using System.Xml;

Chuyn sang phn code bng cch nhp phi chn viewCode, chng ta s thm 2 th vin IO v xml vo.

namespace HIENCLUBVN_RS232 { public partial class Form1 : Form { SerialPort P = new SerialPort(); // Khai bo 1 Object SerialPort mi. string InputData = String.Empty; // Khai bo string buff dng cho hin th d liu sau ny.

Ng ng Hin Hc Vin Hi Qun 2011


delegate void SetTextCallback(string text); // Khai bao delegate SetTextCallBack voi tham so string

Trc mt bn ch quan tm n cu lnh


// Khai bo 1 Object SerialPort mi.

SerialPort P = new SerialPort();

Bc tip l chng ta to d liu cho cc comboBox, bc ny bn nn copy v dn vo project ca mnh nh thay tn cc combo cho ng vi tn m bn t.

public Form1() { InitializeComponent(); // Ci t cc thng s cho COM // Mng string port ch tt c cc cng COM ang c trn my tnh string[] ports = SerialPort.GetPortNames(); // Thm ton b cc COM tm c vo combox cbCom cbCom.Items.AddRange(ports); // S dng AddRange thay v dng foreach P.ReadTimeout = 1000; // Khai bo hm delegate bng phng thc DataReceived ca Object SerialPort; // Ci ny khi c s kin nhn d liu s nhy n phng thc DataReceive // Nu ko hiu on ny bn c th tm hiu v Delegate, cn ko c COPY . Ko cn quan tm P.DataReceived += new SerialDataReceivedEventHandler(DataReceive); // Ci t cho BaudRate string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" }; cbRate.Items.AddRange(BaudRate); // Ci t cho DataBits string[] Databits = { "6", "7", "8" }; cbBits.Items.AddRange(Databits); //Cho Parity string[] Parity = { "None", "Odd", "Even" }; cbParity.Items.AddRange(Parity); //Cho Stop bit string[] stopbit = { "1", "1.5", "2" }; cbBit.Items.AddRange(stopbit); // My ci ny kh n gin, bn ng hi v sao. cho nhanh. :D }

c COPY paste

Bn nn lu l :
public Form1() {

Ng ng Hin Hc Vin Hi Qun 2011


InitializeComponent();

c to ra trc bi C#, chng ta Copy, Paste th phi sau hm khi to


InitializeComponent();

Ni chung, c bn n y l xong phn khi to cc combox cho SerialPort ri. n y bn c th ci t cc thng s cho rs232 bng tay, nu lm ci ny th rs232 c th gi l Full, v ta c th hon ton lm ch n v nhng ci nh nht.
Ri vo y. Chnh l cc s kin m 1 combo c th c.

Nhp chut vo y

p chut vo y. Lc u n ko c ch, p vo s c.

Lc p vo ta to ra 1 s kin l khi thay i cc gi tr trn combo th chng s c gi n hm phc v, v cng vic ca chng ta s l y.
private void cbCom_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); // Nu ang m Port th phi ng li } P.PortName = cbCom.SelectedItem.ToString(); // Gn PortName bng COM chn }

Nh v d trn l s gi n hm gn gi tr cng ang chn cho PortName Tng t nh vy chng ta s lm cho ton b comboBox, cc bn c th tham kho code di hiu r hn.

private void cbCom_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) {

Ng ng Hin Hc Vin Hi Qun 2011


P.Close(); // Nu ang m Port th phi ng li } P.PortName = cbCom.SelectedItem.ToString(); // Gn PortName bng COM chn } private void cbRate_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } P.BaudRate = Convert.ToInt32(cbRate.Text); } private void cbBits_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } P.DataBits = Convert.ToInt32(cbBits.Text); } private void cbParity_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } // Vi thng Parity hn lng nhng. Nhng cng OK thi. ^_^ switch (cbParity.SelectedItem.ToString()) { case "Odd": P.Parity = Parity.Odd; break; case "None": P.Parity = Parity.None; break; case "Even": P.Parity = Parity.Even; break; } } private void cbBit_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } switch (cbBit.SelectedItem.ToString()) { case "1": P.StopBits = StopBits.One; break;

Ng ng Hin Hc Vin Hi Qun 2011


case "1.5": P.StopBits = StopBits.OnePointFive; break; case "2": P.StopBits = StopBits.Two; break; } }

Vy l xong. Cng vic khi to hon tt, cn by gi l cng vic quan trng nht. chnh l xy dng cc hm, th tc cho vic nhn v truyn d liu qua COM
// Hm ny c s kin nhn d liu gi n. Mc ch hin th thi private void DataReceive(object obj, SerialDataReceivedEventArgs e) { InputData = P.ReadExisting(); if (InputData != String.Empty) { // txtIn.Text = InputData; // Ko dng c nh th ny v khc threads . SetText(InputData); // Chnh v vy phi s dng y quyn ti y. Gi delegate khai bo trc . } } // Hm ca em n l y. ng hi v sao li th. private void SetText(string text) { if (this.txtkq.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); // khi to 1 delegate mi gi n SetText this.Invoke(d, new object[] { text }); } else this.txtkq.Text += text; } // Ton b ci ny bn nn COPY, n cng lm ti au u. :D

n y l phn nhn xong, tip n phn gi d liu i. Bn nhp p vo button SEND, ly s kin ri vit hm theo bn di
// n hm gi data xung COM private void btSend_Click(object sender, EventArgs e) { if (P.IsOpen) { if (txtSend.Text == "") MessageBox.Show("Cha c d liu!","Thng Bo"); else P.Write(txtSend.Text); } else MessageBox.Show("COM cha m.", "Thng bo", MessageBoxButtons.OK, MessageBoxIcon.Error); txtSend.Clear(); } // n y coi nh mi vic ngon lnh cnh o ri.

10

Ng ng Hin Hc Vin Hi Qun 2011


// chn tin trong vic Test th chng ta s lm thm bc na. cho my ci thng s hay dng c chn. Ko cn thit nu bn cm thy ko cn.

p chut vo thanh tiu ly s kin Load. Hm ny s c gi ngay khi khi ng.


private void Form1_Load(object sender, EventArgs e) // s c gi khi m chng trnh. { cbCom.SelectedIndex = 0; // chn COM c tm thy u tin cbRate.SelectedIndex = 3; // 9600 cbBits.SelectedIndex = 2; // 8 cbParity.SelectedIndex = 0; // None cbBit.SelectedIndex = 0; // None // Hin th Status cho Pro t status.Text = "Hy chn 1 cng COM kt ni."; }

Bc cui cng l gii quyt 4 button cn li kt ni, ngt kt ni, thot khi chng trnh v xa d liu c. Bc ny kh n gin bn ch vic nhp p vo tng button ly s kin, c th tham kho code di.
private void btKetNoi_Click(object sender, EventArgs e) { try { P.Open(); btNgat.Enabled = true; btKetNoi.Enabled = false; // Hin th Status status.Text = "ang kt ni vi cng " + cbCom.SelectedItem.ToString(); } catch (Exception ex) { MessageBox.Show("Khng kt ni c.","Th li",MessageBoxButtons.OK,MessageBoxIcon.Error); } } private void btNgat_Click(object sender, EventArgs e) { P.Close(); btKetNoi.Enabled = true; btNgat.Enabled = false; // Hin th Status

11

Ng ng Hin Hc Vin Hi Qun 2011


status.Text = " Ngt Kt Ni"; } private void btThoat_Click(object sender, EventArgs e) { DialogResult kq = MessageBox.Show("Bn thc s mun thot", "HIENCLUBVN", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (kq == DialogResult.Yes) { MessageBox.Show("Cm n bn s dng chng trnh","HIENCLUBVN"); this.Close(); } } private void btXoa_Click(object sender, EventArgs e) { txtkq.Text = ""; txtSend.Text = ""; }

n y l mi vic ngon lnh cnh o ri. c nhn ha chng trnh ca mnh bn c th thm cc label nh v d l : HC VIN HI QUN hay l menu nh Tc Gi v 1 s hiu ng khc mang tnh chuyn nghip Profectional hn :D - Bng cch l thm 1 project mi: Project / Add Windows Form V to n theo mu l mnh u . Cui cng l thm hm s kin khi nhn vo tc gi nh code di.
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.ShowDialog(); } // Lu : Tc Gi l 1 control ca ToolStripMenu bn c th li n ra t Toolbox

12

Ng ng Hin Hc Vin Hi Qun 2011

Lu : Nhn F6 bin dch li trong qu trnh code v F5 chy chng trnh. 4. Ton b code tin tham kho
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; // Thm 3 em ny vo l OK, si SerialPort using System.IO; using System.IO.Ports; using System.Xml; // Bt u code namespace HIENCLUBVN_RS232 { public partial class Form1 : Form { SerialPort P = new SerialPort(); // Khai bo 1 Object SerialPort mi. string InputData = String.Empty; // Khai bo string buff dng cho hin th d liu sau ny. delegate void SetTextCallback(string text); // Khai bao delegate SetTextCallBack voi tham so string public Form1() { InitializeComponent(); // Ci t cc thng s cho COM // Mng string port ch tt c cc cng COM ang c trn my tnh string[] ports = SerialPort.GetPortNames(); // Thm ton b cc COM tm c vo combox cbCom cbCom.Items.AddRange(ports); // S dng AddRange thay v dng foreach P.ReadTimeout = 1000; // Khai bo hm delegate bng phng thc DataReceived ca Object SerialPort; // Ci ny khi c s kin nhn d liu s nhy n phng thc DataReceive // Nu ko hiu on ny bn c th tm hiu v Delegate, cn ko c COPY . Ko cn quan tm

13

Ng ng Hin Hc Vin Hi Qun 2011


P.DataReceived += new SerialDataReceivedEventHandler(DataReceive); // Ci t cho BaudRate string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" }; cbRate.Items.AddRange(BaudRate); // Ci t cho DataBits string[] Databits = { "6", "7", "8" }; cbBits.Items.AddRange(Databits); //Cho Parity string[] Parity = { "None", "Odd", "Even" }; cbParity.Items.AddRange(Parity); //Cho Stop bit string[] stopbit = { "1", "1.5", "2" }; cbBit.Items.AddRange(stopbit); // My ci ny kh n gin, bn ng hi v sao. c COPY paste cho nhanh. :D } private void cbCom_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); // Nu ang m Port th phi ng li } P.PortName = cbCom.SelectedItem.ToString(); // Gn PortName bng COM chn } private void cbRate_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } P.BaudRate = Convert.ToInt32(cbRate.Text); } private void cbBits_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } P.DataBits = Convert.ToInt32(cbBits.Text); } private void cbParity_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close();

14

Ng ng Hin Hc Vin Hi Qun 2011


} // Vi thng Parity hn lng nhng. Nhng cng OK thi. ^_^ switch (cbParity.SelectedItem.ToString()) { case "Odd": P.Parity = Parity.Odd; break; case "None": P.Parity = Parity.None; break; case "Even": P.Parity = Parity.Even; break; } } private void cbBit_SelectedIndexChanged(object sender, EventArgs e) { if (P.IsOpen) { P.Close(); } switch (cbBit.SelectedItem.ToString()) { case "1": P.StopBits = StopBits.One; break; case "1.5": P.StopBits = StopBits.OnePointFive; break; case "2": P.StopBits = StopBits.Two; break; } } // Hm ny c s kin nhn d liu gi n. Mc ch hin th thi private void DataReceive(object obj, SerialDataReceivedEventArgs e) { InputData = P.ReadExisting(); if (InputData != String.Empty) { // txtIn.Text = InputData; // Ko dng c nh th ny v khc threads . SetText(InputData); // Chnh v vy phi s dng y quyn ti y. Gi delegate khai bo trc . } } // Hm ca em n l y. ng hi v sao li th. private void SetText(string text) { if (this.txtkq.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); // khi to 1 delegate mi gi n SetText this.Invoke(d, new object[] { text });

15

Ng ng Hin Hc Vin Hi Qun 2011


} else this.txtkq.Text += text; } // Ton b ci ny bn nn COPY, n cng lm ti au u. :D // n hm gi data xung COM private void btSend_Click(object sender, EventArgs e) { if (P.IsOpen) { if (txtSend.Text == "") MessageBox.Show("Cha c d liu!","Thng Bo"); else P.Write(txtSend.Text); } else MessageBox.Show("COM cha m.", "Thng bo", MessageBoxButtons.OK, MessageBoxIcon.Error); txtSend.Clear(); } // n y coi nh mi vic ngon lnh cnh o ri. // chn tin trong vic Test th chng ta s lm thm bc na. cho my ci thng s // hay dng c chn. Ko cn thit nu bn cm thy ko cn. private void Form1_Load(object sender, EventArgs e) // s c gi khi m chng trnh. { cbCom.SelectedIndex = 0; cbRate.SelectedIndex = 3; // 9600 cbBits.SelectedIndex = 2; // 8 cbParity.SelectedIndex = 0; // None cbBit.SelectedIndex = 0; // None // Hin th Status cho Pro t status.Text = "Hy chn 1 cng COM kt ni."; } private void btKetNoi_Click(object sender, EventArgs e) { try { P.Open(); btNgat.Enabled = true; btKetNoi.Enabled = false; // Hin th Status status.Text = "ang kt ni vi cng " + cbCom.SelectedItem.ToString(); } catch (Exception ex) { MessageBox.Show("Khng kt ni c.","Th li",MessageBoxButtons.OK,MessageBoxIcon.Error); } } private void btNgat_Click(object sender, EventArgs e) { P.Close(); btKetNoi.Enabled = true; btNgat.Enabled = false;

16

Ng ng Hin Hc Vin Hi Qun 2011


// Hin th Status status.Text = " Ngt Kt Ni"; } private void btThoat_Click(object sender, EventArgs e) { DialogResult kq = MessageBox.Show("Bn thc s mun thot", "HIENCLUBVN", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (kq == DialogResult.Yes) { MessageBox.Show("Cm n bn s dng chng trnh","HIENCLUBVN"); this.Close(); } } private void btXoa_Click(object sender, EventArgs e) { txtkq.Text = ""; txtSend.Text = ""; } private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.ShowDialog(); } } }

17

You might also like