分享

VB6.0环境下利用Mscomm控件实现串行通信

 观天落子 2010-06-02

VB6.0环境下利用Mscomm控件实现串行通信

: 本文简要介绍了VB6.0Mscomm通信控件的属性和使用方法,并结合具体实例给出了基本的通信程序。
主题词:串行通信 Visual Basic Mscomm .vbx控件

Abstract: This paper briefly introduces the principle and method of Mscomm object of Visual basic 6.0, and with a real example basic program codes are given.
Key WordsSerial Communication; Visual Basic; Mscomm .vbx control component

随着计算机技术的飞速发展及其广 泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信 手段。微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。而单片机具有价格低,功能强,抗干扰能力好,温限宽和 面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。在需要对采集的数据进行分析处理或在远程需要对控制对象的控制过程进行统计或有条件控制 时,采用数据库访问技术能有效地解决这类问题。
Visual Basic 6.0
以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows系统开发的主要编程语言。首先表现在VB可直接使用户自定义控件VBXOCX文件;其次表现在VB可通过调用动态链接库(DLLdynamic link library)来加快应用程序关键部分的执行速度。利用VB提供的这些功能可方便地完成程序设计,如串行编程等,本文将介绍VB6.0通信控件Mscomm .vbx及其编程方法,并结合实例给出计算机与单片机进行数据通信的基本程序。
1 VB6.0
实现串行通信方法
VB
提供的通信控件Mscomm32.ocx,使用前只需从Project菜单下的Components中选择Microsoft Comm Control6.0Mscomm32.ocx控件调入工具框中即可使用。利用该控件可对串行通信的数据发送和接收进行 设置,还可对串口状态及串行通信的信息格式和协议进行设置。在通信过程中可以通过触发OnComm事件来追踪、处理通信和错误事件的发生。由于每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控 件。
1通信方式
(1) 事件驱动方式 它是一种功能很强的处理串行通信问题的方法,在实际工作中,往往要处理许多通信中的相关事件,可通过 对OnComm属性值进行编程来处理,它也包括检 测和处理通信错误等方面的问题,CommEvent值返回最近的通信事件或错误的数 字代码。
(2) 查询方式 在每个重要的程序功能之后检查CommEvent属性值来检测事件和通信错误。这种方式常用于应用程序较简单和相对独立的应用程序设计中。
通信控件的基本属性
为支持串行通信的实现,VB6.0Mscomm控件提供了众多的串行通信属性, 主要有:
CommPort
:设置和返回PC机串行端口号;
Settings
:初始化传输波特率、奇偶校验位、数据位宽度和停止位宽度;
Input
:从输入缓冲区中读取数据;
InputLen
:输入缓冲区数据长度;
InputMode
:输入模式,ASCII字符或二进制数据;
Output
:将数据写入输出缓冲区;
InBufferSize
:设置并返回接收缓冲区的字节数;
OutBufferSize
:设置并返回输出缓冲区的字节数;
PortOpen
:布尔型,用于打开或关闭串行通信端口;
OnComm
:在发生通讯事件或错误时,将触发OnComm事件,CommEvent属性值将被改变;
Rthreshold
:引发接收事件的字节数,为0时不引发接收事件;
Sthreshold
:引发发送事件的字节数,为0时不引发发送事件;
…… ……
2
实例
本例主要介绍以MCS-51系列单片机为基础的智能化仪表与微机的数据通信软件的设计方法。系统主站为一台微机, 子站为16个以单片机为主并利用串口可收发数 据的智能仪器组成,采用RS-232通信标准的半双工通信模式。主站 与子站之间为总线型网络结构,以主站轮询子站的方式进行数据通信。由于16个子站与主站的同一串口连接,为 了避免争夺通信权现象,通信时,由上位机首先发一地址帧(1),建立连接,接着发出数据帧(0),下位机在接收到上位机发来的数据后,进行纠错后,回发数据(0),如果在规定的时间内上位机收不到应答数据,即认为本次通信失败。
在系统软件窗体(Form)中加入一个通信控件(Mscomm)和二个定时器控件(Timer)。通信控件用于发送和接收数据,定时器控件(Timer1)用于控制主站定时向每个子站发送下行命令,定时器控件(Timer2)用于主站接收子站数据超时控制。
1
控件的初始化
在窗体事件中对Mscomm的一些属性进行设置
Mscomm.Commport=2 '
利用串口COM2进行通讯
Mscomm.InputLen=0 '
读取接收缓冲区的所有字符
Mscomm.OutBuffersize=1024 '
设置发送缓冲区为512字节
Mscomm.InBufferSize=1024 '
设置接收缓冲区为2048字节
Mscomm.OutBufferCount=0 '
清除发送缓冲区
Mscomm.InBufferCount=0 '
清除接收缓冲区
Mscomm.InputMode=comInputModeBinary '
数据传输设置为二进制格式
Mscomm.Rthreshold=Receive_byte '
设置为主站每次接收Receive_Byte字节,
'
可触发On_Comm
Mscomm.PortOpen=True '
打开通信口COM2
Timer1.Inteval=2000 '
设置2秒发送定时时间间隔
Timer2.Enabled=False '
在发送下行命令后启动Timer2超时定时
'
数据发送尚未开始
Mscomm_send=False '
下行命令传输尚未开始
Mscomm_Receive=False '
接收数据尚未开始
2
数据的发送和接收
MSComm
控件支持以文本和二进制格式传输数据,由于下位机为单片机,处理二进制数据方便快速, 因此本例以二进制格式发送和接收数据。为此,先定义三个用来存放发送和接收数据的Byte类型数组OutAa(2),OutBb(n),InAa()n依所发数据长度而定),还要定义三个用来发送和接收数据的Variant类型变量OutA,OutB,InA。在接收数据时采用事件驱动法, 当接收缓冲区有RTHreshold个数据时,CommEvent属性被置为comEvReceive,并触发OnComm事件,因此,RTHreshold的值即为要接收的数据。如果在规定时间内上位机得不到应答信息,将触发时 钟控件的定时事件报错。
1 数据发送程序
Mscomm .RTSEnable=False '
置为发送状态
Mscomm .Setting="9600,m,8,1" '
设置波特率、校验位(1)、数据位、停止位
Mscomm .OutBufferCount=0 '
清除发送缓冲区
OutA=OutAa '
Mscomm .Output=OutA '
发送地址帧数据
Do 
DoEAvents '
转交控制权
Loop Until Mscomm .OutBufferCount=0 '
发送缓冲区清空
Mscomm .Setting="9600,s,8,1" '
设置校验位(0
OutB=OutBb '
Mscomm .Output=OutB '
发送数据
Do
DoEvents '
转交控制权
Loop Until Mscomm .OutBufferCount=0 '
Mscomm .InBufferCount=0 '
清除接收缓冲区 
Mscomm .RTHreshold=8 '
所要接收的数据长度
Mscomm .RTSEnabled=True '
转为接收状态
Timer.Enabled=True '
启动定时器
2)数据接收程序
Sub Mscomm_OnComm()
Select Case Mscomm .CommEvent
Case comEventBreak
Case comEventCDTO
Case comEventCTSTO
Case comEventDSRTO
Case comEventFrame
Case comEventOverrun
Case comEventRxOver
Case comEventRxParity
Case comEventTxFull
Case comEventDCB
Case comEvCD
Case comEvCTS
Case comEvDSR
Case comEvRing
Case comEvEOF
Case comEvReceive
InA=Mscomm.Input
InAa=InA
Mscomm .PortOpen=False
Timer.Enabled=False
Call process
Case comEvSend
End Select
End Sub
Private Sub Timer.Timer()
Timer.Enabled=False
Mscomm .PortOpen=False
MsgBox "
超时!通信失败!"
End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多