• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    vb開發通信軟件

    發布: 2007-5-25 09:21 | 作者: jeffreyren | 來源: 互聯網 | 查看: 38次 | 進入軟件測試論壇討論

    領測軟件測試網 vb開發通信軟件

    一、PC串行通信程序機制
    常用的PC串行通信程序大多利用BIOSINT14H中斷,以查詢I/O方式完成異步串行通信。

    Windows系統提供中斷方式驅動的串行通信驅動程序COMM.DRV。通信程序無需直接對串行端口進行操作,而是通過驅動程序這一編程接口進行間接操作。

    Windows操作系統中,串行通信采用“事件通知”方式,支持數據按塊傳送。進行通信時,Windows開辟一個用戶定義的輸入輸出緩沖區,每接收一個字符就產生一個低級硬件中斷,串行驅動程序立即取得控制權,并將字符放入輸入數據緩沖區,然后將控制權返還正在運行的應用程序。如果輸入數據緩沖區滿了,驅動程序用當前定義的流控制機制通知發送方停止發送數據。發送數據也采用類似的處理方式,應用程序將需要發送的數據放入輸出數據緩沖區,串口每發送一個字符就產生一個低級硬件中斷。

    二、PC串行口遠程通信的硬件配置

    串行通信數據鏈中,計算機一端稱為DTE,即數據終端設備;調制解調器一端稱為DCE,即數據通信設備。PC串行通信的硬件連接方式分為零Modem連接和Modem連接。

    零Modem連接即直接用調制解調器電纜將兩臺設備連接起來,Modem連接則通過DCE(Modem)將兩臺PC連接起來。

    零Modem連接用于距離15m內兩臺DTE或DCE設備之間的連接。而Modem連接則通過電話網或專線用于長距離的通信。

    TXD和RXD信號線用于計算機和Modem間傳輸數據信息;RTS從計算機端發送信號到Modem,表示希望把數據傳給Modem,若Modem能接收這個數據,它將發送CTS信號給計算機;DTR從計算機端發送信號到Modem,表示計算機已作好通信準備,Modem將DTR信號作為初始化自己的信號,然后給計算機回送數據設置就緒信號DSR;當本地Modem接收到遠地Modem的呼叫,則發送RING信號給計算機;Modem應答呼叫后,發送數據載波檢測DCD信號到計算機,表示已建立連接。

    Modem的工作狀態分為命令狀態和在線狀態。處于命令狀態時,Modem對串口發送的信息進行解釋,可通過PC串口向Modem發送AT命令對其進行初始化、設置和操作。

    例如,初始化命令為:“ATQOV1WOSOΚ1&C1&D2&YO&WO”,其含義為:

    QO:返回結果碼;

    V1:以字符形式顯示結果碼;

    WO:不返回協商進程結果碼;

    SOΚ1:振鈴一次,即應答;

    &C1:追蹤數據載波信號CD;

    &D2當DTR從開到關時,Modem掛機進入命令狀態;

    &YO:Modem上電時重新調出用戶方案;

    &WO:將以上設置存為動態設置用戶方案0;

    一旦本地Modem與遠地Modem建立連接,Modem即處于在線狀態,可進行數據傳輸。此時,Modem不響應AT命令,直接傳送所收到的數據。

    三、Modem連接遠程通信軟件的編制

    通信過程中大部分的工作由串行通信驅動軟件承擔。

    本文軟件的運行環境為AST+4/66d,Hayes公司的ACCURA144+FAX144Modem,Windows3.2,VB3.0專業版。VB3.0專業版中提供了一個MSCOMM.VBX通信控件。它使用戶能很方便地通過對控件屬性的設置、檢測,訪問串行通信驅動程序的大多數特性,而不必考慮其實現細節。該控件為“事件驅動”,只響應“OnComm”事件,該事件可對已發生的事件或錯誤進行處理,與CommEvent屬性緊密相關。

    通信軟件、通信驅動軟件和Modem之間的通信關系

    以下程序實現了通信的基本過程。包括初始化串口和Modem,上位機撥號呼叫下位機,下位機應答并開始定時傳輸數據,掛機停止傳輸等功能。

    VB3.0編制的通信軟件清單如下:

    上位機控件清單:

    控件名稱 屬性

    Form1Form1Caption ″上位機通信″

    MsComm comm1

    CommandButton1CallCaption ″撥號″

    CommandButton2hangCaption ″掛機″

    CommandButton3ExitCaption ″退出″

    下位機控件清單

    控件名稱 屬性

    Form1Form1Caption ″下位機通信″

    MsComm comm1

    CommandButton1hangCaption ″掛機″

    CommandButton2ExitCaption ″退出″

    Timer1Timer1Interval 3000

    Text(i)Text(i)

    1.串口初始化、設置程序

    在程序初始化時,先對串口初始化。因為使用RTS/CTS握手信號的硬件設備只有RTS信號置為高才能接收數據,所以需將MSCOMM通信控件的RTSenable屬性設為TRUE。由于Modem在處于命令狀態時,通過串口發送的命令以及命令結果均會回顯在輸入緩沖區中,因此在進入在線狀態前,禁止產生EV-RECEIVE事件,避免數據誤處理。

    由于Windows是多任務系統,在進行數據收發循環處理時,應調用DOEVENTS事件,將控制權交還系統,允許Windows執行其他任務。但應注意,在處理OnComm事件時小心使用DOEVENTS,避免系統又產生OnComm事件,造成嵌套,出現堆棧溢出錯誤。

    Sub Form-Load()

    comm1.CommportΚ1′COM1口通信

    comm1.SettingsΚ″9600,N,8,1″′波特率9600,無校驗,8位數據位1位停止位

    comm1.OutBufferSizeΚOUTPACK′設置輸出緩沖區大小

    comm1.InBufferSizeΚINPACK′設置輸入緩沖區大小

    comm1.InputLenΚ1′每次從輸入緩沖區中取一個字符

    comm1.RTSenableΚ-1′RTS信號為高

    comm1.RthresholdΚ0′不產生MSCOMM-EV-RECEIVE事件

    comm1.PortOpenΚ-1′打開串口

    cdΚcomm1.CDHolding′取載波檢測信號線原始狀態

    comm1.outputΚ″ATQOV1WOSOΚ1&C1&D2&YOWO″′初始化Modem

    Do DoEventsLoopUntilcomm1.OutBufferCountΚ0

    End Sub

    2.上位機撥號呼叫下位機

    SubCallcom-Click()

    Comm1.OutPutΚ″ATDT″&Phonnum$&chr$(13)′向Modem發撥號命令

    Do DoEventsLoopUntilcomm1.OutBufferCountΚ0

    End Sub

    3.下位機Modem應答,連通后開始定時傳輸數據

    下位機檢測CD,判斷是否連通:

    Sub Comm1-OnComm()

    Select Casecomm1.CommEvent

    Case5 ′MSCOMM-EV-CD

    Timer1.EnabledΚ-1′啟動定時器

    End Select

    End Sub

    VB傳送定長字符串,數據接收處理相對簡單。但在發送實時數據時,若將數據轉換成定長字符串,這樣會大大降低傳輸效率。在接收端,通知程序從輸入緩沖區中取字符有兩種方法:一是用輪詢方法循環判斷InBufferCount是否為0;另外就是利用Rthreshold屬性觸發“OnComm”事件及“CommEvent”屬性中EV-RECEIVE事件。當Rthreshold的值不為0時,允許產生EV-RECEIVE事件。該屬性設置和返回在通信控件設定CommEvent特性為接收和產生OnComm事件之前要接收的字符數。VB傳送變長字符串時,接收端的Rthreshold值要作相應的改變,以確保接收數據及時準確。

    下位機定時發送字符串“strin3$ΚFormat$(Len(strin1$),″0000″)&chr$(8)&strin2$”。strin1$為當前字符串,strin2$為上一字符串。上位機根據接收strin3$中Len(strin1$),相應改變RthresholdΚLen(strin1$)+4。這樣,通過提前發送字符串長度,改變Rthreshold值可實現發送變長數據。

    Windows串行通信驅動程序的事件驅動特性仍有不穩定的缺陷。如InputLenΚ0時,有可能取出不完整的數據。為保證可靠,采取降低處理速率的方法,保證下位機發送的數據流完整地進入輸入緩沖區。設InputLenΚ1,即每次從緩沖區中取一個字符。也可采用輪詢方法,定時檢測輸入緩沖區。下位機定時發送數據:

    Sub Timer1-Timer()

    If comm1.CDHoldingΙΛcdThen

    str1$-text1(i).Text

    strin2$Κstrin1$′上一字符串

    strin1$Κstr1$′當前字符串

    strin3$ΚFormat$(Len(strin1$),″0000″)&chr$(8)&strin2$

    ′傳送當前字符串長度,以及上一字符串內容

    com m1.OutPutΚstrin3$

    Do DoEventsLoopUntilcomm1.OutBufferCountΚ0

    Else

    Timer1.EnabledΚ0

    End If

    End Sub

    上位機檢測CD狀態,判斷是否連通、并接收處理數據。

    Sub Comm1-OnComm()

    Select Case comm1.CommEvent

    Case5 ′MSCOMM-EV-CD檢測CD狀態,判斷是否連通

    comm1.InBufferCountΚ0′清輸入緩沖區

    comm1.RThresholdΚ4′當輸入緩沖區中有五個字符,

    Case2′MSCOMM-EV-RECEIVE產生EV-RECEIVE事件,接收處理數據

    Do DoEvents

    Ifcomm1.InBufferCountThen′循環從緩沖區中取數據

    str1$Κstr1$+comm1.Input

    Else

    Exit Do

    End If

    Loop

    len2Κ1en1′當前字符串長度

    len1ΚVa1(Left$(str1$,5))′即將發送的字符串長度

    comm1.RThresholdΚlen1+4

    strin$ΚRight$(str1$,len2)′數據處理

    ……

    End Select

    str1$Κ″″

    End Sub

    4.根據設置的AT命令“&D2”,當置DTR信號為低時,Modem掛機進入命令狀態。也可通過串口輸出““+++ATH”+chr$(13)”字符串掛機。

    Sub Hang-click()

    If comm1.CDHoldingΙΛcdThen′檢測CD,判斷是否掛機

    comm1.DTRenableΚ0

    comm1.DTRenableΚ-1′置DTR信號為高,為下一次通信準備

    End If

    End Sub

    5.退出程序時,一定要關閉串口

    Sub Exitcomm()

    comm1.PortOpenΚfalse

    End

    End Sub

    四、Windows通信機制和VB3.0通信控件潛在缺陷

    在通信軟件編制過程中,我們發現Windows下通信機制采用的“事件驅動”在實際運行中不穩定。如在文件傳輸過程中,誤碼和數據丟失的情況時有發生;若串口波特率過高,會產生無法通信或在通信過程中隨機掛機的情況。這主要是由于Windows本身通信機制和通信線路介質及質量的影響。為保證數據傳輸穩定可靠,可采用通信協議如XModem-CRC或YModem。在MSCOMM.VBX通信控件中,Rthreshold屬性值大小與輸入緩沖區InBufferSize大小有關,當Rthreshold值較接近InBufferSize值時,有可能不產生EV-RECEIVE事件,為保證產生該事件,可將InBufferSize值取得較大

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>