Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
2,99 MB
Nội dung
Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 1/78 Tutorialn o 01.02 Gửiđến: ĐoànHiệp,DoãnMinhĐăng,HuỳnhChâuThuận picvietnam@googlegroups.com Nộidung: LậptrìnhgiaotiếpmáytínhquacổngRS232 MICROSOFTWORD Tómtắt: VấngiaotiếpgiữaPCvàviđiềukhiểnrấtquantrongtrongcácứngdụngđiềukhiển,đolường, trongthựctế. DođótôixingiớithiệuchocácbạnviếtchươngtrìnhtrênPCdùngMSComm.Tôixinđưaramột sốvấnđềnhưsau: ‐GiớithiệuchuẩngiaotiếpRS232vàđiềukhiểnActiveXMicrosoftCommunication6.0( MSComm):cáchtínhchấtvàcáchthiếtlậpthamsốtốiưuchođiềukhiển. ‐LậptrìnhứngdụnggiaotiếptrêncơsởsửdụngphầnmềmVisualC++trongbộcôngcụVisual‐ Studio6.0củaMicrosft: +Thiếtkếgiaodiệnchươngtrình. +Viếtmãchochươngtrình. 1. ĐiềukhiểnMSComm 1.1. ChuẩngiaotiếpRS232 RS232làmộtchuẩngiaotiếpnốitiếpdùngđịnhdạngkhôngđồngbộ,kếtnốinhiều nhấtlàvới2thiếtbị,chiềudàikếtnốilớnnhấtchophépđểđảmb ảodữliệulà50–100feet (12.7đến25.4m),tốcđộ20kBít/sđôikhilàtốc độ115kBít/svớimộtsốthiếtbịđặcbiệt. ĐểbiếtđượccácthamsốcủachuẩngiaotiếpRS232tronghệđiềuhànhcủabạnnhưthế nảothìbạnkíchphảichuộtvàobiểutượngMyComputer,chọnProperties,chọnTab HardWarechọnDeviceManagersẽcómộttreehiệnra.BạnchọnPort(Com&LPT),kích chuộtphảivàoCommunicationPort(COM1).ChuyểnsangtabPortSettingsẽthấyđược cácthamsốmàchúngtacầnthiếtlậpbaogồmtầnsốbus,DataBits,ParityBits,StopBits, Handshaking, Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 2/78 Hình1.1:ChọnMyComputer‐>Properties Hình1.2:ChọnDeviceManager Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 3/78 Hình1.3:ChọnPropertiescủaCommunicationPort(COM1) Hình1.4:ChọnthẻPortSettingđểbiếtthamsố ĐóchínhlàlídotạisaotôilạichọncácthamsốđưavàotrongcácComboBoxnhưở dướichươngtrìnhnày. Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 4/78 1.2. CácthuộctínhcủaMSComm MSCommlàmộtđiềukhiểnActiveXdùngtrongtruyềnthôngnốitiếp.Cáctínhchất củađiềukhiểnnàyđượcdùngđểthiếtlậpgiaotiếpvớicácthiếtbịngoạiviquacổng RS232.DođótôixingiớithiệuvớicácbạnđiềukhiểnnàytrongVisualBasicvìcáchgọi thuộctínhđơngiảncủaVB.TừđósẽlấylàmcơsởđểlậptrìnhtrênVisualC++. 1.2.1. ĐiềukhiểnMSCommtrongVisualBasic TấtcảcáctínhchấtnàybạncóthểtìmtạithưviệnMSDNJuly2001theođườngdẫn nhưsauởtabcontents: MSDNLibrary‐July2001/VisualToolsandLanguages/VisualStudio6.0 Documentation/VisualBasicDocumentation/Reference/ControlReference/ActiveX Control/MSCommControl CáctínhchấtcủaMSCommđượcsắpxếptheochứcnăng: Thiếtlậpthamsốchocổng: +CommID:trảlạihandlesđồngnhấttớithiếtbịtruyềnthông,cókiểuLong.Tínhchất nàykhôngcólúcthiếtkếmàchỉcókhithihành,thuộctínhnàylàReadOnly. +CommPort:dạngobject.CommPort=value.ValuelàchỉsốcủacổngComcógiátrịtừ 1‐>16vàmặcđịnhcógiátrị=1.Cácbạncầnphảithiếtlậpthôngsốnàytrướckhimởcổng. Sẽcólỗierror68(Deviceunavailable)nếunhưkhôngmởđượccổngnày. +InBuferSize:thiếtlậphoặctrảlạikíchthướccủabộđệmnhận,tính=byte.Mặcđịnh là1024byte.CácbạnkhôngđượcnhầmlẫnvớiđặctínhInBufferCountlàsốbyteđang chờtrongbộđệmnhận. +InputLen:object.InputLen[=value]thiếtlậphoặctrảlạisốbytemỗilầnthuộctính Inputđọctrongbộđệmnhận.MặcđịnhgiátrịValue=0tứclàthuộctínhInputsẽđọchết nộidungcủabộđệmnhậnkhithuộctínhnàyđượcgọi.Nếusốkítựtrongbộđệmnhận không=InputLenthìthuộctínhInputsẽtrảlạikítựrỗng“”.Víthếbạncầnphảichọn cáchkiểmtraInBufferCountđểchắcchắnsốkítựyêucầuđãcóđủtrướckhidùnglệnh .Input.Tínhchấtnàyrấtlàcóíchkhiđọcdữliệumộtmáymàdữliệurađượcđịnhdạng bằngcáckhốicókíchthướccốđịnh. +InputMode:object.InputMode[=value]. Value=0hay=comInputModeTextdữliệunhậnđượcdạngvănbảnkiểukítựtheo chuẩnANSI.Dữliệunhậnđượcsẽlàmộtsâu. Value=1hay=comInputModeBinarydùngnhậnmọikiểudữliệunhưkítựđiềukhiển nhúng,kítựNULL, GiátrịnhậnđượctừInputsẽlàmộtmảngkiểuByte. +NullDiscard:object.NullDiscard[=value]tínhchấtnàyquyếtđịnhkítựtrốngcó đượctruyềntừcổngđếnbộđệmnhậnhaykhông.Nếuvalue=Truekítựnàykhôngđược Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 5/78 truyền.value=falsekítựtrốngsẽđượctruyền.Kítựtrốngđượcđịnhnghíatheochuẩn ASCIIlàkítự0–chr$(0). +OutBuferSize:giốngnhưInBuferSize,mặcđịnhlà512. +ParityReplace:thiếtlậpvàtrảlạikítựthaythếkítựkhôngđúngtronglỗigiống nhau. +PortOpen:thiếtlậpvàtrảlạitínhtrạngcủacổng(đónghoặcmở). object.PortOpen[=value].value=truecổngmở.value=falsecổngđóngvàxóatoàn bộdữliệutrongbộđệmnhậnvàtruyền.CầnphảithiếtlậpthuộctínhCommPortđúngvới têncủacổngtrướckhimởcổnggiaotiếp.Thêmvàođó,cổnggiaotiếpcủathiếtbịcủabạn phảihỗtrợgiátrịtrongthuộctínhSettingthìthiếtbịc ủabạnmớihoạtđộngđúng,còn khôngthìnósẽhoạtđộngrấtdởhơinếukhôngnóilànóchạykhôngtốt.ĐườngDTRvà RTSluôngiữlạitrạngtháicủacổng. +RthresHold:object.Rthreshold[=value]valuekiểusốnguyên.Thiếtlậpsốkítự nhậnđượctrướckhigâylênsựkiệncomEvReceive.Mặcđịnh=0tứclàkhôngcósựkiện OnCommkhinhậnđượcdữliệu.Thiếtlập=1tứclàsựkiệnOnCommxảyrakhibấtkìkí tựnàođượcchuyểnđếnbộđệmnhận. +Settings:object.Settings[=value]thiếtlậphoặctrảlạicácthôngsốtầnsốbaud,bít dữliệu,bítchẵnlẻ,bítstop.NếuValuekhôngcógiátrịkhimởsẽgâyralỗi380(Invalid propertyvalue). +SThreshold:thiếtlậpvàvàtrảlạisốkítựnhỏnhấtđượcchophéptrongbộđệmgửi đểxảyrasựkiệnOnComm=comEvSend.Theomặcđịnhgiátrịnày=0tứclàkhitruyền sẽkhônggâyrasựkiệnOnComm.Nếuthiếtlậpthôngsốnày=1thìsựkiện OnComm xảy rakhibộđệmtruyềnrỗng.SựkiệnOnComm=comEvSendchỉxảyrakhimàsốkítự trongbộđệmtruyềnnhỏhơnhoặc=Sthreshold.Nếusốkítựtrongbộđệmnàyluônlớn hơnSthresholdthìsựkiệnnàykhôngthểxảyra. Truyềnnhậndữliệu: +CommEvent:trảlạiphầnlớnsựkiệngiaotiếphoặccólỗi.CommEventxảyrakhicó lỗihoặckhixảyrasựkiệnnàođó.Sauđâylàmộtsốhằngsốlỗi: Sựkiện Giátrị Miêutảsựkiện comEventBreak 1001 XảyrakhinhậnđượcmộttínhiệuBreak. comEventFrame 1004 Lỗihệthống.Phầncứngpháthiệnramộtlỗihệthống comEventOverrun 1006 Xảyrakhicổngtựtràn(Overrun).Mộtkítựkhôngđược đọctừphầncứngtrướckhikítựtiếptheotớivàdođókítự nàybịmất. Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 6/78 comEventRxOver 1008 Xảyrakhibộđệmnhậnbịtràn.Khôngcóđủchỗchodữ liệutrongbộđệmnhận. comEventRxParity 1009 LỗiParity.PhầncứngpháthiệnramộtlỗiParity. comEventTxFull 1010 xảyrakhibộđệmtruyềnbịđầy.Bộđệmtruyềnbịđầy trongkhighidữliệulớnvàobộđệm comEventDCB 1011 Mộtlỗikhôngmongmuốnkhiđangkhôiphụclạikhỗi điềukhiểnthiếtbị(DCB–DeviceControlBlock)chocổng Mộtsốsựkiện: Sựkiện Giátrị Miêutảsựkiện comEvSend 1 Xảyrakhisốkítựtrongbộđệmtruyềnnhỏhơngiátrị SthresHold. comEvReceive 2 Xảyrakhibộđệmnhậnđượcsốkítựbằnggiátrị RthresHold.Sựkiệnnàyđượctạoraliêntụcchotớikhibạn dùngthuộctínhInputđểlấyhếtdữliệutừtrongbộđệm nhận. RcomEvCTS 3 XảyrakhicóthayđổitrongđườngCTS(ClearToSend) comEvDSR 4 XảyrakhithayđổitrongđườngDSR(DataSetReady).Sự kiệnnàychỉxảyrakhiđườngDSRthayđổitừ1‐>0. comEvCD 5 XảyrakhicóthayđổitrongđườngCD(CarrierDetect) comEvRing 6 Pháthiệnchuông(Ring).MộtsốUARTkhônghỗtrợsự kiệnnày. comEvEOF 7 Xảyrakhinhậnđượckítựkếtthúcfile(kítự26trong bảngmãASCII) +EOFEnable:object.EOFEnable[=value]quyếtđịnhcáchànhđộngnếuMSComm tìmthấykítựkếtthúcfile.Nếuvalue=truekhitìmthấykítựkếtthúcfilethìsẽgâylênsự kiệncomEvEOFtrongOnCommEvent.Nếuvalue=falsethìsẽkhônggâylênsựkiệnnày. Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 7/78 +InBufferCout:trảlạisốkítựđangcótrongbộđệmnhậnBạncóthểxoábộđệmnhận bằngcáchđặtthuộctínhnày=0.KhôngnhầmvớithuộctínhInBufferSizelàtổngkích thướccủabộđệmnhận. +Input:nhậnvàxoádữliệutrongbộđệmnhận. NếuInputModelàcomInputModeTextthìgiátrịtrảvềsẽlàmộtxâutứccókiểu String,dữliệudạngtexttrongmộtbiếnkiểuVariant.NếuInputMode= comInputModeBinarythìthuộctínhnàysẽtrảlạidữliệudạngnhịphândướidạngmột mảngkiểubytetrongmộtbiếnVariant. +OutBufferCount:trảlạisốkítựtrongbộđệmtruyền. +Output:ghidữliệuvàobộđệmtruyền.cóthểtruyềnkiểutexthoặckiểunhịphân. NếutruyềnbằngkiểutextthìchomộtbiếnVariant=kiểuString,nếutruyềnkiểunhịphân thìchochoOutput=variant=mộtmảngkiểuByte. Bắttay(handshaking): +Break:thiếtlậphoặcxoátínhiệu.object.Break[=value]value=truehoặcfalse.Khi setvalue=truethìthôngsốBreaknàysẽgửimộttínhiệubreak.Tínhiệubreaktrìhoàn việctruyềndữliệuvàđưađườngtruyềnvàotrạngtháibreaktớikhimàvalue=false. +CDHolding:quếtđịnhxemsựtruyềnnàyđếnđâubằngcáchtruyvấnđườngCD( CarrierDetect).CarrierDetectlàtínhiệugửitừmodemtớimáytínhkếtnốivớinóthống báorằngnóđangonline.Nếugiátrị=truethìnóđườngCDđangởmứccao,nếu=false thìđườngdâynàyđangởmứcthấp.Tínhchấtnàykhôngcótronglúcthiếtkếchỉcótrong khichạychươngtrình.CarrierDetectđượcbiếtnhưlàReceiveLineSignalDetect(RLSD). +CTSHolding:quếtđịnhkhinàobạngửidữliệubằngcáchtruyvấntrạngtháiđường ClearToSend(CTS).ThôngthườngtínhiệuCTSđượcgửitừmodemtớimáytínhkếtnối vớinóđểbáorằngđangquátrìnhtruyềndữliệu.ThuộctínhReadonlychỉxuấthiệnkhi chạychươngtrình.ĐườngClearToSenddùngtrongRTS/CTS(RequestToSend/ClearTo Send)bắttayphầncứng.CTSHoldingchobạnmộtcáchđểtựtaydòđườngClearToSend nếubạncầnbiếttrạngtháicủanó. +DSRHolding:biếttrạngtháicủađườngDataSetReady(DSR).TínhiệuDataSet Readytruyềntừmodemtớimáytínhnốivớinóđểthôngbáorằngmodemđãsẵnsàng hoạtđộng.TínhchấtnàydùngkhiviếtDataSetReady/DataTerminalReadyhandshaking routinechomáyDataTerminalEquipment(DTE)‐máytrangbịđầucuốidữliệu. +DTREnable:tínhchấtnàyquyếtđịnhkhinàochophépđườngDataTerminalReady (DTR)trongtruyềnthông.TínhiệuDTRgửitừmáytínhtớimodemđẻbáorằngmáytính sẵnsànglànơinhậndữliệu.KhiDTREnable=truethìđườngDataTerminalReadysetlên caokhicổngmở,vàthấpkhicổngđóng.NếuDTREnable=falsethìđườngđóluônmức thấp.TrongphầnlớntrườnghợpsetđườngDataTerminalReadythànhthấpđểhangup telephone. Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 8/78 +Handshaking:thiếtlậpvàtrảlạigiaothứcbắttayphầncứng.object.Handshaking[= value]. Cácgiátrịcủavalue: comNone 0 (Mặcđịnh)Khôngbắttay comXOnXOff 1 BắttayXON/XOFF comRTS 2 BắttayRTS/CTS(RequestToSend/ClearToSend) comRTSXOnXOff 3 DùngcảbắttayRequestToSendandXON/XOFF Handshakingchỉlàgiaothứctruyềnthôngnộitạiquyếtđịnhbởidữliệunàođược truyềntừcổngphầncứngtớibộđệmnhận.Khikítựcủadữliệutớicổngnối tiếp,thiếtbị truyềnthôngsẽchuyểnnóvàotrongbộđệmnhậnvàchươngtrìnhcủabạncóthểđọc chúng.Nếukhôngcóbộđệmdữliệuhoặcchươngtrìnhcủabạncầnđọckítựtrựctiếptừ phầncứng,bạncóthểmấtdữliệubởivìkítựtừphầncứngđếnrấtnhanh.Giaothức Handshakingđảmbảodữliệukhôngbịmất,khidữliệuđếncổngquánhanhthìthiếtbị truyềnthôngsẽchuyểndữliệuvàotrongbộđệmnhận. +RTSEnable:quếtđịnhkhinàochophépđườngRequestToSend(RTS),TínhiệuRTS từmáytínhtớimodemđểyêucầuđượctryềndữliệu.KhiRTSEnable=truethìđường RTSmứccaokhicổngmở,tíchmứcthấpkhicổngđóng.VàhiểnnhiênkhiRTSEnablethì đườngRTSluônmứcthấp.RTSdùngtrongRTS/CTShardwarehandshaking.RTSEnable chophépbạndòđườngRTSkhicầnbiếttìnhtrạngcủađườngnày. Cáctínhchấttrênkhôngcólúcthiếtkếgiaodiệnmàchỉcólúcchạychươngtrình( dùngtrongviếtcode). 1.1.2. ĐiềukhiểnMSCommtrongVisualC++ TrênđâylàcácthamsốcủađiềukhiểnMSCommtrongVB. TrongVisualC++,mỗimộtđiềukhiểnđượcđịnhnghĩatrongmộtlớpriêng.Và MSCommcũngkhôngphảilàngoạilệ. Vớicácthamsốởtrêncácbạnhoàntoàncóthểápdụngrấtlàtốtcholậptrìnhvới VC++bởilẽcácthamsốnàybạncóthểlấygiátrịhoặcthiếtlậpthamsốchochúngtương ứngbằngcáchàmthànhviêncửalớpnhưGet_thuộctínhhoặcSet_thuộctính. Vídụ,bạnmuốnthiếtlậpdùngcổngCOM1chẳnghạnthìdùngthuộctínhCommPort ởtrênvàchỉthêmtiềntốSet_nếumuốnthiếtlậpvàGet_nếumuốnlấygiátrịnày. SauđâylàlớpMSCommlàmộtlớpkếthừatừlớpcởsởCWnd,cácbạncóthểtham khảo.Cácbạnchúývềcáckiềudữliệucửacácthamsốvàgiátrịtrảvềcủacáchàm.Việc Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 9/78 chuyểnđổigiữacáckiểudữliệunàycácbạncóthểthamkhảotạithưviệnMSDN MicrosoftJuly2001bằngcáchSearch KeyWord:chínhlàcáctừkhoáchỉnhlàcáckiểudữliệuđó.(nhưCString,…) classCMSComm:publicCWnd { protected: DECLARE_DYNCREATE(CMSComm) public: CLSIDconst&GetClsid() { staticCLSIDconstclsid ={0x648a5600,0x2c6e,0x101b,{0x82,0xb6,0x0,0x0,0x0,0x0,0x0,0x14}}; returnclsid; } virtualBOOLCreate(LPCTSTRlpszClassName, LPCTSTRlpszWindowName,DWORDdwStyle, constRECT&rect, CWnd*pParentWnd,UINTnID, CCreateContext*pContext=NULL) {returnCreateControl(GetClsid(),lpszWindowName,dwStyle,rect,pParentWnd,nID); } BOOLCreate(LPCTSTRlpszWindowName,DWORDdwStyle, constRECT&rect,CWnd*pParentWnd,UINTnID, CFile*pPersist=NULL,BOOLbStorage=FALSE, BSTRbstrLicKey=NULL) {returnCreateControl(GetClsid(),lpszWindowName,dwStyle,rect,pParentWnd,nID, pPersist,bStorage,bstrLicKey);} //Attributes public: //Cácphéptoán public: voidSetCDHolding(BOOLbNewValue); BOOLGetCDHolding(); voidSetCommID(longnNewValue); longGetCommID(); Ngườibáocáo: NgôHảiBắc Tàiliệu: TUT01.03 Ngày: 10/01/06 Trang: 10/78 voidSetCommPort(shortnNewValue); shortGetCommPort(); voidSetCTSHolding(BOOLbNewValue); BOOLGetCTSHolding(); voidSetDSRHolding(BOOLbNewValue); BOOLGetDSRHolding(); voidSetDTREnable(BOOLbNewValue); BOOLGetDTREnable(); voidSetHandshaking(longnNewValue); longGetHandshaking(); voidSetInBufferSize(shortnNewValue); shortGetInBufferSize(); voidSetInBufferCount(shortnNewValue); shortGetInBufferCount(); voidSetBreak(BOOLbNewValue); BOOLGetBreak(); voidSetInputLen(shortnNewValue); shortGetInputLen(); voidSetNullDiscard(BOOLbNewValue); BOOLGetNullDiscard(); voidSetOutBufferSize(shortnNewValue); shortGetOutBufferSize(); voidSetOutBufferCount(shortnNewValue); shortGetOutBufferCount(); voidSetParityReplace(LPCTSTRlpszNewValue); CStringGetParityReplace(); voidSetPortOpen(BOOLbNewValue); BOOLGetPortOpen(); voidSetRThreshold(shortnNewValue); shortGetRThreshold(); voidSetRTSEnable(BOOLbNewValue); BOOLGetRTSEnable(); voidSetSettings(LPCTSTRlpszNewValue); CStringGetSettings(); voidSetSThreshold(shortnNewValue); shortGetSThreshold(); voidSetOutput(constVARIANT&newValue); VARIANTGetOutput(); voidSetInput(constVARIANT&newValue); [...]... SthresHold,PortOpen, InputLen, InputBuffer, OutputBuffer, InBufferSize, InputMode, OutBufferSize. 2 Lậptrình 2.1 Mục đích yêu cầu Chương trình này rất là đơn giản. Chúng ta sẽ tạo ra một chương trình có giao diện như sau: Hình 2.1: Giao diện chương trình Chương trình có chức năng sau: ‐ Nhập kí tự hoặc xâu kí tự vào EditBox Transfer, điều chỉnh tham số giaotiếp trên các ComboBox. Nhấn nút Send để gửi dữ liệu ra cổng COM. ‐ Đồng thời với nó nếu có dữ liệu truyền vê cổng Com thì dữ liệu sẽ được hiển thị ... Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 14/78 Để có thể test luôn chương trình các bạn nối tắt chân 2 và chân 3 của RS232 lại với nhau chính là nối chân RxD và TxD để chúng ta truyền dữ liệu ra RS232 sau đó nhận dữ liệu luôn. Đây là ví dụ test đơn giản không có bắt tay phần cứng. Hình 2.2: Sơ đồ đấu chân của RS232 2.2 Thiết kế giao diện cho chương trình 2.2.1 Tạo dự án “RS232TUT” ... Hình 2.28: Thiết lập thuộc tính cho GroupBox2 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 28/78 Hình 2.30: Thiết lập thuộc tính cho GroupBox3 Hình 2.31: Thiết lập thuộc tính cho GroupBox4 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 29/78 Hình 2.32: Thiết lập thuộc tính cho GroupBox5 Hình 2.33: Thiết lập thuộc tính cho GroupBox6 ... Hình 2.33: Thiết lập thuộc tính cho GroupBox6 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 30/78 Hình 2.34: Thiết lập thuộc tính cho GroupBox7 Hình 2.34: Thiết lập thuộc tính cho GroupBox8 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 31/78 Hình 2.35: Thiết lập thuộc tính cho GroupBox9 Tiếp theo các bạn làm cho các GroupBox 4‐>9 có kích thước bằng nhau và căn lề đẹp hơn ... Hình 2.24: Thêm GroupBox8 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 26/78 Hình 2.25: Thêm GroupBox9 Thay đổi thuộc tính cho GroupBox1: Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 27/78 Hình 2.26: Kích chuột vào GroupBox1 chọn Properties Hình 2.27: Thiết lập thuộc tính Caption: Settings Các bạn làm tương tự với các GroupBox khác, theo hình vẽ dưới đây: ... Khởi động Visual C++, chọn New từ menu File Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 15/78 Hình 2.3: Chọn New từ menu file Hình 2.4: Chọn MFC Application(exe), tên dự án, nơi chứa dự án Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 16/78 Hình 2.5: Chọn Dialog based Hình 2.6: Nhấn Next tiếp tục Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 ... Nhấn Close để đóng hộp thoại Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 21/78 Hình 2.15: Đóng cửa sổ Components and Controls Gallery Bạn thêm điều khiển MSComm vào hộp giao diện bằng cách gắp thả như với các điều khiển thông thường khác Hình 2.16: Thêm điều khiển MSComm Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 22/78 Thế là các bạn đã cho được ứng dụng MSComm vào trong Dialog ... Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 32/78 Hình 2.37 Làm cho các GroupBox 7‐>9 có khoảng cách bằng nhau Hình 2.38: Làm cho các GroupBox này thẳng hàng với nhau Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 33/78 Hình 2.39: Kết quả sau khi làm cho cùng kích thước 2.2.3.2 Thêm các EditBox Hình 2.40: Thêm EditBox1 Người báo cáo: Ngô Hải Bắc Tài liệu: ... 10/01/06 Trang: 34/78 Hình 2.41: kích chuột phải, chọn Properties Hình 2.42: Thiết lập ID cho EditBox1 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 35/78 Hình 2.43: Thiết lập thuộc tính ReadOnly và MultiLine Hình 2.44: Thêm EditBox2 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 36/78 Hình 2.45: Chọn Properties Hình 2.46: Thuộc tính của EditBox ... Hình 2.18: Thêm GroupBox2 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 23/78 Hình 2.19: Thêm GroupBox3 Hình 2.20: Thêm GroupBox4 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 24/78 Hình 2.21: Thêm GroupBox5 Hình 2.22: Thêm GroupBox6 Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 25/78 Hình 2.23: Thêm GroupBox7 . trongthựctế. Dođótôixingiớithiệuchocácbạnviếtchương trình trênPCdùngMSComm.Tôixinđưaramột sốvấn đề nhưsau: ‐Giớithiệuchuẩn giao tiếp RS232 vàđiềukhiểnActiveXMicrosoftCommunication6.0( MSComm):cáchtínhchấtvàcáchthiết lập thamsốtốiưuchođiềukhiển. ‐ Lập trình ứngdụng giao tiếp trêncơsởsửdụngphầnmềmVisualC++trongbộ công cụVisual‐ Studio6.0củaMicrosft: +Thiếtkế giao diệnchương trình. +Viếtmãchochương trình. 1. ĐiềukhiểnMSComm 1.1. Chuẩn giao tiếp RS232 RS232 làmộtchuẩn giao tiếp nối tiếp dùngđịnhdạngkhôngđồngbộ,kếtnốinhiều nhấtlà với 2thiếtbị,chiềudàikếtnốilớnnhấtchophépđểđảmb. trongthựctế. Dođótôixingiớithiệuchocácbạnviếtchương trình trênPCdùngMSComm.Tôixinđưaramột sốvấn đề nhưsau: ‐Giớithiệuchuẩn giao tiếp RS232 vàđiềukhiểnActiveXMicrosoftCommunication6.0( MSComm):cáchtínhchấtvàcáchthiết lập thamsốtốiưuchođiềukhiển. ‐ Lập trình ứngdụng giao tiếp trêncơsởsửdụngphầnmềmVisualC++trongbộ công cụVisual‐ Studio6.0củaMicrosft: +Thiếtkế giao diệnchương trình. +Viếtmãchochương trình. 1 Cáchthiết lập tốiưuchoứngdụng Đểchoứngdụngcóthểđọcngaydữliệukhibắtđầucótrongbộđệmnhậnthìcácbạn nênđặtthuộctínhRthresHold=1. Ngoàiracácbạncầnquantâmđếncácthamsố:CommPort,Settings,Rthreshold, SthresHold,PortOpen,InputLen,InputBuffer,OutputBuffer,InBufferSize,InputMode, OutBufferSize. 2. Lập trình 2.1. Mụcđíchyêucầu Chương trình nàyrấtlàđơngiản.Chúngtasẽtạoramộtchương trình có giao diệnnhư sau: Hình2.1: Giao diệnchương trình Chương trình cóchứcnăngsau: ‐NhậpkítựhoặcxâukítựvàoEditBoxTransfer,điềuchỉnhthamsố giao tiếp trên cácComboBox.NhấnnútSendđểgửidữliệuracổngCOM. ‐Đồngthời với nónếucódữliệutruyềnvêcổngComthìdữliệusẽđượchiểnthị lênEditBoxReceive.KhibạnnhấnvàoClearthìsẽxoádữliệuhiểnthịtrênEditBoxnày. Chúý: Ngườibáocáo: NgôHảiBắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 14/78 Đểcóthểtestluônchương trình cácbạnnốitắtchân2vàchân3của RS232 lại với nhau chínhlànốichânRxDvàTxDđểchúngtatruyềndữliệura RS232 sauđónhậndữliệu luôn.Đâylàvídụtestđơngiảnkhôngcóbắttayphầncứng. Hình2.2:Sơđồđấuchâncủa RS232 2.2.