VB中MSComm控件使用详解.docx

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

VB中MSComm控件使用详解.docx

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

VB中MSComm控件使用详解.docx

VB中MSComm控件使用详解

VB中MSComm控件使用详解

VB中MSComm控件使用详解

 

     MSComm 

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

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

 

     MicrosoftCommunications 

     Control(以下简称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] 

     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(缺省)

     下表列出合法的停止位值。

 

     设置值 

     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() 

           OnComm事件语法包括下列部分:

 

           部分描述 

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

 

           说明 

           CommEvent属性包含实际错误或产生OnComm事件的数码。

注意,设置Rthreshold或Sthreshold属性为 

           0,分别使捕获comEvReceive和comEvSend事件无效。

 

           OnComm事件示例 

           下例说明如何处理通讯错误和事件。

可以在相关的Case语句之后插入代码来处理特定的错误或事件。

 

           PrivateSubMSComm_OnComm() 

               SelectCaseMSComm1.CommEvent 

               'Handleeacheventorerrorbyplacing 

               'codebeloweachcasestatement 

           '错误 

                  CasecomEventBreak   '收到Break。

 

                  CasecomEventCDTO   'CD(RLSD)超时。

 

                  CasecomEventCTSTO   'CTSTimeout。

 

                  CasecomEventDSRTO   'DSRTimeout。

 

                  CasecomEventFrame   'FramingError 

                  CasecomEventOverrun   '数据丢失。

 

                  CasecomEventRxOver  '接收缓冲区溢出。

 

                  CasecomEventRxParity   'Parity错误。

 

                  CasecomEventTxFull    '传输缓冲区已满。

 

                  CasecomEventDCB    '获取DCB时意外错误 

               '事件 

                  CasecomEvCD   'CD线状态变化。

 

                  CasecomEvCTS   'CTS线状态变化。

 

                  CasecomEvDSR   'DSR线状态变化。

 

                  CasecomEvRing   'RingIndicator变化。

 

                  CasecomEvReceive   '收到RThreshold#ofchars. 

                  CasecomEvSend   '传输缓冲区有Sthreshold个字符                     

            ' 

                  CasecomEvEof   '输入数据流中发现EOF字符 

               EndSelect 

           EndSub 

           CommEvent属性 

           返回最近的通讯事件或错误。

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

 

           语法 

           object.CommEvent 

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

 

           部分描述 

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

           说明 

           只要有通讯错误或事件发生时都会产生OnComm事件,CommEvent属性存有该错误或事件的数值代码。

要确定引发OnComm 

           事件的确切的错误或事件,请参阅CommEvent属性。

 

           CommEvent属性返回下列值之一来表示不同的通讯错误或事件。

这些常数可以在该控件的对象库中找到。

通讯错误包括下列设置值:

 

           常数值描述 

           comEventBreak1001接收到一个中断信号。

 

           comEventCTSTO1002ClearToSend超时。

在系统规定时间内传输一个字符时,ClearToSend 

           线为低电平。

 

           comEventDSRTO1003DataSetReady超时。

在系统规定时间内传输一个字符时,DataSetReady 

           线为低电平。

 

           comEventFrame1004帧错误。

硬件检测到一帧错误。

 

           comEventOverrun1006端口超速。

没有在下一个字符到达之前从硬件读取字符,该字符丢失。

 

           comEventCDTO1007载波检测超时。

在系统规定时间内传输一个字符时,CarrierDetect 

           线为低电平。

CarrierDetect也称为ReceiveLineSignalDetect(RLSD)。

 

           comEventRxOver1008接受缓冲区溢出。

接收缓冲区没有空间。

 

           comEventRxParity1009奇偶校验。

硬件检测到奇偶校验错误 

           comEventTxFull1010传输缓冲区已满。

传输字符时传输缓冲区已满 

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

           通讯事件包括下列设置值:

 

           常数值描述 

           comEvSend1在传输缓冲区中有比Sthreshold数少的字符。

 

           comEvReceive2收到Rthreshold个字符。

该事件将持续产生直到用Input属性从接收缓冲区中删除数据。

 

           comEvCTS3ClearToSend线的状态发生变化。

 

           comEvDSR4DataSetReady线的状态发生变化。

该事件只在DST从1变到0时才发生。

 

           comEvCD5CarrierDetect线的状态发生变化。

 

           comEvRing6检测到振铃信号。

一些UART(通用异步接收—传输)可能不支持该事件。

 

           comEvEOF7收到文件结束(ASCII字符为26)字符。

 

           数据类型 

           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,用来输入电话号码; 

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

当前位置:首页 > 求职职场 > 面试

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

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