MSCOMM32属性说明

来源:互联网 发布:手机远程监控软件 编辑:程序博客网 时间:2024/05/29 04:52
       <object id="MSComm1" style="z-index: -112; left: 91px; position: absolute; top: 300px"
            codebase="/MSCOMM32.CAB"                                      <!--设置MSCOMM32的路径-->
            classid="clsid:648A5600-2C6E-101B-82B6-000000000014">       
            <param name="_ExtentX" value="1005" /
            <param name="_ExtentY" value="1005" />
            <param name="_Version" value="393216" />
            <param name="CommPort" value="1" />               <!--设置端口-->
            <param name="DTREnable" value="-1" />             <!---->
            <param name="Handshaking" value="0" />            <!---->
            <param name="InBufferSize" value="1024" />         <!--接收缓冲区的大小,默认为1024-->
            <param name="InputLen" value="0" />              <!--读取之前设置长度-->
            <param name="NullDiscard" value="0" />           <!--comNone 0 无握手。 comXonXoff 1 XOn/Xoff 握手。 comRTS 2 Request-to-send/clear-to-send 握手。 comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。-->
            <param name="OutBufferSize" value="512" />       <!--发送缓冲区大小,默认为1024-->
            <param name="ParityReplace" value="63" />
            <param name="RThreshold" value="1" />            <!--产生OnComm事件(接收时产生)的阀值,每接收1个字节就产生一个OnComm事件-->
            <param name="RTSEnable" value="0" />           <!--DTREnable 或 RTSEnable 属性设置为 True,当关闭端口时,该属性设置为 False。否则,DTR 和 RTS 线保持其先前的状态-->
            <param name="BaudRate" value="9600" />           <!--设置波特率9600-->
            <param name="ParitySetting" value="1" />
            <param name="DataBits" value="7" />               <!--设置数据位-->
            <param name="StopBits" value="0" />               <!--设置停止位-->
            <param name="SThreshold" value="1" />            <!--产生OnComm事件(发送时产生)的阀值,每发送1个字节就产生一个OnComm事件-->
            <param name="EOFEnable" value="0" />
            <param name="Settings" value="9600,n,8,1" />      <!--设置配置信息波特率 ,校验位,数据位,停止位-->
            <param name="InputMode" value="comInputModeBinary" />   <!--设置接收数据的模式此处为二进制(comInputModeText文本格式)-->

        </object>


本文主要包含以下内容:
 
MSComm控件两种处理通讯的方式
CommPort属性
RThreshold 属性
CTSHolding 属性
SThreshold 属性
CDHolding 属性
DSRHolding 属性
Settings 属性
InputLen 属性
EOFEnable 属性

Handshake 常数
OnComm 常数
InputMode 常数
错误消息


     MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
1.MSComm控件两种处理通讯的方式
MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。 
1.1 事件驱动方式
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 .Comm 事件捕获并处理这些通讯事件。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 并产生 .Comm 之前,设置并返回的要接收的字符数。
语法 object.Rthreshold [ = value ](value 整型表达式,说明在产生 .Comm 事件之前要接收的字符数。 )
说明 当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 .Comm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 .Comm 事件。

CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。
语法: object.CTSHolding(Boolean)

Mscomm 控件的 CTSHolding 属性设置值:
True Clear To Send 线为高电平。 
False Clear To Send 线为低电平。 

说明:如果 Clear To Send 线为低电平 (CTSHolding = False) 并且超时时,MSComm 控件设置 CommEvent 属性为 comEventCTSTO (Clear To Send Timeout) 并产生 .Comm 事件。

Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态,CTSHolding 属性给出一种手工查询的方法。

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

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

语法 object.SThreshold [ = value ]
value 整形表达式,代表在 .Comm 事件产生之前在传输缓冲区中的最小字符数。 

说明:若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 .Comm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 .Comm 事件。如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 .Comm 事件。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-set ready 线变化。 
comEvCD 5 carrier detect 线变化。 
comEvRing 6 振铃检测。 
comEvEOF 7 文件结束。 


Error 常数

