首页 > 论文范文 > 计算机论文 > 计算机论文范文:PC机与多个单片机通讯是如何利用VB通讯控件来实现

计算机论文范文:PC机与多个单片机通讯是如何利用VB通讯控件来实现

摘要:在Windows2000下利用VB的串行通讯控件可实现PC机与多单片机之间的通讯。采用定时器控制大大加快了自动化进程,克服了以往“握手”协议造成的通讯速度缓慢的缺点。本文主要介绍了在PC机上如何利用VB软件构建单片机的上位机界面和底层通信基础。
关键词:单片机;通讯;属性;事件
Abstracts:Using VB COMM Controls in Windows2000 can be realized communications Between many Microcontroller unints and PC.Greatly accelerated by the timer control automated processes,overcoming the past"handshake"agreements resulting from the shortcomings of slow communications.This paper mainly introduces how to use a PC in VB software construction of MCU interface and the underlying communication foundation.
Keywords:MCU;Communication;Property;Events
在采用以PC机为控制中心的数据采集自动化控制系统中,通常需要单片机采集数据,然后用异步串行通讯方式传给PC机,PC对单片机进行定时控制,需要多个单片机协同工作。如果系统不很复杂,可通过定时器控件控制收发过程,在必要的地方自动接收装置,使定时控制和通讯过程完美地结合起来。这样,可以免去“握手”协议的繁琐过程,简化编程,提高速度。VB具有面向对象的设计方法,友好的用户界面,简单方便的串行通讯和实用性强等优点,无论借用其他语言就可以开发出优秀的控制系统通讯软件。本文介绍在Windows2000环境下如何利用VB来实现PC机与多个PS1016单片机之间的串行通讯。
一、VB环境下通讯程序的设计
VB提供了串行端口控制Mscomm来为应用程序提供串行通讯。该控件屏蔽了通信过程中的底层操作,程序员可以设置、监视Mscomm控件的属性和事件,结合Timer控件即可完成对串行口的初始化和数据的输入输出工作。
(一)Mscomm控件的主要属性如下:
1.Commport 设置并返回通讯端口号。端口号可以设置为1~16的任何数,如Mscomm.Commport=2表示设置当前通讯端口为COM2。
2.Setting 设置并返回波特率、奇偶校验、数据位、停止位。格式为Mscomm.Setting=String。String是一个包含四部分的字符串:第一部分为波特率;第二部分为奇偶校验,N表示不校验,M表示符号校验,E表示偶校验,O表示奇校验,S表示空格校验;第三部分为数据位数,其可选值为4,5,6,7,8;第四部分为停止位位数,其可选值为1,1.5,2。Setting属性的缺省值为“9600,N,8,1”。
3.Portopen 设置并返回通讯端口的状态,也可以打开和关闭端口。
4.Input 从接收缓冲区返回和删除字符。该属性在运行时为只读。
5.InputLen设置并返回每次Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时,Input将读取接收缓冲区的全部字符。
6.Output向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。
7.CommEvent返回最近的通讯事件或错误。只要有通讯错误或事件发生错误时就会产生Oncomm事件。CommEvent属性中存有该错误或事件的数值代码。
(二)Timer控件的主要属性如下:
1.Enabled返回或设置一个值,该值用来确定一个窗体或控件否能够对用户产生的事件作出反应。通过把Enabled设置为“Galse”来使Timer控件成为无效,将取消由控件的Interval属性所建立的倒计时数。
2.Interval返回或设置对Timer控件的计时事件调用间的毫秒数。Timer控件的Enabled属性决定该控件是否对时间的推移作出响应。将Enabled设置为“False”会关闭Timer控件,设置为“True”则打开Timer控件。当Timer控件置为有效时,倒计时总是从其Interval属性设置值开始。创建Timer事件程序。可通知VB在每次Interval到时该做什么。Timer控件和Enabled属性设置为“True”时,VB将在Interval时间到后自动访问Timer_Timer过程。
二、主窗体设计
为实现通讯程序,须在VB开发环境下设置一个用做控制通讯的窗体。窗体上主要有一个通讯控件Mscomml和两个Timer控件。VB的特点是事件驱动,定时器控件会定时触发相应事件的驱动程序。
(一)发送单片机命令
为了使主机能够对整个检测过程进行实时控制,须要在发送命令以后设定等待的时间,也可以通过条件判断下一步是发达还是接收命令。对发送的命令,可能是文本方式或二进制代码。在发送二进制代码时,应特别注意发送的格式。
发送命令过程是一个带参过程,这样可使发送命令简便易行。具体程序如下:
Sub发送单片机命令过程(command As Byte)
Dim输出命令(1 To 1)As Byte
DoEvents
输出命令(1)=command
MSComm1.OutBufferCount=0
MSComm1.Output=输出命令
MSComm1.InBufferCount=0
End Sub
(二)接收数据
接收数据是一个被动的过程,可以通过函数来实现,由定时器开启。在接收过程中,多数用特征字符,如“OK”、“#”等。这些需要在通讯协议中约定。
Function接收数据()
Do
DoEvents
In_buffer $=In_buffer$ MSComm2.Input
Loop Until InStr(_buffer$,“OK”)'从串行端口读“OK”响应'
In_buffer=Left(In_buffer,len(In_buffer)-2)
接收数据=In_buffer$
End Function
(三)Timer控件控制
通过Timer控件来控制通讯中的发送命令和接收数据过程,在通讯程序中设置两个Timer控件分别控制发送单片机命令和接收单片机数据。为了实现一台PC机和多单片机之间的通讯,可在一个Timer控件的过程中,在发送命令之前设定命令参数和要接收数据的单片机号,然后发送单片机命令;在另一个Timer控件的过程中,根据发送前设定的单片机号,接收不同单片机的数据。
Timer控件控制程序如下:
'发送命令主控程序
Privata Sub TimerSend_Timer()
TimerSend.Enabled=False
Select Case command
Case 1]
Call发送单片机命令过程(任务1)
TimerReceive.Enabled=False'启动自动接收
Case2
Call发送单片机命令过程(任务2)
MSComm1.Rthreshold=0'关闭自动接收
TimerReceive.Interval=500
TimerReceive.Enabled=True'启动定时器接收机号=1
Case 3
Call发送单片机命令过程(任务3)
MSComm1.Rthreshold=0'关闭自动接收
TimerReceive.lnterval=500
TimerReceive.Enabled=True'启动定时器接收
机号=2
Case 4

