Mscomm控件.docx

上传人:b****1 文档编号:2829203 上传时间:2023-05-04 格式:DOCX 页数:16 大小:163.58KB
下载 相关 举报
Mscomm控件.docx_第1页
第1页 / 共16页
Mscomm控件.docx_第2页
第2页 / 共16页
Mscomm控件.docx_第3页
第3页 / 共16页
Mscomm控件.docx_第4页
第4页 / 共16页
Mscomm控件.docx_第5页
第5页 / 共16页
Mscomm控件.docx_第6页
第6页 / 共16页
Mscomm控件.docx_第7页
第7页 / 共16页
Mscomm控件.docx_第8页
第8页 / 共16页
Mscomm控件.docx_第9页
第9页 / 共16页
Mscomm控件.docx_第10页
第10页 / 共16页
Mscomm控件.docx_第11页
第11页 / 共16页
Mscomm控件.docx_第12页
第12页 / 共16页
Mscomm控件.docx_第13页
第13页 / 共16页
Mscomm控件.docx_第14页
第14页 / 共16页
Mscomm控件.docx_第15页
第15页 / 共16页
Mscomm控件.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Mscomm控件.docx

《Mscomm控件.docx》由会员分享,可在线阅读,更多相关《Mscomm控件.docx(16页珍藏版)》请在冰点文库上搜索。

Mscomm控件.docx

Mscomm控件

MSComm控件处理通信的方式

编程用MSComm控件实现通过串行端口传输和接收数据,为应用程序提供串行通信功能。

它提供下列两种处理通信的方式。

1.事件驱动方式

该方式相当于一般程序设计中的中断方式。

当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件并进行相应处理。

它是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时程序应该能处理它,例如,在串口接收缓冲区中有一个字符到达或一个变化发生时,程序都可以利用MSComm控件的OnComm事件捕获并处理这些通信事件;OnComm事件还可以检查和处理通信错误。

在程序的每个关键功能执行之后,可以通过检查CommEvent属性的值来查询事件和错误。

在程序设计中,可以在OnComm事件处理函数中加入自己的处理代码,一旦事件发生即可自动执行该段程序。

这种方法的优点是程序响应及时,可靠性高。

2.查询方式

在程序的每个关键功能执行之后,在用户程序中设计定时或不定时的查询,通过检查CommEvent属性的值来查询事件和错误,从而作出相应的处理。

在进行简单应用程序设计时可采用这种方法,例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为惟一等待接收的字符是调制解调器的“OK”响应。

查询方式的进行可用计时器Timer或Do…Loop程序实现。

查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

下面的程序段是一个使用数据查询方式接收数据的例子:

PrivateSubtest()

DimInstringAsString'保存输入子串的缓冲区

MSComml.CommPort=1'指定程序使用COM1

MSComml.Settings="9600,N,8,1"'设置通信参数

MSComml.InputLen=0 '读取整个缓冲区数据

MSComml.PortOpen=True'打开端口

MSComml.Output="AT"+Chr$(13)'将AT命令送到调制解调器

Do'等待数据返回到串行端口

DoEvents

LoopUntilMSComml.InBufferCount>=2

Instring=MSComml.Input '从串行端口读取"OK"响应

MSComml.PortOpen=False'关闭串行端口

EndSub

5.2.2MSComm控件的引用

1.控件添加

我们开始一个项目的设计时,VB的工具箱中会有许多默认的控件让设计者选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设计者,不过,功能比较特别的控件就不会出现在其中,如用来设计通信功能的控件MSComm就不在其中。

由于VB的串行通信组件并不会主动出现在工具箱里中,当需要MSComm控件时,首先要把它加入到工具箱中。

让MSComm控件出现在工具箱中的步骤如下。

选择“工程”菜单下的“部件…”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“MicrosoftCommControl6.0”复选框,如图5-16所示,单击“确定”按钮后,在工具箱中就出现了一个形似“电话”的图标,它就是MSComm控件,如图5-17所示。

  图5-16添加MSComm串口通信控件图5-17工具箱中的MSComm控件

图5-18直接选择MSComm控件