常数 值 描述 
comEventBreak 1001 接收到中断信号 
comEventCTSTO 1002 Clear-to-send 超时 
comEventDSRTO 1003 Data-set ready 超时 
comEventFrame 1004 帧错误 
comEventOverrun 1006 端口超速 
comEventCDTO 1007 Carrier detect 超时 
comEventRxOver 1008 接收缓冲区溢出 
comEventRxParity 1009 Parity 错误 
comEventTxFull 1010 传输缓冲区满 
comEventDCB 1011 检索端口 设备控制块 (DCB) 时的意外错误 

InputMode 常数
常数 值 描述 
comInputModeText 0 (缺省)通过 Input 属性以文本方式取回数据。 
comInputModeBinary 1 通过 Input 属性以二进制方式检取回数据。 





CDHolding 属性:通过查询 Carrier Detect (CD) 线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。

语法 object.CDHolding
设置值:CDHolding 属性的设置值为: 
设置 描述 
True Carrier Detect 线为高电平 
False Carrier Detect 线为低电平 
说明:注意当 Carrier Detect 线为高电平 (CDHolding = True) 且超时时,MSComm 控件设置CommEvent 属性为 comEventCDTO(Carrier Detect 超时错误),并产生 .Comm 事件。
注意 在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。
Carrier Detect 也被称为 Receive Line Signal Detect (RLSD)。
数据类型 Boolean

DSRHolding 属性:确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。
语法:object.DSRHolding
object 所在处表示对象表达式,其值是“应用于”列表中的对象。
DSRHolding 属性返回以下值:
值 描述 
True Data Set Ready 线高 
False Data Set Ready 线低 
说明:当 Data Set Ready 线为高电平 (DSRHolding = True) 且超时时,MSComm 控件设置 CommEvent 属性为 comEventDSRTO(数据准备超时)并产生 .Comm 事件。
当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该属性是十分有用的。
数据类型:Boolean


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 字符,将停止输入并激活 .Comm 事件,此时 CommEvent 属性设置为 comEvEOF,
语法:object.EOFEnable [ = value ]
EOFEnable 属性语法包括下列部分:
value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。 
value 的设置值:
True 当 EOF 字符找到时 .Comm 事件被激活。 
False (缺省)当 EOF 字符找到时 .Comm 事件不被激活。 
说明:当 EOFEnable 属性设置为 False,OnComm 控件将不在输入流中寻找 EOF 字符。


错误消息(MS Comm 控件)


下表列出 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 
 
-----------------------------------------------------------------------------------
下面是vb对这玩意的说明:
 
MSComm控件
MSComm 控件为应用程序提供了串口通信功能,该应用程序允许通过串口发送和接收数据。

语法
MSComm
说明
MSComm控件提供了两种处理通信的方法:
· 事件驱动通信,是一种功能很强的处理串口活动的方法。在大多数情况下,用户需要获知事件发生的时间,

例如,在CD(Carrier Detect)线或RTS(Request To Send)线上有字符到达或发生了改变等。在这种情况下

,使用MSComm 控件的OnComm 事件捕获和处理这些通信事件。OnComm也可以捕获和处理通信中的错误。要获取

所有事件和通信错误的完整清单,请参阅CommEvent属性。
· 用户也可以在每个重要的程序功能之后检查CommEvent 属性的值来检测事件和通信错误。这对小的自含程序

可能比较常用。例如,如果编写一个简单的电话拨号程序,那么在接收了每个字符后都产生一个事件并没有
意义,因为你只打算从调制解调器中接收OK响应信息。
使用的每个MSComm 控件都与一个串口对应。如果在应用程序中需要访问多个串口,必须使用多个MSComm 控件

。可以在Windows 控制面板中修改串口地址的中断地址。
虽然MSComm控件有许多很重要的属性,但应先熟悉下面几个属性:
属性描述
CommPort 设置或返回通信端口号
Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位
PortOpen 设置或返回通信端口的状态。也可以打开和关闭端口
Input 返回和删除接收缓冲区中的字符
Output 将字符串写入发送缓冲区

