国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

VB6.0的MSComm通信控件應(yīng)用舉例

2009-03-27 08:17程巍巍
合作經(jīng)濟(jì)與科技 2009年7期
關(guān)鍵詞:計(jì)時(shí)器電話號(hào)碼控件

程巍巍

提要本文介紹了基于VB6.0的MSComm通信控件相關(guān)理論,并以一個(gè)實(shí)例演示了MSComm控件的主要屬性。

關(guān)鍵詞:串行通信;VB6.0;MSComm控件

中圖分類號(hào):F49文獻(xiàn)標(biāo)識(shí)碼:A

在當(dāng)今這個(gè)科技飛速發(fā)展的時(shí)代,我們經(jīng)常需要在計(jì)算機(jī)與其他設(shè)備之間進(jìn)行通信,而串行通信作為一種靈活、方便、可靠的通信方式被廣泛采用。在開發(fā)串行通信程序的過(guò)程中,利用微軟的MSComm通信控件相對(duì)比較簡(jiǎn)單,該控件具有豐富的與串行通信密切相關(guān)的屬性及事件,提供了對(duì)串口的各種操作。MSComm控件在VB中容易使用,在串口編程時(shí)也非常方便,程序員不必花時(shí)間去了解較為復(fù)雜的API函數(shù)。

一、用VB6.0進(jìn)行串行通信程序的設(shè)計(jì)方法簡(jiǎn)介

用visual basic6.0進(jìn)行串行通信程序的設(shè)計(jì)有兩種方式:(1)直接調(diào)用Windows API。(2)使用通信組件。該方式實(shí)際上是通過(guò)通信組件間接調(diào)用Windows API函數(shù),其過(guò)程要比直接調(diào)用API要復(fù)雜,但在程序上容易實(shí)現(xiàn)。使用MSComm控件時(shí),實(shí)際上就是使用了API函數(shù),API函數(shù)將被Comm.drv解釋并傳送給外圍設(shè)備驅(qū)動(dòng)程序,使用MSComm的用戶只需要關(guān)心如何使用MSComm所提供的屬性或事件,以驅(qū)動(dòng)API函數(shù)的接口完成工作。

二、串行通信程序的執(zhí)行過(guò)程

MSComm控件通過(guò)串行端口傳輸和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能。該控件提供了兩種處理通信的方式:

1、事件驅(qū)動(dòng)通信。事件驅(qū)動(dòng)通信是處理串行端口交互作用的一種非常有效的方式。在使用事件驅(qū)動(dòng)通信時(shí),每當(dāng)有一個(gè)字符到達(dá)或端口狀態(tài)發(fā)生改變,或發(fā)生錯(cuò)誤時(shí),MSComm控件將觸發(fā)OnComm事件進(jìn)行捕獲,通過(guò)檢查MSComm控件的CommEvent屬性獲知所發(fā)生的事件或錯(cuò)誤,從而采取相應(yīng)的操作處理這些通信事件。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。

2、查詢法。該方法可以在程序的每個(gè)關(guān)鍵功能之后,通過(guò)檢查CommEvent屬性的值來(lái)查詢事件和錯(cuò)誤。每個(gè)使用的MSComm控件對(duì)應(yīng)著一個(gè)串行端口。如果應(yīng)用程序需要訪問(wèn)多個(gè)串行端口,必須使用多個(gè)MSComm控件。

查詢法適合于較小的應(yīng)用程序,在這種情況下,每當(dāng)應(yīng)用程序執(zhí)行完某一串行口操作后,將不斷檢查MSComm控件的CommEvent屬性,以檢查執(zhí)行結(jié)果或檢查某一事件是否發(fā)生。

而進(jìn)行串行通信時(shí)一般有兩種傳輸方式:

(1)字符形式:通常以小于ASCII碼128的字符碼來(lái)傳遞,通常用于傳送指令。

(2)二進(jìn)制形式:將數(shù)據(jù)以二進(jìn)制編碼的方式傳遞,它可能含有ASCII碼128以上的字符碼。通常用來(lái)傳送數(shù)據(jù),以提高速度。

三、串行通信實(shí)例

下面以一個(gè)實(shí)例來(lái)演示MSComm控件的主要屬性。根據(jù)程序需要,進(jìn)行以下操作步驟:

1、新建工程。啟動(dòng)VB后,新建一個(gè)標(biāo)準(zhǔn)的EXE工程。

2、設(shè)計(jì)用戶界面。(1)在“工具”菜單中選中“部件”,在“控件”選項(xiàng)卡中選擇“Microsoft Comm Controls6.0”。然后從工具箱中將MSComm添加到窗體Form1中。(2)給窗體Form1添加1個(gè)計(jì)時(shí)器控件,3個(gè)命令按鈕控件,并設(shè)置控件的相關(guān)屬性。(表1)

3、編寫程序代碼

Option Explicit

Public echo As Boolean'回應(yīng)‘打開/關(guān)閉標(biāo)志

Dim ret As Integer'設(shè)為整數(shù)