如果在控件属性中没有“MicrosoftCommControl6.0”选项,可在“部件”对话框“控件”属性中单击“浏览”按钮,在系统目录Windows\System32下选择MSCoMM32.OCX项,如图5-18所示,单击“打开”按钮即可在“部件”对话框中看到“MicrosoftCommControl6.0”的可选项目了。

如果打开的是以前的项目,项目中含有MSComm控件的引用记录,则项目会自动去搜寻MSComm控件,并将它载入,不需要以上的步骤。

工具箱中有了MSComm控件,就可以选择MSComm控件的图标后将其添加到程序窗体上,利用该控件就可以通过VB编程实现PC与串口设备的串口通信了。

每个使用的MSComm控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。

2.控件操作

在使用VB所提供的串行通信功能之前,必须对VB的MSComm控件作一个了解,以便可以将串行通信的概念套用上去。

Windows采用了全新的对象化思想设计,把所有的程序都对象化,在对象化之后,我们在VB设计串行通信的相关项目时,一样是遵循了4个主要步骤。

(1)对象-首先了解所要操作的对象是什么?

(2)属性-该对象所具备的特性有哪些?

(3)事件-该对象在系统执行的过程中会因其他对象而发生什么样的事情?

(4)方法-当该对象被引发了某个事件之后,程序应该采用的步骤是什么?

VB的串行通信对象是将RS-232的初级操作予以封装,用户以高级的VB语法即可利用RS-232与外界通信,并不需要了解其他有关的初级操作。

∙添加对象-首先我们要使用MSComm控件编程实现串行通信,因此,在工具箱中选择了MSComm控件的图标后将其添加到程序窗体上,即可在窗体上安置了一个MSComm控件,形同安装一个和串行端口沟通的管道。

利用该控件编程后,PC就可以与串口设备的串口通信了。

∙设置属性-接下来就是属性的设置。

每一个控件的属性都相当多,通过属性值的设置,我们可以指定硬件以一定的方式工作。

当用户在窗体上安排一个MSComm控件后,可以按下F4键调出其相应的属性表,里面列出了所有可在设计阶段更改的属性。

属性栏将各个属性都列出来,用户可以选择相应的项目后,进行属性的设置。

5.2.3MSComm控件的常用属性

MSComm控件的属性很多,这里介绍串口编程中经常用到的几个重要属性。

1.CommPort属性

∙语法-MSComm1.CommPort[=Value]。

∙作用-设置或返回通信端口号。

CommPort属性值Value可以设置为1~16之间的任何整数值(缺省值为1),表示串口COM1,COM2……。

如果用PortOpen属性打开一个并不存在的端口,MSComm控件会产生错误68(设备无效)。

必须在打开端口之前设置CommPort属性。

例如,COM2上连接有一个调制解调器,设置为MSComm1.CommPort=2

2.Input属性

∙语法-MSComm1.Input

∙作用-返回并删除接收缓冲区中的数据流。

InputLen属性确定被Input属性读取的字符数。

设置InputLen为0,则Input属性读取缓冲区中全部的内容。

例如,如果希望从接收缓冲区获取数据,并将其显示在一个文本框中,可以使用下面的代码:

TxtDisplay.Text=MSComm1.Input

该属性在设计时无效,在运行时为只读。

3.InputLen属性

∙语法-MSComm1.InputLen[=Value]

∙作用-设置并返回Input属性从接收缓冲区读取的字符数。

Value是整型表达式,说明Input属性从接收缓冲区中读取的字符数。

 

说明-InputLen属性的缺省值是0。

设置InputLen为0时,使用Input将使MSComm控件读取接收缓冲区中全部的内容。

若接收缓冲区中InputLen字符无效,Input属性返回一个零长度字符串("")。

在使用Input前,用户可以选择检查InBufferCount属性来确定缓冲区中是否已有需要数目的字符。

该属性在从输出格式为定长数据的机器读取数据时非常有用。

如果读取以定长的数据块的形式格式化了的数据时,则需要将该属性设置为合适的值。

例如:

MSComm1.InputLen=10'当程序执行该指令时,只会读取10个字符。

4.InputMode属性

∙语法-MSComm1.InputMode[=Value]。

∙作用-设置或返回接收数据的数据类型。

InputMode属性的Value值可以设置为如下VB常数。

“0”通过Input属性以文本方式取回传入的数据。