示例
下面的例子演示了使用调制解调器进行基本的通信。
Private Sub Form_Load ()
' Buffer to hold input string
Dim Instring As String
' Use COM1.
MSComm1.CommPort = 1
' 9600 baud, no parity, 8 data, and 1 stop bit.
MSComm1.Settings = "9600,N,8,1"
' Tell the control to read entire buffer when Input
' is used.
MSComm1.InputLen = 0
' Open the port.
MSComm1.PortOpen = True
' Send the attention command to the modem.
MSComm1.Output = "ATVtQ0"& + Chr$(13) 'Ensure that
' the modem responds with “OK”
' Wait for data to come back to the serial port.
Do
DoEvents
Buffer$ = Buffer$ MSComm1.Input
Loop Until InStr (Buffer$, “OK” & vbCRLF)
' Read the "OK" response data in the serial port.
' Close the serial port.
MSComm1.PortOpen = False
End Sub
注意:MSComm 控件可以使用查询或事件驱动的方法从串口接收数据。本例使用了查询的方法。对于事件驱动方

法的例子,请参阅OnComm 事件的帮助。
Break属性
设置或清除断开信号状态。在设计时该属性不可用。
语法
object.Break [=value]
Break属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指明是否设置断开信号状态,如“设置”中所示
设置
vlaue 值的设置如下:
设置描述
True 设置断开信号状态
False 清除断开信号状态
说明
当设置为True 时,Break 属性就发送一个断开信号。断开信号将停止字符发送,将发送线置为断开状态,直到

将Break属性置为False。
通常,为短时间区以及只有当用于通信的设备需要设置断开状态时才设置断开状态。
数据类型
Boolean。

示例
下面的例子演示了如何发送十分之一秒的断开信号。
' Set the Break condition.
MSComm1.Break = True
' Set duration to 1/10 second.
Duration! = Timer + .1
' Wait for the duration to pass.
Do Until Timer > Duration!
Dummy = DoEvents()
Loop
' Clear the Break condition.
MSComm1.Break = False

CDHolding属性
通过检查CD 线的状态来查询是否有载波。CD(Carrier Detect,载波检测)是调制解调器发送给连接计算机的

指示调制解调器在线的信号。该属性在设计时不可用,在运行时是只读的。
语法
object.CDHolding
CDHolding属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
设置
CDHolding属性的设置如下:
设置描述
True CD线高
False CD线低
说明
当CD线高(CDHolding = True)并超时,MSComm控件就将CommEvent属性设置为commEventCDTO(Carrier 

Detect Timeout Error),并产生一个OnComm事件。CD也称为RLSD(Receive Line Singal Detect,接收线信

号检测)。
注意:尤其要注意的是,在主机应用程序比如电子公告板中要侦测载波信号的丢失问题,因为呼叫者随时都有

可能挂起。
数据类型:
Boolean。

CommEvent 属性
返回最近的通信事件或错误。该属性在设计时不可用,在运行时是只读的。
语法
object.CommEvent
CommEvent属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
说明
尽管通信事件或错误都产生OnComm 事件,但CommEvent 属性中包含了事件或错误的代码。要确定导致OnComm 

事件的实际错误或事件,必须引用CommEvent属性。
CommEvent 属性为通信事件或错误返回下列值之一。在该控件的对象库中也可以找到这些常量。
通信错误包含了下面的设置:
常量值描述
ComEventBreak 1001 收到了断开信号
ComEventCTST
O
1002 Clear To Send Timeout。在发送字符时,在系统指定的事件内,CTS(Clear To Send)线是低电平
ComEventDSRT
O
1003 Data Set Ready Timeout。在发送字符时,在系统指定的事件内,DSR(Data Set Ready)线是低电平
ComEventFrame 1004 数据帧错误。硬件检测到一个数据帧错误
ComEventOverru
n
1006 端口溢出。硬件中的字符尚未读,下一个字符又到达,
并且丢失
ComEventCDTO 1007 Carrier Detect Time。在发送字符时,在系统指定的事件内,CD(Carrier Detect)线是

