VB_MSCOMM控件简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB 通信控件Mscomm
Mscomm 控件提供了功能完善的串口数据的发送和接收功能,Mscomm 控件具有两种处理方式: 1 事件驱动方式: 由Mscomm 控件的OnComm 事件捕获并处理通信错误及事件;2 查询方式: 通过检查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 页中选取Microsoft Comm Control 5.0 ,此时工具窗口中出现Mscomm 图标,即可被使用。

以下是事件驱动方式的接收程序的主要部分:
Private Sub getdatafromserial_Click()
\temp"
CommonDialog1.InitDir = “c:
CommonDialog1.ShowSave
mPort=1
hfile = FreeFile
打开存储接收数据的文件
’ 
Open CommonDialog1.filename For Output As #hfile
设接收缓冲区的大小,可按量确定
’ 
mainfrm.MSComm1.InBufferSize = 4096
打开串口
If Not mainfrm.MSComm1.PortOpen Then ’ 
-- mainfrm.MSComm1.PortOpen = True
End If
If Err Then
MsgBox “Communcation port cannot be opened!!"
清接收缓冲区
’ 
mainfrm.MSComm1.InBufferCount = 0
设一次读入的长度,可根据数据格式设置
’ 
mainfrm.MSComm1.InputLen = 77
’ 
设置接收事件触发的阀值
mainfrm.MSComm1.RThreshold = 77
counter = Timer +10
Do
If Timer > counter Then
正在通信......"
bel1.Caption = “ 
bel1.Refresh
counter = Timer +10
End If
DoEvents
Loop
End Sub
以下为事件处理子程序,flag 为一静态变量记录读取次数,以便改变接收数据的长度,读者可根据实际需要添加其它处理内容:
Private Sub MSComm1_OnComm()
Select Case mEvent
Case comEvReceive
If flag > 246 Then
MSComm1.InputLen = 0: MSComm1.RThreshold = 32
End If
buffer = MSComm1.Input
temp = buffer
Print #hfile,temp
counter = Timer +10
Do While Timer > counter
Do Events
Loop
flag = flag + 1
Case comEvEOF
检测到文件结尾!!!"
EVMsg $= “ 
Case comFrame
帧出错!!!"
ERMsg $= “ 
Case comRxParity
奇偶错!!!"
ERMsg $= “ 
End Select
.
If Len(EVMsg $) Then
&EVMsg $
Text1.Text = “Status: "
ElseIf Len(ERMsg $) Then
&ERMsg $
Text1.Text = “Status: "
Beep
Ret = MsgBox(ERMsg $,1,“Click Cancel to
quit,OK to ignore.")
MSComm1.PortOpen = False
End If
End Sub。

相关文档
最新文档