You are on page 1of 8

ng dng C# trong giao tip PC vi MCU November 20, 2009

I. Gii thiu c tnh phn mn v thit b Mc ch ti : ng dng ngn ng lp trnh C# to chng trnh giao tip gia thit b Vi iu Khin vi My Tnh. Bi bo co nhm gii thiu phng php giao tip . thc hin giao tip truyn nhn gia PC vi thit b MCU th C# phi c h tr bi cng c NetFrameWork 2.0 cung cp c tnh truyn nhn ni tip (Serial Communication). c tnh ny trong NetFrameWork 2 c tn l : namespace system.IO.Ports bao gm nhiu lp trong quan trng nht l lp SerialPort. Lp ny cung cp vic ng b v kim sot cc s kin ca I/O qua cc chn ca thit b cng Com . Cc kh nng c h tr bi system.IO.Ports : Kh nng truy xut cng ni tip trn PC. Giao tip vi cc thit b ngoi vi qua cng ni tip .(Serial Port). c tnh truyn dn : dng giao din RS 232 chun DB9 thc hin giao tip ch FullDuplex.

- RTS & DTR l ng ra tn hiu s,c th c t bng tay. - DCD, DSR, CTS, and RI l nhng bit vo v ch c th c - RX & TX hai chn ny nhm kim sot UART v khng c t . - Ngun in p cng l +-15V v ng ra 2 khong +5 to +15 v -5 to -15 v in p ng vo l 2 khong +3 to +15 v -3 to -15. in p ng vo khong -3 n +3V v ng ra khong -5 n +5V l vng khng xc nh - Qui nh p cc mc 1 v 0 cho khong in p.

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 1

ng dng C# trong giao tip PC vi MCU November 20, 2009

II. Cc bc lp trnh phn mn : 1. Xc nh c ch giao tip qua RS 232, thng s ca cng COM : 1. 2. 3. 4. 5. a ch cng (Port Name). Tc baud (baudrate), S bt trong mt khung d liu (data bits), S bit dng gia cc khung d liu (stop bit), Bt kim tra chn l (parity bit).

i vi vic giao tip th quan tm n giao thc truyn d liu trong ti dng chun : 9600,8N1 (tc tc baud 9600 bps, 8 bit data, no parity v 1 bit stop). Trong phn mn c th s dng c vi cng o (bng phn mn Virtual Com) v c cng Com tht, nn c ch ly thng tin ca cng Com v giao tip qua cng no th do ngi dng la chn qua ch Select port 2. Xy dng giao din bng C# Windows Form trong b Visual Studio 2005 :

Chn ng dng Windows Application :

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 2

ng dng C# trong giao tip PC vi MCU November 20, 2009

Xy dng giao din ngi dng nh sau :

Trong c s dng chc nng Serial Port trong Toolbox to thuc tnh giao tip cng Com trong chng trnh. Chn cc ch mc nh cho cng Com nh : tc Baud 9600 bps, 8 bit data, no parity v 1 bit stop phn properties :

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 3

ng dng C# trong giao tip PC vi MCU November 20, 2009

Sau khi thit k giao din nh sau :

To giao din cho phn About v Help :

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 4

ng dng C# trong giao tip PC vi MCU November 20, 2009

3.Vit chng trnh giao tip a. a namespace vo chng trnh.


using System.IO.Ports;

b. Khi to cc cng com c trong h thng. trong h thng c th s dng cng com o hay com tht ca thit b nn phi qut tt c cc cng com c trong h thng hin ti. Mt s hm cn ch nh : SerialPort.IsOpen(): Tr li trang thi ca cng l ang ng hay m. SerialPort.Open(): M cng vi thng s ci t. SerialPort.Close(): ng cng.
public Form1() { InitializeComponent(); string[] ports = SerialPort.GetPortNames(); // qut tt c cc port c kt ni vo PC. foreach (string port in ports) // a tt c cc port vo mc chn combobox. { cmbBoxPort.Items.Add(port); } }

Do cc thng s ca 1 cng com c thit lp mc nh nn ch cn chn cng ( cc a ch nh com1: 3f8 ) kt ni .


private void cmbBoxPort_SelectedIndexChanged(object sender, EventArgs e) { if (port.IsOpen) port.Close(); port.PortName = cmbBoxPort.SelectedItem.ToString(); // lu nhn tn port c chn stsStatusPort.Text = "You choose :" + port.PortName + ": 9600,8N1"; MessageBox.Show ("You choose : " + port.PortName + " ? "," Note :"); try { port.Open(); // thc hin m port khi c chn } catch // nu khng thc hin m port c th a ra thng bo li { MessageBox.Show("Serial port " + port.PortName + " cannot be opened!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); cmbBoxPort.SelectedText = ""; stsStatusPort.Text = "Select serial port!"; } }

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 5

ng dng C# trong giao tip PC vi MCU November 20, 2009


c.Sau

khi chn cng com kt ni. Thc hin giao tip ly thng tin t thit b truyn ln v a thng tin xung thit b ( ti l mt ng dng ly thng tin 1 byte t vdk a ln v truyn 1 byte xung vdk.) thc hin c vic c thng tin t VDK a ln c 2 cch sau : Thng xuyn kim tra cng xem d liu c c truyn n khng ( kim tra th dng 1 Timer nh thi gian ) Phi bt c s kin d liu n, khi d liu n ta gi hm x l. Trong ng dng dng pp2 l ly s kin d liu c truyn n bng SerialDataReceivedEvent. Khi c s kin ny ta s c v x l d liu t b m cng .
this.port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.port_DataReceived_1);

trong port_DataReceived_1 l hm s c gi n khi c s kin d liu c nhn. Mt s hm c d liu t b m : SerialPort.ReadExisting (): c mt string t b m cng . SerialPort.ReadChar(): c mt gi tr kiu char t b m cng. SerialPort.ReadByte(): c mt gi tr kiu Byte t b m cng.
// s kin nhn d liu trong buffer v ly thng tin d liu . public void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e) { InputData = port.ReadExisting(); // thc hin c mt string t b m cng if (InputData != String.Empty) { SetText(InputData); // gi hm xut d liu . } } public void SetText(string text) { if (this.temp.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.temp.Text = ConvertToHex(text); // m c xut ra l m ASCII } } public string ConvertToHex(string asciiString) // thc hin chuyn ASCII sang Hex hin th {

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 6

ng dng C# trong giao tip PC vi MCU November 20, 2009


string hex = ""; foreach (char c in asciiString) { int tmp = c; hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString())); } return hex; }

Kt qu sau khi a v chui hex s hin th thng tin nhit o c


///////////////////////////////////////////////////////////////////////////// // truyn thng tin xung thit b VDK

S dng hm SerialPort.WriteLine . s kin truyn ny s c kch hot khi c nt bm ca ngi dng.


private void btnon_Click(object sender, EventArgs e) { port.WriteLine("a"); stsdevice.Show(); stsdevice.Text = "Device is opened "; //cc hm x l cc s kin nt bm private void exit_Click(object sender, EventArgs e) { MessageBox.Show("Do you want to Close the MiniApp ? "," Exit "); port.Close(); Close(); } About a = new About(); Help b = new Help(); private void about_Click(object sender, EventArgs e) { a.ShowDialog(); } private void Info_Click(object sender, EventArgs e) { b.ShowDialog(); } /////////////////////////////////////////////////////////////

X l vic truyn d liu khi c s kin bm


private void btnon_Click(object sender, EventArgs e) { port.WriteLine("a"); stsdevice.Show(); stsdevice.Text = "Device is opened "; } private void btnoff_Click(object sender, EventArgs e) {

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 7

ng dng C# trong giao tip PC vi MCU November 20, 2009


port.WriteLine("b"); stsdevice.Show(); stsdevice.Text = "Device is interrupted ";

Thit lp ch t nhit t ng : Khai bo ton cc : public int set;


public void btnset_Click(object sender, EventArgs e) { timerset.Enabled = true; timerset.Start(); } private void timerset_Tick(object sender, EventArgs e) { set = int.Parse(settemp.Text); if (set > 64) { timerset.Enabled = false; MessageBox.Show(" Temperature < 64 ", " Report !!! "); return ; } setsts.Enabled = true; setsts.Text = settemp.Text; int b = int.Parse(temp.Text); if (set == b) { timerset.Enabled = false; MessageBox.Show(" Temperature is balance ", " Report !!! "); } if (settemp.Text.Trim().Length == 0) return; } private void btnreset_Click(object sender, EventArgs e) { set = 0; setsts.Clear(); }

Mc ch t nhit cho thit b, khi t 1 nhit no th gi tr t s c lu li v so snh vi nhit do thit b truyn ln, khi cn bng th tc ng vo thit b, c th l tc ng vo thit b qut Do thit k ca mch in v truyn d liu ca VDK nn nhit t cn nh hn < 64 hin th tt

Phm Vn Khoa K Thut My Tnh 06 H S Phm K Thut TP HCM

Trang 8

You might also like