低电平。CD也称为RLSD(Receive Line Singal Detect,接收线信号检测)
ComEventRxOve
r
1008 接收缓冲区溢出。在接收缓冲区中没有空间
ComEventRxPari
ty
1009 奇偶校验错。硬件检测到奇偶校验错误
续表
ComEventTxFull 1010 发送缓冲区满。在对发送字符排队时,发送缓冲区满ComEventDCB 1011 检取端口DCB(

Device Control Blick)时发生了没有预料到的错误
通信事件包含了下面的设置:
常量值描述
ComEvSend 1 发送缓冲区中的字符数比Sthreshold值低
ComEvRecei
ve
2 接收到了Rthreshold 个字符。持续产生该事件,直到使用了Input属性删除了接收缓冲区中的数据
ComEvCTS 3 CTS(Clear To Send)线改变
ComEvDSR 4 DSR(Data Set Ready)线改变。当DSR 从1 到0 改变时,该事件发生
ComEvCD 5 CD(Carrier Detect)线改变
ComEvRing 6 检测到响铃信号。一些URAT(Universal Asynchronous
Reciver-Transmitters,通用异步收发器)不支持该事件
ComEvEOF 7 收到了EOF字符(ASCII字符26)
数据类型
Integer。

CommID属性
返回标识通信设备的句柄。该属性在设计时不可用,在运行时是只读的。
语法
object.CommID
CommID属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
说明
该值与Windows API 函数CreateFile 返回值是一样的。在Windows API 中调用任何通信例程都使用该值。
数据类型
Long

CommPort属性
返回或设置通信端口号。
语法
object.CommPort [=value]
CommPort属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 指定端口号的整数
说明
在设计时,可以将value 置为1 到16 之间的整数(缺省为1)。然而,当试图使用PortOpen 属性打开一个不存

在的端口号时,MSComm 控件就产生68
错误(Device unavilable)。
警告:必须在打开端口前设置CommPort属性。
数据类型
Integer。

CTSHolding属性
检查CTS(Clear To Send)线的状态,确定是否可以发送数据。通常,调制解调器给连接的计算机发送CTS 信

号,指明正在处理发送过程。该属性在设计时不可用,在运行时是只读的。
语法
object.CTSHolding
CTSHolding属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
CTSHolding属性的设置如下表所示:
设置描述
True CTS(Clear To Send)线高
False CTS(Clear To Send)线低
说明
当CTS线低(CTSHolding = False)并超时,MSComm控件就设置CommEvent
属性为comEventCTSTO(Clear To Send Timout)并激活OnComm事件。
在RTS/CTS( Request To Send / Clear To Send)硬件握手中使用CTS线。如果需要确定CTS线的状态,可以使用

CTSHolding属性手动查询。
要获取更多信息或握手协议,请参阅Handshaking属性。
数据类型
Boolean

DSRHolding属性
确定DSR(Data Set Ready)线的状态。通常,调制解调器给连接的计算机发送CTS信号,指明准备就绪。该属

性在设计时不可用,在运行时是只读的。
语法
object.DSRHolding
object置换元表示一个对象表达式,其值为“应用于”列表中的一个对象。
DSRHolding属性返回如下值:
值描述
True DSR(DataSetReady)线高
False DSR(DataSetReady)线低
说明
当DSR线高(DSRHolding = False)并超时,MSComm控件设置CommEvent
属性为comEventDTSTO(Data Set Ready Timeout)并激活OnComm事件。
在为DTE(Data Terminal Equipment)计算机编写DSR/DTR(Data Set Ready /
Data Terminal Equipment )握手例程时,该属性很有用。
数据类型
Boolean

DRTEnable 属性
确定在通信过程中是否使用DTR(Data Terminal Ready)线。通常,DTR 信
号是计算机发送给调制解调器的,指明计算机可以接收输入数据了。
语法
object.DTREnable [=value]
DTREnable属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指定是否使用DTR线,如“设置”中所示
设置
value 值的设置如下:
设置描述
True 使用DTR线
False (缺省)禁止DTR线
说明
当DTREnable属性设置为True时,如果端口打开,DTR线被设置为高(on),
如果端口关闭,DTR线被设置为低(off)。
注意:在大多数情况下,将DTR线设置为低将挂起电话。
数据类型
Boolean

