Lap Trinh Serial Port Trong C Sharp

Embed Size (px)

Citation preview

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    1/27

    Tutorial Tranceiver data use COM portTrong v d ny, ti khng i su vo l thuyt cu trc cng CO !c"c #$n c% th& ti'(c cu trc c"c th)nh ghi trong v* +-T i.u khi&n cng CO/, ' h01ng d2n th3chnh c th& l45 tr6nh t7ng #01c t7ng #01c s8 dng 9isu)l C:;??@;

    B tr chn ca cng COM

    Hnh 1

    Cc thng s cng COM cn lu !

    Thng s ca cng COM cn quan tm l:1. a ch cng !"#t $am%&.'. Tc () *au+ *au+#at%&,-. */t t#"ng m)t 0hung + l23u +ata *2ts&,

    4. *2t +5ng g2a c6c 0hung + l23u st"7 *2t&,8. 9/t 02m t#a ch;n l< 7a#2t= *2t&.

    Thng th>?ng +%@aut& c2 (At : !"#t $am%B COM1 (a ch m H%Da: -@E&,*au+#at% BFG, +ata *2ts B E, st"7 *2t B 1, 7a#2t= B n"n%.

    C" ch# $%t ta& c'ng ()andsha*ing+!

    CI 4 l"J2 : $"n%, KO$LKO, CTLNT, CTLNT KO$LKO

    .!h thu)c P" t5ng cQ chR *St ta= m cI c6ch n2 += 0h6c nhau.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    2/27

    Hnh '

    ?2 ta s +ng cQ chR han+sha02ng: $"n%, P PU= ch cn - += n2 nh>hnh '.

    $h> PU= PV 7hn c"nn%ct%# l D"ng. Ta (2 P" lU7 t#nh.1. !#"g#amsWM2c#"s"@t X2sual tu+2" '8W M2c#"s"@t X2sual tu+2" '8.YKY.'. $Ru ln (u t2Zn *Jn chJ= M2c#"s"@t X2sual tu+2" '8 th2 *[ng h23n #a l:

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    3/27

    Hnh 4-. \]a ch^n X2sual C_ `%P%l"7m%nt %tt2ngsW 2ch nbt ta#t X2sual tu+2":

    Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+ED8EG.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    4/27

    4.

    Hnh 88. Ch^n 2l%W $%d W !#"e%ct:Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+GE1D4G4.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    5/27

    G.

    Hnh Gf. T#"ng ca s T%m7lat%s ch^n 2n+"dns 77l2cat2"n.W Tha= (2 tZn 7#"e%ct P P

    t#/ l>u 7#"e%ct nh> P/ + !#"e%ct $am%: COM t#anc%2P%#.\"catu2"n: Y:i$amj ThangiCha7% !#"e%ct W Cl2c0 OW Mn hnh th2Rt 0RDukt h23n:

    Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+ED8EG.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    6/27

    E.

    Hnh fF. C6c (2Vu 0h2n cha t#"ng T""l*"D $Ru 0hng thk= Dukt h23n t#Zn mn hnh th2Rt

    0R *Jn cI th P" X2%d WT""l*"D&.1. Th2Rt 0R g2a" +23n:

    Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+ED1-G.

    11.

    Hnh E1'. Mun tha= (2 tZn cng nh> c6c thu)c t/nh ca (2 t>ng ta l]a ch^n (2 t>ng

    cl2c0 chu)t 7h[2 ch^n !#"7%#t2%s.Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+ED8EG.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    7/27

    1-.

    Hnh F14. T#"ng T""l9"D ch^n 2Vu 0h2n %#2al!"#t 0o" P" ca s "#m1W Kukt h23n (2

    t>ng %#2al!"#t1 p 7h/a +>2.Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+ED8EG.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    8/27

    18.

    Hnh 11G. X nhng thu)c t/nh ca (2Vu 0h2n s%#2al!"#t1 p gIc +>2 *Zn t#62: r (= ta cI

    th c2 (At c6c thng s ca cng COM. c6c tham s p t#ang th62 +%@ault:9au+#at%BFG, +ata*2tsBE, han+sha0%Bn"n%, st"7*2t B "n%, 7a#2t= B n"n%.!"#tnam% BCOM1

    T#"ng X2sual tu+2" '8 ( D= +]ng l7 (2 t>ng %#2al!"#t P2 (= ( c6c hm h t#ch" 7ho7 ng>?2 +ng cI th t6c ()ng (Rn cng COM m)t c6c + +ng.

    M,t s h-. c" $/n trong 0erial1ort th2ng d3ng! %#2al!"#t.vsO7%n&: T#[ lJ2 t#ang th62 ca cng l (ang (Ing ha= mp. %#2al!"#t.O7%n&: Mp cng P2 thng s ( c2 (At. %#2al!"#t.Cl"s%&: Ing cng. %#2al!"#t.#2t%\2n%t#2ng +ata&: T#u=Vn m)t st#2ng Dung *) (3m cng (

    t#u=Vn (2. %#2al!"#t.N%a+YD2st2ng &: ^c m)t st#2ng t5 *) (3m cng . %#2al!"#t.N%a+Cha#&: ^c m)t g26 t# 02u cha# t5 *) (3m cng. %#2al!"#t.N%a+9=t%&: ^c m)t g26 t# 02u 9=t% t5 *) (3m cng.

    M,t s lu v4 thu5t gi/i ca ch"ng tr6nh!

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    9/27

    Hu" tr6nh truy.n:

    wu6 t#nh t#u=Vn th (Qn g2an, P 0h2 n" ng>?2 +ng cl2c0 nbt t#u=Vn th + l23u m2 (>ct#u=Vn (2:

    T#"ng "m1.csx`%s2gny cl2c0 (b7 P" nbt T#ansm2t t#"ng "#m1: X chzn ("Jn c"+% sauPa" hm P5a tJ" #a:

    7#2Pat% P"2+ 9utt"n{T#ans{Cl2c0"*e%ct s%n+%#, YP%nt#gs %&|2@s%#2al!"#t1.vsO7%n&|s%#2al!"#t1.#2t%\2n%T*"D{T#ans.T%Dt&}~%ls%

    |M%ssag%9"D.h"dC"ng chua m" Ha= m" c"ng,Chu =&}~~

    Hu" tr6nh nh4n dI liJu:

    wu6 t#nh nhUn + l23u l #Sc #2 hQn m)t chbt, P + l23u (Rn lbc n" l ch>a *2Rt.CI ha2c6ch ( th]c h23n qu6 t#nh qu6 t#nh t#u=Vn:

    C6ch m)t: Th>?ng Du=Zn 02m t#a cng D%m + l23u cI (>c t#u=Vn (Rn 0hng. C6ch ha2: !h[2 *St (>c s] 023n + l23u (Rn, 0h2 + l23u (Rn ta g^2 hm s l.

    X2 c6ch 1 ta s +ng m)t T2m%# ngSt th?2 g2an, c sau m)t th?2 g2an nhkt (nh m ta c2(At T2m%#&hm 02m t#a P s l s (>c g^2.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    10/27

    H2nh11

    X2 c6ch ' ta s +ng s] 023n GKri)lL)t)-KcKivKd=vKnt. h2 cI s] 023n n= ta s (^c PD l + l23u.

    T#"ng ' c6ch t#Zn ta thk= nga= c6ch th ha2 l (Qn g2[n P thuUt t"6n ch>Qng t#nh (Qng2an hQn, t2Rt 023m (>c th?2 g2an D l. `" PU= t2 D2n g22 th23u c6ch th ' c6ch 1 c6c

    *Jn t] tm h2u. O&.

    Ch^n "m1.csx`%s2gny. Cl2c0 chu)t 7h[2 P" "#m1WX2%d c"+%W "m1.cs.ThZm c6c ("Jn c"+% sau:

    ThZm t#"ng 7hn us2ng: using GystK';MO;Norts}

    T#"ng hm "#m1& t#"ng Class "#m1:

    5u#lic Eor'!/P

    Mniti)liQKCo'5onKnt!/RsKri)lNort;L)t)-KcKivKd S nKU

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    11/27

    GKri)lL)t)-KcKivKd=vKntV)ndlKr!sKri)lNortWL)t)-Kc KivKd/RX

    serial1ort789ata:eceived: l tZn hm s (>c g^2 (Rn 0h2 cI + l23u t#"ng *) (3mthanh gh2 nhUn.

    T#"ng Class "#m1, ThZm hm s%#2al!"#t1{`ataN%c%2P%+:

    5riv)tK void sKri)lNortWL)t)-KcKivKd!o#YKct sKndKr,GKri)lL)t)-KcKivKd=vKntrgs K/P

    string d)t) ZZRDD [uu du liKu nh)ni\ !sKndKr sKri)lNort/Pd)t) sKri)lNort;-K)d=]isting!/R

    DDViKn thi lKn tK]t #o]T#o]W-KcKi;TK]t T#o]W-KcKi;TK]t S d)t)R

    X

    XMp cng: ha2 *6" *2Rn O7%n 02u 9""l%an t#"ng class "#m1:

    5u#lic 5)rti)l cl)ss Eor' F Eor'P

    5u#lic #ool O5Kn truKR5u#lic Eor'!/P;;;Cl2c0 (b7 P" nbt O7%n t#"ng "m1.csx`%s2gny.ThZm c"+% P" hm P5a tJ" #a:

    5riv)tK void ^uttonWO5KnWClick!o#YKct sKndKr, =vKntrgs K/Pi\!O5Kn/PO5Kn \)lsKR

    ^uttonWO5Kn;TK]t ZClosKZR

    sKri)lNort;O5Kn!/RXKlsKPO5Kn truKR

    ^uttonWO5Kn;TK]t ZO5KnZRsKri)lNort;ClosK!/RXXThZm ("Jn c"+% sau P" class "#m1 ( D l 0h2 ch>Qng t#nh * (Ing:

    5riv)tK void Eor'WEor'ClosKd!o#YKct sKndKr, Eor'ClosKd=vKntrgs K/

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    12/27

    PKss)gK^o];GhoU!Z^)n 'uon tho)t khoi chuong trinhZ,ZChu yZ/RsKri)lNort;ClosK!/R

    X

    n G ( *u2l+ P 8 ( +%*ug.

    ThR l D"ng m)t ch>Qng t#nh hRt sc (Qn g2an `" th?2 g2an cI hJn nZn P/ + c"n (Qng2an P c" th cn cI sa2 DIt, m"ng c6c *Jn gI7 . T5 P/ + n= *Jn cI th 7h6t t#2n Png +ng P" nhng ch>Qng t#2nh ha= hQn.Chbc c6c *Jn thnh cng.

    O Chbng ta h"n t"n cI th tha= (2 t"n *) c6c thng s ca cngCOM.9Jn c" th chzn thZm hm 0hp2 tJ" cng P" class "#m1:

    7#2Pat% P"2+ vn2t2al2%!"#tl"ng 2nt *au+#at%&|LLc#%at% a n%d s%#2al 7"#t

    2@ s%#2al!"#t1.vsO7%n&|s%#2al!"#t1.Cl"s%&}~LLs%t all 2m7"#tant +atas%#2al!"#t1.9au+Nat% B *au+#at%}s%#2al!"#t1.`ata92ts B E}s%#2al!"#t1.Ync"+2ng B Ync"+2ng.Cvv}s%#2al!"#t1.!a#2t= B !a#2t=.$"n%}s%#2al!"#t1.!"#t$am% B COM1}s%#2al!"#t1.t"792ts B t"792ts.On%}s%#2al!"#t1.N%c%2P%+9=t%sTh#%sh"l+ B 1}

    ~

    X nh> PU= *Jn cI th t= th/ch tha= (2 c6c thng s ca cng. Ch cnt#>c 0h2 mun t#u=Vn P2 tc () 0h6c *Jn g^2 lJ2 hmMniti)liQKNort!tAc _#$n thch/. *au+#at% maD cI th (Jt (>c l 118' *au+. X/ + *Jn cI thtJ" m)t T%Dt9"D T*"D{*au+#at%& ( nhU7 tc () P m)t nbt ( tha= (2 tc() 9utt"n{Chang%9au+Nat%&. ThZm hm:

    7#2Pat% P"2+ 9utt"n{Chang%9au+Nat%{Cl2c0"*e%ct s%n+%#, YP%nt#gs %&

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    13/27

    |l"ng 2nt *au+#at%B}

    *au+#at%BC"nP%#t.T"vnt1GT*"D{*au+#at%.T%Dt&}vn2t2al2%!"#t*au+#at%&}

    ~

    O h2 P^ng cI th g2b7 /ch ch" *Jn.

    Xa" #a +u l2%u P"2 %#2al !"#tusing System.IO.Ports;using System.IO;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.orms;

    pri!ate SerialPort comport " new SerialPort#$COM%$& '())& Parity.*one&+& Stop,its.One-;

    pulic orm%#- /

    Initiali0eComponent#-; 1

    pri!ate !oid tn2etT3uc4Clic5#o6ect sender& 7!ent8rgs e- / Close#-; 1pri!ate !oid tnTestPort4Clic5#o6ect sender& 7!ent8rgs e- / try / comport.Open#-;

    t3is.comport.Dtr7nale " true;

    t3is.comport.9ts7nale " true;

    1 catc3

    / txtT3ong,ao.7naled " true; txtT3ong,ao.Text " $C: s c< 53i m= c>ng Com& 3?y 5i@mtra lAi 3B t3

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    14/27

    txt9x.7naled " true; txtJexTx.7naled " true; txtTx.7naled " true; txtT3ong,ao.7naled " true; txtT3ong,ao.Text " $C>ng Com % F? Fc m= rKi& Lt Fuc3iNn Fu Fi$;

    1 else t3is.ocus#-;

    1

    pri!ate !oid dulieuden#o6ect sender&SerialData9ecei!ed7!ent8rgs e- / txt9x.7naled " true; Ji@n t3Q Text,ox nNu DR liBu FNn tn9x.7naled " true; Ji@n t3Q utton n nNu DR liBu FNn comport.Data9ecei!ed " newSerialData9ecei!ed7!entJandler#dulieuden-;

    1

    UVc ton X dR liBu lu tAi uer& triBu tYp dR liBu lu trong 3mdulieuden pri!ate !oid tn9x4Clic5#o6ect sender& 7!ent8rgs e- / string docdulieu " comport.9ead7xisting#-.ToString#-; t3is.txt9x.Text " docdulieu; txtT3ong,ao.Text " $DR liBu n3Yn Fc Zng ![i m? Jexa l\ $ 8to]#docdulieu-;

    1

    pri!ate !oid tnClosePort4Clic5#o6ect sender& 7!ent8rgs e- / comport.Close#-; txtT3ong,ao.Text " $C>ng Com F? Fc F:ng$;

    tnTestPort.7naled " true; tnJexTx.7naled " alse;

    txtTx.7naled " alse; txtJexTx.7naled " alse;

    txtT3ong,ao.7naled " alse;

    tnClosePort.7naled " alse; 1

    Chu=n (2 Chu2 Cvvsang nh `Jng H%Da.

    pri!ate string 8to]#string asc- / int n^ines; int nC3ars; int oset;

    http://tudiencongnghe.com/Special:Search/ASCIIhttp://tudiencongnghe.com/Special:Search/ASCII
  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    15/27

    string 3ex " $ $;

    t_n3 to`n s< lng dng Jexa.i ##asc.^engt3 b %(- )-

    n^ines " asc.^engt3 %( %; else n^ines " asc.^engt3 %(;

    C3uy@n F>i sang n3Rng dng Jexa. or #int i " ); i n^ines; i- / oset " i %(; i ##asc.^engt3 f oset- %(- nC3ars " %(; else nC3ars " asc.^engt3 f oset; 3ex " t3is.Jex^ine#i& asc.Sustring#oset& nC3ars-- $rn$; 1 return 3ex; 1

    summary C3uy@n mXt c3uhi 8SCII %( yte sang FQn3 dAng 3exa. summary pri!ate string Jex^ine#int l*um& string asc- / string 3ex " $$;

    Copy dng !o X FBm. c3arj c " new c3ar%(j; asc.CopyTo#)& c& )& asc.^engt3-;

    TAo oset. 3ex " String.ormat#$/)\]+1 f /)\]+1$& l*um %(& #l*um %- %( f %-; 3ex " $ $;

    C3uy@n c`c 5k t sang FQn3 dAng c3un 3exa. or #int i " ); i asc.^engt3; i- / i ##i H" )- ##i b - "" )-- 3ex " $ $; 3ex " String.ormat#$/)\]1$& #int-cij-; 1

    UBm t3m. int nSpaces " ( f 3ex.^engt3; or #int i " ); i nSpaces; i- 3ex " $ $;

    C3uy@n 8SCII t[i cu

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    16/27

    Tr lAi dng 3exa . return 3ex; 1

    pri!ate !oid tnJexTx4Clic54%#o6ect sender& 7!ent8rgs e- / try / ytej data " JexStringTo,yte8ray#txtJexTx.Text-; comport.Write#data& )& data.^engt3-; Ua mng s< Jexaua c>ng com ![i FQn3 dAng c3un string a " t3is.txtTx.Text; comport.Write#8to]#a--; txtT3ong,ao.Text " $T3ng tin Fc gvi ra c>ng 9Sq ![im? Jex l\ $ txtJexTx.Text.Topper#- $rn rn$ $T3ng tin Fcgvi ra c>ng 9Sq c3uy@n sang m? Jex TYp tin Text l\ rn rn$ 8to]#a-.ToString#-;

    1

    catc3 #ormat7xception- / txtT3ong,ao.Text " $C: t3@ c>ng com F:ng 3oc An n3Ypc3_n3 x`c M? Jexa cn Truyn *3Yn. 23ng n3Yn Fc FQn3 dAng c3uhi sau\$ txtJexTx.Text.Topper#-; 1 return; 1

    Thk= anh %m quan tm, t2 ng2 D= +]ng m)t Class #2Zng ( anh %m cI thnhbng t#]c t2R7 P" ch>Qng t#nh 0h2 th2Rt 0R ng +ng 7hn mVmusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.orms;using System.Data.SlClient;using System.IO.Ports;using System.T3reading;

    class ComPorts/ pulic ,oolean OpenComPortO5; pulic ComPorts#- /

    1 zComPorts#- /

    1

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    17/27

    summary Mo cong COM% summary returnsreturns pulic SerialPort Open#String Port& int ,aud& Parity Prt& int Dt,&Stop,its St,- / SerialPort ComPort " new SerialPort#$COM%$& '())&Parity.*one & +& Stop,its.One-; SerialPort ComPort " new SerialPort# Port&,aud& Prt& Dt,& St,-; try / i #HComPort.IsOpen- / ComPort.Open#-; t3is.OpenComPortO5 " true; 1 1 catc3 #7xception e- / Message,ox.S3ow#$^hi m= c>ng\$e.ToString#--;

    t3is.OpenComPortO5 " alse; return ComPort; 1 ComPort.9ts7nale " true; ComPort.Dtr7nale " true;

    return ComPort; 1 pulic !oid Close#- /

    1

    summary Send#SerialPort ComPort& String data- se Gui c3uoi data ra cong ComPort summary param name"$ComPort$param param name"$data$param pulic !oid Send#SerialPort ComPort& String data- / ComPort.Write#data-;

    1

    pulic String 9ecei!e#SerialPort ComPort- / String 9ecei!eData " $$; 9ecei!eData " ComPort.9ead7xisting#-; return 9ecei!eData;

    1 pulic yte 9ecei!e,yte#SerialPort ComPort- / yte {alue; {alue " Con!ert.To,yte#ComPort.9ead,yte#--; return {alue;

    1

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    18/27

    1

    C"+% mau la7 t#2nh c"ng COM t#%n C_using System;using System.IO.Ports;using System.T3reading;

    pulic class PortC3at/ static ool 4continue; static SerialPort 4serialPort;

    pulic static !oid Main#-

    / string name; string message; StringComparer stringComparer "StringComparer.OrdinalIgnoreCase; T3read readT3read " new T3read#9ead-;

    Create a new SerialPort o6ect wit3 deault settings. 4serialPort " new SerialPort#-;

    8llow t3e user to set t3e appropriate properties. 4serialPort.Port*ame " SetPort*ame#4serialPort.Port*ame-; 4serialPort.,aud9ate " SetPort,aud9ate#4serialPort.,aud9ate-;

    4serialPort.Parity " SetPortParity#4serialPort.Parity-; 4serialPort.Data,its " SetPortData,its#4serialPort.Data,its-; 4serialPort.Stop,its " SetPortStop,its#4serialPort.Stop,its-; 4serialPort.Jands3a5e " SetPortJands3a5e#4serialPort.Jands3a5e-;

    Set t3e readwrite timeouts 4serialPort.9eadTimeout " |)); 4serialPort.WriteTimeout " |));

    4serialPort.Open#-; 4continue " true; readT3read.Start#-;

    Console.Write#$*ame\ $-; name " Console.9ead^ine#-;

    Console.Write^ine#$Type }IT to exit$-;

    w3ile #4continue- / message " Console.9ead^ine#-;

    i #stringComparer.7uals#$uit$& message-- / 4continue " alse; 1

    else / 4serialPort.Write^ine#

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    19/27

    String.ormat#$/)1\ /%1$& name& message- -; 1 1

    readT3read.~oin#-; 4serialPort.Close#-;

    1

    pulic static !oid 9ead#- / w3ile #4continue- / try / string message " 4serialPort.9ead^ine#-; Console.Write^ine#message-; 1 catc3 #Timeout7xception- / 1 1

    1

    pulic static string SetPort*ame#string deaultPort*ame- / string port*ame;

    Console.Write^ine#$8!ailale Ports\$-; oreac3 #string s in SerialPort.GetPort*ames#-- / Console.Write^ine#$ /)1$& s-; 1

    Console.Write#$COM port#/)1-\ $& deaultPort*ame-;

    port*ame " Console.9ead^ine#-; i #port*ame "" $$- / port*ame " deaultPort*ame; 1 return port*ame; 1

    pulic static int SetPort,aud9ate#int deaultPort,aud9ate- / string aud9ate;

    Console.Write#$,aud 9ate#/)1-\ $& deaultPort,aud9ate-; aud9ate " Console.9ead^ine#-;

    i #aud9ate "" $$- / aud9ate " deaultPort,aud9ate.ToString#-; 1

    return int.Parse#aud9ate-; 1

    pulic static Parity SetPortParity#Parity deaultPortParity- / string parity;

    Console.Write^ine#$8!ailale Parity options\$-;

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    20/27

    oreac3 #string s in 7num.Get*ames#typeo#Parity--- / Console.Write^ine#$ /)1$& s-; 1

    Console.Write#$Parity#/)1-\$& deaultPortParity.ToString#--;

    parity " Console.9ead^ine#-;

    i #parity "" $$- / parity " deaultPortParity.ToString#-; 1

    return #Parity-7num.Parse#typeo#Parity-& parity-; 1

    pulic static int SetPortData,its#int deaultPortData,its- / string data,its;

    Console.Write#$Data ,its#/)1-\ $& deaultPortData,its-; data,its " Console.9ead^ine#-;

    i #data,its "" $$- / data,its " deaultPortData,its.ToString#-; 1

    return int.Parse#data,its-; 1

    pulic static Stop,its SetPortStop,its#Stop,its deaultPortStop,its-

    / string stop,its;

    Console.Write^ine#$8!ailale Stop ,its options\$-; oreac3 #string s in 7num.Get*ames#typeo#Stop,its--- / Console.Write^ine#$ /)1$& s-; 1

    Console.Write#$Stop ,its#/)1-\$&deaultPortStop,its.ToString#--; stop,its " Console.9ead^ine#-;

    i #stop,its "" $$- / stop,its " deaultPortStop,its.ToString#-; 1

    return #Stop,its-7num.Parse#typeo#Stop,its-& stop,its-; 1

    pulic static Jands3a5e SetPortJands3a5e#Jands3a5edeaultPortJands3a5e- / string 3ands3a5e;

    Console.Write^ine#$8!ailale Jands3a5e options\$-; oreac3 #string s in 7num.Get*ames#typeo#Jands3a5e--- /

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    21/27

    Console.Write^ine#$ /)1$& s-; 1

    Console.Write#$Stop ,its#/)1-\$&deaultPortJands3a5e.ToString#--; 3ands3a5e " Console.9ead^ine#-;

    i #3ands3a5e "" $$- / 3ands3a5e " deaultPortJands3a5e.ToString#-; 1

    return #Jands3a5e-7num.Parse#typeo#Jands3a5e-& 3ands3a5e-; 11

    0i.ple 0erial Co..unication ;ithMicroso ?@press

    Antroduction

    H%#%s a s2m7l% 2n+"ds s%#2al c"mmun2cat2"n 7#"g#am ="u can d#2t% ="u#s%l@ 2n 1m2nut%s. M2c#"s"@ts NYY X2sual C_ YD7#%ss d2th th% .$%t #am%d"#0 n"d 2nclu+%s as%#2al 7"#t class that %l2m2nat%s th% cum*%#s"m% s%tu7 @"# th#%a+s an+ "P%#la77%+ vLO.

    Th%=P% ma+% s%#2al c"mmun2cat2"n %as= aga2n. Th2s 7#"e%ct can #%a+2l= *% a+a7t%+ t" aPa#2%t= "@ a77l2cat2"ns #%qu2#2ng s%#2al c"mmun2cat2"n.

    Th% %Dam7l% has ' *utt"ns ta#t an+ t"7& an+ a T%Dt9"D. h%n th% a77l2cat2"n 2s#unn2ng, cl2c0 ta#t t" "7%n a COM 7"#t. Onc% th% 7"#t 2s "7%n, 2nc"m2ng s%#2al +ata d2lla77%a# 2n th% T%Dt9"D. Cha#act%#s t=7%+ 2nt" th% T%Dt9"D d2ll *% t#ansm2tt%+ "ut th%s%#2al 7"#t. Cl2c0 t"7 t" cl"s% th% COM 7"#t. Thats 2t. Th% %Dam7l% c"+% 2s %D7la2n%+

    *%l"d. "u can %2th%# @"ll"d al"ng an+ d#2t% ="u# "dn P%#s2"n "# s2m7l= +"dnl"a+ th%X2sual C_ YD7#%ss2m7l% %#2al 7#"e%ct+2#%ctl=. c"m7l%t% c"+% l2st2nga77%a#s at th%%n+ "@ th2s 7ag%.

    Create the pplication

    http://csharp.simpleserial.com/SimpleSerialCS.ziphttp://csharp.simpleserial.com/SimpleSerialCS.ziphttp://csharp.simpleserial.com/#listinghttp://csharp.simpleserial.com/SimpleSerialCS.ziphttp://csharp.simpleserial.com/#listing
  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    22/27

    O7%n X2sual C_ YD7#%ss an+ s%l%ct 2l%$%d !#"e%ct. Ch"s% th% 2n+"ds 77l2cat2"n 2c"n an+ nam% th% n%d 7#"e%ct 2m7l%%#2al th% !#"e%ct $am% %+2t *"D 2s at th% *"tt"m "@ +2al"g&. Th2s d2ll c#%at% a *lan0"#m1 an+ s0%l%t"n c"+% @"# th% a77l2cat2"n.

    #"m th% T""l*"D 7al%tt%, a++ td" 9utt"ns t" "#m1. %l%ct *utt"n1. vn th% !#"7%#t2%s7al%tt% chang% th% $utton7$am% t" $utton0tart. Chang% 2ts 2ts T%Dt 7#"7%#t= t" 0tart.$am% th% "th%# *utt"n $utton0top. Chang% 2ts T%Dt 7#"7%#t= t" 0topan+ s%t 2ts Yna*l%7#"7%#t= t" alse.

    ++ a T%Dt9"D t" "#m1. Chang% 2ts Mult2l2n% 7#"7%#t= t" True, N%a+Onl= 7#"7%#t= t"

    True, an+ c#"ll*a#s 7#"7%#t= t" =ertical. N%s2% th% T%Dt*"D an+ a##ang% th% 9utt"ns t"l""0 l20% th% 2mag% h%#%.

    \ast, a++ a %#2al!"#t class @#"m th% T""l*"D 7al%tt% t" "#m1. 2nc% 2ts a n"nP2sualclass, 2ts 2c"n +"%s n"t sta= "n "#m1 *ut a77%a#s at th% *"tt"m "@ th% "#m1 +%s2gn 7ag%.

    %l%ct th% ta#t *utt"n 2n "#m1. vn th% !#"7%#t2%s 7al%tt%, s%l%ct th% YP%nts 2c"n. 2n+ th%%P%nt la*l%+ Cl2c0 an+ +"u*l%cl2c0 2t. Th2s d2ll c#%at% s0%l%t"n c"+% @"# th% ta#t *utt"nCl2c0 %P%nthan+l%#. \%aP% 2t %m7t= @"# n"d. %ll a++ "u# c"+% t" 2t sh"#tl=. " *ac0 t"th% +%s2gn ta*, s%l%ct th% t"7 *utt"n an+ a++ a Cl2c0 %P%nthan+l%# @"# 2t eust l20% ="u+2+ @"# th% ta#t *utt"n. s2ng th% sam% t%chn2qu%, a++ a %=!#%ss %P%nthan+l%# t" th%

    T%Dt9"D, a `ataN%c%2P%+ %P%nthan+l%# t" th% %#2al!"#t, an+ a "#mCl"s2ng %P%nthan+l%# t" "#m1 *% su#% t" s%l%ct "#mCl"s2ng... n"t "#mCl"s%+&.

    $"d, cut an+ 7ast% c"+% @#"m th% %P%nt han+l%#s 2n th% l2st2ng*%l"d 2nt" th% %m7t= %P%nthan+l%#s 2n ="u# 7#"e%ct. Cut an+ 7ast% th% Pa#2a*l% +%cla#at2"n @"# :@0tring. 9% su#% t"

    7lac% 2t 2mm%+2at%l= *%@"#% th% "#m1 & @unct2"n as sh"dn 2n th% l2st2ng. \ast, cut an+7ast% th% %nt2#% `2s7la=T%Dt & @unct2"n. Thats 2t. "u#% +"n%.

    Test the pplication

    vn th% X2sual C_ YD7#%ss v`Y, 7#%ss 8 Nun& "# th% g#%%na##"d Nun *utt"n. 2th th%2m7l% %#2al a77l2cat2"n #unn2ng, 7#%ss th% ta#t *utt"n t" "7%n th% COM 7"#t. vnc"m2ng

    http://csharp.simpleserial.com/#listinghttp://csharp.simpleserial.com/#listing
  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    23/27

    s%#2al t%Dt +ata d2ll a77%a# 2n th% t%Dt9"D1. n=th2ng ="u t=7% 2n t%Dt9"D1 d2ll *%t#ansm2tt%+. v@ ="u +"nt haP% a c"nn%ct%+ s%#2al +%P2c% su2ta*l% @"# t%st2ng th% 7#"g#am,us% a l""7*ac0 c"nn%ct"#. Ma0% "n% *= s2m7l= eum7%#2ng 72ns ' an+ - "@ a s%#2al ca*l% "#`9F c"nn%ct"#. 2th a l""7*ac0 c"nn%ct"#, an=th2ng ="u t=7% 2n t%Dt9"D1 d2ll *%%ch"%+ *ac0 th#"ugh th% 7"#t an+ +2s7la=%+ 2n t%Dt9"D1. !#%ss th% t"7 *utt"n t" cl"s%

    th% 7"#t.

    v@ th% 7#"g#am +"%snt d"#0, ca#%@ull= #%P2%d ="u# c"+% an+ s%#2al c"nn%ct2"ns. vn th%c"+% @"# *utt"nta#t{Cl2c0 &, *% su#% th% COM 7"#t ="u s7%c2@= 2s th% "n% ="u#%c"nn%ct%+ t". vt must 7h=s2call= %D2st "n ="u# c"m7ut%#. COM1 2s m"st c"mm"n *ut ="um2ght *% c"nn%ct%+ t" COM', COM-, %tc. v@ th% 7"#t 2s c"nn%ct%+ t" an %Dt%#nal s%#2al+%P2c%, th% c"mm 7a#am%t%#s *au+ #at%, %tc.& "@ th% +%P2c% an+ ="u# 7#"g#am must ag#%%.ls" n"t% that th%#% 2s n" s%#2al han+sha02ng 2n "u# a77l2cat2"n. n %Dt%#nal +%P2c% m2ght#%qu2#% 2t. Chang% 7a#am%t%#s 2@ n%%+%+.

    )o; it Dor*sll th% h%aP= l2@t2ng 2s 7%#@"#m%+ *%h2n+ th% sc%n%s than0s t" th% %#2al!"#t c"m7"n%nt.Th% #%st 2s 7#%tt= s2m7l%. Th% "nl= t#2c0= 7a#t 2s th% vnP"0% m%th"+ that all"ds "u#`2s7la=T%Dt & @unct2"n t" u7+at% t%Dt9"D1. \%ts l""0 at th% c"+% @"# %ach %P%nt han+l%#.

    vn *utt"nta#t{Cl2c0 &, d% *%g2n *= s%tt2ng th% 7"#t nam% an+ *au+ #at%. vn "u# %Dam7l%!"#t$am% 2s COM1 *ut ="u can s%t 2t t" an= "th%# 7"#t aPa2la*l% "n ="u# c"m7ut%#.

    $"t2c% th% !"#t$am% 2s a st#2ng an+ must *% 2n qu"t%s. Th% *au+ #at% must ag#%% d2th th%*au+ #at% "@ dhat%P%# 2s "n th% "th%# %n+ "@ th% s%#2al c"nn%ct2"n. % th%n call th%O7%n & @unct2"n. v@ th% 7"#t "7%n%+ O, d% +2sa*l% th% ta#t *utt"n, %na*l% th% t"7

    *utt"n, an+ all"d d#2t2ng 2n t%Dt9"D1.

    pri!ate !oid uttonStart4Clic5#o6ect sender& 7!ent8rgs e- / serialPort%.Port*ame " $COM%$; serialPort%.,aud9ate " '());

    serialPort%.Open#-; i #serialPort%.IsOpen- / uttonStart.7naled " alse;

    uttonStop.7naled " true; text,ox%.9eadOnly " alse; 1 1

    Onc% th% s%#2al!"#t1 2s "7%n, an= 2nc"m2ng s%#2al cha#act%#s d2ll caus% a `ataN%c%2P%+%P%nt t" @2#%. vns2+% th% %P%nt han+l%# d% #%a+ all %D2st2ng cha#act%#s @#"m th% 2nt%#nals%#2al #%c%2P% *u@@%# 2nt" st#2ng NDt#2ng. ThK nK]t 5)rt is critic)l )nd not o#vious;s%#2al!"#t1 #uns 2n 2t "dn s%7a#at% th#%a+ *%h2n+ th% sc%n%s. Th2s th#%a+ cann"t +2#%ctl=call an= @unct2"ns 2n th% ma2n th#%a+ "@ "u# a77l2cat2"n. H"d%P%#, a s7%c2al @unct2"n,vnP"0% &, d2ll all"d 2t. " d% us% vnP"0% t" call "u# `2s7la=T%Dt & @unct2"n. NDt#2ng 2sth% gl"*al st#2ng Pa#2a*l% acc%ssa*l% *= *"th th#%a+s.

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    24/27

    pri!ate !oid serialPort%4Data9ecei!ed #o6ect sender& System.IO.Ports.SerialData9ecei!ed7!ent8rgs e- / 9xString " serialPort%.9ead7xisting#-; t3is.In!o5e#new 7!entJandler#DisplayText--;

    1

    Ou# `2s7la=T%Dt & @unct2"n 2s s2m7l%. % eust a77%n+ th% t%Dt 2n NDt#2ng t" dhat%P%# 2sal#%a+= 2n t%Dt9"D1.

    pri!ate !oid DisplayText#o6ect sender& 7!ent8rgs e- / text,ox%.8ppendText#9xString-; 1

    Th% t%Dt*"D1 %=!#%ss & @unct2"n ca7tu#%s cha#act%#s t=7%+ 2nt" t%Dt9"D1 an+ d#2t%sth%m t" s%#2al!"#t1. #2t% & can "nl= s%n+ cha#act%#s @#"m a cha# t=7% a##a= s" d% +%cla#%"n% d2th a l%ngth "@ x1y an+ ass2gn th% %=Cha# Palu% t" 2t. 2th th% a#gum%nts 2n#2t% &, d% t%ll 2t t" s%n+ th% cha#act%#s 2n th% *u@@, "@@s%t "@ cha#s 2nt" th% a##a=, an+ al%ngth "@ 1 cha#. % s%t th% %P%nt t" Han+l%+ t" 7#%P%nt th% t=7%+ cha#act%# @#"ma77%a#2ng 2n t%Dt9"D1. v@ ="u dant 2t t" a77%a# l"cal %ch"&, "m2t th% l2n%.

    pri!ate !oid text,ox%42eyPress#o6ect sender& 2eyPress7!ent8rgs e- /

    I t3e port is closed& dont try to send a c3aracter. i#HserialPort%.IsOpen- return;

    I t3e port is Open& declare a c3arj array wit3 one element.

    c3arj u " new c3ar%j;

    ^oad element ) wit3 t3e 5ey c3aracter. u)j " e.2eyC3ar;

    Send t3e one c3aracter uer. serialPort%.Write#u& )& %-;

    Set t3e 2eyPress e!ent as 3andled so t3e c3aracter wont display locally. I you want it to display& omit t3e next line.

    e.Jandled " true; 1

    Cl2c02ng th% t"7 *utt"n calls *utt"nt"7{Cl2c0 &. v@ s%#2al!"#t1 2s "7%n, d% cl"s% th%7"#t an+ s%t th% *utt"n %na*l%s an+ t%Dt9"D1 N%a+Onl= stat% *ac0 t" th%2# 7#%P2"us Palu%.

    pri!ate !oid uttonStop4Clic5#o6ect sender& 7!ent8rgs e-

    / i #serialPort%.IsOpen-

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    25/27

    / serialPort%.Close#-; uttonStart.7naled " true; uttonStop.7naled " alse; text,ox%.9eadOnly " true; 1

    1

    \ast *ut n"t l%ast, 2@ th% a77l2cat2"n 2s cl"s%+ dh2l% s%#2al!"#t1 2s "7%n, th% 7"#t must *%cl"s%+ @2#st "# th% 7#"g#am d2ll hang.

    pri!ate !oid orm%4ormClosing#o6ect sender& ormClosing7!ent8rgs e- / i #serialPort%.IsOpen- serialPort%.Close#-; 1

    inal Thoughts

    "# th% sa0% "@ cla#2t= an+ s2m7l2c2t=, "u# %Dam7l% a77l2cat2"n "m2ts a @%d th2ngs.

    t%Dt9"D1 cann"t 7#"7%#l= +2s7la= a CN d2th"ut a \. T%Dt9"D%s haP% th% qu2#0=n%%+ @"# a CN\ 7a2# an+ th%= must *% 2n that "#+%#. v@ a CN a##2P%s *= 2ts%l@,="ull n%%+ t" a++ th% \.

    t%Dt9"D1 h"l+s a l"t "@ cha#act%#s *ut d2ll %P%ntuall= #un "ut "@ m%m"#= an+ eust

    st"7 +2s7la=2ng an=th2ng n%d that a##2P%s. "u can l2m2t th% num*%# "@ cha#act%#s2t d2ll +2s7la= *= s%tt2ng th% t%Dt9"D1 MaD\%ngth 7#"7%#t= *ut th%n 2t d2ll eust #un"ut "@ s7ac% s""n%#. *%tt%# a77#"ach 2s t" l2m2t th% num*%# "@ l2n%s d2th"uta@@%ct2ng th% +2s7la=.

    Ou# 7#"g#am has n" han+sha02ng. "m% +%P2c%s #%qu2#% 2t.

    "u a#% @#%% t" us% all th% 2n@"#mat2"n 7#%s%nt%+ h%#%. Th%#% a#% n" #%st#2ct2"ns. Th%#%s n"su77"#t aPa2la*l% *ut th% 7#"g#am 2s s2m7l% %n"ugh that ="u 7#"*a*l= d"nt n%%+ 2t. %n+c"mm%nts t" csha#7c"mm%ntss2m7l%s%#2al.c"m"u n%%+ aPac#27t t" s%% m= %ma2la++#%ss

    Ein*s

    2m7l%%#2alC.27`"dnl"a+ 2m7l% %#2al !#"e%ct @"# X2sual C_ YD7#%ssM2c#"s"@t M`$ %#2al C"mmun2cat2"n N%s"u#c%sv$-' !v s%#2al c"mmun2cat2"n#%@%#%nc%.ddd.m2c#"s"@t.c"mL%D7#%ssLPcsha#7LM2c#"s"@ts NYY X2sual C_ YD7#%ss

    ull Code Eisting

    using System; using System.Collections.Generic;

    mailto:[email protected]://csharp.simpleserial.com/SimpleSerialCS.ziphttp://csharp.simpleserial.com/SimpleSerialCS.ziphttp://msdn.microsoft.com/en-us/library/bb202722.aspxhttp://www.microsoft.com/express/vcsharp/mailto:[email protected]://csharp.simpleserial.com/SimpleSerialCS.ziphttp://msdn.microsoft.com/en-us/library/bb202722.aspxhttp://www.microsoft.com/express/vcsharp/
  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    26/27

    using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.orms;

    namespace SimpleSerial / pulic partial class orm% \ orm / 8dd t3is !ariale

    string 9xString;

    pulic orm%#- / Initiali0eComponent#-; 1

    pri!ate !oid uttonStart4Clic5#o6ect sender& 7!ent8rgs e- / serialPort%.Port*ame " $COM%$; serialPort%.,aud9ate " '());

    serialPort%.Open#-; i #serialPort%.IsOpen- / uttonStart.7naled " alse; uttonStop.7naled " true; text,ox%.9eadOnly " alse; 1 1

    pri!ate !oid uttonStop4Clic5#o6ect sender& 7!ent8rgs e- / i #serialPort%.IsOpen- / serialPort%.Close#-; uttonStart.7naled " true; uttonStop.7naled " alse; text,ox%.9eadOnly " true; 1

    1

    pri!ate !oid orm%4ormClosing#o6ect sender&ormClosing7!ent8rgs e- / i #serialPort%.IsOpen- serialPort%.Close#-; 1

    pri!ate !oid text,ox%42eyPress#o6ect sender&2eyPress7!ent8rgs e- / I t3e port is closed& dont try to send a c3aracter.

    i#HserialPort%.IsOpen- return;

    I t3e port is Open& declare a c3arj array wit3 oneelement. c3arj u " new c3ar%j;

  • 8/10/2019 Lap Trinh Serial Port Trong C Sharp

    27/27

    ^oad element ) wit3 t3e 5ey c3aracter.

    u)j " e.2eyC3ar;

    Send t3e one c3aracter uer.

    serialPort%.Write#u& )& %-; Set t3e 2eyPress e!ent as 3andled so t3e c3aracter

    wont display locally. I you want it to display& omit t3enext line. e.Jandled " true; 1

    pri!ate !oid DisplayText#o6ect sender& 7!ent8rgs e- / text,ox%.8ppendText#9xString-; 1

    pri!ate !oid serialPort%4Data9ecei!ed #o6ect sender& System.IO.Ports.SerialData9ecei!ed7!ent8rgse- / 9xString " serialPort%.9ead7xisting#-; t3is.In!o5e#new 7!entJandler#DisplayText--; 1 1 1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff