VB6.0在PC机与单片机串行通信中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB6.0在PC机与单片机串行通信中的应用[摘要] 在开发微机控制及数据采集系统中,要实现pc机与单片机中的串行通信,经常用到的是rs232接口。
我们普通pc机后面的com端口即rs232接口。
vb6.0提供了mscomm通信控件,只需编写少量的程序代码,即可在windows环境下轻松实现串口的数据交换。
本文以笔者曾研制的压力测定系统为例简单介绍通过vb实现计算机串口通信的方法。
[关键词] 串口通信 rs232 vb6.0
随着计算机技术的迅速发展及其在各领域的广泛应用,远程控
制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,以及面向控制等特点,所以下位
机采用单片机来构成主从式多机工作模式。
一、vb6.0实现串行通信方法
vb提供的通信控件mscomm32.ocx,使用前只需从project菜单下的components中选择microsoft comm control 6.0把mscomm32.ocx控件调入工具框中即可使用。
利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以通过触发oncomm事件来追踪、处理通信和错误事件的发生。
由于每个通信控件对应一个串
口,如果要访问多个通信口,则要设计多个通信控件。
硬件连接:
(1)当单片机以rs232接口为端子连接时,单片机与计算机的连接如下图:
(2)当仪表以rs485接口(其它接口如422等类同)为端子连接时,单片机与计算机的连接如下图:
2.mscomm控件简介
为支持串行通信的实现,vb6.0中mscomm控件提供了众多的串行通信属性,但首先必须要熟悉的几个属性主要包括:
commport:设置并返回通讯端口号。
settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
portopen: 设置并返回通讯端口的状态。
也可以打开和关闭端口。
input:从接收缓冲区返回和删除字符。
output:向传输缓冲区写一个字符串。
此外,还包括如下等属性:
inputlen:输入缓冲区数据长度;
inputmode:输入模式,ascii字符或二进制数据;
inbuffersize:设置并返回接收缓冲区的字节数;
outbuffersize:设置并返回输出缓冲区的字节数;
oncomm:在发生通讯事件或错误时,将触发oncomm事
件,commevent属性值将被改变;
rthreshold:引发接收事件的字节数,为0时不引发接收事件;
sthreshold:引发发送事件的字节数,为0时不引发发送事件;
……
二、实例
本例主要介绍以mcs-51系列单片机为基础的智能化仪表与微机的数据通信软件的设计方法。
系统主站为一台微机,子站为6个以单片机为主并利用串口可收发数据的智能仪表组成,每块仪表提供采用rs485通信标准的半双工通信模式。
各子站通讯端子之间采用并联结构通过jr485转换器与pc机串行通信端口相连。
为了避免争夺通信权现象,以主站主动访问每一站地址方式进行数据通信。
由于6个子站与主站的同一串口连接,通信时,由上位机首先发一指令,建立连接,下位机在接收到上位机发来的命令后,及时作出应答,如果上位机发出的命令不正确或不存在(包括校验核不正确),仪表将没有回答。
此外,仪表自动判断计算机发出的命令中是否含有校验核,如果命令中有校验核,则仪表顺答时自动外加2个字符的校验核。
其中,命令的校验核等于所有命令ascii码值的和,超过范围保留余数;回答的校验核等于所有回答ascii码值的和再加上本仪表地址的ascii码值,超过范围保留余数。
在系统软件窗体(form)中加入一个通信控件(mscomm)和二个定时器控件(timer)。
通信控件用于发送和接收数据,定时器控件(timer1)用于控制计算机定时向仪表发送读取命令,定时器控件
(timer2)用于接收仪表向计算机所作应答,并进行计算机对仪表的数据写入。
1.mscomm控件的初始化
在窗体事件中对mscomm的一些属性进行设置
mport=1’利用串口com1进行通讯
mscomm .setting=“19200,s,8,1”‘设置通信控件传输波特率、奇偶校验、数据位、停止位
mscomm.inputlen=0 ‘读取接收缓冲区的所有字符
mscomm.outbuffersize=512’设置发送缓冲区为512字节
mscomm.inbuffersize=1024 ‘设置接收缓冲区为1024字节mscomm.outbuffercount=0 ‘清除发送缓冲区
mscomm.portopen=true ‘打开通信口com1
2.数据读取(timer1控件)
redim shuzu(3) as byte’定义一数组
shuzu(0)=&h23
shuzu(1)=&h30
shuzu(2)=&h31
shuzu(3)=&hd
mscomm1.output=shuzu’发送读取指令
timer1.inteval=50 ‘设置50毫秒发送定时时间间隔
timer1.enabled=false
timer2.enabled=true
3.数据接收并发送写入命令
yiluya=mscomm1.input’数据接命令
……’数据读取后处理代码’以下是写入数据接代码
redim xiugai(10) as byte’定义数组
bb=text1.text
bb = format(bb * 1000, “0000”)
xiugai(0) = &h25
xiugai(1) = &h30
xiugai(2) = dizhi
xiugai(3) = &h33
xiugai(4) = &h43
xiugai(5) = &h2b
xiugai(6) = asc(mid(bb, 1, 1))
xiugai(7) = asc(mid(bb, 2, 1))
xiugai(8) = asc(mid(bb, 3, 1))
xiugai(9) = asc(mid(bb, 4, 1))
xiugai(10) = &hd
mscomm1.output = xiugai’写入命令
timer1.inteval=200 ‘设置200毫秒发送定时时间间隔
timer2.enabled = false
三、结束语
本文对windows环境下vb6.0中mscomm串行通信控件编程的方
法做了探讨和实践。
由于通信控件的强大功能,编程简单,使得windows环境下的串口通信程序设计变得方便易行。