EOFEnable属性
EOFEnable 属性确定MSComm 控件是否检查输入中的EOF 字符。如果发现了EOF 字符,停止输入,将把

CommenEvent 属性置为comEvEOF,激活OnComm事件。
语法
object.EOFEnable [=value]
EOFEnable属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指定发现了EOF 字符时是否触发OnComm 事件,如“设置”所示
设置
value 设置如下:
设置描述
True 当发现EOF字符时就触发On Comm事件
False (缺省值)当发现EOF字符时不触发On Comm事件
说明
当EOFEnable属性设置为False时,控件将不在输入流中扫描EOF字符。
Error 消息(MSComm控件)
下表列出了MSComm控件可捕获的错误消息:
常量值描述
ComInvalidPropertyVal
ue
380 无效的属性值
ComSetNotSupported 383 属性只读
ComGetNotSupported 394 属性只读
ComPortOpen 8000 端口打开时该存在无效
8001 超时设置必须比0 值大
ComPortInvalid 8002 无效的端口号
8003 属性只在运行时有效
8004 属性在运行时是只读的
ComPortAleadyOpen 8005 端口已经打开
8006 设备标识符无效或不支持
8007 不支持设备的波特率
8008 指定的字节大小无效
8009 缺省参数错误
8010 硬件不可用(被其他设备锁住)
8011 函数不能分配队列
ComNoOpen 8012 设备没有打开
8013 设备已经打开
8014 不能使用通信通知
续表
ComSetCommStateFaile
d
8015 不能设置通信状态
8016 不能设置通信事件屏蔽
ComPortNotOpen 8018 该存在只在端口打开是有效
8019 设备忙
ComReadError 8020 通信设备读错误
ComDCBError 8021 检取端口设备控制块时出现内部错误
Handshaking属性
设置或返回硬件握手协议。
语法
object.Handshaking [=value]
Handshaking属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定握手协议,如“设置”中所示
设置
value 值的设置如下:
设置值描述
comNone 0 (缺省)没有握手协议
ComXOnXOff 1 XON/XOFF握手协议
ComRTS 2 RTS/CTS(Request To Send / Clear To Send)握手协议
ComRTSXOnXOff 3 RTS和XON/XOFF协议
说明
握手协议是指从硬件端口向接收缓冲区传输数据时使用的内部通信协议。
当一个字符数据到达串口时,通信设备必须将其移动到接收缓冲区,使应用程序可以读取数据。如果没有接收

缓冲区而应用程序希望直接从硬件读取每个字符,你将可能丢失数据,因为数据到达的速度很快。
握手协议保证缓冲区溢出时不丢失没有数据,到达串口的数据将被通信设备很快地移动到接收缓冲区中。
数据类型
Integer

InBufferCount属性
返回在接收缓冲区中等待的字符数。该属性在设计时不可用。
语法
object.InBufferCount [=value]
InBufferCount属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定在接收缓冲区中等待的字符数
说明
InBufferCount 是指已被接收到接收缓冲区、等待应用程序读取的字符数。
将InBufferCount设置置为0将清除接收缓冲区。
注意:不要将该属性与InBufferize 属性混淆。InBufferSize 属性
反映的是接收缓冲区总的大小。
数据类型
Integer

InBufferSize属性
设置或返回接收缓冲区大小的字节数。
语法
object.InBufferSize[=value]
InBufferSize属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定接收缓冲区大小的字节数
说明
InBufferSize 是指整个接收缓冲区的大小。缺省是1024 个字节。不要将该属性与反映等待应用程序读取字符

数的InBufferCount属性混淆。
注意:对接收缓冲区设置的越大,应用程序可以使用的内存就越少。
然而,如果接收缓冲区太小,缓冲区将会溢出,除非使用握手协议。通常,将缓冲区设置为1024。如果发生了

溢出,就增大该缓冲区,以满足应用程序传输速率。
数据类型
Integer

