使用VB中的MSComm控件实现串口通信

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用VB中的MSComm控件实现RS-232串口通信

实验准备:需要准备一些与串口通信有关的设备,如(外置式)调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE的无调制解调器连接线(接法见本章有关习题的参考答案),在实验前检查计算机的两个串口是否能够正常工作。

实验环境:Windows 95/98操作系统,Microsoft VB 5.0以上程序设计环境。对例题中涉及调制解调器的内容,采用计算机与调制解调器连接的方式;对在例题中

VB

(1

(CD)

(2

来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“OK”响应。

每个使用的MSComm控件都对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。可以在Windows“控制面板”中改变端口地址和

中断地址。

下面这个简单的例子采用了轮询方法演示了用调制解调器进行基本的串行通讯:

Private Sub Form_Load()

Dim Instring As String '保存输入子串的缓冲区

mPort=3 '使用COM3。

MSComm1.Settings="2400,N,8,1"

'2400波特率,无奇偶校验,8位数据位,一位停止位

下面我们将讲述一下MSComm控件的所有属性,其中前5个是最基本的,必须首先

掌握。

⑴MsComm控件属性

1)CommPort,设置并返回通讯端口号。语法为:

mPort[=value]

说明:value一为一个整型值,说明端口号。在设计时,va1ue可以设置成从1到16的任何数(缺省值为1)。但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。

注意:必须在打开端口之前设置CommPort属性的值。

2)Settings,设置并返回波特率、奇偶校验、数据位、停止位参数。语法为:

0bject.Settings[=value]

S为

件不支持的通讯设置值,那么硬件可能不会正常工作。

如果在端口打开之前,DTREnable或RTSEnable属性设置为True,当关闭端口时,该属性设置为False。否则,DTR和RTS线保持其先前的状态。

下例以波特率2400打开4号通讯端口,没有奇偶检查,7个数据位,1。5个停

止位:

MSComm1.Settings="2400,n,7,1.5"

mPort=4

MSComm1.PortOpen=True

4)Input,返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为

只读。语法为:

Object.Input

说明:InputLen属性确定被Input属性读取的字符数。设置InputLen为0,则

End If

End Sub

5)Output,往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。语法

为:

object.Output[=value]

说明:value一为准备写到传输缓冲区中去的一个字符串。Output属性可以传输

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

Output属性。

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

例:这个例子说明如何将用户键人的每一个字符送到串行端口:

7)

8)CommEvent,返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只

读。

9)CommID,返回一个说明通讯设备的句柄。该属性在设计时无效,在运行时为只读。

说明:该值与Windows API CreateFile函数返回的值一致。在WindowsAPI中调

用任何通讯例程时使用该值。

10)C TSHolding,确定是否可通过查询ClearToSend(CTS)线的状态发送数据。C1ear

To Send是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在

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

11)D SRHolding,确定DataSetReady(DSR)线的状态。Data Set Ready信号由调制

解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时

为只读。

12)D TREnable,确定在通讯时是否使DataTerminalReady(DTR)线有效。Data Terminal

13)E

Handshaking是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很

可能会造成数据丢失,因为字符到达的速度可以非常快。

握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。

15)I nBufferCount,返回接收缓冲区中等待的字符数。该属性在设计时无效。

说明:InBufferCount是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。可以把InBufferCount属性设置为0来清除接收缓冲区。

"")。

有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有

用。

例:这个例子说明如何读取25个数据字符:

Private CmdRead_Click()

Dim CommData as String

MSComm1.1nputLen=25 '确定一个25个字符的数据块。

相关文档
最新文档