摘要:本文主要介紹利用VB6.0串行通信編程的方法,利用MSComm控件實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)間的串口通信。
關(guān)鍵詞:串口通信;VB6.0;MSCOMM控件
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)08-10ppp-0c
隨著互聯(lián)網(wǎng)的不斷發(fā)展,計(jì)算機(jī)間的相互通信已非常普遍,只要通過計(jì)算機(jī)的串行口就可以實(shí)現(xiàn)。而對(duì)于串口通信的編程軟件,微軟公司的Visual Basic 6.0(簡(jiǎn)稱VB6.0)以其友好的開發(fā)界面、簡(jiǎn)單易用、實(shí)用性強(qiáng)等優(yōu)點(diǎn)已在國(guó)內(nèi)外得到廣泛應(yīng)用。
VB6.0提供了許多供用戶選擇的控件,這些控件以.OCX為文件后綴名,其中MSComm.OCX即是用于串行通信的控件。如果需要使用該控件,可將控件添加到工具箱內(nèi),這樣就可以利用該控件進(jìn)行串行通信程序的設(shè)計(jì)。
下面這個(gè)例子,說明如何進(jìn)行串行通信程序設(shè)計(jì),該程序在Windows98環(huán)境下已調(diào)試通過。在調(diào)試程序時(shí),很難做到一個(gè)人同時(shí)占有兩臺(tái)計(jì)算機(jī)。為此,可通過直接短接串口的2、3兩個(gè)腳,即將串行口的2、3腳連接在一起,從而使發(fā)送的信息直接被本機(jī)接收。這樣,就可以在一臺(tái)計(jì)算機(jī)上調(diào)試程序。
1 MSComm控件常用屬性
Commport 設(shè)置并返回通信端口號(hào)。
Settings 以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。
PortOpen設(shè)置并返回通信端口的狀態(tài),也可以打開和關(guān)閉端口。
InBufferSize 設(shè)置并返回接收緩沖區(qū)的字符數(shù)。
Input 從接收緩沖區(qū)返回和刪除字符。
InputLen設(shè)置并返回Input屬性從緩沖區(qū)讀取的字符數(shù)。
OutBufferSize以字符形式設(shè)置并返回傳輸緩沖區(qū)的大小。
Output向傳輸緩沖區(qū)寫數(shù)據(jù)。
2 用戶界面設(shè)計(jì)
首先新建一個(gè)“標(biāo)準(zhǔn)EXE”工程,然后選擇“工程/部件”菜單項(xiàng),在“部件”對(duì)話框中選擇Microsoft Comm Control6。0 即可添加MSComm控件;再在窗體中依次布置如下控件并設(shè)置其屬性。
完成后的界面如圖1所示。
圖1 運(yùn)行主界面
3 編寫程序代碼
編寫的程序代碼如下:
Private Sub Form_Load()
Msc1.commport=1‘使用串行口1
Msc1.settings=”9600,N,8,1”‘波特率9600,奇校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位
Msc1.InputLen=0 ‘讀取接收緩沖區(qū)的所有字符
Msc1.InBufferSize = 2048‘設(shè)置接收緩沖區(qū)為2048字節(jié)
Msc1.OutBufferSize = 1024 ‘設(shè)置發(fā)送緩沖區(qū)為1024字節(jié)
Msc1.PortOpen=True‘打開串行口
End Sub
Private Sub Command1_Click()‘發(fā)送信息
Dim n As String
On Error Resume Next
IfRTB1.Text = \" \" Then
n = MsgBox(\"發(fā)送信息為空,請(qǐng)輸入發(fā)送信息!\", vbOKCancel + vbQuestion, \"發(fā)送信息出錯(cuò)\")
End If
m = Len(RTB1.Text)‘取發(fā)送信息的字符長(zhǎng)度
If m > Msc1.OutBufferSize Then
Msc1.Output = Mid(RTB1.Text, 1, Msc1.OutBufferSize / 2)
RTB1.Text = Mid(RTB1.Text, Msc1.OutBufferSize / 2 + 1)
Else
Msc1.Output = RTB1.Text
RTB1.Text = \"\"
RTB1.Visible = False
End If
‘如果發(fā)送信息的字符長(zhǎng)度大于發(fā)送緩沖區(qū)的大小,按發(fā)送緩沖區(qū)的大小發(fā)送信息,發(fā)送文本框保留未發(fā)送信息;否則將信息全部發(fā)送,并將發(fā)送文本框清空。
End Sub
Private Sub Command2_Click() ‘接收信息
RTB2.Visible = True
RTB2.Text = \"\"
DoEvents‘該語句使程序可以在此處響應(yīng)其他事件
If Msc1.InBufferCount > 0 Then
Timer1.Enabled = True
RTB2.Text = Msc1.Input
End If
Msc1.PortOpen = False
Timer1.Enabled = False
‘如果接收緩沖區(qū)字符數(shù)不為零,則將接收緩沖區(qū)字符在接收文本框中顯示;否則關(guān)閉串行口,結(jié)束通信。
End Sub
Private Sub Command3_Click() ‘清除信息
RTB2.Text = \" \"
IfMsc1.PortOpen = True Then
Msc1.PortOpen = False
End If
RTB2.Visible = False
End Sub
‘清除接收文本框中信息,關(guān)閉串行口,結(jié)束通信,并使接收文本框不可見。
4 幾點(diǎn)說明
為了使該設(shè)計(jì)更加便于操作,本設(shè)計(jì)在界面上加入了菜單欄的設(shè)計(jì),通過對(duì)菜單按鈕的操作,能實(shí)現(xiàn)對(duì)通信信息的發(fā)送與接收。此外,為了實(shí)現(xiàn)對(duì)通信信息的打開、保存及打印,本設(shè)計(jì)引用了VB6.0中的控件RichTextBox,利用該控件的RichTextBox.LoadFile, RichTextBox.SaveFile,RichTextBox.selprint Printer.hDC屬性即可實(shí)現(xiàn)上述功能。鑒于篇幅有限,該程序代碼沒有給出??傊?,使用VB6.0開發(fā)Windows98下計(jì)算機(jī)間的串口通信程序是非常簡(jiǎn)單的。
參考文獻(xiàn):
[1]周軼峰,等.Visual Basic 6.0實(shí)用編程技術(shù)[M].中國(guó)水利水電出版社,1999.
[2]鄭阿奇.Visual Basic實(shí)用教程[M].電子工業(yè)出版社,2000.
[3]俞旭明,等.Visual Basic 6.0網(wǎng)絡(luò)開發(fā)技術(shù)[M].人民郵電出版社,1999.
[4]李玉東,等.Visual Basic 6.0控件大全[M].電子工業(yè)出版社,2000.