admin 管理员组

文章数量: 1086019


2024年3月19日发(作者:ccle数据库)

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

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

演示了MSComm控件的主要属性。

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

在当今这个科技飞速发展的时代,我们经常需要在计算机与其他设备之

间进行通信,而串行通信作为一种灵活、方便、可靠的通信方式被广泛采用。在

开发串行通信程序的过程中,利用微软的MSComm通信控件相对比较简单,该

控件具有丰富的与串行通信密切相关的属性及事件,提供了对串口的各种操作。

MSComm控件在VB中容易使用,在串口编程时也非常方便,程序员不必花时

间去了解较为复杂的API函数。

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

用visual basic6.0进行串行通信程序的设计有两种方式:(1)直接调用

Windows API。(2)使用通信组件。该方式实际上是通过通信组件间接调用

Windows API函数,其过程要比直接调用API要复杂,但在程序上容易实现。使

用MSComm控件时,实际上就是使用了API函数,API函数将被解

释并传送给外围设备驱动程序,使用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

en = Not en

If Err Then MsgBox Error$,48

openflag = en

If en 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 en Then‟如果端口没有打开则打开它

If Err Then Exit Sub

End If

=“ATDT” & num & vbCrLf‟拨打电话号码

starttiming‟启动端口计时器

End Sub

Private Sub Command3_Click()

On Error Resume Next

=“ATH”„发送挂机字符串

ret=ble‟保存当前设置

ble=True‟打开DTR

ble=False‟关闭DTR

ble=ret‟恢复原来的设置‟如果端口确实处于打开状态,则

关闭它

If en Then en = 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 ent

„事件信息

Case comEvReceive

Dim buffer As Variant

buffer =

“接收-” & 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

d=True

End Sub

Private Sub stoptiming()

„调用此函数停止计时

d = False

End Sub

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


本文标签: 控件 串行 端口