电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网页制作-> DHTML教程
基于windows95平台的vb5串行端口通信程序的设计_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
----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:\temp"
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
IfTimer>counterThen
mainfrm.Label1.Caption="正在通信......"
mainfrm.Label1.Refresh
counter=Timer 10
EndIf
DoEvents
Loop
EndSub

----以下为事件处理子程序,flag为一静态变量记录读取次数以便改变接收数据的长度,可跟据实际需要添加其它处理内容:

PrivateSubMSComm1_OnComm()
SelectCaseMSComm1.CommEvent
CasecomEvReceive
Ifflag>246Then
MSComm1.InputLen=0:MSComm1.RThreshold=32
EndIf
buffer=MSComm1.Input
temp=buffer
Print#hfile,temp
counter=Timer 10
DoWhileTimer>counter
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->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·脚本技术应用abc_dhtml教程
·dhtml scriptlet_dhtml教程
·用推送技术动态更新页面内容_dhtml教程
·在网页上制作仿电视演职员表效果_dhtml教程
·认识dhtml中的“行为”组件_dhtml教程
·dhtml模拟菜单_dhtml教程
·webeditor网页制作新客_dhtml教程
·现网页自动刷新_dhtml教程
·动态链接、鼠标击活链接_dhtml教程
·dhtml幻灯片播放程序(一)_dhtml教程

最新文章
·windowsxp sp3 概览里面到底有什么?_windows xp
·用photoshop纹理滤镜将宝宝照片变为拼图_photoshop教程
·php中计算时间差的几种方法_php技巧
·photoshop给美女抠发换背景的小技巧_photoshop教程
·photoshop通道抠图合成_photoshop教程
·fireworks绘制线条规律旋转网状特效_fireworks教程
·巧用photoshop通道给手绘图片调色_photoshop教程
·php:“草根语言”挑战“大腕”java .net_php文摘
·fireworks三维插件辅助绘制转动立体球_fireworks教程
·photoshop巧绘制非洲菊_photoshop教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号