Đề tài Lập trình giao tiếp máy tính qua cổng RS232

ĐỀ TÀI  
Lp trình giao tiếp máy tính qua cng  
RS232  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
1/78  
Ngày:  
10/01/06  
Trang:  
o
Tutorial n 01.02  
Gi đến:  
Đoàn Hip, Doãn Minh Đăng, Hunh Châu Thun  
Ni dung:  
Lp trình giao tiếp máy tính qua cng RS232..  
MICROSOFT WORD  
Tóm tt:  
Vn giao tiếp gia PC và vi điu khin rt quan trong trong các ng dng điu khin, đo lường,..  
trong thc tế.  
Do đó tôi xin gii thiu cho các bn viết chương trình trên PC dùng MSComm. Tôi xin đưa ra mt  
svn đề như sau:  
Gii thiu chun giao tiếp RS232 và điu khin Active X Microsoft Communication 6.0(  
MSComm): cách tính cht và cách thiết lp tham sti ưu cho điu khin.  
Lp trình ng dng giao tiếp trên cơ ssdng phn mm Visual C++ trong bcông cVisual ‐  
Studio 6.0 ca Microsft:  
+ Thiết kế giao din chương trình.  
+ Viết mã cho chương trình.  
1. Điu khin MSComm  
1.1. Chun giao tiếp RS232  
RS232 là mt chun giao tiếp ni tiếp dùng định dng không đồng b, kết ni nhiu  
nht là vi 2 thiết b, chiu dài kết ni ln nht cho phép để đảm bo dliu là 50 – 100 feet  
( 12.7 đến 25.4 m), tc độ 20kBít/s đôi khi là tc độ 115 k Bít/s vi mt sthiết bị đặc bit.  
Để biết được các tham sca chun giao tiếp RS232 trong hệ điu hành ca bn như thế  
no thì bn kích phi chut vào biu tượng My Computer , chn Properties, chn Tab  
HardWare chn Device Manager scó mt tree hin ra. Bn chn Port( Com & LPT), kích  
chut phi vào Communication Port( COM1). Chuyn sang tab Port Setting sthy được  
các tham smà chúng ta cn thiết lp bao gm tn sbus, Data Bits, Parity Bits, Stop Bits,  
Handshaking,..  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
2/78  
Ngày:  
10/01/06  
Trang:  
Hình 1.1: Chn My Computer > Properties  
Hình 1.2: Chn Device Manager  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
3/78  
Ngày:  
10/01/06  
Trang:  
Hình 1.3: Chn Properties ca Communication Port( COM1)  
Hình 1.4: Chn thPort Setting để biết tham số  
Đó chính là lí do ti sao tôi li chn các tham số đưa vào trong các ComboBox như ở  
dưới chương trình này.  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
4/78  
Ngày:  
10/01/06  
Trang:  
1.2. Các thuc tính ca MSComm  
MSComm là mt điu khin ActiveX dùng trong truyn thông ni tiếp. Các tính cht  
ca điu khin này được dùng để thiết lp giao tiếp vi các thiết bngoi vi qua cng  
RS232. Do đó tôi xin gii thiu vi các bn điu khin này trong Visual Basic vì cách gi  
thuc tính đơn gin ca VB. Từ đó sly làm cơ sở để lp trình trên Visual C++.  
1.2.1. Điu khin MSComm trong Visual Basic  
Tt ccác tính cht này bn có thtìm ti thư vin MSDN July 2001 theo đường dn  
như sau tab contents:  
MSDN Library July 2001 / Visual Tools and Languages/ Visual Studio 6.0  
Documentation / Visual Basic Documentation / Reference/ Control Reference / ActiveX  
Control/ MSComm Control  
Các tính cht ca MSComm được sp xếp theo chc năng:  
Thiết lp tham scho cng:  
+ CommID: trli handles đồng nht ti thiết btruyn thông, có kiu Long. Tính cht  
này không có lúc thiết kế mà chcó khi thi hành, thuc tính này là ReadOnly.  
+ CommPort: dng object.CommPort = value. Value là chsca cng Com có giá trtừ  
1 > 16 và mc định có giá tr=1. Các bn cn phi thiết lp thông snày trước khi mcng.  
Scó li error 68 (Device unavailable) nếu như không mở được cng này.  
+ InBuferSize: thiết lp hoc trli kích thước ca bộ đệm nhn, tính = byte. Mc định  
là 1024 byte. Các bn không được nhm ln vi đặc tính InBufferCount là sbyte đang  
chtrong bộ đệm nhn.  
+ InputLen : object.InputLen [ = value ] thiết lp hoc trli sbyte mi ln thuc tính  
Input đọc trong bộ đệm nhn. Mc định giá trValue=0 tc là thuc tính Input sẽ đọc hết  
ni dung ca bộ đệm nhn khi thuc tính này được gi. Nếu skí ttrong bộ đệm nhn  
không = InputLen thì thuc tính Input strli kí trng “”. Ví thế bn cn phi chn  
cách kim tra InBufferCount để chc chn skí tyêu cu đã có đủ trước khi dùng lnh  
.Input. Tính cht này rt là có ích khi đọc dliu mt máy mà dliu ra được định dng  
bng các khi có kích thước cố định.  
+ InputMode: object.InputMode [ = value ] .  
Value = 0 hay = comInputModeText dliu nhn được dng văn bn kiu kí ttheo  
chun ANSI. Dliu nhn được slà mt sâu.  
Value=1 hay = comInputModeBinary dùng nhn mi kiu dliu như kí tự điu khin  
nhúng, kí tNULL,.. Giá trnhn được tInput slà mt mng kiu Byte.  
+ NullDiscard: object.NullDiscard [ = value ] tính cht này quyết định kí ttrng có  
được truyn tcng đến bộ đệm nhn hay không. Nếu value= True kí tnày không được  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
5/78  
Ngày:  
10/01/06  
Trang:  
truyn. value = false kí ttrng sẽ được truyn. Kí ttrng được định nghía theo chun  
ASCII là kí t0 – chr$(0).  
+ OutBuferSize: ging như InBuferSize, mc định là 512.  
+ ParityReplace: thiết lp và trli kí tthay thế kí tkhông đúng trong li ging  
nhau.  
+ PortOpen: thiết lp và trli tính trng ca cng(đóng hoc m).  
object.PortOpen [ = value ]. value = true cng m. value =false cng đóng và xóa toàn  
bdliu trong bộ đệm nhn và truyn. Cn phi thiết lp thuc tính CommPort đúng vi  
tên ca cng trước khi mcng giao tiếp. Thêm vào đó, cng giao tiếp ca thiết bca bn  
phi htrgiá trtrong thuc tính Setting thì thiết bca bn mi hot động đúng, còn  
không thì nó shot động rt dhơi nếu không nói là nó chy không tt. Đường DTR và  
RTS luôn gili trng thái ca cng.  
+ RthresHold: object.Rthreshold [ = value ] value kiu snguyên. Thiết lp skí tự  
nhn được trước khi gây lên skin comEvReceive. Mc định = 0 tc là không có skin  
OnComm khi nhn được dliu. Thiết lp = 1 tc là skin OnComm xy ra khi bt kì kí  
tnào được chuyn đến bộ đệm nhn.  
+ Settings: object.Settings [ = value ] thiết lp hoc trli các thông stn sbaud, bít  
dliu, bít chn l, bít stop. Nếu Value không có giá trkhi msgây ra li 380 (Invalid  
property value).  
+ SThreshold: thiết lp và và trli skí tnhnht được cho phép trong bộ đệm gi  
để xy ra skin OnComm = comEvSend . Theo mc định giá trnày = 0 tc là khi truyn  
skhông gây ra skin OnComm. Nếu thiết lp thông snày =1 thì skin OnComm xy  
ra khi bộ đệm truyn rng. Skin OnComm = comEvSend chxy ra khi mà skí tự  
trong bộ đệm truyn nhhơn hoc = Sthreshold. Nếu skí ttrong bộ đệm này luôn ln  
hơn Sthreshold thì skin này không thxy ra.  
Truyn nhn dliu:  
+ CommEvent: trli phn ln skin giao tiếp hoc có li. CommEvent xy ra khi có  
li hoc khi xy ra skin nào đó. Sau đây là mt shng sli:  
Skin  
Giá trị  
1001  
Miêu tskin  
comEventBreak  
comEventFrame  
comEventOverrun  
Xy ra khi nhn được mt tín hiu Break.  
Li hthng. Phn cng phát hin ra mt li hthng  
1004  
1006  
Xy ra khi cng ttràn( Overrun). Mt kí tkhông được  
đọc tphn cng trước khi kí ttiếp theo ti và do đó kí tự  
này bmt.  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
6/78  
Ngày:  
10/01/06  
Trang:  
comEventRxOver  
1008  
Xy ra khi bộ đệm nhn btràn. Không có đủ chcho dữ  
liu trong bộ đệm nhn.  
comEventRxParity  
comEventTxFull  
1009  
1010  
Li Parity. Phn cng phát hin ra mt li Parity.  
xy ra khi bộ đệm truyn bị đầy. Bộ đệm truyn bị đầy  
trong khi ghi dliu ln vào bộ đệm  
comEventDCB  
1011  
Mt li không mong mun khi đang khôi phc li khi  
điu khin thiết b( DCB – Device Control Block) cho cng  
Mt sskin :  
Skin  
Giá trị  
Miêu tskin  
comEvSend  
1
Xy ra khi skí ttrong bộ đệm truyn nhhơn giá trị  
SthresHold.  
comEvReceive  
2
Xy ra khi bộ đệm nhn được skí tbng giá trị  
RthresHold. Skin này được to ra liên tc cho ti khi bn  
dùng thuc tính Input để ly hết dliu ttrong bộ đệm  
nhn.  
RcomEvCTS  
comEvDSR  
3
4
Xy ra khi có thay đổi trong đường CTS( Clear To Send)  
Xy ra khi thay đổi trong đường DSR( Data Set Ready). Sự  
kin này chxy ra khi đường DSR thay đổi t1 > 0.  
comEvCD  
5
6
Xy ra khi có thay đổi trong đường CD( Carrier Detect)  
comEvRing  
Phát hin chuông (Ring).Mt sUART không htrsự  
kin này.  
comEvEOF  
7
Xy ra khi nhn được kí tkết thúc file ( kí t26 trong  
bng mã ASCII)  
+ EOFEnable : object.EOFEnable [ = value ] quyết định các hành động nếu MSComm  
tìm thy kí tkết thúc file. Nếu value=true khi tìm thy kí tkết thúc file thì sgây lên sự  
kin comEvEOF trong OnCommEvent. Nếu value= false thì skhông gây lên skin này.  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
7/78  
Ngày:  
10/01/06  
Trang:  
+ InBufferCout: trli skí tự đang có trong bộ đệm nhn Bn có thxoá bộ đệm nhn  
bng cách đặt thuc tính này =0 . Không nhm vi thuc tính InBufferSize là tng kích  
thước ca bộ đệm nhn.  
+ Input: nhn và xoá dliu trong bộ đệm nhn.  
Nếu InputMode comInputModeText thì giá trtrvslà mt xâu tc có kiu  
String , dliu dng text trong mt biến kiu Variant. Nếu InputMode =  
comInputModeBinary thì thuc tính này strli dliu dng nhphân dưới dng mt  
mng kiu byte trong mt biến Variant.  
+ OutBufferCount: trli skí ttrong bộ đệm truyn.  
+ Output: ghi dliu vào bộ đệm truyn. có thtruyn kiu text hoc kiu nhphân.  
Nếu truyn bng kiu text thì cho mt biến Variant = kiu String, nếu truyn kiu nhphân  
thì cho cho Output= variant = mt mng kiu Byte.  
Bt tay( handshaking):  
+ Break : thiết lp hoc xoá tín hiu. object.Break [ = value] value = true hoc false. Khi  
set value= true thì thông sBreak này sgi mt tín hiu break. Tín hiu break trì hoàn  
vic truyn dliu và đưa đường truyn vào trng thái break ti khi mà value = false.  
+ CDHolding: quết định xem struyn này đến đâu bng cách truy vn đường CD(  
Carrier Detect). Carrier Detect là tín hiu gi tmodem ti máy tính kết ni vi nó thng  
báo rng nó đang online. Nếu giá tr= true thì nó đường CD đang mc cao, nếu = false  
thì đường dây này đang mc thp. Tính cht này không có trong lúc thiết kế chcó trong  
khi chy chương trình.Carrier Detect được biết như là Receive Line Signal Detect (RLSD).  
+ CTSHolding: quết định khi nào bn gi dliu bng cách truy vn trng thái đường  
Clear To Send (CTS). Thông thường tín hiu CTS được gi tmodem ti máy tính kết ni  
vi nó để báo rng đang quá trình truyn dliu. Thuc tính Readonly chxut hin khi  
chy chương trình. Đường Clear To Send dùng trong RTS/CTS (Request To Send/Clear To  
Send) bt tay phn cng. CTSHolding cho bn mt cách để ttay dò đường Clear To Send  
nếu bn cn biết trng thái ca nó.  
+ DSRHolding: biết trng thái ca đường Data Set Ready (DSR). Tín hiu Data Set  
Ready truyn tmodem ti máy tính ni vi nó để thông báo rng modem đã sn sàng  
hot động. Tính cht này dùng khi viết Data Set Ready/Data Terminal Ready handshaking  
routine cho máy Data Terminal Equipment (DTE)máy trang bị đầu cui dliu.  
+ DTREnable: tính cht này quyết định khi nào cho phép đường Data Terminal Ready  
(DTR) trong truyn thông. Tín hiu DTR gi tmáy tính ti modem đẻ báo rng máy tính  
sn sàng là nơi nhn dliu. Khi DTREnable = true thì đường Data Terminal Ready set lên  
cao khi cng m, và thp khi cng đóng. Nếu DTREnable = false thì đường đó luôn mc  
thp. Trong phn ln trường hp set đường Data Terminal Ready thành thp để hang up  
telephone.  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
8/78  
Ngày:  
10/01/06  
Trang:  
+ Handshaking: thiết lp và trli giao thc bt tay phn cng. object.Handshaking [ =  
value ].  
Các giá trca value:  
comNone  
0
1
2
3
(Mc định) Không bt tay  
comXOnXOff  
comRTS  
Bt tay XON/XOFF  
Bt tay RTS/CTS (Request To Send/Clear To Send)  
Dùng cbt tay Request To Send and XON/XOFF  
comRTSXOnXOff  
Handshaking chlà giao thc truyn thông ni ti quyết định bi dliu nào được  
truyn tcng phn cng ti bộ đệm nhn. Khi kí tca dliu ti cng ni tiếp, thiết bị  
truyn thông schuyn nó vào trong bộ đệm nhn và chương trình ca bn có thể đọc  
chúng. Nếu không có bộ đệm dliu hoc chương trình ca bn cn đọc kí ttrc tiếp từ  
phn cng , bn có thmt dliu bi vì kí ttphn cng đến rt nhanh. Giao thc  
Handshaking đảm bo dliu không bmt, khi dliu đến cng quá nhanh thì thiết bị  
truyn thông schuyn dliu vào trong bộ đệm nhn.  
+ RTSEnable: quết định khi nào cho phép đường Request To Send (RTS), Tín hiu RTS  
tmáy tính ti modem để yêu cu được tryn dliu. Khi RTSEnable = true thì đường  
RTS mc cao khi cng m, tích mc thp khi cng đóng. Và hin nhiên khi RTSEnable thì  
đường RTS luôn mc thp.RTS dùng trong RTS/CTS hardware handshaking. RTSEnable  
cho phép bn dò đường RTS khi cn biết tình trng ca đường này.  
Các tính cht trên không có lúc thiết kế giao din mà chcó lúc chy chương trình (  
dùng trong viết code).  
1.1.2. Điu khin MSComm trong Visual C++  
Trên đây là các tham sca điu khin MSComm trong VB.  
Trong Visual C++ , mi mt điu khin được định nghĩa trong mt lp riêng. Và  
MSComm cũng không phi là ngoi l.  
Vi các tham số ở trên các bn hoàn toàn có tháp dng rt là tt cho lp trình vi  
VC++ bi lcác tham snày bn có thly giá trhoc thiết lp tham scho chúng tương  
ng bng các hàm thành viên ca lp như Get_thuctính hoc Set_thuctính.  
Ví d, bn mun thiết lp dùng cng COM1 chng hn thì dùng thuc tính CommPort  
trên và chthêm tin tSet_ nếu mun thiết lp và Get_ nếu mun ly giá trnày.  
Sau đây là lp MSComm là mt lp kế tha tlp csCWnd, các bn có ththam  
kho. Các bn chú ý vcác kiu dliu ca các tham svà giá trtrvca các hàm. Vic  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
9/78  
Ngày:  
10/01/06  
Trang:  
chuyn đổi gia các kiu dliu này các bn có ththam kho ti thư vin MSDN  
Microsoft July 2001 bng cách Search  
Key Word: chính là các tkhoá chnh là các kiu dliu đó.( như CString,…)  
class CMSComm : public CWnd  
{
protected:  
DECLARE_DYNCREATE(CMSComm)  
public:  
CLSID const& GetClsid()  
{
static CLSID const clsid  
= { 0x648a5600, 0x2c6e, 0x101b, { 0x82, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14 } };  
return clsid;  
}
virtual BOOL Create(LPCTSTR lpszClassName,  
LPCTSTR lpszWindowName, DWORD dwStyle,  
const RECT& rect,  
CWnd* pParentWnd, UINT nID,  
CCreateContext* pContext = NULL)  
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);  
}
BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,  
const RECT& rect, CWnd* pParentWnd, UINT nID,  
CFile* pPersist = NULL, BOOL bStorage = FALSE,  
BSTR bstrLicKey = NULL)  
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,  
pPersist, bStorage, bstrLicKey); }  
// Attributes  
public:  
// Các phép toán  
public:  
void SetCDHolding(BOOL bNewValue);  
BOOL GetCDHolding();  
void SetCommID(long nNewValue);  
long GetCommID();  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
10/78  
Ngày:  
10/01/06  
Trang:  
void SetCommPort(short nNewValue);  
short GetCommPort();  
void SetCTSHolding(BOOL bNewValue);  
BOOL GetCTSHolding();  
void SetDSRHolding(BOOL bNewValue);  
BOOL GetDSRHolding();  
void SetDTREnable(BOOL bNewValue);  
BOOL GetDTREnable();  
void SetHandshaking(long nNewValue);  
long GetHandshaking();  
void SetInBufferSize(short nNewValue);  
short GetInBufferSize();  
void SetInBufferCount(short nNewValue);  
short GetInBufferCount();  
void SetBreak(BOOL bNewValue);  
BOOL GetBreak();  
void SetInputLen(short nNewValue);  
short GetInputLen();  
void SetNullDiscard(BOOL bNewValue);  
BOOL GetNullDiscard();  
void SetOutBufferSize(short nNewValue);  
short GetOutBufferSize();  
void SetOutBufferCount(short nNewValue);  
short GetOutBufferCount();  
void SetParityReplace(LPCTSTR lpszNewValue);  
CString GetParityReplace();  
void SetPortOpen(BOOL bNewValue);  
BOOL GetPortOpen();  
void SetRThreshold(short nNewValue);  
short GetRThreshold();  
void SetRTSEnable(BOOL bNewValue);  
BOOL GetRTSEnable();  
void SetSettings(LPCTSTR lpszNewValue);  
CString GetSettings();  
void SetSThreshold(short nNewValue);  
short GetSThreshold();  
void SetOutput(const VARIANT& newValue);  
VARIANT GetOutput();  
void SetInput(const VARIANT& newValue);  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
11/78  
Ngày:  
10/01/06  
Trang:  
VARIANT GetInput();  
void SetCommEvent(short nNewValue);  
short GetCommEvent();  
void SetEOFEnable(BOOL bNewValue);  
BOOL GetEOFEnable();  
void SetInputMode(long nNewValue);  
long GetInputMode();  
};  
Các bn xem kĩ các hàm, các phép toán trên có ththy là kiu dliu dùng làm tham  
scho hàm hay giá trtrvca các hàm hu hết là các kiu dliu cơ bn như BOOL,  
short,.. Chỉ đặc biết là có kiu dliu VARIANT.  
VARIANT là mt cu trúc mà dliu nó cha là mt kiu union được định nghĩa như  
sau:  
typedef struct FARSTRUCT tagVARIANT VARIANT;  
typedef struct FARSTRUCT tagVARIANT VARIANTARG;  
typedef struct tagVARIANT {  
VARTYPE vt;  
unsigned short wReserved1;  
unsigned short wReserved2;  
unsigned short wReserved3;  
union {  
Byte  
bVal;  
Short  
long  
iVal;  
lVal;  
float  
fltVal;  
dblVal;  
boolVal;  
scode;  
double  
VARIANT_BOOL  
SCODE  
CY  
DATE  
cyVal;  
date;  
BSTR  
bstrVal;  
DECIMAL  
IUnknown  
IDispatch  
SAFEARRAY  
Byte  
short  
long  
FAR* pdecVal  
FAR* punkVal;  
FAR* pdispVal;  
FAR* parray;  
FAR* pbVal;  
FAR* piVal;  
FAR* plVal;  
FAR* pfltVal;  
FAR* pdblVal;  
FAR* pboolVal;  
FAR* pscode;  
FAR* pcyVal;  
FAR* pdate;  
FAR* pbstrVal;  
FAR* FAR* ppunkVal;  
FAR* FAR* ppdispVal;  
FAR* FAR* pparray;  
FAR* pvarVal;  
FAR* byref;  
float  
double  
VARIANT_BOOL  
SCODE  
CY  
DATE  
BSTR  
IUnknown  
IDispatch  
SAFEARRAY  
VARIANT  
void  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
12/78  
Ngày:  
10/01/06  
Trang:  
char  
unsigned short  
cVal;  
uiVal;  
unsigned long  
int  
unsigned int  
char FAR *  
ulVal;  
intVal;  
uintVal;  
pcVal;  
unsigned short FAR *  
unsigned long FAR *  
int FAR *  
puiVal;  
pulVal;  
pintVal;  
puintVal;  
// VT_BYREF|VT_UI4.  
unsigned int FAR *  
};  
};  
Các bn để ý thy rng kiu VARIANT dùng làm tham scho hàm SetInput và là kiu  
trvca hàm GetOutput. Mà vi kiu truyn kiu dng Text chúng ta truyn dliu ra  
cng là dng xâu kí tthì chúng ta chuyn đối gikiu VARIANT sang kiu kí tCString  
như thế nào?  
Chuyn tkiu CString > VARIANT: tôi dùng lp ColeVariant ( các bn có thtra  
trong MSDN dùng tab Index) là dng đóng gói ca kiu cu trúc VARIANT, lp này có  
hàm khi to COleVariant( CString& strSrc ); và do đó nó có thlàm tham scho hàm  
SetInput ca MSComm. Vì vy chúng ta chcn khai báo mt biến ColeVariant là xong.  
CString data_tosend = “Example”;  
CodeVariant temp(data_tosend);  
m_mscomm1.SetInput(temp);  
Chuyn tkiu VARIANT sang kiu CString. Các bn xem li định nghĩa cu trúc  
VARIANT trên xem có biến nào có kiu trvkiu tương thích vi kiu CString( tc có  
thép kiu để trthành kiu CString).  
Tôi thy có thành phn  
BSTR  
bstrVal;  
Do đó ta chvic ép kiu là xong.  
VARIANT data;  
CString m_strData = (CString) data.bstrVal;  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
13/78  
Ngày:  
10/01/06  
Trang:  
1.3. Cách thiết lp ti ưu cho ng dng  
Để cho ng dng có thể đọc ngay dliu khi bt đầu có trong bộ đệm nhn thì các bn  
nên đặt thuc tính RthresHold = 1.  
Ngoài ra các bn cn quan tâm đến các tham s: CommPort, Settings, Rthreshold,  
SthresHold,PortOpen, InputLen, InputBuffer, OutputBuffer, InBufferSize, InputMode,  
OutBufferSize.  
2. Lp trình  
2.1. Mc đích yêu cu  
Chương trình này rt là đơn gin. Chúng ta sto ra mt chương trình có giao din như  
sau:  
Hình 2.1: Giao din chương trình  
Chương trình có chc năng sau:  
Nhp kí thoc xâu kí tvào EditBox Transfer, điu chnh tham sgiao tiếp trên  
các ComboBox. Nhn nút Send để gi dliu ra cng COM.  
‐ Đồng thi vi nó nếu có dliu truyn vê cng Com thì dliu sẽ được hin thị  
lên EditBox Receive. Khi bn nhn vào Clear thì sxoá dliu hin thtrên EditBox này.  
Chú ý:  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
14/78  
Ngày:  
10/01/06  
Trang:  
Để có thtest luôn chương trình các bn ni tt chân 2 và chân 3 ca RS232 li vi nhau  
chính là ni chân RxD và TxD để chúng ta truyn dliu ra RS232 sau đó nhn dliu  
luôn. Đây là ví dtest đơn gin không có bt tay phn cng.  
Hình 2.2: Sơ đồ đấu chân ca RS232  
2.2. Thiết kế giao din cho chương trình  
2.2.1. To dán “RS232TUT”  
Khi động Visual C++, chn New tmenu File  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
15/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.3: Chn New tmenu file  
Hình 2.4: Chn MFC Application(exe), tên dán, nơi cha dán  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
16/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.5: Chn Dialog based  
Hình 2.6: Nhn Next tiếp tc  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
17/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.7: chn như mc định, nhn Next luôn  
Hình 2.8: Kích finish để kết thúc vic to dán  
Giao din ca ng dng ban đầu như sau:  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
18/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.9: Giao din ban đầu  
2.2.2. Thêm điu khin ActiveX Microsoft Communication 6.0  
Đầu tiên bn dùng nút Delete xoá 2 nút OK,Cancel và dòng văn bn tĩnh TODO  
Tmenu Project chn Add to Project. Menu con hin ra bn chn Components  
and Controls:  
Hình 2.10: Chn Components Controls  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
19/78  
Ngày:  
10/01/06  
Trang:  
Hp thoi Components and Control Gallery xut hin bn chn Regestered  
ActiveX Controls(đây là thư mc cha các điu khin ActiveX):  
Hình 2.11: Chn thư mc đầu tiên  
Trong thư mc Registered ActiveX Controls bn chn điu khin mà mình cn  
Microsoft Communications Control, version 6.0. Kích OK  
Hình 2.12: Chn Microsoft Communication Control, version 6.0  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
20/78  
Ngày:  
10/01/06  
Trang:  
Hp thoi yêu cu bn xác nhn có thêm điu khin này vào không, chn OK  
Hình 2.13: Chn OK để thêm điu khin  
Khi đó chúng ta sđược mt lp mi CMSComm là lp dn xut ca lp cơ  
sCWnd. Lp này được khai báo trong file MSComm.h định nghĩa trong file  
MSComm.cpp  
Hình 2.14: Chn tên lp, tên header file, file thc thi như mc định  
Nhn Close để đóng hp thoi  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
21/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.15: Đóng ca sComponents and Controls Gallery  
Bn thêm điu khin MSComm vào hp giao din bng cách gp thnhư vi các  
điu khin thông thường khác  
Hình 2.16: Thêm điu khin MSComm  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
22/78  
Ngày:  
10/01/06  
Trang:  
Thế là các bn đã cho được ng dng MSComm vào trong Dialog  
2.2.3. Thêm các điu khin khác  
2.2.3.1. Thêm các Group Box  
Hình 2.17: Thêm GroupBox1  
Hình 2.18: Thêm GroupBox2  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
23/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.19: Thêm GroupBox3  
Hình 2.20: Thêm GroupBox4  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
24/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.21: Thêm GroupBox5  
Hình 2.22: Thêm GroupBox6  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
25/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.23: Thêm GroupBox7  
Hình 2.24: Thêm GroupBox8  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
26/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.25: Thêm GroupBox9  
Thay đổi thuc tính cho GroupBox1:  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
27/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.26: Kích chut vào GroupBox1 chn Properties  
Hình 2.27: Thiết lp thuc tính Caption: Settings  
Các bn làm tương tvi các GroupBox khác, theo hình vdưới đây:  
Hình 2.28: Thiết lp thuc tính cho GroupBox2  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
28/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.30: Thiết lp thuc tính cho GroupBox3  
Hình 2.31: Thiết lp thuc tính cho GroupBox4  
Người báo cáo:  
Ngô Hi Bc  
Tài liu:  
TUT01.03  
29/78  
Ngày:  
10/01/06  
Trang:  
Hình 2.32: Thiết lp thuc tính cho GroupBox5  
Hình 2.33: Thiết lp thuc tính cho GroupBox6  

Tải về để xem bản đầy đủ

pdf 79 trang yennguyen 02/01/2025 210
Bạn đang xem 30 trang mẫu của tài liệu "Đề tài Lập trình giao tiếp máy tính qua cổng RS232", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfde_tai_lap_trinh_giao_tiep_may_tinh_qua_cong_rs232.pdf