Input属性
返回或删除接收缓冲区中的数据流。该属性在设计时不可用,在运行时是
只读的。
语法
object.Input
Input属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
说明
InputLen属性确定了Input属性读入的字符数。将InputLen 属性设置为0将导致Input属性读入整个接收缓冲区

的内容。
InputMode 属性确定了Input 属性检取数据的类型。如果InputMode 设置为comInputModeText,则Input属性将

返回Variant类型的文本数据。如果InputMode属性设置为comInputModeBinary,则Input 属性返回一个Variant 

类型的二进制
字节矩阵。
数据类型
Variant

示例
下面的例子演示了如何从接收缓冲区中检取数据。
Private Sub Command1_Click()
Dim InString as String
' Retrieve all available data.
MSComm1.InputLen = 0
' Check for data.
If MSComm1.InBufferCount Then
' Read data.
InString = MSComm1.Input
End If
End Sub

InputLen属性
设置和返回Input属性从接收缓冲区中读取的字符数。
应用于
MSComm控件。
语法
object.InputLen [=value]
InputLen属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象value 一个整数表达式,指定Input 属性从接收缓冲

区中读取的字符数
说明
InputLen 属性的缺省值是0。将InputLen 属性设置为0 将导致Input 属性读入整个接收缓冲区的内容。
如果接收缓冲区中没有可读的字符,就返回空字符串。在使用Input 之前,用户可以检查InBufferCount的值,

以便确定是否读取了所要求的字符数。
从输出格式固定的计算机读取定长数据块时该属性很有用。
数据类型
Integer

示例
下面的例子演示了如何检取10个字符的数据。
Private Command1_Click()
Dim CommData as String
' Specify a 10 character block of data.
MSComm1.InputLen = 10
' Read data.
CommData = MSComm1.Input
End Sub

InputMode属性
设置和返回Input属性所检取数据的类型。
应用于
MSComm控件。
语法
object.InputMode [=value]
InputMode属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个值或常量,指定输入模式,如“设置”中所示
设置
value 值的设置如下:
常量值描述
comInputModeText 0 (缺省)Input 属性检取的数据是文本
comInputModeBinary 1 Input属性检取的数据是二进制数据
说明
InputMode 属性确定了如果通过Input 属性检取数据。数据将被看作字符串或一个二进制字节矩阵。
对于使用ANSI 字符集的数据应使用comInputModeText 类型。所有其他数据如内嵌控制字符、Null等都使用

comInputModeBinary类型。
示例
下面的例子从通信端口中读取了10字节的二进制数据并分配给一个矩阵。
Private Sub Command1_Click()
Dim Buffer as Variant
Dim Arr() as Byte
' Set and open port
MSComm1.CommPort = 1
MSComm1.PortOpen = True
' Set InputMode to read binary data
MSComm1.InputMode = comInputModeBinary
' Wait until 10 bytes are in the input buffer
Do Until MSComm1.InBufferCount < 10
DoEvents
Loop
' Store binary data in buffer
Buffer = MSComm1.Input
' Assign to byte array for processing
Arr = Buffer
End Sub
NullDiscard属性
确定是否将null字符传输给接收缓冲区。
应用于
MSComm控件。
语法
object.NullDiscard [=value]
NullDiscard属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,确定是否将端口来的Null 字符发送给接收缓冲区,如“设置”中所示
设置
value 值的设置如下:
设置描述
True 不把端口来的Null 字符传输给接收缓冲区
False (缺省)将端口来的Null字符传输给接收缓冲区
说明
Null字符定义为ASCII字符0──Chr$(0)。
数据类型
Boolean