“1”通过Input属性以二进制方式取回传入的数据。

例如,MSComm1.InputMode=1表示以二进制方式读取数据。

5.OutPut属性

∙语法-MSComm1.OutPut[=Value]。

∙作用-向传输缓冲区写数据流。

OutPut属性可以传输文本数据或二进制数据。

用OutPut属性传输文本数据,必须定义一个包含一个字符串的Variant;发送二进制数据,必须传递一个包含字节数组的Variant到OutPut属性。

正常情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送。

如果发送包含嵌入控制字符、Null字符等数据,要以二进制形式发送。

可用OutPut属性发送命令、文字字符串或Byte数组数据。

例如:

MSComm1.Output="ATDT555-5555"'发送AT命令串

MSComm1.Output="Thisisatextstring"'发送文本字符串

该属性在设计时无效,在运行时为只读。

6.PortOpen属性

∙语法-MSComm1.PortOpen[=Value]。

∙作用-设置或返回通信端口的状态。

设置PortOpen属性为True,即打开端口;设置为False,则关闭端口,并清除接收和传输缓冲区。

当应用程序终止时,MSComm控件自动关闭串行端口。

在打开端口之前,确定CommPort属性设置为一个合法的端口。

如果CommPort属性设置为一个非法的端口,则当打开该端口时,MSComm控件产生错误68(设备无效)。

串行端口设备必须支持Settings属性当前的设置值。

如果Settings属性包含硬件不支持的通信设置值,硬件可能不会正常工作。

7.Settings属性

∙语法-MSComm1.Settings[=Value]。

∙作用-设置并返回通信参数。

值Value为String型,说明通信端口的设置值。

Settings属性可以用来指定波特率、奇偶校验、数据位数和停止位数。

奇偶校验设置为了进行数据校验,通常是不用的,并设置为“N”。

数据位数指定了代表一个数据块的比特数。

停止位指出了何时接收到一个完整数据块。

例如:

MSComm1.Settings="9600,N,8,1"'表示传输速率为9600bit/s,没有奇偶校验位,8位数据位,1位停止位。

(1)起始位-在通信线上,没有数据传送时处于逻辑“1”状态。

当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。

起始位通过通信线传向接收设备,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。

因此,起始位所起的作用就是表示字符传送的开始。

(2)数据位-当接收设备收到起始位后,紧接着就会收到数据位,数据位的个数可以是5、6、7或8位数据。

在字符数据传送的过程中,数据位从最低有效位开始传送。

(3)奇偶校验位-数据位发送完之后,就可以发送奇偶校验位。

奇偶校验用于有限差错检验,通信双方在通信时约定一致的奇偶校验方式。

就数据传送而言,奇偶校验位是冗余位,但它表示数据的一种性质,这种性质用于检错,虽然有限但很容易实现。

(4)停止位-在奇偶校验位或者数据位(无奇偶校验位时)之后是停止位。

它可以是1位、1.5位或2位,停止位是一个字符数据的结束标志。

8.RThreshold属性

∙语法-object.Rthreshold[= Value]。

∙作用-OnComm事件发生之前,设置并返回接收缓冲区可接收的字符数。

Value是整型表达式,说明在产生OnComm事件之前要接收的字符数。

当接收字符后,若Rthreshold属性设置为0(缺省值),则不产生OnComm事件;设置Rthreshold为1,接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件。

9.SThreshold属性

∙语法-object.SThreshold[=Value]

∙作用-OnComm事件发生之前,设置并返回发送缓冲区中允许的最小字符数。

Value是整形表达式,代表在OnComm事件产生之前在传输缓冲区中的最小字符数。

若设置SThreshold属性为0(缺省值),数据传输事件不会产生OnComm事件;若设置SThreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。

如果在传输缓冲区中的字符数小于Value,CommEvent属性设置为comEvSend,并产生OnComm事件。

OnComm事件被用来监视和响应通信状态的变化。

如果将RThreshold和SThreshold属性的值都设置为零,就可以避免发生OnComm事件。

如果将该值设置为非零的值(如1),那么每当缓冲区中接收到一个字符时,就会产生OnComm事件。

10.DTREnable属性

∙语法-object.DTREnable[=Value]

∙作用-确定在通信时是否使DTR线有效。

DTR是计算机发送到调制解调器的信号,指示计算机在等待接收传输。

当DTREnable设置为True,当打开端口时,DTR线设置为高电平(开),当端口被关闭时,DTR线设置为低电平(关);当DTREnable设置为False,DTR线始终保持为低电平。

11.RTSEnable属性

∙语法-object.RTSEnable[=Value]

∙作用-确定是否使RTS线有效。

通常由计算机发送RTS信号到调制解调器,以请求允许发送数据。

当RTSEnable设置为True,且端口打开时,RTS线设置为高电平,端口关闭时,RTS线设置为低电平。

当RTSEnable设置为False,RTS线始终保持为低电平。

12.OutBufferSize属性

∙语法-MSComm1.OutBufferSize[=Value]。

∙作用-设置或返回传输缓冲区大小。

值Value为Integer型,表示传输缓冲区的字节数,如可选1024。

13.InBufferSize属性

∙语法-MSComm1.InBufferSize[=Value]。

∙作用-设置或返回接收缓冲区大小。

值Value为Integer型,表示接收缓冲区的字节数,如可选1024。

InBufferSize和OutBufferSize属性指定了为接收和发送缓冲区分配的内存数量。

这两个值设置得越大,应用程序中可用的内存就越少。

然而,如果缓冲区太小,就要冒缓冲区溢出的风险,除非采用握手信号。

由于现在大多数计算机有更多的可用内存资源,缓冲区内存分配已不那么至关紧要了。

换言之,可以把缓冲区的值设得高一些而不影响应用程序的性能。

14.Handshaking属性

∙语法-MSComm1.Handshaking[=Value]。

∙作用-设置或返回硬件握手协议。

指的是PC与MODEM之间为了控制流速而约定的内部协议。

Value值如下。

“0”-comNone没有握手协议,不考虑流量控制。

“1”-comXOn/XOff,即在数据流中嵌入控制符来进行流量控制。

“2”-comRTS,即由信号线RTS自动进行流量控制。

“5”-comRTSXOnXOff,两者皆可。

实践中我们发现选用2(即comRTS)是很方便的。

[说明]

要保证数据传输成功,必须对接收和发送缓冲区进行管理,例如,要保证接收数

据的速度不超出缓冲区的限制。

握手是指一种内部的通信协议,通过它将数据从硬件端口传输到接收缓冲区。

当串行端口收到一个字符时,通信设备必须将它移入接收缓冲区中,使程序能够读到它。

如果数据到达端口的速度太快,通信设备可能来不及将数据移入接收缓冲区,握手协议保证不会由于缓冲区溢出而导致丢失数据。

需要使用什么协议与连接的设备有关。

如果将该值设置为comRTSXOnXOff,可以同时支持两种协议。

5.2.4MSComm控件的事件

根据应用程序的用途和功能,在连接到其他设备过程中,以及接收或发送数据过程中,可能需要监视并响应一些事件和错误的值。

可以使用OnComm事件和CommEvent属性捕捉并检查通信事件和错误的值。

CommEvent属性返回最近的通信事件或错误,该属性在设计时无效,在运行时为只读。

在发生通信事件或错误时,将触发OnComm事件,CommEvent属性的值将被改变。

因此,在发生OnComm事件的时候,如果有必要,可以检查CommEvent属性的值。

由于通信(特别是通过电话线的通信)是不可预料的,捕捉这些事件和错误将有助于使应用程序对这些情况作出相应的反应。

MSComm控件把17个事件归并为一个事件OnComm,用属性CommEvent的17个值来区分不同的触发时机。

表5-2列出了几个可能触发OnComm事件的通信事件,对应的值将在发生事件时被写入CommEvent属性。

表5-2通信事件常数定义值

常量

描述

ComEvSend

1

发送缓冲区中的字符数比SThreshold值低

ComEvReceive

2

接收到了RThreshold个字符。

持续产生该事件,直到使用了Input属性删除了接收缓冲区中的数据

ComEvCTS

3

CTS线发生改变

ComEvDSR

4

DSR线发生改变。

当DSR从1到0改变时,该事件发生

ComEvCD

5

CD线发生改变

ComEvRing

6

检测到电话振铃

ComEvEOF

7

收到文件结束符(ASCII字符,26)

另外10个情况是可能发生的各种通信错误时触发,可参看有关资料。

表5-3所列错误同样会触发OnComm事件,并在CommEvent属性中写入相应的值。

表5-3通信错误常数定义值

常量

描述

ComEventBreak

1001

收到了断开信号

ComEventCTSTO

1002

ClearToSendTimeout。

在发送字符时,在系统指定的事件内,CTS(ClearToSend)线是低电平

ComEventDSRTO

1003

DataSetReadyTimeout。

在发送字符时,在系统指定的事件内,DSR(DataSetReady)线是低电平

ComEventFrame

1004

数据帧错误。

硬件检测到一个数据帧错误

ComEventOverrun

1006

端口溢出。

硬件中的字符尚未读,下—个字符又到达,并且丢失

ComEventCDTO

1007

CarrierDetectTime。

在发送字符时,在系统指定的事件内,CD(CarrierDetect)线是低电平。

CD也称为RLSD(ReceiveLineSignalDetect,接收线信号检测)

ComEventRxOver

1008

接收缓冲区溢出。

在接收缓冲区中没有空间

ComEventRxParity

1009

奇偶校验错。

硬件检测到奇偶校验错误

ComEventTxFull

1010

发送缓冲区满。

在对发送字符排队时,发送缓冲区满

ComEventDCB

1011

检测端口DCB(DeviceControlBlock)时发生了没有预料到的错误

MSComm控件可捕获的错误消息如表5-4所示。

表5-4MSComm控件可捕获的错误消息

常量

描述

ComInvalidPropertyValue

380

无效的属性值

ComSetNotSupported

383

属性只读

ComGetNotSupported

394

属性只读

ComPortOpen

8000

端口打开时该操作无效

8001

超时设置必须比0值大

ComPortInvalid

8002

无效的端口号

8003

属性只在运行时有效

8004

属性在运行时是只读的

续表

常量

描述

ComPortAlreadyOpen

8005

端口已经打开

8006

设备标识符无效或不支持

8007

不支持设备的波特率

8008

指定的字节大小无效

8009

默认参数错误

8010

硬件不可用(被其他设备锁住)

8011

函数不能分配队列

ComNoOpen

8012

8013

8014

设备没有打开

设备已经打开

不能使用通信通知

ComSetCommStateFailed

8015

8016

不能设置通信状态

不能设置通信事件屏蔽

ComPortNotOpen

8018

8019

该操作只在端口打开时有效

设备忙

ComReadError

8020

通信设备读错误

ComDCBError

8021

检取端口设备控制块时出现内部错误

通过事件的引发,通过CommEvent属性值的数值便可明确了解所发生的错误或事件,而程序中通常就以常数定义作为判断,一旦OnComm事件发生,连带地会引入CommEvent参数,用户可以在每一个相关的Case语句之后编写程序代码来处理特定的错误或事件。

以下是一个MSComm通信控件的事件子程序,只要把每一个事件发生时所希望的操作程序写入,就可以使通信控件在必要时产生一定的操作,代码如下所示:

PrivateSubMSComm1_OnComm()

SelectCaseMSComm1.CommEvent

CasecomEvReceive'接收到了RThreshold个字符

(子程序段)

CasecomEvSend'发送缓冲区中有SThreshold个字符

(子程序段)

EndSelect

EndSub

5.2.5MSComm控件通信步骤

通常我们以下面的步骤来使用VB的MSComm控件作通信控制。

(1)加入通信部件,也就是MSComm对象。

(2)设置通信端口号码,即CommPort属性。

(3)设置通信协议,即HandShaking属性。

(4)设置传输速度等参数,即Settings属性。

(5)设置其他参数,若必要时再加上其他的属性设置。

(6)打开通信端口,即PortOpen属性设成True。

(7)送出字符串或读入字符串,使用Input及Output属性。

(8)使用完MSComm通信对象后,将通信端口关闭。

即PortOpen属性设置成False。

遵循以上的步骤,可以建构自己的串行通信传输系统了。

注意,步骤

(2)~(5)可在设计环境的属性窗口中设定,也可在程序中设定;而步骤(6)~(8)只能在VB程序中设定。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2