MSComm控件的使用方法1-2

 MSComm控件的使用方法(1)

MSComm 控件为应用程序提供了串口通信功能,该应用程序允许通过串口发送和接收数据。
语法
MSComm
说明
MSComm控件提供了两种处理通信的方法:
*事件驱动通信,是一种功能很强的处理串口活动的方法。在大多数情况下,用户需要获知事件发生的时间,例如,在CD(Carrier Detect)线或RTS(Request To Send)线上有字符到达或发生了改变等。在这种情况下,使用MSComm 控件的OnComm 事件捕获和处理这些通信事件。OnComm也可以捕获和处理通信中的错误。要获取所有事件和通信错误的完整清单,请参阅CommEvent属性。
*用户也可以在每个重要的程序功能之后检查CommEvent 属性的值来检测事件和通信错误。这对小的自含程序可能比较常用。例如,如果编写一个简单的电话拨号程序,那么在接收了每个字符后都产生一个事件并没有意义,因为你只打算从调制解调器中接收OK响应信息。
使用的每个MSComm 控件都与一个串口对应。如果在应用程序中需要访问多个串口,必须使用多个MSComm 控件。可以在Windows 控制面板中修改串口地址的中断地址。
虽然MSComm控件有许多很重要的属性,但应先熟悉下面几个属性:
属性描述
CommPort 设置或返回通信端口号
Settings 以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位
PortOpen 设置或返回通信端口的状态。也可以打开和关闭端口
Input 返回和删除接收缓冲区中的字符
Output 将字符串写入发送缓冲区
示例
下面的例子演示了使用调制解调器进行基本的通信。
Private Sub Form_Load ()
Buffer to hold input string
Dim Instring As String
Use COM1.
MSComm1.CommPort = 1
9600 baud, no parity, 8 data, and 1 stop bit.
MSComm1.Settings = “9600,N,8,1”
Tell the control to read entire buffer when Input
is used.
MSComm1.InputLen = 0
Open the port.
MSComm1.PortOpen = True
Send the attention command to the modem.
MSComm1.Output = “ATVtQ0”& + Chr ( 13 ) E n s u r e t h a t t h e m o d e m r e s p o n d s w i t h “ O K ” W a i t f o r d a t a t o c o m e b a c k t o t h e s e r i a l p o r t . D o D o E v e n t s B u f f e r (13) Ensure that the modem responds with “OK” Wait for data to come back to the serial port. Do DoEvents Buffer 13EnsurethatthemodemrespondswithOKWaitfordatatocomebacktotheserialport.DoDoEventsBuffer = Buffer$ MSComm1.Input
Loop Until InStr (BufferKaTeX parse error: Expected 'EOF', got '&' at position 8: , “OK” &̲ vbCRLF) Read…(0)。
数据类型
Boolean
OnComm事件
当CommEvent 属性值改变时产生该事件,表明产生了通信事件或通信错误。
应用于MSComm控件。
语法
Private Sub object_OnComm()
OnComm事件的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
说明
CommEvent 属性捕获了OnComm 产生事件或错误的代码。注意,将RThreshold 或Sthreshold 属性置为0 将不捕获comEvReceive 和comEvSend 事件。
示例
下面的例子演示了如何处理通信错误和事件。你可以在Case 语句的后面插入代码处理相应的错误或事件。
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
Handle each event or error by placing
code below each case statement
Errors
Case comEventBreak A Break was received.
Case comEventCDTO CD (RLSD) Timeout.
Case comEventCTSTO CTS Timeout.
Case comEventDSRTO DSR Timeout.
Case comEventFrame Framing Error
Case comEventOverrun Data Lost.
Case comEventRxOver Receive buffer overflow.
Case comEventRxParity Parity Error.
Case comEventTxFull Transmit buffer full.
Case comEventDCB Unexpected error retrieving DCB]
Events
Case comEvCD Change in the CD line.
Case comEvCTS Change in the CTS line.
Case comEvDSR Change in the DSR line.
Case comEvRing Change in the Ring Indicator.
Case comEvReceive Received RThreshold # of
chars.
Case comEvSend There are SThreshold number of
characters in the transmit
buffer.
Case comEvEof An EOF charater was found in
the input stream
End Select
End Sub
OutBufferCount 属性
返回在发送缓冲区中等待的字符数。你可以使用该属性清除发送缓冲区。
该属性在设计时不可用。
应用于MSComm控件。
语法
object.OutBufferCount [=value]
OutBufferCount属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定发送缓冲区中等待的字符数
说明
将OutBufferCount属性置为0将清除发送缓冲区。
注意:不要将OutBufferCount属性与OutBufferSize属性混淆起来。
数据类型
Integer
OutBufferSize 属性
返回或设置发送缓冲区的字节大小。
应用于
MSComm控件。
语法
object.OutBufferSize [=value]
OutBufferSize属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定发送缓冲区的字节大小
说明
OutBufferSize 指整个发送缓冲区的大小。缺省值是512 字节。不要将该属性与OutBufferCount 属性混淆起来,OutBufferCount 属性反映的是发送缓冲区当前等待的字节数。
注意:对发送缓冲区设置的越大,应用程序可以使用的内存就越少。
然而,如果你的发送缓冲区太小,缓冲区将会溢出,除非使用握手协议。
通常,将缓冲区设置为512 字节。如果发生了溢出,就增大该缓冲区,以满足你的应用程序传输速率。
数据类型
Integer
Output属性
将数据写入发送缓冲区。该属性在设计时不可用,在运行时是只写的。
应用于
MSComm控件。
语法
object.Output [=value]
Output属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个字符串,是写入发送缓冲区中的字符
说明
Output 属性可以发送文本数据或二进制数据。要使用Output 属性发送文本数据,你必须指明包含字符串的一个Variant 变量。要发送二进制数据,必须将包含字节矩阵的Variant变量传递给Output属性。
通常,如果你给应用程序发送ANSI 字符串,可以文本方式发送。如果数据包含了内嵌控制字符、Null字符等,必须将其作为二进制传递过去。
数据类型
Variant
示例
下面的例子演示了如何将用户输入的字符发送给串口。
Private Sub Form_KeyPress (KeyAscii As Integer)
Dim Buffer as Variant
Set and open port
MSComm1.CommPort = 1
MSComm1.PortOpen = True
Buffer = Chr$(KeyAscii)
MSComm1.Output = Buffer
End Sub
ParityReplace 属性
设置或返回一个字符,该字符在方式了奇偶校验错误时将替换数据流中的无效字符。
应用于
MSComm控件。
语法
object.ParityReplace [=value]
ParityReplace属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 字符串表达式,表示替换字符,如“说明”中所示
说明
parity bit 是一个比特位,与指定的数据比特一起传送,可以提供一定的错误检测功能。
当你使用奇偶校验位时,MSComm 控件将数据中所有设置(即“1”)的比特位相加,来检测结果的奇偶性(根据端口的奇偶设置)。
缺省地,控件使用问号(“?”)替换无效字符。将ParityReplace 属性设置为空字符串(…)将在奇偶校验
错误时不替换无效字符,但仍将CommEvent属性设置为commEventRXParity并触发OnComm事件。
ParityReplace 字符是面向字节的操作,必须是单字节字符。你可以指定任意的0到255的ANSI字符作为替换字符。
数据类型
String

