通信控件MSComm使用详解.docx

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

通信控件MSComm使用详解.docx

《通信控件MSComm使用详解.docx》由会员分享,可在线阅读,更多相关《通信控件MSComm使用详解.docx(17页珍藏版)》请在冰点文库上搜索。

通信控件MSComm使用详解.docx

通信控件MSComm使用详解

通信控件MSComm使用详解

2006-10-2613:

00作者:

出处:

责任编辑:

方舟

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

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。

MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:

一是事件驱动(Event-driven)方法,一是查询法。

  1.MSComm控件两种处理通讯的方式

  MSComm控件提供下列两种处理通讯的方式:

事件驱动方式和查询方式。

  1.1事件驱动方式

  事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者CarrierDetect(CD)或RequestToSend(RTS)线上一个字符到达或一个变化发生时。

在这些情况下,可以利用MSComm控件的OnComm事件捕获并处理这些通讯事件。

OnComm事件还可以检查和处理通讯错误。

所有通讯事件和通讯错误的列表,参阅CommEvent属性。

在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。

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

每个MSComm控件对应着一个串行端口。

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

  1.2查询方式

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

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

如果应用程序较小,并且是自保持的,这种方法可能是更可取的。

例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

  2.MSComm控件的常用属性

  MSComm控件有很多重要的属性,但首先必须熟悉几个属性。

CommPort

设置并返回通讯端口号。

Settings

以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen

设置并返回通讯端口的状态。

也可以打开和关闭端口。

Input

从接收缓冲区返回和删除字符。

Output

向传输缓冲区写一个字符串。

  下面分别描述:

  CommPort属性:

