| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3123 人关注过本帖
标题:[转载]VB环境下通讯程序的设计
只看楼主 加入收藏
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
收藏
 问题点数:0 回复次数:6 
[转载]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的特点是事件驱动,定时器控件会定时触发相应事件的驱动程序。

1.发送单片机命令

为了使主机能够对整个检测过程进行实时控制,须要在发送命令以后设定等待的时间,也可以通过条件判断下一步是发达还是接收命令。对发送的命令,可能是文本方式或二进制代码。在发送二进制代码时,应特别注意发送的格式。

发送命令过程是一个带参过程,这样可使发送命令简便易行。具体程序如下:

Sub发送单片机命令过程(command As Byte)

Dim输出命令(1 To 1)As Byte

DoEvents

输出命令(1)=command

MSComm1.OutBufferCount=0

MSComm1.Output=输出命令

MSComm1.InBufferCount=0

End Sub

2.接收数据

接收数据是一个被动的过程,可以通过函数来实现,由定时器开启。在接收过程中,多数用特征字符,如“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

3.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

4.自动接收、监视总线状态和通讯错误的处理

自动接收、监视总线状态和通讯错误的处理可以通过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

搜索更多相关主题的帖子: 通讯 环境 设计 
2006-12-21 19:37
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
以前有人故意找這個資料````現在怎么沒人來看暸```

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2006-12-22 10:59
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
可能别人要你发的..是你自己的使用心得...你自己对这的见解..而不是转载过来的..转载的..谁不会找啊..是不?.

我的msn: myfend@
2006-12-22 11:01
wyfandy
Rank: 1
来 自:深圳
等 级:新手上路
帖 子:376
专家分:0
注 册:2006-12-11
收藏
得分:0 
这东西好

不论什么事,只要认准了一个目标,然后朝之不懈地努力,就一定实现。编程爱好者QQ群:21318556
2006-12-22 12:39
holiwood
Rank: 1
等 级:新手上路
帖 子:46
专家分:3
注 册:2007-10-3
收藏
得分:0 
这帖正是我要的,谢谢LZ!
另外再请教个问题,就是怎样连接到远程计算机上的并口?
2009-08-01 06:07
xiaolong265
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-8-2
收藏
得分:0 
这么好的贴子,一定得顶一下
这个东西正是我需要的,谢谢!
2009-08-02 21:41
g0000e
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-3-4
收藏
得分:0 
我在找这个,做个定时控制玩
2013-04-16 09:50
快速回复:[转载]VB环境下通讯程序的设计
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016763 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved