串口通信控件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1附录A串行通信控件MSComm在VisualStudio(VB.NET、VC++.NET、C#.NET)中编写串口通讯程序,一般都使用MicrosoftCommunicationControl(简称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”响应。2查询方式的进行可用计时器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控件。图A-1添加MSComm控件图A-2工具箱中的MSComm控件33.MSComm控件的常用属性MSComm控件的属性很多,这里介绍串口编程中经常用到的几个重要属性。1)CommPort属性语法:MSComm1.CommPort[=Value]作用:设置或返回通信端口号。CommPort属性值value可以设置为1到16之间的任何整数值(缺省值为1)表示串口COM1,COM2...。如果用PortOpen属性打开一个并不存在的端口,MSComm控件会产生错误68(设备无效)。注意:必须在打开端口之前设置CommPort属性。例如:COM2上连接有一个调制解调器:MSComm1.CommPort=22)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]作用:向传输缓冲区写数据流。4Output属性可以传输文本数据或二进制数据。用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)奇偶校验位:数据位发送完之后,就可以发送奇偶校验位。奇偶校验用于有限差错检验,通信双方在通信时约定一致的奇偶校验方式。就数据传送而言,奇偶校验位是冗余位,但它表示数据的一种性质,这种性质用于检错,虽然有限但很容易实现。54)停止位:在奇偶校验位或者数据位(无奇偶校验位时)之后是停止位。它可以是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,并产生OnComm事件。OnComm事件被用来监视和响应通信状态的变化。如果将Rthreshold和SThreshold属性的值都设置为零,就可以避免发生OnComm事件。如果将该值设置为非零的值(比如1),那么每当缓冲区中接收到一个字符时,就会产生OnComm事件。10)DTREnable属性语法:object.DTREnable[=value]作用:确定在通信时是否使DTR线有效。DTR是计算机发送到调制解调器的信号,指示计算机在等待接收传输。当DTREnable设置为True,当打开端口时,DTR线设置为高电平(开),当端口被关闭时,DTR线设置为低电平(关);当DTREnable设置为F

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功