MSComm控件進(jìn)行串口編程的基本步驟
1在建立的工程中插入MSComm控件
2添加MSComm控件ID的控制變量或?qū)ο? 3對(duì)串口進(jìn)行初始化,,設(shè)置MSComm控件的屬性 4添加串口事件的消息處理函數(shù)OnComm()函數(shù),在函數(shù)中根據(jù)應(yīng)用需要,,編寫數(shù)據(jù)處理代碼 5編寫串口發(fā)送等其他代碼 6關(guān)閉串口 個(gè)MSComm控件只能對(duì)應(yīng)一個(gè)串口,如果應(yīng)用程序需要訪問多個(gè)串口,,必須使用多個(gè)MSComm控件,。 處理通信問題的方式:事件驅(qū)動(dòng)方式(與中斷原理類似,觸發(fā)一個(gè)事件處理函數(shù)),,查詢方式,。 MSComm控件的重要屬性中的一部分 CommPort設(shè)置并返回通信端口號(hào) Settings以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn),、數(shù)據(jù)位,、停止位。 PortOpen設(shè)置并返回通信端口的狀態(tài),??梢杂脕泶蜷_和關(guān)閉端口 Input從接受緩沖區(qū)返回和刪除字符串 Output向傳輸緩沖區(qū)寫一個(gè)字符串 每個(gè)屬性都通過Get/Set函數(shù)對(duì)來獲取或設(shè)置控件的屬性 屬性簡介 CommPort 設(shè)置并返回端口號(hào) void CMSComm::SetCommPort(short nNewValue) short CMSComm::GetCommPort() RThreshold 在MSComm控件設(shè)置CommEvent屬性為comEvReceive并產(chǎn)生OnComm之前,設(shè)置并返回要接收的字符數(shù),。達(dá)到設(shè)定值則觸發(fā)OnComm,。 void CMSComm::SetRThreshold(short nNewValue) short CMSComm::GetRThreshold() CTSHolding 確定是否可通過查詢CTS線的狀態(tài)發(fā)送數(shù)據(jù)。硬件握手的手工查詢 void CMSComm::SetCTSHolding(BOOL bNewValue) BOOL CMSComm::GetCTSHolding() SThreshold 在MSComm控件設(shè)置CommEvent屬性為comEvSend并產(chǎn)生OnComm之前,,設(shè)置并返回傳輸緩沖區(qū)中允許的最小字符數(shù),。 void CMSComm::SetSThreshold(short nNewValue) short CMSComm::GetSTreshold() Handshaking 設(shè)置或返回硬件握手狀態(tài),使用內(nèi)部通信協(xié)議 void CMSComm::SetHandshaking(long nNewValue) long CMSComm::GetHandshaking() InputMode 設(shè)置或返回傳輸數(shù)據(jù)的類型 void CMSComm::SetInputMode(long nNewValue) long CMSComm::GetInputMode() DSRHolding 確定DSR線的狀態(tài)。 void CMSComm::SetDSRHolding(BOOL bNewValue) BOOL CMSComm::GetDSRHolding() Settings 設(shè)置并返回波特率,、奇偶校驗(yàn),、數(shù)據(jù)位、停止位參數(shù) void CMSComm::SetSettings(LPCTSTR lpszNewValue) CString CMSComm::GetSettings() "BBBB,P,D,S"BBBB為波特率,,P為奇偶校驗(yàn),,D為數(shù)據(jù)位數(shù),S為停止位數(shù) 缺省值為"9600,N,8,1" InputLen 設(shè)置并返回Input屬性從接收緩沖區(qū)讀取的字符數(shù) void CMSComm::SetInputLen(short nNewValue) short CMSComm::GetInputLen() 缺省值為0,,使用Input將使MSComm控件讀取接收緩沖區(qū)中的全部的內(nèi)容,。在使用Input前,可檢查InBufferCount屬性來確定緩沖區(qū)中是否已有需要數(shù)目的字符。此屬性在從輸出格式為定長數(shù)據(jù)的機(jī)器讀取數(shù)據(jù)時(shí)非常有用,。 InBufferSize 設(shè)置或返回輸入緩沖區(qū)的大小 void CMSComm::SetInBufferSize(short nNewValue) short CMSComm::GetInBufferSize() 默認(rèn)為1024Byte InBufferCount 設(shè)置或返回輸入緩沖區(qū)內(nèi)等待讀取的字節(jié)個(gè)數(shù) void CMSComm::SetInBufferCount(short nNewValue) short CMSComm::GetInBufferCount() 當(dāng)設(shè)置InBufferCount屬性的值為0時(shí),,可以清空接收緩沖區(qū)(很有用的功能) OutBufferSize 設(shè)置或返回發(fā)送緩沖區(qū)的大小 void CMSComm::SetOutBufferSize(short nNewValue) short CMSComm::GetOutBufferSize() 默認(rèn)為512字節(jié)。此值不能太小,,否則緩沖區(qū)易溢出,,但太大會(huì)不必要地占用內(nèi)存。 OutBufferCount 返回發(fā)送緩沖區(qū)的字節(jié)數(shù)或者清空發(fā)送緩沖區(qū) void CMSComm::SetOutBufferCount(short nNewValue) short CMSComm::GetOutBufferCount() 設(shè)置值為0時(shí)清空發(fā)送緩沖區(qū) InPut 從接收緩沖區(qū)內(nèi)讀出數(shù)據(jù) VARIANT CMSComm::GetInPut() 返回為VARIANT型變量 當(dāng)InPutMode為0時(shí),,檢取數(shù)據(jù)為文本方式,,變量中含有String型數(shù)據(jù)類型,當(dāng)InPutMode為1時(shí),,檢取數(shù)據(jù)為二進(jìn)制方式,,變量中含Byte數(shù)組型數(shù)據(jù)。 OutPut 向發(fā)送緩沖區(qū)寫數(shù)據(jù),,或返回發(fā)送緩沖區(qū)當(dāng)前的數(shù)據(jù) void CMSComm::SetOutPut(const VARIANT&newValue) VARIANT CMSComm::GetOutPut() PortOpen 用于打開或關(guān)閉串口,,或返回串口的開、關(guān)狀態(tài) void CMSComm::SetPortOpen(BOOL bNewValue) BOOL CMSComm::GetPortOpen() TURE打開串口,,F(xiàn)ALSE關(guān)閉串口,,程序終止后,MSComm控件自動(dòng)關(guān)閉串口 EOFEnable 確定在輸入過程中MSComm控件是否尋找文件結(jié)尾EOF字符,,如果找到EOF字符,,將停止輸入并激活OnComm事件,此時(shí)CommEvent屬性設(shè)置為ComEvEOF void CMSComm::SetEOFEnable(BOOL bNewValue) BOOL CMSComm::GetEOFEnable() DTREnalbe 設(shè)置或返回DTR線狀態(tài),。 void CMSComm::SetDTREnable(BOOL bNewValue) BOOL CMSComm::GetDTREnable() RTSEnable 確定是否使RTS線有效 void CMSComm::SetRTSEnable(BOOL bNewValue) BOOL CMSComm::GetRTSEnable() Break 設(shè)置或清除中斷信號(hào)的狀態(tài) void CMSComm::SetBreak(BOOL bNewValue) BOOL CMSComm::GetBreak() CommID 返回一個(gè)說明通信設(shè)備的句柄,。 void CMSComm::SetCommID(long nNewValue) long CMSComm::GetCommID() 該值與WindowsAPICreateFile函數(shù)返回的值一致。 NullDiscard 確定Null字符是否從端口傳送到接收緩沖區(qū) void CMSComm::SetNullDiscard(BOOL bNewValue) BOOL CMSComm::GetNullDiscard() OnComm事件和CommEvent屬性 設(shè)置或返回?zé)o論何時(shí)當(dāng)CommEvent屬性的值變化時(shí),,就產(chǎn)生OnComm事件,,標(biāo)志發(fā)生了一個(gè)通信事件或一個(gè)錯(cuò)誤。CommEvent屬性值反映錯(cuò)誤或者事件類型,,通常在程序中的事件消息處理函數(shù)中對(duì)CommEvent事件進(jìn)行處理,。 void CMSComm::SetCommEvent(short nNewValue) short CMSComm::GetCommEvent() 通常由函數(shù)GetCommEvent()得到當(dāng)前事件值,再進(jìn)行相應(yīng)的處理,。 |
|