您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > VB60环境下利用Mscomm控件实现串行通信
VB6.0环境下利用Mscomm控件实现串行通信UseMscommControlComponenttoImplementSerialCommunicationunderVisualBasic(637001四川南充西南石油学院)张红兵张宁达郑云萍摘要:本文简要介绍了VB6.0中Mscomm通信控件的属性和使用方法,并结合具体实例给出了基本的通信程序。主题词:串行通信VisualBasicMscomm.vbx控件Abstract:ThispaperbrieflyintroducestheprincipleandmethodofMscommobjectofVisualbasic6.0,andwitharealexamplebasicprogramcodesaregiven.KeyWords:SerialCommunication;VisualBasic;Mscomm.vbxcontrolcomponent随着计算机技术的飞速发展及其广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。而单片机具有价格低,功能强,抗干扰能力好,温限宽和面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。在需要对采集的数据进行分析处理或在远程需要对控制对象的控制过程进行统计或有条件控制时,采用数据库访问技术能有效地解决这类问题。VisualBasic6.0以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows系统开发的主要编程语言。首先表现在VB可直接使用户自定义控件VBX或OCX文件;其次表现在VB可通过调用动态链接库(DLL,dynamiclinklibrary)来加快应用程序关键部分的执行速度。利用VB提供的这些功能可方便地完成程序设计,如串行编程等,本文将介绍VB6.0通信控件Mscomm.vbx及其编程方法,并结合实例给出计算机与单片机进行数据通信的基本程序。1VB6.0实现串行通信方法VB提供的通信控件Mscomm32.ocx,使用前只需从Project菜单下的Components中选择MicrosoftCommControl6.0把Mscomm32.ocx控件调入工具框中即可使用。利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置。在通信过程中可以通过触发OnComm事件来追踪、处理通信和错误事件的发生。由于每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。1通信方式(1)事件驱动方式它是一种功能很强的处理串行通信问题的方法,在实际工作中,往往要处理许多通信中的相关事件,可通过对OnComm属性值进行编程来处理,它也包括检测和处理通信错误等方面的问题,CommEvent值返回最近的通信事件或错误的数字代码。(2)查询方式在每个重要的程序功能之后检查CommEvent属性值来检测事件和通信错误。这种方式常用于应用程序较简单和相对独立的应用程序设计中。2通信控件的基本属性为支持串行通信的实现,VB6.0中Mscomm控件提供了众多的串行通信属性,主要有: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_CommMscomm.PortOpen=True'打开通信口COM2Timer1.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'发送地址帧数据DoDoEAvents'转交控制权LoopUntilMscomm.OutBufferCount=0'发送缓冲区清空Mscomm.Setting=9600,s,8,1'设置校验位(0)OutB=OutBb'Mscomm.Output=OutB'发送数据DoDoEvents'转交控制权LoopUntilMscomm.OutBufferCount=0'Mscomm.InBufferCount=0'清除接收缓冲区Mscomm.RTHreshold=8'所要接收的数据长度Mscomm.RTSEnabled=True'转为接收状态Timer.Enabled=True'启动定时器(2)数据接收程序SubMscomm_OnComm()SelectCaseMscomm.CommEventCasecomEventBreakCasecomEventCDTOCasecomEventCTSTOCasecomEventDSRTOCasecomEventFrameCasecomEventOverrunCasecomEventRxOverCasecomEventRxParityCasecomEventTxFullCasecomEventDCBCasecomEvCDCasecomEvCTSCasecomEvDSRCasecomEvRingCasecomEvEOFCasecomEvReceiveInA=Mscomm.InputInAa=InAMscomm.PortOpen=FalseTimer.Enabled=FalseCallprocessCasecomEvSendEndSelectEndSubPrivateSubTimer.Timer()Timer.Enabled=FalseMscomm.PortOpen=FalseMsgBox超时!通信失败!EndSub3结束语本文对Windows环境下VB6.0中MSComm串行通信控件编程的方法做了探讨和实践。由于通信控件的强大功能,编程简单,同时支持数据以文本和二进制格式收发数据,使得Windows环境下的串口通信程序设计变得方便易行。参考文献梁恩主VisualBasic6.0编程与实例解析[M],北京科学出版社,2000(4)作者简介:张红兵,男,1977年生,2000年毕业于江苏石油化工学院,获学士学位;现为西南石油学院油气储运工程硕士,主要从事轻烃回收和系统控制方面的研究。Tel:(0817)2607946.E-mail:zhanghbjs@sina.com;张宁达,男,1978年生,现工作于扬子石化,主要从事系统控制方面的研究。Tel:(025)7788564,E-mail:zhnid@sina.com(637001四川南充西南石油学院)张红兵张宁达郑云萍通讯地址:
本文标题:VB60环境下利用Mscomm控件实现串行通信
链接地址:https://www.777doc.com/doc-310242 .html