Dim starttime As Data'為端口計(jì)時(shí)器存儲(chǔ)開始時(shí)間

Private Sub command1_click()

On Error Resume Next

Dim openflag

MSComm1.PortOpen = Not MSComm1.PortOpen

If Err Then MsgBox Error$,48

openflag = MSComm1.PortOpen

If MSComm1.PortOpen Then

starttiming

End If

End Sub

Private Sub Command2_Click()

On Local Error Resume Next

Static num As String

num="1-029-8936-6735"'MSDN的電話號(hào)碼'從用戶處獲得電話號(hào)碼

num=InputBox$("輸入電話號(hào)碼:","撥打電話號(hào)碼",num)

If num="" Then Exit Sub

If Not MSComm1.PortOpen Then'如果端口沒有打開則打開它

If Err Then Exit Sub

End If

MSComm1.Output="ATDT" & num & vbCrLf'撥打電話號(hào)碼

starttiming'啟動(dòng)端口計(jì)時(shí)器

End Sub

Private Sub Command3_Click()

On Error Resume Next

MSComm1.Output="ATH"'發(fā)送掛機(jī)字符串

ret=MSComm1.DTREnable'保存當(dāng)前設(shè)置

MSComm1.DTREnable=True'打開DTR

MSComm1.DTREnable=False'關(guān)閉DTR

MSComm1.DTREnable=ret'恢復(fù)原來(lái)的設(shè)置'如果端口確實(shí)處于打開狀態(tài),則關(guān)閉它

If MSComm1.PortOpen Then MSComm1.PortOpen = False

If Err Then MsgBox Error$,48'通知用戶錯(cuò)誤信息

stoptiming'停止端口計(jì)時(shí)器

On Error GoTo 0

End Sub

'oncomm事件被用于捕獲communications事件及錯(cuò)誤

Private Static Sub MSComm1_OnComm()

Dim evmsg$

Dim ermsg$

'依據(jù)commecent屬性進(jìn)行分支

Select Case MSComm1.CommEvent

'事件信息

Case comEvReceive

Dim buffer As Variant

buffer = MSComm1.Input

Debug.Print "接收-" & StrConv(buffer,vbUnicode)

'showdate txtterm,(StrConv(buffer,vbUnicode))

Case comEvSend

Case comEvCTS

evmsg$="被檢測(cè)的CTS改變"

Case comEvDSR

evmsg$="被檢測(cè)的DSR改變"

Case comEvCD

evmsg$="被檢測(cè)的CD改變"

Case comEvRing

evmsg$="電話鈴響起"

Case comEvEOF

evmsg$="被檢測(cè)的文件結(jié)尾"

Case comBreak

ermsg$="收到中斷"

Case comCDTO

ermsg$="運(yùn)輸檢測(cè)超時(shí)"

Case comCTSTO

ermsg$="CTS超時(shí)"

Case comDCB

ermsg$="檢索DCB錯(cuò)誤"

Case comDSRTO

ermsg$="DSR超時(shí)"

Case comFrame

ermsg$="幀錯(cuò)誤"

Case comOverrun

ermsg$="超限錯(cuò)誤"

Case comRxOver

ermsg$="接收緩沖區(qū)溢出"

Case comRxParity

ermsg$="奇偶校驗(yàn)錯(cuò)"

Case comTxFull

ermsg$="傳送緩沖區(qū)滿"

Case Else

ermsg$="未知的錯(cuò)誤或事件"

End Select

End Sub

Private Sub starttiming()

'調(diào)用此函數(shù)啟動(dòng)連接時(shí)間計(jì)時(shí)器

starttime=Now

Timer1.Enabled=True

End Sub

Private Sub stoptiming()

'調(diào)用此函數(shù)停止計(jì)時(shí)

Timer1.Enabled = False

End Sub

程序執(zhí)行時(shí)的界面如下圖:

(作者單位:西安歐亞學(xué)院信息工程學(xué)院)

猜你喜歡
計(jì)時(shí)器電話號(hào)碼控件
松鼠的計(jì)時(shí)器
歡歡家的電話號(hào)碼
猜電話號(hào)碼
抗繆勒氏管激素:卵巢功能的計(jì)時(shí)器!
ASP.NET服務(wù)器端驗(yàn)證控件的使用
Spreadsheet控件在Delphi數(shù)據(jù)庫(kù)系統(tǒng)中的編程與應(yīng)用
宾川县| 泌阳县| 阿克| 达日县| 桦甸市| 佛坪县| 尚志市| 福贡县| 张北县| 洞头县| 渝中区| 平罗县| 宁晋县| 蓝山县| 凤凰县| 崇阳县| 洛宁县| 宁安市| 乌拉特后旗| 资兴市| 青州市| 文水县| 泾川县| 高唐县| 宁晋县| 福贡县| 宿松县| 盐亭县| 娄烦县| 沂源县| 宕昌县| 涡阳县| 通海县| 乳源| 罗山县| 涿鹿县| 福州市| 平和县| 乌拉特前旗| 台州市| 苏尼特左旗|