MSComm控件的使用方法(2)
(2007-12-21 19:18:09)
转载
标签:
学习公社

MSComm控件的使用方法(2)
PortOpen属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指定通信端口的状态
说明
将PortOpen 属性设置为True 将打开端口。设置为False 将关闭端口并清除接收和发送缓冲区。当你的应用程序终止时,MSComm控件将自动关闭串口。
在打开端口前,确定CommPort 属性设置为正确的端口号。如果CommPort属性设置为无效的端口号,在你试图打开端口时,MSComm 控件将产生error68(Device unavailable)错误。
而且,你的串口设备必须支持Settings 属性中的设置。如果你的硬件设备不支持Settings属性中的一些设置,则你的硬件工作或许不正确。
如果端口在打开之前将DTREnable 或RTSEnable 属性设置为True,则当端口关闭时这些属性就自动设置为False。另外,DTR 和RTS 线保持它们原来的状态。
数据类型
Boolean
示例
下面的例子打开端口1,波特率是9600,没有奇偶校验,8 个数据位,一个停止位。
MSComm1.Settings = “9600, n, 8,1”
MSComm1.CommPort = 1
MSComm1.PortOpen =True
RThreshold属性
设置或返回在MSComm 控件将CommEvent 属性设置为comEvReceive 并在产生OnComm事件之前所接收的字符数。
应用于MSComm控件。
语法
object.Rthreshold [=value]
RThreshold属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定产生OnComm事件之前接收的字符数
说明
将RThreshold属性设置为0(缺省)将在接收字符时不产生OnComm事件。
例如,将RThreshold 属性设置为1 将导致MSComm 控件在每个字符放入缓冲区时就触发OnComm事件。
数据类型
Integer
RTSEnable 属性
确定是否使用RTS(Request To Send)线。通常RTS信号是计算机发送该连接的调制解调器,请求准许发送数据。应用于MSComm控件。
语法
object. RTSEnable [=value]
RTSEnable属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个布尔表达式,指定是否使用RTS线,如“设置”中所示
设置
value 值的设置如下:
设置描述
True 使用RTS线
False (缺省)不使用RTS线
说明
当RTSEnable 属性设置为True 时,打开端口将把RTS 线置为高,关闭端口将把RTS线置为低。
在RTS/CTS 握手协议中使用RTS 线。如果你需要确定RTS 线的状态,RTSEnable属性允许你手工检测该线。
想了解有关握手协议中的更多信息,请参阅HardShaking属性。
数据类型
Boolean
Settings属性
设置或返回波特率、奇偶校验、数据位和停止位参数。
应用于MSComm控件。
语法
object.Settings [=value]
Settings 属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个字符串表达式,代表通信端口设置,如下所示
说明
当端口打开时value 值设置不正确,MSComm 控件就产生error 380(Invalidproperty value)错误。
value 由4部分组成,格式如下:
“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 偶校验
M 屏蔽
N (缺省)None
O 奇校验
S 空格
下表列出了有效的数据位:
设置
4
5
6
7
8(缺省)
下表列出了有效的停止位:
设置
1(缺省)
1.5
2
数据类型
String
示例
下面的例子将端口设置为波特率9600,没有奇偶校验,8 个数据位,一个停止位。
MSComm1.Settings = “9600, N, 8, 1”
SThreshold属性
设置或返回在MSComm控件将CommEvent 属性设置为comEvSend 并产生OnComm事件之前所发送缓冲区中允许的最少字符数。
应用于MSComm控件。
语法
object.Sthreshold [=value]
SThreshold属性的语法有如下几个部分:
部分描述
object 对象表达式,其值是“应用于”列表中的一个对象
value 一个整数表达式,指定产生OnComm 事件之前发送缓冲区中的最少字符数
说明
将SThreshold属性设置为0(缺省)将在发送字符时不产生OnComm事件。
例如,将SThreshold属性设置为1将导致发送缓冲区完全变空。
如果发送缓冲区中的字符比value 值小,则将CommEvent 属性设置为comEvSend,并产生OnComm 事件。comEvSend 事件只产生一次,在字符数低于SThreshold 时。例如,如果SThreshold 等于5,当字符数从5 降低到4 时产生一次comEvSend事件。如果输出队列中的字符数总不多于SThreshold属性值,则永不产生该事件。
数据类型
Integer

你可能感兴趣的:(c++)