?? 84.htm
字號:
<p>用VB5.0開發通信軟件的技巧 </p>
<p></p>
<p>一 自己開發通信軟件的必要性:</p>
<p></p>
<p>隨著計算機應用領域的不斷擴展,計算機之間的遠程通信用得越來越廣泛.進行計算機通信需要調制解調器(modem),電話線及通信軟件.盡管市面上有許多商品通信軟件,但是在許方情況下商品通信軟件并不能滿足實際工作的需要.這是因為通用的通信軟件雖然能發送和接收文件,但有些時侯是不適用的.例如我們在開發一個EDI(電子數據交換)應用系統時,就需要把接收到的某個單證直接地自動地放到一個數據庫中,作為一條記錄。這種情況下采用通用的通信軟件就不行了,需要開發自己專用的通信軟件。</p>
<p>過去,開發通信軟件對于一般的應用軟件開發人員來說是比較困難的。而現在這件事已經變得容易多了。本文介紹如何利用VB5.0和MSCOMM控件開發通信軟件。</p>
<p>要想自己開發通信軟件,除了要掌握VB5.0的基本編程語言以外,還需知道一些微機通信的基本原理。如有關串行端口及調制解調器的基本知識,調制解調器的使用手冊及AT命令集等。這在許多書中都可以找到。本文不再敘述。</p>
<p></p>
<p>二 有關預備知識</p>
<p></p>
<p>在PC機串行端口與調制解調器進行連接時,有十幾根線進行信號傳輸。對于用MSCOMM控件編制通信軟件來說,只需了解以下五根線的代號及作用。以下五根線的高電平/低電平狀態分別對應MScomm控件的相應屬性的True/False值。</p>
<p>(1)DTR線:PC發往MODEM,表示PC機是否已準備好。</p>
<p>(2)RTS線:PC發往MODEM,表示PC機是否允許modem發回數據.</p>
<p>(3)DSR線:MODEM發往PC,表示MODEM是否已做好操作準備</p>
<p>(4)CTS線:MODEM發往PC,表示MODEM是否允許發送數據</p>
<p>(5)CD線:MODEM發往PC,表示MOEDM已經與呼叫的遠方MODEM處于連結狀態</p>
<p></p>
<p>三 MSCOMM控件的屬性及事件</p>
<p></p>
<p>VB5.0所帶的通信控件MSCOMM易學易用。它只有約30個屬性和事件。可以從VB5.0的聯機幫助中找到它的全部資料。本文簡述它的主要屬性及事件,并加已歸類整理。以下用MSCOMM1表示在窗體上設置的一個MSCOMM控件的名稱</p>
<p></p>
<p>(一)通信參數設置</p>
<p></p>
<p>(1)CommPort屬性</p>
<p>語法:MSCOMM1.CommPort[=Value]</p>
<p>作用:設置或返回聯接MODEM的串口的編號。</p>
<p>值:用1,2,...表示串口COM1,COM2....</p>
<p></p>
<p>(2)Settings屬性</p>
<p>語法:MSCOMM1.Settings[=Value]</p>
<p>作用:設置或返回通信參數。</p>
<p>值:String型。例入用"19200,N,8,1"表示傳輸速率為19200bps,沒有奇偶校驗位,8位數據位,1位停止位。</p>
<p></p>
<p>(3)Handshaking屬性</p>
<p>語法:MSCOMM1.Handshaking[=Value]</p>
<p>作用與值:設置或返回硬件握手協議。指的是PC機MODEM之間為了控制流速而約定的內部協議。</p>
<p>0 沒有握手協議。不考慮流量控制。</p>
<p>1 XON/XOFF。即在數據流中嵌如控制苻來進行流控。</p>
<p>2 RTS/CTS。既由信號線RTS/CTS自動進行流量控制。</p>
<p>3 兩者皆可。</p>
<p>注:實踐中我們發現選用2(即RTS/CTS)是很方便的。</p>
<p></p>
<p>(二)打開/關閉端口</p>
<p></p>
<p>(4)PortOpen屬性</p>
<p>語法:MSCOMM1.PortOpen[=Value]</p>
<p>作用:打開或關閉端口。</p>
<p>值:Boolean型。設為True/False可以打開/關閉端口。</p>
<p></p>
<p>(三)發送數據</p>
<p>(5)OutBufferSize屬性</p>
<p>語法:MSCOMM1.OutBufferSize[=Value]</p>
<p>作用:設置或返回傳輸緩沖區大小。</p>
<p>值:Integer型。傳輸緩沖區的字節數。例如可選1024。</p>
<p></p>
<p>(6)OutPut屬性</p>
<p>語法:MSCOMM1.OutPut[=Variant]</p>
<p>作用:向傳輸緩沖區寫數據流。</p>
<p>值:Variant型變量。</p>
<p>注:傳輸文本數據時,應將String型數據放入Variant變量,傳輸二進制數據(即按字節)時Byte型數組數據放入Variant變量</p>
<p></p>
<p>(四)接收數據</p>
<p>(7)InBufferSize屬性</p>
<p>語法:MSCOMM1.InBufferSize[=Value]</p>
<p>作用:設置或返回接收緩沖區大小。</p>
<p>值:Integer型。接收緩沖區的字節數。例如可選1024。</p>
<p></p>
<p>(8)InputMode屬性</p>
<p>語法:MSCOMM1.InputMode[=Value]</p>
<p>作用:設置或返回接收數據的數據類型。</p>
<p>值:0用Input屬性接收文本型數據。</p>
<p>1用Input屬性接收二進制數據。</p>
<p></p>
<p>(9)InBufferCount屬性</p>
<p>語法:MSCOMM1.InBufferCount[=Value]</p>
<p>作用:返回接收緩沖區中已傳到但還未取走的字符個數。</p>
<p>值:Integer型。</p>
<p></p>
<p>(10)Input屬性</p>
<p>語法:MSCOMM1.Input[=Variant]</p>
<p>作用:將接收緩沖區中收到的數據讀入變量。</p>
<p>值:Variant型變量。</p>
<p>注:當InputMode屬性值為0(文本模式)時,變量中含String型數鏡盜nputMode屬性值為1(二進制模式)時,變量中含Byte型數組數據。</p>
<p></p>
<p>(五)狀態控制</p>
<p>(11)DTREnabled屬性</p>
<p>(12)RTSEnabled屬性</p>
<p>(13)DSRHolding屬性</p>
<p>(14)CTSHolding屬性</p>
<p>(15)CDHolding屬性</p>
<p></p>
<p>以上五個屬性即如二所述,均取值TRUE/FALSE,用于讀取或控制pc機與modem之間的交互狀態。需運用好。例在讀取到DSRHolding屬性值為TRUE時再向MODEM發出命令。應當在載波檢測到以后(CDHolding屬性為TRUE)時再向MODEM發送數據。</p>
<p></p>
<p>(六)事件</p>
<p>MSCOMM控件把實際上是十七個事件歸并為一個事件OnComm,用屬性CommEvent的十七個值來區分不同的觸發時機。主要有以下幾個:</p>
<p></p>
<p>(1)CommEvent=1時:傳輸緩沖區中的字符個數已少于Sthreshold(可設置的屬性值)個.</p>
<p>(2)CommEvent=2時:接收緩沖區中收到hreshold(可設置的屬性值)個個字符.利用此事件可編寫接收數據的過程。</p>
<p>(3)CommEvent=3時:CTS線發生變化.</p>
<p>(4)CommEvent=4時:DSR線發生變化.</p>
<p>(5)CommEvent=5時:CD線發生變化.</p>
<p>(6)CommEvent=6時:檢測到振鈴信號.</p>
<p>另外十個情況是可能發生的各種通信錯誤時觸發。可參看有關資料.</p>
<p></p>
<p>四 通信軟件參數設置</p>
<p></p>
<p>在自己編寫的通信軟件中,應包含進行通信參數設置的功能。主要就是可以設置端口號,波特率,數據位,停止位,奇偶校驗位及設置硬件握手協議。</p>
<p>可在一個窗體上用下拉列表框,選擇鈕等由用戶來選擇。《保存》時,利用VB5.0的Settings函數將這些參數存儲在WINDOWS95的系統注冊表中。每次運行該軟件時,先用GetSettings函數調出這些參數,并對Commport,Settings,Handshaking等屬性賦值,來進行通信參數設置。</p>
<p></p>
<p>五 打開通信端口</p>
<p></p>
<p>在編寫的通信軟件的主窗體上,可以安排一個打開/關閉端口的菜單項或圖形按鈕。在打開端口時,可向MODEM發出命令,進行MODEM參數設置。可以象下面這樣來編程:</p>
<p>(1)打開/關閉端口</p>
<p>MSComm1.PORTOPEN=NotMSComm1.PORTOPEN</p>
<p>(2)向MODEM發出DTR(已準備好)信號</p>
<p>OpenFlag=MSComm1.PORTOPEN</p>
<p>If OpenFlag Then</p>
<p>MSComm1.DTREnable=True</p>
<p>Else</p>
<p>MSComm1.DTREnable=False</p>
<p>End If</p>
<p>(3)打開時向MODEM發出一些命令來設置參數</p>
<p>S0=n(n>=1)自動應答.n為響鈴次數</p>
<p>E0/E1關閉/打開命令字符回應</p>
<p>Q0/Q1modem返回/不返回結果碼</p>
<p>M0/M1關閉/打開MODEM揚聲器.</p>
<p>If OpenFlag Then</p>
<p>L1:</p>
<p>If MSComm1.CTSHolding Then</p>
<p>Outstring="ATS0=1E1Q0M0"+Chr(13)</p>
<p>MSComm1.Output=Outstring</p>
<p>GoTo LL</p>
<p>Else</p>
<p>GoTo L1</p>
<p>End If</p>
<p>End If</p>
<p>LL:...</p>
<p></p>
<p>也可以安排一些可變換顏色的指示燈來代表端口打開狀態,CD線狀態等,這樣更形象生動。</p>
<p></p>
<p>六 撥號</p>
<p></p>
<p>進行撥號需向MODEM發出ATDT命令。可用如下語句:</p>
<p>cc="ATDT"+Trim(Text1.Text)+Chr(13)</p>
<p>MSComm1.Output=cc</p>
<p>其中TEXT1是窗體上讓用戶輸入電話號的文本框。</p>
<p>為了使程序功能更強一些,可以增加<電話號碼簿管理>,可以增加,修改,刪除,查詢電話號碼。這與一般的數據庫應用程序是一樣的。</p>
<p></p>
<p>七 發送文件</p>
<p></p>
<p>撥號以后,程序要循環等待并隨時判定是否接通。如果MODEM向PC的回應字符串中含有"Connect"或CDHolding屬性值變為True(檢測出載波),則表示已與遠方MODEM連機了。這時就可以發送文件了。</p>
<p>發送文件開始以前,可打開一個顯示發送信息的窗口。可在此窗口上顯示要發送的文件名,總長度,已發送長度等信息。</p>
<p>設置以下全局變量,存放標志字符串,在發送及接收程序中均使用。</p>
<p>S_FILENAME="FILENAME"+Chr(5)+Chr(13)+Chr(10)</p>
<p>S_FILELEN="FILELEN"+Chr(5)+Chr(13)+Chr(10)</p>
<p>S_FILESTAR="FILESTAR"+Chr(5)+Chr(13)+Chr(10)</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -