APP下载

VB6.0的MSComm通信控件应用举例

2009-03-27程巍巍

合作经济与科技 2009年7期
关键词:计时器电话号码控件

程巍巍

提要本文介绍了基于VB6.0的MSComm通信控件相关理论,并以一个实例演示了MSComm控件的主要属性。

关键词:串行通信;VB6.0;MSComm控件

中图分类号:F49文献标识码:A

在当今这个科技飞速发展的时代,我们经常需要在计算机与其他设备之间进行通信,而串行通信作为一种灵活、方便、可靠的通信方式被广泛采用。在开发串行通信程序的过程中,利用微软的MSComm通信控件相对比较简单,该控件具有丰富的与串行通信密切相关的属性及事件,提供了对串口的各种操作。MSComm控件在VB中容易使用,在串口编程时也非常方便,程序员不必花时间去了解较为复杂的API函数。

一、用VB6.0进行串行通信程序的设计方法简介

用visual basic6.0进行串行通信程序的设计有两种方式:(1)直接调用Windows API。(2)使用通信组件。该方式实际上是通过通信组件间接调用Windows API函数,其过程要比直接调用API要复杂,但在程序上容易实现。使用MSComm控件时,实际上就是使用了API函数,API函数将被Comm.drv解释并传送给外围设备驱动程序,使用MSComm的用户只需要关心如何使用MSComm所提供的属性或事件,以驱动API函数的接口完成工作。

二、串行通信程序的执行过程

MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通信功能。该控件提供了两种处理通信的方式:

1、事件驱动通信。事件驱动通信是处理串行端口交互作用的一种非常有效的方式。在使用事件驱动通信时,每当有一个字符到达或端口状态发生改变,或发生错误时,MSComm控件将触发OnComm事件进行捕获,通过检查MSComm控件的CommEvent属性获知所发生的事件或错误,从而采取相应的操作处理这些通信事件。这种方法的优点是程序响应及时,可靠性高。

2、查询法。该方法可以在程序的每个关键功能之后,通过检查CommEvent属性的值来查询事件和错误。每个使用的MSComm控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。

查询法适合于较小的应用程序,在这种情况下,每当应用程序执行完某一串行口操作后,将不断检查MSComm控件的CommEvent属性,以检查执行结果或检查某一事件是否发生。

而进行串行通信时一般有两种传输方式:

(1)字符形式:通常以小于ASCII码128的字符码来传递,通常用于传送指令。

(2)二进制形式:将数据以二进制编码的方式传递,它可能含有ASCII码128以上的字符码。通常用来传送数据,以提高速度。

三、串行通信实例

下面以一个实例来演示MSComm控件的主要属性。根据程序需要,进行以下操作步骤:

1、新建工程。启动VB后,新建一个标准的EXE工程。

2、设计用户界面。(1)在“工具”菜单中选中“部件”,在“控件”选项卡中选择“Microsoft Comm Controls6.0”。然后从工具箱中将MSComm添加到窗体Form1中。(2)给窗体Form1添加1个计时器控件,3个命令按钮控件,并设置控件的相关属性。(表1)

3、编写程序代码

Option Explicit

Public echo As Boolean'回应‘打开/关闭标志

Dim ret As Integer'设为整数

Dim starttime As Data'为端口计时器存储开始时间

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的电话号码'从用户处获得电话号码

num=InputBox$("输入电话号码:","拨打电话号码",num)

If num="" Then Exit Sub

If Not MSComm1.PortOpen Then'如果端口没有打开则打开它

If Err Then Exit Sub

End If

MSComm1.Output="ATDT" & num & vbCrLf'拨打电话号码

starttiming'启动端口计时器

End Sub

Private Sub Command3_Click()

On Error Resume Next

MSComm1.Output="ATH"'发送挂机字符串

ret=MSComm1.DTREnable'保存当前设置

MSComm1.DTREnable=True'打开DTR

MSComm1.DTREnable=False'关闭DTR

MSComm1.DTREnable=ret'恢复原来的设置'如果端口确实处于打开状态,则关闭它

If MSComm1.PortOpen Then MSComm1.PortOpen = False

If Err Then MsgBox Error$,48'通知用户错误信息

stoptiming'停止端口计时器

On Error GoTo 0

End Sub

'oncomm事件被用于捕获communications事件及错误

Private Static Sub MSComm1_OnComm()

Dim evmsg$

Dim ermsg$

'依据commecent属性进行分支

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$="被检测的CTS改变"

Case comEvDSR

evmsg$="被检测的DSR改变"

Case comEvCD

evmsg$="被检测的CD改变"

Case comEvRing

evmsg$="电话铃响起"

Case comEvEOF

evmsg$="被检测的文件结尾"

Case comBreak

ermsg$="收到中断"

Case comCDTO

ermsg$="运输检测超时"

Case comCTSTO

ermsg$="CTS超时"

Case comDCB

ermsg$="检索DCB错误"

Case comDSRTO

ermsg$="DSR超时"

Case comFrame

ermsg$="帧错误"

Case comOverrun

ermsg$="超限错误"

Case comRxOver

ermsg$="接收缓冲区溢出"

Case comRxParity

ermsg$="奇偶校验错"

Case comTxFull

ermsg$="传送缓冲区满"

Case Else

ermsg$="未知的错误或事件"

End Select

End Sub

Private Sub starttiming()

'调用此函数启动连接时间计时器

starttime=Now

Timer1.Enabled=True

End Sub

Private Sub stoptiming()

'调用此函数停止计时

Timer1.Enabled = False

End Sub

程序执行时的界面如下图:

(作者单位:西安欧亚学院信息工程学院)

猜你喜欢

计时器电话号码控件
松鼠的计时器
欢欢家的电话号码
猜电话号码
抗缪勒氏管激素:卵巢功能的计时器!
ASP.NET服务器端验证控件的使用
Spreadsheet控件在Delphi数据库系统中的编程与应用