设置并返回通讯端口号。

  语法object.CommPort[value](value一整型值,说明端口号。

  说明在设计时,value可以设置成从1到16的任何数(缺省值为1)。

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

  注意:

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

  RThreshold属性:

在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回的要接收的字符数。

  语法:

object.Rthreshold[=value](value整型表达式,说明在产生OnComm事件之前要接收的字符数。

  说明:

当接收字符后,若Rthreshold属性设置为0(缺省值)则不产生OnComm事件。

例如,设置Rthreshold为1,接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。

  CTSHolding属性:

确定是否可通过查询ClearToSend(CTS)线的状态发送数据。

ClearToSend是调制解调器发送到相联计算机的信号,指示传输可以进行。

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

  语法:

object.CTSHolding(Boolean)

  Mscomm控件的CTSHolding属性设置值:

  TrueClearToSend线为高电平。

  FalseClearToSend线为低电平。

  说明:

如果ClearToSend线为低电平(CTSHolding=False)并且超时时,MSComm控件设置CommEvent属性为comEventCTSTO(ClearToSendTimeout)并产生OnComm事件。

  ClearToSend线用于RTS/CTS(RequestToSend/ClearToSend)硬件握手。

如果需要确定ClearToSend线的状态,CTSHolding属性给出一种手工查询的方法。

  详细信息有关握手协议,请参阅Handshaking属性。

  SThreshold属性:

MSComm控件设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数。

  语法object.SThreshold[=value]

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

  说明:

若设置Sthreshold属性为0(缺省值),数据传输事件不会产生OnComm事件。

若设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。

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

comEvSend事件仅当字符数与Sthreshold交叉时被激活一次。

例如,如果Sthreshold等于5,仅当在输出队列中字符数从5降到4时,comEvSend才发生。

如果在输出队列中从没有比Sthreshold多的字符,comEvSend事件将绝不会发生。

  Handshake常数

常数

描述

comNone

0

无握手。

comXonXoff

1

XOn/Xoff握手。

comRTS

2

Request-to-send/clear-to-send握手。

comRTSXOnXOff

3

Request-to-send和clear-to-send握手皆可。

  OnComm常数

常数

描述

comEvSend

1

发送事件。

comEvReceive

2

接收事件。

comEvCTS

3

clear-to-send线变化。

comEvDSR

4

data-setready线变化。

comEvCD

5

carrierdetect线变化。

comEvRing

6

振铃检测。

comEvEOF

7

文件结束。

  Error常数

常数

描述

comEventBreak

1001

接收到中断信号

comEventCTSTO

1002

Clear-to-send超时

comEventDSRTO

1003

Data-setready超时

comEventFrame

1004

帧错误

comEventOverrun

1006

端口超速

comEventCDTO

1007

Carrierdetect超时

comEventRxOver

1008

接收缓冲区溢出

comEventRxParity

1009

Parity错误

comEventTxFull

1010

传输缓冲区满

comEventDCB

1011

检索端口设备控制块(DCB)时的意外错误

  InputMode常数

常数

描述

comInputModeText

0(缺省)

通过Input属性以文本方式取回数据。

comInputModeBinary

1

通过Input属性以二进制方式检取回数据。

  CDHolding属性:

通过查询CarrierDetect(CD)线的状态确定当前是否有传输。

CarrierDetect是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。

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

  语法object.CDHolding

  设置值:

CDHolding属性的设置值为:

设置

描述

True

CarrierDetect线为高电平

False

CarrierDetect线为低电平

  说明:

注意当CarrierDetect线为高电平(CDHolding=True)且超时时,MSComm控件设置CommEvent属性为comEventCDTO(CarrierDetect超时错误),并产生OnComm事件。

  注意在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。

  CarrierDetect也被称为ReceiveLineSignalDetect(RLSD)。

  数据类型:

Boolean

  DSRHolding属性:

确定DataSetReady(DSR)线的状态。

DataSetReady信号由调制解调器发送到相连计算机,指示作好操作准备。

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

  语法:

object.DSRHolding

  object所在处表示对象表达式,其值是“应用于”列表中的对象。

  DSRHolding属性返回以下值:

描述

说明

True

DataSetReady线高

  当DataSetReady线为高电平(DSRHolding=True)且超时时,MSComm控件设置CommEvent属性为comEventDSRTO(数据准备超时)并产生OnComm事件。

  当为DataTerminalEquipment(DTE)机器写DataSetReady/DataTerminalReady握手例程时该属性是十分有用的。

  数据类型:

Boolean

False

DataSetReady线低

  Settings属性:

设置并返回波特率、奇偶校验、数据位、停止位参数。

  语法:

object.Settings[=value]

  说明:

当端口打开时,如果value非法,则MSComm控件产生错误380(非法属性值)。

  Value由四个设置值组成,有如下的格式:

  "BBBB,P,D,S"

  BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。

value的缺省值是:

  "9600,N,8,1"

  InputLen属性:

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

  语法object.InputLen[=value]

  InputLen属性语法包括下列部分:

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

  说明:

InputLen属性的缺省值是0。

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

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

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

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

  EOFEnable属性:

确定在输入过程中MSComm控件是否寻找文件结尾(EOF)字符。

如果找到EOF字符,将停止输入并激活OnComm事件,此时CommEvent属性设置为comEvEOF,

  语法:

object.EOFEnable[=value]

  EOFEnable属性语法包括下列部分:

  value布尔表达式,确定当找到EOF字符时,OnComm事件是否被激活,如“设置值”中所描述。

  value的设置值:

  True当EOF字符找到时OnComm事件被激活。

  False(缺省)当EOF字符找到时OnComm事件不被激活。

  说明:

当EOFEnable属性设置为False,OnComm控件将不在输入流中寻找EOF字符。

  3.错误消息(MSComm控件)

  下表列出MSComm控件可以捕获的错误:

描述

380

无效属性值comInvalidPropertyValue

383

属性为只读comSetNotSupported

394

属性为只读comGetNotSupported

8000

端口打开时操作不合法comPortOpen

8001

超时值必须大于0

8002

无效端口号comPortInvalid

8003

属性只在运行时有效

8004

属性在运行时为只读

8005

端口已经打开comPortAlreadyOpen

8006

设备标识符无效或不支持该标识符

8007

不支持设备的波特率

8008

指定的字节大小无效

8009

缺省参数错误

8010

硬件不可用(被其它设备锁定)

8011

函数不能分配队列

8012

设备没有打开comNoOpen

8013

设备已经打开

8014

不能使用comm通知

8015

不能设置comm状态comSetCommStateFailed

8016

不能设置comm事件屏蔽

8018

仅当端口打开时操作才有效comPortNotOpen

8019

设备忙

8020

读comm设备错误comReadError

8021

为该端口检索设备控制块时的内部错误comDCBError

 

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

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。

MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:

一是事件驱动(Event-driven)方法,一是查询法。

2.MSComm控件的常用属性

  MSComm控件有很多重要的属性,但首先必须熟悉几个属性。

CommPort

设置并返回通讯端口号。

Settings

以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen

设置并返回通讯端口的状态。

也可以打开和关闭端口。

Input

从接收缓冲区返回和删除字符。

Output

向传输缓冲区写一个字符串。

  下面分别描述:

  CommPort属性:

设置并返回通讯端口号。

  语法object.CommPort[value](value一整型值,说明端口号。

  说明在设计时,value可以设置成从1到16的任何数(缺省值为1)。

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

  注意:

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

  RThreshold属性:

在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回的要接收的字符数。

  语法:

object.Rthreshold[=value](value整型表达式,说明在产生OnComm事件之前要接收的字符数。

  说明:

当接收字符后,若Rthreshold属性设置为0(缺省值)则不产生OnComm事件。

例如,设置Rthreshold为1,接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。

  CTSHolding属性:

确定是否可通过查询ClearToSend(CTS)线的状态发送数据。

ClearToSend是调制解调器发送到相联计算机的信号,指示传输可以进行。

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

  语法:

object.CTSHolding(Boolean)

  Mscomm控件的CTSHolding属性设置值:

  TrueClearToSend线为高电平。

  FalseClearToSend线为低电平。

  说明:

如果ClearToSend线为低电平(CTSHolding=False)并且超时时,MSComm控件设置CommEvent属性为comEventCTSTO(ClearToSendTimeout)并产生OnComm事件。

  ClearToSend线用于RTS/CTS(RequestToSend/ClearToSend)硬件握手。

如果需要确定ClearToSend线的状态,CTSHolding属性给出一种手工查询的方法。

  详细信息有关握手协议,请参阅Handshaking属性。

  SThreshold属性:

MSComm控件设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数。

  语法object.SThreshold[=value]

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

  说明:

若设置Sthreshold属性为0(缺省值),数据传输事件不会产生OnComm事件。

若设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。

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

comEvSend事件仅当字符数与Sthreshold交叉时被激活一次。

例如,如果Sthreshold等于5,仅当在输出队列中字符数从5降到4时,comEvSend才发生。

如果在输出队列中从没有比Sthreshold多的字符,comEvSend事件将绝不会发生。

  Handshake常数

常数

描述

comNone

0

无握手。

comXonXoff

1

XOn/Xoff握手。

comRTS

2

Request-to-send/clear-to-send握手。

comRTSXOnXOff

3

Request-to-send和clear-to-send握手皆可。

  OnComm常数

常数

描述

comEvSend

1

发送事件。

comEvReceive

2

接收事件。

comEvCTS

3

clear-to-send线变化。

comEvDSR

4

data-setready线变化。

comEvCD

5

carrierdetect线变化。

comEvRing

6

振铃检测。

comEvEOF

7

文件结束。

  Error常数

常数

描述

comEventBreak

1001

接收到中断信号

comEventCTSTO

1002

Clear-to-send超时

comEventDSRTO

1003

Data-setready超时

comEventFrame

1004

帧错误

comEventOverrun

1006

端口超速

comEventCDTO

1007

Carrierdetect超时

comEventRxOver

1008

接收缓冲区溢出

comEventRxParity

1009

Parity错误

comEventTxFull

1010

传输缓冲区满

comEventDCB

1011

检索端口设备控制块(DCB)时的意外错误

  InputMode常数

常数

描述

comInputModeText

0(缺省)

通过Input属性以文本方式取回数据。

comInputModeBinary

1

通过Input属性以二进制方式检取回数据。

  CDHolding属性:

通过查询CarrierDetect(CD)线的状态确定当前是否有传输。

CarrierDetect是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。

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

  语法object.CDHolding

  设置值:

CDHolding属性的设置值为:

设置

描述

True

CarrierDetect线为高电平

False

CarrierDetect线为低电平

  说明:

注意当CarrierDetect线为高电平(CDHolding=True)且超时时,MSComm控件设置CommEvent属性为comEventCDTO(CarrierDetect超时错误),并产生OnComm事件。

  注意在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。

  CarrierDetect也被称为ReceiveLineSignalDetect(RLSD)。

  数据类型:

Boolean

  DSRHolding属性:

确定DataSetReady(DSR)线的状态。

DataSetReady信号由调制解调器发送到相连计算机,指示作好操作准备。

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

  语法:

object.DSRHolding

  objec

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

当前位置:首页 > 人文社科 > 法律资料

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

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