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/ASCII8/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/#listing8/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/#listing8/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