Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 79 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
79
Dung lượng
3,1 MB
Nội dung
Lập trình giao tiếp máy tính qua cổng RS232 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(); [...]... 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ố giao tiế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ị lên EditBox Receive. Khi bạn nhấn vào Clear thì sẽ xoá dữ liệu hiển thị trên EditBox này. ... 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 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 ... 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” Khởi động Visual C++, chọn New từ menu File ... 1.3 Cách thiết lập tối ưu cho ứng dụng Để cho ứng dụng có thể đọc ngay dữ liệu khi bắt đầu có trong bộ đệm nhận thì các bạn nên đặt thuộc tính RthresHold = 1. Ngoài ra các bạn cần quan tâm đến các tham số: CommPort, Settings, Rthreshold, SthresHold,PortOpen, InputLen, InputBuffer, OutputBuffer, InBufferSize, InputMode, OutBufferSize. 2 Lập trì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ư ... 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: 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: 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.36: Làm cho các GroupBox có cùng kích thước ... 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 Trang: 17/78 Hình 2.7: chọn như mặc định, nhấn Next luôn Hình 2.8: Kích finish để kết thúc việc tạo dự án Giao diện của ứng dụng ban đầu như sau: Người báo cáo: Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 10/01/06 Trang: 18/78 Hình 2.9: Giao diện ban đầu 2.2.2 Thêm điều khiển ActiveX Microsoft Communication 6.0 ... Ngô Hải Bắc Tài liệu: TUT01.03 Ngày: 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 ... // VT_BYREF|VT_UI4 }; }; Các bạn để ý thấy rằng kiểu VARIANT dùng làm tham số cho hàm SetInput và là kiểu trả về của hàm GetOutput. Mà với kiểu truyền kiểu dạng Text chúng ta truyền dữ liệu ra cổng là dạng xâu kí tự thì chúng ta chuyển đối giữ kiểu VARIANT sang kiểu kí tự CString như thế nào? ‐ Chuyển từ kiểu CString ‐> VARIANT: tôi dùng lớp ColeVariant ( các bạn có thể tra trong MSDN dùng tab Index) là dạng đóng gói của kiểu cấu trúc VARIANT, lớp này có ... 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ườ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ập trình giao tiếp máy tính qua cổng RS232 MICROSOFTWORD Tómtắt: Vấn giao tiếp giữaPCvàviđiềukhiểnrấtquantrongtrongcácứngdụngđiềukhiển,đolường,. GiátrịnhậnđượctừInputsẽlàmộtmảngkiểuByte. +NullDiscard:object.NullDiscard[=value] tính chấ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ết lập vàtrảlạikítựthaythếkítựkhôngđúngtronglỗigiống nhau. +PortOpen:thiết lập vàtrảlại tính trạngcủa cổng( đónghoặcmở). object.PortOpen[=value].value=true cổng mở.value=false cổng đóngvàxóatoàn bộdữliệutrongbộđệmnhậnvàtruyền.Cầnphảithiết lập thuộc tính CommPortđúngvới têncủa cổng trướckhimở cổng giao tiếp. Thêmvàođó, cổng giao tiếp củathiếtbịcủabạn phảihỗtrợgiátrịtrongthuộc tính Settingthìthiếtbịc. 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ách tính chấ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ôngcụ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ới2thiếtbị,chiềudàikếtnốilớnnhấtchophépđểđảmb