OnComm事件
当CommEvent 属性值改变时产生该事件,表明产生了通信事件或通信错
误。
应用于
MSComm控件。
语法
Private Sub object_OnComm()
OnComm事件的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
说明
CommEvent 属性捕获了OnComm 产生事件或错误的代码。注意,将
RThreshold 或Sthreshold 属性置为0 将不捕获comEvReceive 和comEvSend 事件。
示例
下面的例子演示了如何处理通信错误和事件。你可以在Case 语句的后面插入代码处理相应的错误或事件。
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' Errors
Case comEventBreak ' A Break was received.
Case comEventCDTO ' CD (RLSD) Timeout.
Case comEventCTSTO ' CTS Timeout.
Case comEventDSRTO ' DSR Timeout.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]
' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of
' chars.
Case comEvSend ' There are SThreshold number of
' characters in the transmit
' buffer.
Case comEvEof ' An EOF charater was found in
' the input stream
End Select
End Sub
OutBufferCount 属性
返回在发送缓冲区中等待的字符数。你可以使用该属性清除发送缓冲区。
该属性在设计时不可用。
应用于
MSComm控件。
语法
object.OutBufferCount [=value]
OutBufferCount属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定发送缓冲区中等待的字符数
说明
将OutBufferCount属性置为0将清除发送缓冲区。
注意:不要将OutBufferCount属性与OutBufferSize属性混淆起来。
数据类型
Integer

OutBufferSize 属性
返回或设置发送缓冲区的字节大小。
应用于
MSComm控件。
语法
object.OutBufferSize [=value]
OutBufferSize属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定发送缓冲区的字节大小
说明
OutBufferSize 指整个发送缓冲区的大小。缺省值是512 字节。不要将该属性与OutBufferCount 属性混淆起来

,OutBufferCount 属性反映的是发送缓冲区当前等待的字节数。
注意:对发送缓冲区设置的越大,应用程序可以使用的内存就越少。
然而,如果你的发送缓冲区太小,缓冲区将会溢出,除非使用握手协议。
通常,将缓冲区设置为512 字节。如果发生了溢出,就增大该缓冲区,
以满足你的应用程序传输速率。
数据类型
Integer

Output属性
将数据写入发送缓冲区。该属性在设计时不可用,在运行时是只写的。
应用于
MSComm控件。
语法
object.Output [=value]
Output属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个字符串,是写入发送缓冲区中的字符
说明
Output 属性可以发送文本数据或二进制数据。要使用Output 属性发送文本
数据,你必须指明包含字符串的一个Variant 变量。要发送二进制数据,必须将
包含字节矩阵的Variant变量传递给Output属性。
通常,如果你给应用程序发送ANSI 字符串,可以文本方式发送。如果数
据包含了内嵌控制字符、Null字符等,必须将其作为二进制传递过去。
数据类型
Variant

示例
下面的例子演示了如何将用户输入的字符发送给串口。
Private Sub Form_KeyPress (KeyAscii As Integer)
Dim Buffer as Variant
' Set and open port
MSComm1.CommPort = 1
MSComm1.PortOpen = True
Buffer = Chr$(KeyAscii)
MSComm1.Output = Buffer
End Sub

ParityReplace 属性
设置或返回一个字符,该字符在方式了奇偶校验错误时将替换数据流中的无效字符。
应用于
MSComm控件。
语法
object.ParityReplace [=value]
ParityReplace属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 字符串表达式,表示替换字符,如“说明”中所示
说明
parity bit 是一个比特位,与指定的数据比特一起传送,可以提供一定的错误检测功能。
当你使用奇偶校验位时,MSComm 控件将数据中所有设置(即“1”)的比特位相加,来检测结果的奇偶性(根

据端口的奇偶设置)。
缺省地,控件使用问号(“?”)替换无效字符。将ParityReplace 属性设置为空字符串("")将在奇偶校验

错误时不替换无效字符,但仍将CommEvent属性设置为commEventRXParity并触发OnComm事件。
ParityReplace 字符是面向字节的操作,必须是单字节字符。你可以指定任意的0到255的ANSI字符作为替换字

符。
数据类型
String

PortOpen属性
设置或返回通信端口的状态(打开或关闭)。在设计时该属性不可用。
应用于
MSComm控件。
语法
object.PortOpen [=value]
PortOpen属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指定通信端口的状态
说明
将PortOpen 属性设置为True 将打开端口。设置为False 将关闭端口并清除接收和发送缓冲区。当你的应用程

序终止时,MSComm控件将自动关闭串口。
在打开端口前,确定CommPort 属性设置为正确的端口号。如果CommPort属性设置为无效的端口号,在你试图打

