Professional Documents
Culture Documents
Tut Huong Dan Lap Trinh C# Voi Rs232
Tut Huong Dan Lap Trinh C# Voi Rs232
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#
Nh hnh trn cu trc rt n gin ch ch ComboBox, Button v TextBox COM, BaudRate, Data Bits, Parity, Stop Bit l cc ComboBox
txtkq
Ca Menu
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.
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() {
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.
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
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
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
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
14
15
16
17