使用VB中的MSComm控件实现串口通信Word文档下载推荐.docx
- 文档编号:974884
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:13
- 大小:21.03KB
使用VB中的MSComm控件实现串口通信Word文档下载推荐.docx
《使用VB中的MSComm控件实现串口通信Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《使用VB中的MSComm控件实现串口通信Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
'
2400波特率,无奇偶校验,8位数据位,一位停止位
MSComm1.InputLen=0'
当输入占用时,告诉控件读人整个缓冲区。
MSComm1.PortOpen=True'
打开端口。
MSComm1.Output="
AT"
+Chr$(13)
将调制解调器的Attention命令送到调制解调器。
Do'
等待数据返回到串行端口。
DoEvents
LoopUntilMSComm1.InBufferCount>
=2
Instring=MSComm1.Input'
从串行端口读”OK“响应。
进行相应的处理,这里省略
MSComm1.PortOpen=False'
关闭串行端口。
EndSub
下面我们将讲述一下MSComm控件的所有属性,其中前5个是最基本的,必须首先掌握。
⑴MsComm控件属性
1)CommPort,设置并返回通讯端口号。
语法为:
Object.CommPort[=value]
说明:
value一为一个整型值,说明端口号。
在设计时,va1ue可以设置成从1到16的任何数(缺省值为1)。
但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。
注意:
必须在打开端口之前设置CommPort属性的值。
2)Settings,设置并返回波特率、奇偶校验、数据位、停止位参数。
0bject.Settings[=value]
value一为字符串表达式,说明通讯端口的设置值。
Value由四个设置值组成,其格式如下:
“BBBB,P,D,S”,其中:
BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。
value的缺省值:
”9600,N,8,1”
3)PortOpen,设置并返回通讯端口的状态(开或关)。
在设计时无效。
object.PortOpen[=value]
value一为布尔表达式,说明通讯端口的状态。
value的取值为:
True——端口开,False一端口关
设置PortOpen属性为True时打开端口。
设置为False时关闭端口并清除接收和传输缓冲区。
当应用程序终止时,MSComm控件自动关闭串行端口。
串行端口设备必须支持Settings属性当前的设置值。
如果Settings属性包含硬件不支持的通讯设置值,那么硬件可能不会正常工作。
如果在端口打开之前,DTREnable或RTSEnable属性设置为True,当关闭端口时,该属性设置为False。
否则,DTR和RTS线保持其先前的状态。
下例以波特率2400打开4号通讯端口,没有奇偶检查,7个数据位,1。
5个停止位:
2400,n,7,1.5"
MSCOmm1.CommPort=4
MSComm1.PortOpen=True
4)Input,返回并删除接收缓冲区中的数据流。
该属性在设计时无效,在运行时为只读。
Object.Input
InputLen属性确定被Input属性读取的字符数。
设置InputLen为0,则Input属性读取缓冲区中全部的内容。
InputMode属性确定Input属性读取的数据类型。
如果设置InputMode为comlnputModeText,则Input属性通过一个Variant返回文本数据。
如果设置InputMode为comInputModeBinary,Input属性通过一个Variant.返回一二进制数据的数组。
例:
这个例子说明如何从接收缓冲区读取数据:
PrivateSubCmdReceive_Click()
DimInStringasString
MSComm1.InputLen=0'
读取所有可用数据。
IfMSComm1.InBufferCountThen'
检查数据。
InString=MSComm1.Input'
读入数据
EndIf
5)Output,往传输缓冲区写数据流。
object.Output[=value]
value一为准备写到传输缓冲区中去的一个字符串。
Output属性可以传输文本数据或二进制数据。
用Output属性传输文本数据,必须定义一个包含一个字符串的Variant。
发送二进制数据,必须传递一个包含字节数组的variant到Output属性。
一般情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送。
如果发送包含嵌人控制字符、Null字符等等的数据,要以二进制形式发送。
这个例子说明如何将用户键人的每一个字符送到串行端口:
PrivateSubForm_KeyPress(KeyAsciiAslnteger)
DimBufferasVariant
MSCOmm1.CommPort=1'
设置并打开端口
MSComm1.PortOpen=True
Buffer=Chr$(KeyAscii)
MSCOmm1.Output=Buffer
6)Break,设置或清除中断信号的状态。
该属性在设计时无效。
7)CDHolding,通过查询载波侦听CarrierDetect(CD)线的状态确定当前是否有传输。
CarrierDetect是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。
8)CommEvent,返回最近的通讯事件或错误。
9)CommID,返回一个说明通讯设备的句柄。
该值与WindowsAPICreateFile函数返回的值一致。
在WindowsAPI中调用任何通讯例程时使用该值。
10)CTSHolding,确定是否可通过查询ClearToSend(CTS)线的状态发送数据。
C1earToSend是调制解调器发送到相联计算机的信号,指示传输可以进行。
11)DSRHolding,确定DataSetReady(DSR)线的状态。
DataSetReady信号由调制解调器发送到相连计算机,指示作好操作准备。
12)DTREnable,确定在通讯时是否使DataTerminalReady(DTR)线有效。
DataTerminalReady是计算机发送到调制解调器的信号,指示计算机在等待接受传输。
13)EOFEnable,EOFEnable属性确定在输入过程中MSComm控件是否寻找文件结尾(EOF)字符。
如果找到EOF字符,将停止输入并激活OnComm事件,此时commEvent属性设置为comEvEOF。
14)Handshaking,设置井返回硬件握手协议。
Object.Handshaking[=value]
value一为整型表达式,说明握手约定。
常数
值
说明
comNone
0(缺省)
没有握手
comXOnXOff.
1(XON/XOFF)
握手
comRTS
2RTS/CTS(RequestToSend/ClearToSend)
comRTSXOnXOff
3
RequestToSend和XON/XOFF皆可
Handshaking是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。
当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。
如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。
握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。
15)InBufferCount,返回接收缓冲区中等待的字符数。
InBufferCount是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。
可以把InBufferCount属性设置为0来清除接收缓冲区。
16)InBufferSize,设置并返回接收缓冲区的字节数。
InBufferSize是指整个接收缓冲区的大小。
缺省值是1024字节。
接收缓冲区越大则应用程序可用内存越小。
但若接受缓冲区太小,若不使用握手协议。
就可能有溢出的危险。
一般的规律是,首先设置一个1024字节的缓冲区。
如果出现溢出错误,则通过增加缓冲区的大小来控制应用程序的传输速率。
17)InputLen,设置并返回Input属性从接收缓冲区读取的字符数。
InputLen属性的缺省值是0。
设置InputLen为0时,使甩Input将使MSColnm控件读取接收缓冲区中全部的内容。
若接收缓冲区中InputLen字符无效,1nput。
属性返回一个零长度字符串("
"
)。
在使用Input前,用户可以选择检查InBuffereount属性来确定缓冲区中是否已有需要数目的字符。
该属性在从输出格式为定长数据的机器读取数据时非常有用。
这个例子说明如何读取25个数据字符:
PrivateCmdRead_Click()
DimCommDataasString
MSComm1.1nputLen=25'
确定一个25个字符的数据块。
CommData=MSComm1.Input'
读数据。
18)InputMode,设置或返回Input属性取回的数据的类型。
InputMode属性确定Input属性如何取回数据。
数据取回的格式或是字符串或是一数据组的二进制数据的数组。
若数据只用ANSI字符集,则用comInputModeText。
对其它字符数据,如数据中有嵌入控制字符、Nulls等等,则使用comInputModeBinary。
19)NullDiscard,确定null字符是否从端口传送到接收缓冲区。
20)OutBufferrCount,返回在传输缓冲区中等待的字符数。
也可以用它来清除传输缓冲区。
设置OutBufferCount属性为0可以清除传输缓冲区。
21)OutBufferSize,以字节的形式设置并返回传输缓冲区的大小。
OutBufferSize指整个传输缓冲区的大小:
缺省值是512字节。
传输缓冲区设置的越大则应用程序可用内存越小。
但若缓冲区太小,若不使用握手协议,就可能有溢出的危险。
一般的规律是,首先设置一个512字节的缓冲区。
22)ParityReplace,当发生奇偶校验错误时,设置并返回替换数据流中一个非法字符的字符。
缺省的情况是,Mscomm控件用问号(?
)替换非法字符。
如果设置parityRep1ace为一个空字符串("
),则当奇偶校验错误出现时,字符替换无效。
但onComm事件仍然产生,并且设置CommEvent。
属性为comEventRXparity。
ParityReplace字符被用于面向字节的操作,它必须是单字节字符。
可指定0到255之间的任何ANSI字符代码。
23)Rthreshold,在MSCoinm控件设置CommEvent属性为comEvReceive,并产生onComm事件之前,设置并返回的要接收的字符数。
24)RTSEnable,确定是否使Requestrosend(RTS)线有效。
一般情况下,由计算机发送RequestToSend信号到联接的调制解调器,以请示允许发送数据。
25)Sthreshold,在MSComm控件设置。
CommEvent属性为comEvSend并产生onComm事件之前,设置并返回传输缓冲区中允许的最小字符数。
⑵事件
1)onComm,无论何时当CommEvent属性的值变化时,就产生onComm事件,它标志发生了一个通讯事件或一个错误。
CommEvent属性包含实际错误或产生onComm事件的编码。
但是,当Rthresho1d或Sthreshold属性被设置为0时,则会分别使comEvReceive和comEvSend事件无效。
⑶使用轮询方式实现串口通信
工程名称:
MSComm_Show1.vbp
发送窗体名称:
MSComm_Send1.frm
接收窗体名称:
MSComm_Receive_Polling.frm
控件及属性设置:
对象名称
属性
MSComm_Send
Caption:
MSComm_Send
MSComm_Receive_Polling
MSComm_Receive_Polling
Label1
发送窗口
接收窗口
Label2
请将发送内容写入文本框
接收到的文本将在文本框中显示
Text1
Text:
MSComm1
Macomm1
程序代码:
发送窗体程序
MSComm1.CommPort=1'
使用COM1。
MSComm1.Settings="
'
MSComm1.InputLen=0'
MSComm1.PortOpen=True'
Mscomm_Receive_Polling.Show'
显示轮询接收窗体,启动接收程序
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
MSComm1.Output=Chr$(KeyAscii)'
发送用户从键盘上输入的字符
PrivateSubForm_Unload(CancelAsInteger)
MSComm1.PortOpen=False'
关闭串行端口
接收窗体程序
MSComm1.CommPort=2'
使用COM2。
MSComm1.InputLen=0
MSComm1.PortOpen=True
PrivateSubForm_Click()
Text1.Text=MSComm1.Input'
从串行端口读内容。
MSComm1.PortOpen=False
实验操作步骤:
1)用发送窗体(MSComm_Send)作为启动对象,启动程序后,发送窗体和轮询接收窗体都将出现在屏幕上;
2)用鼠标将光标设置到发送窗体的文本框中,在文本框中输入字母或数字,观察接受窗口的文本框有无变化;
3)移动鼠标光标单击接收窗体,接收窗体由deactivate成为一个Activate状态,再观察接收窗体的文本框有什么变化,请考虑一下程序执行的过程和轮询方式的工作原理。
⑷使用事件驱动(实时)方式实现串口通信
MSComm_Show2.vbp
MSComm_Send2.frm
MSComm_Receive_Realtime.frm
MSComm_Receive_Realtime
Rthreshold:
1
MSComm1.CommPort=1
MSComm1.InputLen=0
Mscomm_Receive_Realtime.Show'
显示实时接收窗体,启动接收程序
MSComm1.PortOpen=False
MSComm1.CommPort=2'
MSComm1.Settings="
MSComm1.InputLen=0
MSComm1.PortOpen=True
Mscomm_Receive_Reatime.Show'
PrivateSubMSComm1_OnComm()
OnErrorResumeNext
Text1.Text=Text1.Text+MSComm1.Input
从串行端口实时读入到达的数据,并送文本窗口显示。
MSComm1.PortOpen=False
1)用发送窗体(MSComm_Send)作为启动对象,启动程序后,发送窗体和实时接收窗体都将出现在屏幕上;
3)请将接受窗体的MSComm1的Rthreshold属性改为5,重新启动程序,注意收发过程的变化,请考虑一下程序执行的过程和实时方式的工作原理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 VB 中的 MSComm 控件 实现 串口 通信