Case n

End Select
End.Sub
'接收数据主控程序
Private Sub TimerReceive_Timer()
TimerReceive.Enabled=False
Select Case机号
Case 1
In_buffer$=接收数据(机号)
Call任务2
Case 2
In_buffer$=接收数据(机号)
Call任务3
Case 3

Case n
In_buffer$=接收数据(机号)
Call任务n
End Select
End Sub
(四)自动接收、监视总线状态和通讯错误的处理
自动接收、监视总线状态和通讯错误的处理可以通过OnComm事件实现。VB程序运行过程中只要设置MSComm1.Rthreshold=1,在接收事件发生时程序就会自动访问MSComm1.OnComm()过程。
由于外界干扰或电压波动等原因,PC机和单片机之间的通讯可能会出现错误,如接收缓冲区溢出、网络端口超速等。这些可能发生的事件都能在代码中引起运行错误。为了处理这些错误,须要将错误处理代码添加到程序中。通过控件中的OnComm事件可以捕捉和处理错误。在通讯过程中所发生的通讯错误是CommEvent属性返回的。当CommEvent属性值发生改变时,表明有通讯错误,就会产生OnComm事件。同时,可以利用自动引发OnComm事件的特点在接收过程中加入状态显示码。这样可以监视通讯线路状态,得到单片机和主机及单片机和单片机之间的通讯进程。通讯错误的处理程序如下:
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case ComReceive 'Receive data '自动数据接收、监视总线通信信息
Select Case In_buffer $
Call A
Label.Enabled=“正在执行任务1”
Call B

End Select
Case comFrame 'Framing Error '通讯错误处理
X=MsgBox(“Framing Error!”,16)
…'错误处理
Case comEventOverrun '数据丢失
X=MsgBox(“数据丢失!”,16)
…'错误处理
End Select
End Sub
在PC机上,利用VB开发单片机上位机的基本思路,通过以上设计得以实现。这个思路和设计方法在一些典型的单片机远程网络系统的项目上有着广泛的应用和参考价值。
论文发表首选优普论文发表网

本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。QQ:522-52-5970

计算机   单片机通讯   控件