Tutorial Tranceiver data use us e COM port Trong Trong ví dụ này, tôi không đi sâu vào lý thuyết cấu trúc cổng CO !c"c #$n c% th& ti' đ(c cấu trúc c"c th)nh ghi trong v* +-T đi.u khi&n cổng CO/, 'à h01ng d2n th3c hành cụ th& l45 tr6nh t7ng #01c t7ng #01c s8 dụng 9isu)l C:;<=T >??@; Bố trí chân của cổng COM
Hình 1 Các thông số cổng COM cần lưu ! Thông số của cổng COM cần quan tâm tâ m là: 1. Địa Địa chỉ chỉ cổng cổng !"# !"#tt $am $am%&. %&. '. Tốc Tốc () () *au *au++ *a *au+ u+#a #at%& t%&,, -. ố */t */t t#"ng t#"ng m)t m)t 0hung 0hung + + l23u l23u +ata +ata *2ts& *2ts&,, 4. ố *2t *2t +5ng +5ng g2a g2a c6c 0hun 0hungg + l23u l23u st"7 st"7 *2t&, *2t&, 8. 9/t 02m 02m t#a t#a ch;n ch;n l< 7a# 7a#2t= 2t= *2t&. *2t&. Thông th>?ng +%@aut& cà2 (At : !"#t $am%B COM1 (ịa chỉ m H%Da: -@E&,*au+#at% B FG, +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 nố2 +â= 0h6c nhau.
Hình '
Hình Thông th>?ng ng>?2 ta s +ng cQ chR han+sha02ng: $"n%, Pì PU= chỉ cần cầ n - +â= nố2 nh> hình '. $h> PU= PV 7hần c"nn%ct%# c"nn%ct%# là D"ng. Ta (2 Pà" lU7 t#ình. 1. !#"g#amsW !#"g#amsWM2c#"s M2c#"s"@t "@t X2sual X2sual tu+2" tu+2" '8W M2c#"s"@t M2c#"s"@t X2s X2sual ual tu+2" '8.Y '8.YKY. KY. '. $Ru lần (ầu t2Zn *Jn chJ= M2c#"s"@t M2c#"s"@t X2su X2sual al tu+2" tu+2" '8 th2 *[ng *[ng h23n #a là: là:
Hình 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.
4.
Hình 8 8. 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.
G.
Hình G f. 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 Màn hình th2Rt 0R Dukt h23n: Th2s 2mag% has *%%n #%s2%+. Cl2c0 th2s *a# t" P2%d th% @ull 2mag%. Th% "#2g2nal 2mag% 2s s2%+ ED8EG.
E.
Hình f F. C6c (2Vu 0h2n cha t#"ng T""l*"D $Ru 0hông thk= Dukt h23n t#Zn màn hình 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.
Hình E 1'. Muốn tha= (ổ2 tZn cng nh> c6c thu)c t/nh của (ố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.
1-.
Hình F 14. 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.
18.
Hình 1 1G. Xà nhng thu)c t/nh của (2Vu 0h2n s%#2al!"#t1 p gIc +>2 *Zn t#62: r (â= ta cI th cà2 (At c6c thông số của cổng 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 hàm h t# ch" 7ho7 ng>?2 +ng cI th t6c ()ng (Rn cổng COM m)t c6c + +àng. M,t số h-. c" $/n trong 0erial1ort thư2ng d3ng! %#2al!"#t.vsO7%n&: T#[ lJ2 t#ang th62 của cổng là (ang (Ing ha= mp. %#2al!"#t.O7%n&: Mp cổng P2 thông số ( cà2 (At. %#2al!"#t.Cl"s%&: ĐIng cổng. %#2al!"#t.#2t%\2n%t#2ng +ata&: T#u=Vn m)t st#2ng Duống *) (3m cổng ( t#u=Vn (2. %#2al!"#t.N%a+YD2st2ng &: Đ^c m)t st#2ng t5 *) (3m cổng . %#2al!"#t.N%a+Cha#&: Đ^c m)t g26 t#ị 02u cha# t5 *) (3m cổng. %#2al!"#t.N%a+9=t%&: Đ^c m)t g26 t#ị 02u 9=t% t5 *) (3m cổng. • • • •
• • •
M,t số lưu v4 thu5t gi/i của chư"ng tr6nh!
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 (>c t#u=Vn (2: T#"ng "m1.csx`%s2gny cl2c0 (b7 Pà" nbt T#ansm2t t#"ng "#m1: Xà chzn ("Jn c"+% sau Pa" hàm 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"d•C"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 ha2 c6ch ( th]c h23n qu6 t#ình qu6 t#ình t#u=Vn: C6ch m)t: Th>?ng Du=Zn 02m t#a cổng D%m + l23u cI (>c t#u=Vn (Rn 0hông. C6ch ha2: !h[2 *St (>c s] 023n + l23u (Rn, 0h2 + l23u (Rn ta g^2 hàm 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 cà2 (At T2m%#&hàm 02m t#a Pà s l s‚ (>c g^2.
H2nh11 X2 c6ch ' ta s +ng s] 023n GKri)lL)t)-KcKivKd=vKnt . h2 cI s] 023n nà= ta s‚ (^c Pà D 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 (Qn g2an hQn, t2Rt 023m (>c th?2 g2an D l. `" PU= tô2 D2n g22 th23u c6ch th ' c6ch 1 c6c *Jn t] tìm 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 7hần us2ng: using GystK';MO;Norts} T#"ng hàm "#m1& t#"ng Class "#m1: 5u#lic Eor'!/ P Mniti)liQKCo'5onKnt!/R sKri)lNort;L)t)-KcKivKd S nKU
GKri)lL)t)-KcKivKd=vKntV)ndlKr!sKri)lNortWL)t)-Kc KivKd/R X serial1ort789ata:eceived: là tZn hàm s‚ (>c g^2 (Rn 0h2 cI + l23u t#"ng *) (3m thanh gh2 nhUn. T#"ng Class "#m1, ThZm hàm 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)n i\ !sKndKr sKri)lNort/ P d)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 X Mp cổng: 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 truKR 5u#lic Eor'!/ P ; ; ; Cl2c0 (b7 Pà" nbt O7%n t#"ng "m1.csx`%s2gny.ThZm c"+% Pà" hàm P5a tJ" #a: 5riv)tK void ^uttonWO5KnWClick!o#YKct sKndKr, =vKntrgs K/ P i\!O5Kn/ P O5Kn \)lsKR ^uttonWO5Kn;TK]t ZClosKZR sKri)lNort;O5Kn!/R X KlsK P O5Kn truKR ^uttonWO5Kn;TK]t ZO5KnZR sKri)lNort;ClosK!/R X X ThZm ("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/
P Kss)gK^o];GhoU!Z^)n 'uon tho)t khoi chuong trinhZ,ZChu yZ/R sKri)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 (Qn g2an Pà c" th c„n cI sa2 DIt, m"ng c6c *Jn gI7 . T5 P/ + nà= *Jn cI th 7h6t t#2n Pà ng +ng Pà" nhng ch>Qng t#2nh ha= hQn.Chbc c6c *Jn thành công€.
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
O€ Chbng ta h"àn t"àn cI th tha= (ổ2 t"àn *) c6c thông số của cổng COM.9Jn c" th chzn thZm hàm 0hp2 tJ" cổng 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 +ata s%#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 thông số của cổng. Chỉ càn t#>c 0h2 muốn t#u=Vn P2 tốc () 0h6c *Jn g^2 lJ2 hàm Mniti)liQKNort!tAc đ_ #$n thích/. *au+#at% maD cI th (Jt (>c là 118' *au+. X/ + *Jn cI th tJ" m)t T%Dt9"D T*"D{*au+#at%& ( nhU7 tốc () Pà m)t nbt ( tha= (ổ2 tốc () 9utt"n{Chang%9au+Nat%&. ThZm hàm: 7#2Pat% P"2+ 9utt"n{Chang%9au+Nat%{Cl2c0"*e%ct s%n+%#, YP%nt#gs %&
| 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 !"#t using using using using using using using using using
System.IO.Ports; System.IO; System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; 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#-; 1 pri!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@m tra lAi 3B t3
tnClosePort.7naled " true;
txt9x.7naled " true; txtJexTx.7naled " true; txtTx.7naled " true; txtT3ong,ao.7naled " true; txtT3ong,ao.Text " $C>ng Com % F? Fc m= rKi& Lt Fu c3iNn 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 " new SerialData9ecei!ed7!entJandler#dulieuden-; 1 UVc ton X dR liBu lu tAi uer& triBu tYp dR liBu lu trong 3m dulieuden 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 Cvv sang Định `Jng H%Da. pri!ate string 8to]#string asc/ int n^ines; int nC3ars; int oset;
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; i3ex " $ $;
C3uy@n 8SCII t[i cu
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< Jexa ua 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 ![i m? Jex l\ $ txtJexTx.Text.Topper#- $rn rn$ $T3ng tin Fc gvi 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 n3Yp c3_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 tâm, tô2 ng†2 Dâ= +]ng m)t Class #2Zng ( anh %m cI th nhbng t#]c t2R7 Pà" ch>Qng t#ình 0h2 th2Rt 0R ng +ng 7hần mVm€ using using using using using using using using using using
System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Text; System.Windows.orms; System.Data.SlClient; System.IO.Ports; System.T3reading;
class ComPorts / pulic ,oolean OpenComPortO5; pulic ComPorts#/
1 zComPorts#/ 1
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
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#
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\$-;
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#Jands3a5e deaultPortJands3a5e/ string 3ands3a5e; Console.Write^ine#$8!ailale Jands3a5e options\$-; oreac3 #string s in 7num.Get*ames#typeo#Jands3a5e--/
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-; 1 1
……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
0i.ple 0erial Co..unication ;ith Microso ?@press Antroduction H%#%‡s a s2m7l% 2n+"ds s%#2al c"mmun2cat2"n 7#"g#am ="u can d#2t% ="u#s%l@ 2n 1 m2nut%s. M2c#"s"@t‡s NYY X2sual C_ YD7#%ss d2th th% .$%t #am%d"#0 n"d 2nclu+%s a s%#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" a Pa#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 d2ll a77%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. That‡s 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#%ss 2m7l% %#2al 7#"e%ct +2#%ctl=. c"m7l%t% c"+% l2st2ng a77%a#s at th% %n+ "@ th2s 7ag%.
Create the pplication
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%s 7al%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" 0top an+ 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% 2t‡s a n"n…P2sual class, 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"n •Cl2c0• %P%nt…han+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%nt…han+l%# @"# 2t eust l20% ="u +2+ @"# th% ta#t *utt"n. ‹s2ng th% sam% t%chn2qu%, a++ a •%=!#%ss• %P%nt…han+l%# t" th% T%Dt9"D, a •`ataN%c%2P%+• %P%nt…han+l%# t" th% %#2al!"#t, an+ a •"#mCl"s2ng• %P%nt… han+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%nt han+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. That‡s 2t. ˆ"u‡#% +"n%.
Test the pplication vn th% X2sual C_ YD7#%ss v`Y, 7#%ss 8 Nun& "# th% g#%%n…a##"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
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 +"n‡t 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 +"%sn‡t 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 ="u m2ght *% 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*s ll 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. \%t‡s 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%#nal s%#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 2s th% gl"*al st#2ng Pa#2a*l% acc%ssa*l% *= *"th th#%a+s.
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%# 2s al#%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%s th%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+ a l%ngth "@ 1 cha#. % s%t th% %P%nt t" •Han+l%+• t" 7#%P%nt th% t=7%+ cha#act%# @#"m a77%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& don•t 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 won•t 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-
/
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@, ="u‡ll 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%#s 2t 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"ut a@@%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"n‡t n%%+ 2t. %n+ c"mm%nts t" csha#7c"mm%ntsŒs2m7l%s%#2al.c"m ˆ"u n%%+ aPac#27t t" s%% m= %ma2l a++#%ss
Ein*s 2m7l%%#2alC.27 `"dnl"a+ 2m7l% %#2al !#"e%ct @"# X2sual C_ YD7#%ss M2c#"s"@t M`$ %#2al C"mmun2cat2"n N%s"u#c%s v$-' !v s%#2al c"mmun2cat2"n #%@%#%nc%. ddd.m2c#"s"@t.c"mL%D7#%ssLPcsha#7L M2c#"s"@t‡s NYY X2sual C_ YD7#%ss
ull Code Eisting using System; using System.Collections.Generic;
using using using using using
System.ComponentModel; System.Data; System.Drawing; System.Text; 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& don•t 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 won•t display locally. I you want it to display& omit t3e next 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!ent8rgs e/ 9xString " serialPort%.9ead7xisting#-; t3is.In!o5e#new 7!entJandler#DisplayText--; 1 1 1 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff