首页专业论文技术应用政策标准解决方案常用资料经验交流教育培训企业技术专家访谈电力期刊
您现在的位置:北极星电力网 > 技术频道 > 专业论文 > 基于VB 6.0的串口通讯程序设计(2)

基于VB 6.0的串口通讯程序设计(2)

北极星电力网技术频道    作者:李锋 曾德良 于湘涛   2002/11/7 0:00:00   

 关键词:  串行通信 通信控件 Visual

  2.1 VB 6.0中MSComm通信控件的属性 通信控件把许多复杂的操作都留给了VB和Windows处理,编程人员编程时只需设置其中的一些属性,下面是几个常用的属性: Commport:设定或传回通信连接端口代号。程序必须指定所要使用的串行端口的号码,Windows系统会使用所设定的通讯端口与外界做通讯。程序亦可经由此属性读回所使用的连接端口的号码。在此所设定的通讯端口由1开始往上递增,MSComm控件的最大值为16,当使用的通讯端口超过16时,控件会通知错误。 如:MSComm1Commport=1指定Com1作为通讯传输。 Settings: 设定初始化参数。以字符串型式设定或传回联机速度、同位检查、数据位、停止位等4个参数。其格式为“BBBB,P,D,S”,其中BBBB为联机速度,P为同位检查方式,D为数据位数,S为停止位数。默认值是“9600,n,8,1”,意为“所使用的通讯端口是以每秒9600 B的速度作传输,不做同位的检查,每个元是8个Bit,而停止位是1个Bit”,而且此4项必须是依照顺序,不可前后对调。 Settings设定完成以后,所送出及收回的字符串便以此设定为主,使用RS-232通讯的两方,Settings必须完全一样,彼此才能顺利地沟通,否则双方无法收到彼此所送的信号。 如:MSComm1Settings=“9600,n,8,1” PortOpen: 设定或传回通讯接口端口的状态。使用串行端口之前必须先将使用的串行埠先行开启,而使用完毕之后,也必须执行关闭的动作。 InPut: 从输入缓冲区传回并移除字符。程序靠这个指令将从对方所传至缓冲区的字符读进程蓄洪,并清除缓冲区中已被读取得自负,这是一种FIFO的机制。 如:Buffer$=MSComm1Input 将输入缓冲区的字符读入Buffer字符串变量中Output: 将一个字符串写入传输缓冲区。 当程序需要向对方传输字符串时,可将字符串使用此指令写入输出缓冲区中。至于串行端口是否将此字符传送到对方的串行输入缓冲区中,则要视送出字符串这方是否设定传送门槛属性而定。 如:MSComm1Output=“ABCDE”,此即将ABCDE五个字母通过RS-232传送出去。 InPutLen: 指定由串行端口读入的字符串的长度。InPut指令将存放在输入暂存区的字符读入,但欲指定所读入的字符长度则需要使用本属性而设定。 如:MSComm1InPutLen=10,当程序执行Input指令时,只会读取10个字符。那什么时候使用InPutLen指令呢?如果我们需要对固定的字符串长度作特别的运算或判断时,就必须使用这个技巧。 Rthreshold:设定或传输引发接收事件的字符数。即属性页上的“最小接收字符数”,当接收缓冲区达到所设定的字符数时,将会引起OnComm事件中的接收事件。所以此属性也就是引起接收事件的“门槛值”,此属性的默认值是0,其意义是无论缓冲区中有多少字符都不引起接收事件。 如:MSComm1Rthreshold=20。当接收缓冲区达到20个字符时,引发接收事件。 Sthreshold: 设定或传回引发传送事件的字符数。如果在传输暂存缓冲区种的字符少于所设定的数值,则CommEvent属性会被设定为CommEvSend,并产生OnComm事件。 如:MSComm1Sthreshold=20。当传送缓冲区字符少于20个字符时,引起传送事件。 CommEvent: 只要有通讯错误或事件发生时都会产生OnComm事件,CommEvent属性存有该事件或错误的数值码,其中最常用到的通讯事件是CommEvReceive,它的值为2,表示收到了Rthreshold个字符。该事件将持续产生直到用Input属性从接受缓冲区移出数据。

  2.2 MSComm处理通信的两种方法

  MSComm控件提供了两种控制串口的方法,类似于DOS的中断和查询。 事件驱动方式OnComm事件是MSComm控件提供的唯一事件。当有数据到达端口或端口状态发生改变或有通信错误产生时,都将触发OnComm事件,以捕获和处理这些通信中产生的错误,通过查询CommEvent属性值,可以获得关于通信事件和通信错误的完整信息,进而进行处理。这是一种功能很强的处理串行口活动的方法,具有程序响应及时、可靠性高的特点。 查询法MSComm控件的CommEvent属性返回通信中产生的事件和错误类型,由通信控件自动检测和跟踪通信状态后设置。因此,在小的程序中,程序员可以在每个重要的程序功能之后检查CommEvent属性值来检测事件和通信错误。如果程序小,实时性不高,这种方法是可取的。 两种方式都可以达到数据传送的目的,到底谁较好?并没有一个定论,要看实际的系统环境而定,也许这两种方式都用得上。

  2.3 MSComm控件数据通信的两种格式 我们在进行串口通信时,一般为字符传送方式。但在某些情况下传送的却不见得是纯文字形态的数据,而是数据或文件。在这种情况下,位在传输线上的数据就是一个字节接一个字节地被传送过来,接收端收到这些数据后,再与以组合形成数据资料或文件,这种情形就是Binary(二进制数据)方式传送。 对应这两种传送方式,用户可以通过对MSComm控件中的InputMode属性的设置来决定Input属性如何取回数据。数据是以字符串的形式接收还是作为字节数组中的二进制来接收,完全视此属性来决定。当InputMode取值为0时(默认值)数据以文字形式取回,当取值为1时,数据以二进制形式取回。

  3 应用举例

  下面我们就来探讨一个简单的传输试验。为了方便,我们把一条RS-232串口传输线上的第2脚与第3脚短路,即从Com1的TXD引脚发送出去的数据又由Com1的RXD引脚接收回来。那么由第3脚输出的讯号就会被传送到第2脚而形成一个完整的回路,从而进入同一部计算机的输入缓冲区。程序只要再由相同的计算机上做续回的动作,即可将数据读入,一样可以形成一个测试环境。这样就达到了我们用单部计算机来模拟两部计算机进行串口通讯的目的。

  本例中以二进制格式发送和接收数据。首先设计程序的界面:开启一个新的VB项目,并于窗体上安排一个MSComm控件,作为串行通讯的信道,按F4调出其属性窗口,将CommPort属性值改为1;另外将InputMode属性改为1,使其以Binary方式接收数据。 安排两个Label控件,在其Caption属性分别填入“*传送区*”和“*接收区*”作为提醒使用者之用。 安排两个文本框,分别对应到传送区与接收区,作为传送的输入区域与接收讯息的显示区域。安排两个按钮,在其Caption属性内分别填入“传送字符”与“结束系统”。 所设计出的画面如下程序所实现的功能:我们希望的表现是按下“传送字符”后,送处在传送区所键入的文字及数据。当接收门槛值一达到程序员所设定的值,便会将缓冲区中的内容读如,并显示在接收区的文本框里。

来源:现代电子技术
友情链接
北极星工程招聘网北极星电气招聘网北极星火电招聘网北极星风电招聘网北极星水电招聘网北极星环保招聘网北极星光伏招聘网北极星节能招聘网招标信息分类电子资料百年建筑网PLC编程培训

广告直拨:   媒体合作/投稿:陈女士 13693626116

关于北极星 | 广告服务 | 会员服务 | 媒体报道 | 营销方案 | 成功案例 | 招聘服务 | 加入我们 | 网站地图 | 联系我们 | 排行

京ICP证080169号京ICP备09003304号-2京公网安备11010502034458号电子公告服务专项备案

网络文化经营许可证 [2019] 5229-579号广播电视节目制作经营许可证 (京) 字第13229号出版物经营许可证新出发京批字第直200384号人力资源服务许可证1101052014340号

Copyright © 2022 Bjx.com.cn All Rights Reserved. 北京火山动力网络技术有限公司 版权所有