串口通信控件.docx

上传人:b****2 文档编号:2401953 上传时间:2022-10-29 格式:DOCX 页数:15 大小:190.51KB
下载 相关 举报
串口通信控件.docx_第1页
第1页 / 共15页
串口通信控件.docx_第2页
第2页 / 共15页
串口通信控件.docx_第3页
第3页 / 共15页
串口通信控件.docx_第4页
第4页 / 共15页
串口通信控件.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

串口通信控件.docx

《串口通信控件.docx》由会员分享,可在线阅读,更多相关《串口通信控件.docx(15页珍藏版)》请在冰豆网上搜索。

串口通信控件.docx

串口通信控件

附录A串行通信控件MSComm

在VisualStudio(VB.NET、VC++.NET、C#.NET)中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通 过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。

但在Microsoft.NET技术广泛应用的今天,VisualStudio没有将此控件加入控件库,所以人们采用了3种方法在VisualStudio中编写串口通讯程序:

第一种方法是通过采用原来的MSComm控件,这是最简单的,最方便的方法,但需要注册(可以通过安装VB6.0或VC++6.0来实现);第二种方法是采用微软在.NET中推出的一个串口控件SerialPort,方便地实现所需要串口通讯的多种功能;第三种方法是用API函数进行串口通信,虽然难度高,但可以方便实现自己想要的各种功能。

一、MScomm控件的使用

MSComm控件全称为MicrosoftCommunicationsControl,是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它既可以用来提供简单的串行端口通信功能,也可以用来创建功能完备的、事件驱动的高级通信工具。

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

使用它可以建立与串行端口的连接,通过串行端口连接到其它通信设备(例如调制解调器),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。

利用它可以进行诸如拨打电话、监视串行端口的输入数据乃至创建功能完备的终端程序等。

1.MSComm控件处理通信的方式

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

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

1)事件驱动方式

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

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

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

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

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

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

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

2)查询方式 

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

在进行简单应用程序设计时可采用这种方法。

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

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

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

2.MSComm控件的引用

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

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

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

执行“工具”菜单下的“选择工具箱…”子菜单,在弹出的对话框中,选择“COM组件”选项卡,选中“MicrosoftCommunicationControlversion6.0”复选框,如图A-1所示,单击“确定”按钮后,在工具箱“组件”栏中就出现了一个形似“电话”的图标,它就是MSComm控件,如图A-2所示。

 

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

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

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

3.MSComm控件的常用属性

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值可以设置为如下常数:

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

 

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

 

例如:

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

5)OutPut属性

语法:

MSComm1.OutPut[=Value]

作用:

向传输缓冲区写数据流。

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

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

正常情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送;如果发送包含嵌入控制字符、Null字符等数据,要以二进制形式发送。

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

例如:

MSComm1.Output="ATDT551-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"'表示传输速率为9600bps,没有奇偶校验位,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,并产生O

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

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1