深入Windows通信編程_第1頁
深入Windows通信編程_第2頁
深入Windows通信編程_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

深入Windows通信編程

二、Windows通信疑難探討現(xiàn)將筆者在實際編程中遇到的疑難和解決辦法描述如下,希望對遇到類似問題的朋友有所啟發(fā)。1.怎樣用Windows未提供的波特率通信?Windows提供了由110bps至256000bps共十三種波特率,一般情況下已足夠使用。但在某種特定情況下,例如通信對方使用150bps、又無法要求對方改變波特率時,Windows通信就比較困難了。首先想到的解決方法是直接調(diào)用BIOS中斷14H來設置波特率(DOS提供了150bps的波特率)。結果是Windows屏蔽了該中斷,嘗試失敗。最后的是采用"蒙混過關"的辦法解決問題的:首先,以任一Windows支持的波特率(例如300bps)構造通信參數(shù)字符串,調(diào)用BuildCommDCB產(chǎn)生DCB數(shù)據(jù)結構;然后調(diào)用SetCommState設置通信參數(shù);最后再調(diào)用自編函數(shù)直接修改串口通信寄存器的值。經(jīng)實驗,設置成功,且對Windows程序運行無任何不良影響。2.接收數(shù)據(jù)為何"丟失"?通過設置EnableCommNotification函數(shù)中的cbWriteNotify參數(shù)(在發(fā)送WM_COMMNOTIFY消息之前,通信設備驅(qū)動程序必須向應用程序出入隊列中寫入的字節(jié)數(shù)),可以使系統(tǒng)每收到固定個字符發(fā)出一WM_COMMNOTIFY消息,這對于固定長度消息型的通信是很方便的。但實際應用時有時會發(fā)生接收數(shù)據(jù)"丟失"現(xiàn)象,即收到WM_COMMNOTIFY消息后從接收隊列讀出cbNotify個數(shù)據(jù)時,發(fā)現(xiàn)只有前面部分數(shù)據(jù)正確。經(jīng)檢查,"丟失"現(xiàn)象是由于接收數(shù)據(jù)超時引起的,當通信對方時鐘頻率較低時,規(guī)定時間內(nèi)收不到cbWriteNotify指定的數(shù)據(jù)量,即所謂"超時",Windows照樣向應用程序發(fā)送帶CN_RECEIVE標志的WM_COMMNOTIFY消息。然后,在應用程序輸入隊列數(shù)據(jù)讀出之前,Windows不再發(fā)送該類消息。解決的方法是減小cbWriteNotify的設定值直到不再發(fā)生"超時"現(xiàn)象。發(fā)送數(shù)據(jù)時同樣應正確設定cbOutQue值,以免產(chǎn)生"超時"現(xiàn)象。如果將cbWriteNotify或cbOutQue設為-1,則Windows不傳送帶CN_RECEIVE或CN_TRANSMIT標志的WM_COMMNOTIFY消息。3.怎樣合理使用FlushComm與GetCommError函數(shù)?FlushComm函數(shù)的功能是清除指定設備接收或發(fā)送隊列。GetCommError函數(shù)的功能是返回指定設備最近錯誤碼和當前狀態(tài),更重要的是"解鎖"功能:當出現(xiàn)通信錯誤時,Windows會鎖死通信端口直到調(diào)用GetCommError。調(diào)用FlushComm的時機很重要,如果通信端口發(fā)生錯誤,不調(diào)用該函數(shù)就有可能會使接收隊列包含不期望的數(shù)據(jù);若隨便調(diào)用該函數(shù),也有可能造成尚未讀入或發(fā)出的數(shù)據(jù)丟失??傊?,調(diào)用該函數(shù)要做到"心中有數(shù)"。為了合理調(diào)用FlushComm和GetCommError函數(shù),建議在事件掩碼中包含EV_ERR與EV_BREAK。4.Windows多串口通信Windows最多可支持四個串口的通信,但對于ISA總線的PC,由于其COM1與COM3、COM2與COM4分別共用IRQ3和IRQ4,所以只能同時使用兩個串口。MCA、EISA總線系統(tǒng)沒有此限制。如果需要使用的端口不止四個,可以在PC護展槽中加插多用戶卡,如美國的Comtrol、臺灣的Moxa(摩莎)等,就可以支持幾個到幾十個串口,加上隨卡提供的Windows驅(qū)動程序,就可以進行多串口通信。具體用法請參閱擴展卡說明書。三、Windows通信實例實例的通信環(huán)境為:本方COMPAQ4/50微機,安裝中文Windows3.2;對方為8031單片機。通信參數(shù)設置:波特率150b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論