基于Windows95平台的VB5串行端口通信程序的设计

2016-02-19 18:11 1 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享基于Windows95平台的VB5串行端口通信程序的设计教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

----VisualBasic5.0以其简单易学、32位面向对象程序设计的支持,倍受广大计算机开发者的青睐,已广泛地应用于各个领域,而在实时监测系统中串行端口通信又是一项基础功能,我们使用VB5编写了实时水库水文自动监测系统的后台机软件,本文就WINDOWS95环境中采用VB5设计串行端口通信程序进行较为详细的讨论且给予实例。
  
  ----一般用VB开发串行通信程序有两种方法:一是利用WINDOWS的通信API函数;另一种是采用VB标准控件Mscomm来实现。
  
  ----一.WINDOWS95的通信API方法
  
  ----WINDOWS95中的串口通信API函数不同于WINDOWS32中的OpenComm、CloseComm、ReadComm、WriteComm,而是采用硬件与文件通用的函数CreateFile、ReadFile、WriteFile、CloseHandle,该类函数更具有一般性,并且可以用EscapeCommFunction函数实现低层次的硬件操作,比如:SETXOFF、CLRDTR等。
  
  ----利用API编写串口通信程序较为复杂,需要掌握的通信知识多一些,其优点是实现功能上可作的更好、应用面更广泛,更适合于编写较为复杂的低层次通信程序等。采用这种方法编写串行端口通信程序一般分可为以下几个过程:
  
  ----(1)初始化串行端口
  
  ----首先用CreateFile函数打开指定串口,置参数中访问类型为GENERIC_READ|GENERIC_WRITE、共享模式为0、创建标志为OPEN_EXISTING、模板句柄为NULL。
  
  ----(2)配置串口
  
  ----WINDOWS95的串口配置比WINDOWS3.x版本较为复杂,但其功能更强大,对一般程序可使用CommConfigDialog函数以对话框方式设置:波特率、数据位、奇偶校验、停止位和流控制方式,并且可以恢复缺省值。
  
  ----(3)超时控制
  
  ----WINDOWS95为了防止意外情况的出现使得串口读写无休止地等待,而提供了超时设置,这是由COMMTIMEOUTS结构定义的,通过调用GetCcommTimeOuts函数获得当前的设置,而用SetCommTimeOuts函数来完成设置。
  
  ----(4)数据传输
  
  ----读写串行端口与读写文件采用相同的函数,即ReadFile、WriteFile,读写操作可分四种方式:查询方式、同步I/O、异步(后台)I/O和事件驱动I/O。
  
  ----(5)关闭串口
  
  ----程序的终止可以自动关闭串口,也可用函数CloseHandle(),以便释放该独占资源。
  
  ----二.用VB通信控件Mscomm的方法
  
  ----Mscomm控件提供了功能完善的串口数据的发送和接收,Mscomm控件具有两种处理方式:①事件驱动方式:由Mscomm控件的OnComm事件捕获并处理通信错误及事件。②查询方式:通过检查CommEvent属性的值来判断事件和错误。
  
  ----Mscomm控件的通信功能实现实际上是调用了API函数,而API函数是由Comm.drv解释并传给设备驱动程序执行的,对于VB程序开发者只需知道Mscomm控件的属性和事件的用法即可以实现串口的操作。以下是Mscomm控件的主要属性和方法:
  
  ----(1)CommPort:设置或返回串行端口号,其取值范围1-99,缺省为1。
  
  ----(2)Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:Mscomm.Setting="9600,N,8,1"。
  
  ----(3)PortOpen:打开或关闭串行端口,格式为:Mscomm.PortOpen={TRUE|FALSE}。
  
  ----(4)InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节。
  
  ----(5)InBufferCount:返回接收缓冲区内的等待读取的字节个数,可通过设该属性为0来清除接收缓冲区。
  
  ----(6)RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE的OnComm事件。
  
  ----(7)InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则INPUT读取整个缓冲区的内容。
  
  ----(8)Input:该属性表示从接收缓冲区移走一串字符。
  
  ----(9)OutBufferSize:设置或返回发送缓冲区,缺省为512字节。
  
  ----(10)OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。
  
  ----(11)Output:向发送缓冲区传送一字符串。
  
  ----(12)EOFEnable:若置TRUE,则当输入中出现EOF,就停止输入并产生OnComm事件。
  
  ----如果在通信过程中发生错误或事件,就会引发OnComm事件并且改变属性值,由CommEvent属性代码反映错误类型,在通信程序的设计中可跟据该属性值来执行不同的操作,以下是部分属性常数值及其含义:
  
  ----(1)ComEvSend:其值为1,发送缓冲区的内容少于SThreshold指定的值。
  
  ----(2)ComEvReceive:其值为2,接收缓冲区内字符数达到RThreshold值,该事件在缓冲区中数据被移走前将持续产生。
  
  ----(3)ComEventFrame:其值为1004,硬件检测到帧错误。
  
  ----(4)ComEventRxOver:其值为1008,接收缓冲区溢出。
  
  ----(5)ComEventTxFull:其值为1010,发送缓冲区溢出。
  
  ----(6)ComEventRxParity:其值为1009,奇偶校验。
  
  ----(7)ComEvEOF:其值为7,接收数据中出现文件结束(ASCII码为26)字符。
  
  ----三.程序样例
  
  ----采用Mscomm控件实现串口通信,首先添加一Mscomm控件到窗体中,该控件一般不在通用工具窗口中,是通过菜单项'工程(P)→部件(O)'进入选择窗口,在控件tab页中选取MicrosoftCommControl5.0,此时工具窗口中出现Mscomm图标,便可被使用。
  
  ----以下是事件驱动方式的接收程序主要部分:
  
  PrivateSubgetdatafromserial_Click()
  CommonDialog1.InitDir="c:emp"
  CommonDialog1.ShowSave
  mainfrm.MSComm1.CommPort=1
  hfile=FreeFile
  OpenCommonDialog1.filenameForOutput
  As#hfile'打开存储接收数据的文件
  mainfrm.MSComm1.InBufferSize=4096
  '设接收缓冲区的大小,可跟量确定
  IfNotmainfrm.MSComm1.PortOpenThen'打开串口
  mainfrm.MSComm1.PortOpen=True
  EndIf
  IfErrThenMsgBox"Communcationportcannotbeopen!!"
  mainfrm.MSComm1.InBufferCount=0
  '清接收缓冲区
  mainfrm.MSComm1.InputLen=77
  '设一次读入的长度,可跟据数据格式设置
  mainfrm.MSComm1.RThreshold=77
  '置接收事件触发的阀值
  counter=Timer 10
  Do
  IfTimercounterThen
  mainfrm.Label1.Caption="正在通信......"
  mainfrm.Label1.Refresh
  counter=Timer 10
  EndIf
  DoEvents
  Loop
  EndSub
  
  ----以下为事件处理子程序,flag为一静态变量记录读取次数以便改变接收数据的长度,可跟据实际需要添加其它处理内容:
  
  PrivateSubMSComm1_OnComm()
  SelectCaseMSComm1.CommEvent
  CasecomEvReceive
  Ifflag246Then
  MSComm1.InputLen=0:MSComm1.RThreshold=32
  EndIf
  buffer=MSComm1.Input
  temp=buffer
  Print#hfile,temp
  counter=Timer 10
  DoWhileTimercounter
  DoEvents
  Loop
  flag=flag 1
  CasecomEvEOF
  EVMsg$="检测到文件结尾!!!"
  CasecomFrame
  ERMsg$="桢出错!!!"
  CasecomRxParity
  ERMsg$="奇偶错!!!"
  EndSelect
  IfLen(EVMsg$)Then
  Text1.Text="Status:"&EVMsg$
  ElseIfLen(ERMsg$)Then
  Text1.Text="Status:"&ERMsg$
  Beep
  Ret=MsgBox(ERMsg$,1,"ClickCancel
  toquit,OKtoignore.")
  MSComm1.PortOpen=False
  EndIf
  EndSub->

来源:https://www.tulaoshi.com/n/20160219/1616973.html

延伸阅读
VisualBasic中通信控件及其在windows平台下的通信软件设计方法,并结合具体实例给出了基本的通信程序。 1992年crescentsoftwareinc.公司专为vb设计了mscomm.vbx用户通信控件,它提供了通过串口发送和接收数据的串行通信能力,不但包括了全部windowsapi中关于串行通信的16个函数所完成的功能,而且开拓了更多的使用户设计方便的对...
你想拥有自己的电子家庭影集吗?其实用VB就能实现。方法如下: 准备:家庭普通照片经扫描后储存。 构想:照片一张接一张出现在屏幕中间,出现时的方式采取动态切换,上方一行标题从左向右移过,标题与照片的背景色随机变化。 关键:调用Bitblt Windows API函数实现照片的动态切换。 内容:工程由Forml和modluel构成。 ...
了解串行通讯 串行通讯协议有很多种,像RS232,RS485,RS422,甚至现今流行的USB等都是串行通讯协议。而串行通讯技术的应用无处不在。可能大家见的最多就是电脑的串口与Modem的通讯。记得在PC机刚开始在中国流行起来时(大约是在90年代前五年),那时甚至有人用一条串行线进行两台电脑之间的数据共享。除了这些,手机,PDA,USB鼠标、键盘等...
----VisualBasic是Windows平台中最常用的应用软件开发语言,窗口图像缩放、滚动是图像处理、多媒体数据库等应用软件开发中的基本功能。本文将介绍如何用VB5.0实现地窗口图像缩放和滚动技巧,供读者在各种语言系统开发中参考。 ----一、获取图像 ----本文所介绍的图像缩放并没有对真正的图像进行缩放,而是复制一幅窗口图像的真实...
使用过VB5的人都会发出这样的赞誉-VB5真牛!的确,Visual Basic 5.0 以其强大的功能和优异的开发环境深深吸引了众多编程迷。彻底中文化的VB5中文版更深得专业人员及编程爱好者的喜爱。笔者在为某单位设计人事履历管理系统时就选用了VB5中文版。可是在设计报表时遇到了难题, 用printer对象的enddoc方法来实现打印的话,输出数十张格式各异...

经验教程

949

收藏

45
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部