MSCOMM详解.doc_第1页
MSCOMM详解.doc_第2页
MSCOMM详解.doc_第3页
MSCOMM详解.doc_第4页
MSCOMM详解.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MSComm控件使用详解龚建伟:这篇东西来不及好好整理,因有朋友经常提及,先放在这里,如果有必要,再详细理顺一下,更为详细的信息请去看MSDN。 摘要:本文详细介绍了MSComm控件在串口编程中使用。 目 次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控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Eventdriven)方法,一是查询法。1.MSComm控件两种处理通讯的方式MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。2.MSComm 控件的常用属性MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。CommPort 设置并返回通讯端口号。Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。Input 从接收缓冲区返回和删除字符。Output 向传输缓冲区写一个字符串。下面分别描述:CommPort属性 设置并返回通讯端口号。语法 object.CommPortvalue (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 属性:确定是否可通过查询 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) 并产生 OnComm 事件。Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态,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-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 超时错误),并产生 OnComm 事件。注意 在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。Carrier Detect 也被称为 Receive Line Signal Detect (RLSD)。数据类型 BooleanDSRHolding 属性:确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。语法:object.DSRHoldingobject 所在处表示对象表达式,其值是“应用于”列表中的对象。DSRHolding 属性返回以下值:值 描述True Data Set Ready 线高False Data Set Ready 线低说明:当 Data Set Ready 线为高电平 (DSRHolding = True) 且超时时,MSComm 控件设置 CommEvent 属性为 comEventDSRTO(数据准备超时)并产生 OnComm 事件。当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该属性是十分有用的。数据类型:BooleanSettings 属性: 设置并返回波特率、奇偶校验、数据位、停止位参数。语法: object.Settings = value说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。Value 由四个设置值组成,有如下的格式:BBBB,P,D,SBBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:9600,N,8,1InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。语法 object.InputLen = valueInputLen 属性语法包括下列部分: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 字符。错误消息(MS Comm 控件)下表列出 MSComm 控件可以捕获的错误:值 描述380 无效属性值 comInvalidPropertyValue383 属性为只读 comSetNotSupported394 属性为只读 comGetNotSupported8000 端口打开时操作不合法 comPortOpen8001 超时值必须大于 08002 无效端口号 comPortInvalid8003 属性只在运行时有效8004 属性在运行时为只读8005 端口已经打开 comPortAlreadyOpen8006 设备标识符无效或不支持该标识符8007 不支持设备的波特率8008 指定的字节大小无效8009 缺省参数错误8010 硬件不可用(被其它设备锁定)8011 函数不能分配队列8012 设备没有打开 comNoOpen8013 设备已经打开8014 不能使用 comm 通知8015 不能设置 comm 状态 comSetCommStateFailed8016 不能设置 comm 事件屏蔽8018 仅当端口打开时操作才有效 comPortNotOpen8019 设备忙8020 读 comm 设备错误 comReadError8021 为该端口检索设备控制块时的内部错误 comDCBErrorPrivate Sub MSComm1_OnComm()On Error Resume Next Dim BytReceived() As Byte Dim strBuff As String Dim strData As String Dim i As Integer Dim x As Integer Select Case MSComm1.CommEvent Case 2 MSComm1.InputLen = 0 strBuff = MSComm1.Input BytReceived() = strBuff For i = 0 To UBound(BytReceived) If Len(Hex(BytReceived(i) = 1 Then strData = strData & 0 & Hex(BytReceived(i) Else strData = strData & Hex(BytReceived(i) End If Next Text3 = Text3 + strData If Left(strData, 2) = 00 And Len(strData) = 8 Then Text1(0).Text = Left(strData, 8) Call DataClear ElseIf Left(strData, 2) = 01 And Len(strData) = 10 Then Text1(1).Text = Left(strData, 10) Call DataClear End IfEnd SelectEnd SubPublic Sub DataClear()MSComm1.OutBufferCount = 0 清空发送缓冲区MSComm1.InBufferCount = 0Text3 = End SubPrivate Sub Form_Load()MSComm1.CommPort = 1 COM端口MSComm1.Settings = 9600,n,8,1MSComm1.InputMode = comInputModeBinary 采用二进制传输MSComm1.InBufferCount = 0 清空接受缓冲区MSComm1.OutBufferCount = 0 清空传输缓冲区MSComm1.SThreshold = 1 如果传输缓冲区完全空时产生MSComm事件MSComm1.RThreshold = 1 不产生MSComm事件MSComm1.PortOpen = TrueText3 = 打开端口End Sub 4VB中关于MSComm控件使用详解 VB中关于MSComm控件使用详解0位粉丝 1楼MSComm控件使用详解 MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Eventdriven)方法,一是查询法。 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 CommPort属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 value 一整型值,说明端口号。 说明 在设计时,value可以设置成从1到16的任何数(缺省值为1)。但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。 警告必须在打开端口之前设置CommPort属性。 数据类型 Integer Settings属性 设置并返回波特率、奇偶校验、数据位、停止位参数。 语法 object.Settings=value Settings属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 value 字符串表达式,说明通讯端口的设置值,如下所述。 说明 当端口打开时,如果value非法,则MSComm控件产生错误380(非法属性值)。 Value由四个设置值组成,有如下的格式: 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 偶数(Even) M 标记(Mark) N 缺省(Default) None O 奇数(Odd) S 空格(Space) 下表列出合法的数据位值。 设置值 4 5 6 7 8(缺省) 下表列出合法的停止位值。 2006-7-27 16:38 0位粉丝 2楼设置值 1 (缺省) 1.5 2 数据类型 String Settings示例 下面的例子设置控件端口通讯,波特率9600,无奇偶校验检查,8个数据位,1个停止位: MSComm1.Settings=9600,N,8,1 PortOpen属性 设置并返回通讯端口的状态(开或关)。在设计时无效。 语法 object.PortOpen=value PortOpen属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 value 布尔表达式,说明通讯端口的状态。 设置值 value设置值是: 设置值 描述 True 端口开 False 端口关 说明 设置PortOpen属性为True打开端口。设置为False关闭端口并清除接收和传输缓冲区。当应用程序终止时,MSComm控件自动关闭串行端口。 在打开端口之前,确定CommPort属性设置为一个合法的端口号。如果CommPort属性设置为一个非法的端口号,则当打开该端口时,MSComm控件产生错误68(设备无效)。 另外,串行端口设备必须支持Settings属性当前的设置值。如果Settings属性包含硬件不支持的通讯设置值,那么硬件可能不会正常工作。 如果在端口打开之前,DTREnable或RTSEnable属性设置为True,当关闭端口时,该属性设置为False。否则,DTR和RTS线保持其先前的状态。 数据类型 Boolean PortOpen属性示例 下例以波特率9600打开1号通讯端口,没有奇偶检查,8个数据位,1个停止位。 MSComm1.Settings=9600,n,8,1 MSComm1.CommPort=1 MSComm1.PortOpen=True Input属性 返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。 语法 object.Input Input属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 说明 InputLen属性确定被Input属性读取的字符数。设置InputLen为0,则Input属性读取缓冲区中全部的内容。 InputMode属性确定用Input属性读取的数据类型。如果设置InputMode为comInputModeText,Input属性通过一个Variant返回文本数据。如果设置InputMode为comInputModeBinary,Input属性通过一个Variant.返回一二进制数据的数组。 数据类型 Variant Input属性示例 该例子说明如何从接收缓冲区读取数据。 PrivateSubCommand1_Click() DimInStringasString 读取所有可用数据。 MSComm1.InputLen=0 检查数据。 IfMSComm1.InBufferCountThen Readdata. InString=MSComm1.Input EndIf EndSub Output属性 往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。 语法 object.Output=value Output属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 value 要写到传输缓冲区中的一个字符串。 说明 Output属性可以传输文本数据或二进制数据。用Output属性传输文本数据,必须定义一个包含一个字符串的Variant。发送二进制数据,必须传递一个包含字节数组的Variant到Output属性。 正常情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌入控制字符、Null字符等等的数据,要以二进制形式发送。 数据类型 Variant Output属性示例 下面的例子说明如何将用户键入的每一个字符送到串行端口: PrivateSubForm_KeyPress(KeyAsciiAsInteger) DimBufferasVariant 设置并打开窗口 MSComm1.CommPort=1 MSComm1.PortOpen=True Buffer=Chr$(KeyAscii) MSComm1.Output=Buffer EndSub OnComm事件 无论何时当CommEvent属性的值变化时,就产生OnComm事件,标志发生了一个通讯事件或一个错误。 语法 PrivateSubobject_OnComm() 2006-7-27 16:38 回复 kakaronlei 0位粉丝 3楼OnComm事件语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 说明 CommEvent属性包含实际错误或产生OnComm事件的数码。注意,设置Rthreshold或Sthreshold属性为0,分别使捕获comEvReceive和comEvSend事件无效。 OnComm事件示例 下例说明如何处理通讯错误和事件。可以在相关的Case语句之后插入代码来处理特定的错误或事件。 PrivateSubMSComm_OnComm() SelectCaseMSComm1.CommEvent Handleeacheventorerrorbyplacing codebeloweachcasestatement 错误 CasecomEventBreak收到Break。 CasecomEventCDTOCD(RLSD)超时。 CasecomEventCTSTOCTSTimeout。 CasecomEventDSRTODSRTimeout。 CasecomEventFrameFramingError CasecomEventOverrun数据丢失。 CasecomEventRxOver接收缓冲区溢出。 CasecomEventRxParityParity错误。 CasecomEventTxFull传输缓冲区已满。 CasecomEventDCB获取DCB时意外错误 事件 CasecomEvCDCD线状态变化。 CasecomEvCTSCTS线状态变化。 CasecomEvDSRDSR线状态变化。 CasecomEvRingRingIndicator变化。 CasecomEvReceive收到RThreshold#ofchars. CasecomEvSend传输缓冲区有Sthreshold个字符 CasecomEvEof输入数据流中发现EOF字符 EndSelect EndSub CommEvent属性 返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。 语法 object.CommEvent CommEvent属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 说明 只要有通讯错误或事件发生时都会产生OnComm事件,CommEvent属性存有该错误或事件的数值代码。要确定引发OnComm事件的确切的错误或事件,请参阅CommEvent属性。 CommEvent属性返回下列值之一来表示不同的通讯错误或事件。这些常数可以在该控件的对象库中找到。通讯错误包括下列设置值: 常数 值 描述 comEventBreak 1001 接收到一个中断信号。 comEventCTSTO 1002 ClearToSend超时。在系统规定时间内传输一个字符时,ClearToSend线为低电平。 comEventDSRTO 1003 DataSetReady超时。在系统规定时间内传输一个字符时,DataSetReady线为低电平。 comEventFrame 1004 帧错误。硬件检测到一帧错误。 comEventOverrun 1006 端口超速。没有在下一个字符到达之前从硬件读取字符,该字符丢失。 comEventCDTO 1007 载波检测超时。在系统规定时间内传输一个字符时,CarrierDetect线为低电平。CarrierDetect也称为ReceiveLineSignalDetect(RLSD)。 comEventRxOver 1008 接受缓冲区溢出。接收缓冲区没有空间。 comEventRxParity 1009 奇偶校验。硬件检测到奇偶校验错误 comEventTxFull 1010 传输缓冲区已满。传输字符时传输缓冲区已满 comEventDCB 1011 检索端口的设备控制块(DCB)时的意外错误 通讯事件包括下列设置值: 常数 值 描述 comEvSend 1 在传输缓冲区中有比Sthreshold数少的字符。 comEvReceive 2 收到Rthreshold个字符。该事件将持续产生直到用Input属性从接收缓冲区中删除数据。 comEvCTS 3 ClearToSend线的状态发生变化。 comEvDSR 4 DataSetReady线的状态发生变化。该事件只在DST从1变到0时才发生。 comEvCD 5 CarrierDetect线的状态发生变化。 comEvRing 6 检测到振铃信号。一些UART(通用异步接收传输)可能不支持该事件。 comEvEOF 7 收到文件结束(ASCII字符为26)字符。 2006-7-27 16:38 回复 kakaronlei 0位粉丝 4楼数据类型 Integer MSComm控件示例 下面这个简单的例子演示了用调制解调器进行基本的串行通讯: PrivateSubForm_Load() 保存输入子串的缓冲区 DimInstringAsString 使用COM1。 MSComm1.CommPort=1 9600波特,无奇偶校验,8位数据,一个停止位。 MSComm1.Settings=9600,N,8,1 当输入占用时, 告诉控件读入整个缓冲区。 MSComm1.InputLen=0 打开端口。 MSComm1.PortOpen=True 将attention命令送到调制解调器。 Chr$函数:返回String,其中包含有与指定的字符代码相关的字符。 MSComm1.Output=ATV1Q0&Chr$(13)确保 调制解调器以OK响应。 等待数据返回到串行端口。 Do DoEvents Buffer$=Buffer$&MSComm1.Input LoopUntilInStr(Buffer$,OK&vbCRLF) 从串行端口读OK响应。 关闭串行端口。 MSComm1.PortOpen=False EndSub 注意MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。 实例1:计算机拨号 在一些实际应用中经常需要使用计算机拨号。下面这个例子利用MSComm控件操作Modem进行拨号,实现串口通信。 实现步骤: 1.建窗体 添加一个MSComm控件,用来建立与串口的连接; 添加一个Text控件,Name属性为Txttel,用来输入电话号码; 添加3个CommandButton控件,Name属性分别为DialButton、CancellButton、QuitButton,分别用来实现拨号、中止拨号、中止程序; 添加一个Label控件,用来显示所有与拨号有关的信息。窗体见图1。 2设置MSComm控件属性 InBufferSize=1024;InBufferSize是指整个接收缓冲区的大小。缺省值是1024字节。 Inputlen=0;InputLen属性的缺省值是0。设置InputLen为0时,使用Input将使MSComm控件读取接收缓冲区中全部的内容。 InputMode=0;0-(缺省)数据通过Input属性以文本形式取回。 1-数据通过Input属性以二进制形式取回 Rthreshold=2;当接收字符后,若Rthreshold属性设置为0(缺省值)则不产生OnComm事件。 RTSEnable=True;当RTSEnable设置为True,端口打开时,RequestToSend线设置为高电平,端口关闭时,设置为低电平。 Settings=“9600,N,8,1”; Sthreshold=0。若设置Sthreshold属性为0(缺省值),数据传输事件不会产生OnComm事件。若设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。 因为每一台计算机的串口使用状态都不会一样。为使程序具有通用性,在窗体的Load方法中首先进行串口测试,找到第一个可用串口后再进行设置。 3程序功能 程序根据输入的电话号码进行拨号,Modem正常拨号后,提示用户摘机,准备通话。 图1电话拨号实例 4主要方法与事件代码 设置可用串口 PrivateSubForm_Load() OnErrorGoToerror_open Fori=1To4 MSComm1.CommPort=1 MSComm1.PortOpen=True 设置可用的第一个串口 OnErrorGoTo0 ExitSub error_resume: Next error_open: Resumeerror_resume EndSub PrivateSubDialButton_Click() DimNumber$,Temp$ Number$=Trim$(Txttel.Text)返回Variant(String),其中包含指定字符串的拷贝,没有前导空白(LTrim)、尾随空白(RTrim)或前导和尾随空白(Trim)。 IfNumber$=“Then MsgBox“请输入电话号码 Txttel.SetFocus ExitSub EndIf DialButton.Enabled=False QuitButton.Enabled=False DialString$=“ATDT”Number$“;”vbCr 2006-7-27 16:38 回复 kakaronlei 0位粉丝 5楼清除接收缓冲区 MSComm1.InBufferCount=0 拨电话号码 MSComm1.Output=DialString$ Lblmessage.Caption=“正在拨号码”Number$ DialButton.Enabled=True QuitButton.Enabled=True EndSub PrivateSubMSComm1_OnComm() SelectCaseMSComm1.CommEvent CasecomEvReceive 读取串口数据 COMBUF=COMBUFMSComm1.Input lc=InStr(1,COMBUF,“OK”) Iflc=0ThenExitSub Modem已正常拨号,返回OK Lblmessage.Caption=“请您摘下电话机,准备通话” CasecomEvSend EndSelect EndSub PrivateSubCancelButton_Click() 断开与调制解调器的连接 MSComm1.Output=“ATH”vbCr EndSub 实例2:实现来电显示 在一些实际应用中,需要显示并保存来电号码,并根据电话号码显示相应资料,比如小区物业管理和110报警等系统。 实现步骤: 1创建窗体 添加一个MSComm控件,用来建立与串口的连接; 添加4个Option控件,用来确定使用的串口号; 添加4个Labe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论