开端口时,MSComm 控件将产生error
68(Device unavailable)错误。
而且,你的串口设备必须支持Settings 属性中的设置。如果你的硬件设备不支持Settings属性中的一些设置,

则你的硬件工作或许不正确。
如果端口在打开之前将DTREnable 或RTSEnable 属性设置为True,则当端口关闭时这些属性就自动设置为False

。另外,DTR 和RTS 线保持它们原来的状态。
数据类型
Boolean

示例
下面的例子打开端口1,波特率是9600,没有奇偶校验,8 个数据位,一个停止位。
MSComm1.Settings = "9600, n, 8,1"
MSComm1.CommPort = 1
MSComm1.PortOpen =True

RThreshold属性
设置或返回在MSComm 控件将CommEvent 属性设置为comEvReceive 并在产生OnComm事件之前所接收的字符数。
应用于MSComm控件。
语法
object.Rthreshold [=value]
RThreshold属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定产生OnComm事件之前接收的字符数
说明
将RThreshold属性设置为0(缺省)将在接收字符时不产生OnComm事件。
例如,将RThreshold 属性设置为1 将导致MSComm 控件在每个字符放入缓冲区时就触发OnComm事件。
数据类型
Integer

RTSEnable 属性
确定是否使用RTS(Request To Send)线。通常RTS信号是计算机发送该连接的调制解调器,请求准许发送数据

。应用于MSComm控件。
语法
object. RTSEnable [=value]
RTSEnable属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指定是否使用RTS线,如“设置”中所示
设置
value 值的设置如下:
设置描述
True 使用RTS线
False (缺省)不使用RTS线
说明
当RTSEnable 属性设置为True 时,打开端口将把RTS 线置为高,关闭端口将把RTS线置为低。
在RTS/CTS 握手协议中使用RTS 线。如果你需要确定RTS 线的状态,RTSEnable属性允许你手工检测该线。
想了解有关握手协议中的更多信息,请参阅HardShaking属性。
数据类型
Boolean

Settings属性
设置或返回波特率、奇偶校验、数据位和停止位参数。
应用于MSComm控件。
语法
object.Settings [=value]
Settings 属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个字符串表达式,代表通信端口设置,如下所示
说明
当端口打开时value 值设置不正确,MSComm 控件就产生error 380(Invalidproperty value)错误。
value 由4部分组成,格式如下:
“BBBB, P, D, S”
BBBB 是波特率,P 是奇偶校验,D 是数据位,S 是停止位。Value 的缺省值如下:
" 9600, N, 8, 1"
下表列出了有效的波特率:
设置
110
300
600
1200
2400
9600(缺省)
14400
19200
28800
38400(保留)
56000(保留)
128000(保留)
256000(保留)
下表列出了有效的奇偶校验值:
设置描述
E 偶校验
M 屏蔽
N (缺省)None
O 奇校验
S 空格
下表列出了有效的数据位:
设置
4
5
6
7
8(缺省)
下表列出了有效的停止位:
设置
1(缺省)
1.5
2
数据类型
String

示例
下面的例子将端口设置为波特率9600,没有奇偶校验,8 个数据位,一个停止位。
MSComm1.Settings = "9600, N, 8, 1"

SThreshold属性
设置或返回在MSComm控件将CommEvent 属性设置为comEvSend 并产生OnComm事件之前所发送缓冲区中允许的最

少字符数。
应用于
MSComm控件。
语法
object.Sthreshold [=value]
SThreshold属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定产生OnComm 事件之前发送缓冲区中的最少字符数
说明
将SThreshold属性设置为0(缺省)将在发送字符时不产生OnComm事件。
例如,将SThreshold属性设置为1将导致发送缓冲区完全变空。
如果发送缓冲区中的字符比value 值小,则将CommEvent 属性设置为
comEvSend,并产生OnComm 事件。comEvSend 事件只产生一次,在字符数低于SThreshold 时。例如,如果

SThreshold 等于5,当字符数从5 降低到4 时产生一次comEvSend事件。如果输出队列中的字符数总不多于

SThreshold属性值,
则永不产生该事件。
数据类型
In



0 0
原创粉丝点击