使用VB中的MSComm控件实现RS-232串口通信实验报告.docx

上传人:lao****ou 文档编号:772959 上传时间:2024-05-17 格式:DOCX 页数:17 大小:47.83KB
下载 相关 举报
使用VB中的MSComm控件实现RS-232串口通信实验报告.docx_第1页
第1页 / 共17页
使用VB中的MSComm控件实现RS-232串口通信实验报告.docx_第2页
第2页 / 共17页
使用VB中的MSComm控件实现RS-232串口通信实验报告.docx_第3页
第3页 / 共17页
使用VB中的MSComm控件实现RS-232串口通信实验报告.docx_第4页
第4页 / 共17页
使用VB中的MSComm控件实现RS-232串口通信实验报告.docx_第5页
第5页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《使用VB中的MSComm控件实现RS-232串口通信实验报告.docx》由会员分享,可在线阅读,更多相关《使用VB中的MSComm控件实现RS-232串口通信实验报告.docx(17页珍藏版)》请在第一文库网上搜索。

1、使用VB中的MSComm控件实现RS-232串口通信实验准备:需要准备一些与串口通信有关的设备,如(外置式)调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE的无调制解调器连接线(接法见本章有关习题的参考答案),在实验前检查计算机的两个串口是否能够正常工作。实验环境:Windows95/98操作系统,MicrosoftVB5.0以上程序设计环境。对例题中涉及调制解调器的内容,采用计算机与调制解调器连接的方式;对在例题中设计数据传输的内容,须事先将DTE到DTE的无调制解调器连接线的两端,分别插入Com1和Com2串口。实验说明:VB中的MSComm控件通过串行端口传输和接收数据,为

2、应用程序提供串行通讯功能。MSComm控件提供下列两种处理通讯的方式:(1)事件驱动(实时)方式,这是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在CarrierDetect(CD)或RequestToSend(RTS)线上一个字符到达或一个变化发生时。在这些清况下,可以利用MSComm控件的OnCOmm事件捕获并处理这些通讯事件。OnComm事件还可以检查和处理通讯错误。(2)轮询方式,在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电

3、话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“0K”响应。每个使用的MSComm控件都对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。可以在WindOWS“控制面板”中改变端口地址和中断地址。下面这个简单的例子采用了轮询方法演示了用调制解调器进行基本的串行通讯:PrivateSubForm_1oad()DimInstringAsString,保存输入子串的缓冲区MSC0mm1.CommPort=3,使用COM3oMSComm1.SettingS=2400,N,8,1”,2400波特率,无奇偶校验,8位数据位,一位停止

4、位MSComm1.Input1en=O1当输入占用时,告诉控件读人整个缓冲区。MSComm1.PortOpen=True,打开端口。MSComm1.Output=AT+Chr$(13),将调制解调器的Attention命令送到调制解调器。Do,等待数据返回到串行端口。DoEvents1oopUnti1MSComm1.InBufferCount=2Instring=MSCoinm1.Input从串行端口读OK响应。,进行相应的处理,这里省略MSComm1.PortOpen=Fa1seI关闭串行端口。EndSub下面我们将讲述一下MSComm控件的所有属性,其中前5个是最基本的,必须首先掌握。MS

5、COmm控件属性1) CommPort,设置并返回通讯端口号。语法为:ObjectCommPort=va1ue说明:VakIe一为一个整型值,说明端口号。在设计时,VaIUe可以设置成从1到16的任何数(缺省值为1)。但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。注意:必须在打开端口之前设置COmmPort属性的值。2) Settings,设置并返回波特率、奇偶校验、数据位、停止位参数。语法为:ObjectSettings=va1ue说明:Va1Ue一为字符串表达式,说明通讯端口的设置值。Va1ue由四个设置值组成,其格式如下:“BBBB,

6、P,D,S,其中:BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。Va1Ue的缺省值:”9600,N,8,1”3) PortOpen,设置并返回通讯端口的状态(开或关)。在设计时无效。语法为:object.PortOpen=va1ue说明:VaIUe一为布尔表达式,说明通讯端口的状态。va1ue的取值为:True端口开,Fa1se一端口关注意:设置PortOpen属性为True时打开端口。设置为Fa1se时关闭端口并清除接收和传输缓冲区。当应用程序终止时,MSComm控件自动关闭串行端口。串行端口设备必须支持Settings属性当前的设置值。如果Settings属性包含硬件不支持的

7、通讯设置值,那么硬件可能不会正常工作。如果在端口打开之前,DTREnab1e或RTSEnab1e属性设置为True,当关闭端口时,该属性设置为Fa1se。否则,DTR和RTS线保持其先前的状态。下例以波特率2400打开4号通讯端口,没有奇偶检查,7个数据位,1。5个停止位:MSComm1.SettingS=,2400,n,7,1.5”MSCOmm1.CommPort=4MSComm1.PortOpen=True4) Input,返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。语法为:Object.Input说明:InDUt1en属性确定被InPUt属性读取的字符数。设置In

8、put1en为0,则EPUt属性读取缓冲区中全部的内容。InputMode属性确定InPUt属性读取的数据类型。如果设置InputMode为Com1nputModeText,则Input属性通过一个Variant返回文本数据。如果设置InPUtMode为ComInputModeBinary,Input属性通过一个Variant返回一二进制数据的数组。例:这个例子说明如何从接收缓冲区读取数据:PrivateSubCmdReceiveC1ick()DimInStringasStringMSComm1.Input1en=O,读取所有可用数据。IfMSComm1.InBufferCountThen检查

9、数据。InString=MSCoinm1.Input,读入数据EndIfEndSub5) Output,往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。语法为:object.Output=va1ue说明:Va1Ue一为准备写到传输缓冲区中去的一个字符串。OUtPUt属性可以传输文本数据或二进制数据。用OUtPUt属性传输文本数据,必须定义一个包含一个字符串的Variant。发送二进制数据,必须传递一个包含字节数组的variant到Output属性。一般情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌人控制字符、Nu11字符等等的数据,要以二进制形

10、式发送。例:这个例子说明如何将用户键人的每一个字符送到串行端口:PrivateSubForm_KeyPress(KeyAsciiAsInteger)DimBufferasVariantMSCOmm1.CommPort=I1设置并打开端口MSComm1.PortOpen=TrueBuffer=Chr$(KeyAscii)MSCOmm1.Output=BufferEndSub6) Break,设置或清除中断信号的状态。该属性在设计时无效。7) CDHo1ding,通过查询载波侦听CarrierDetect(CD)线的状态确定当前是否有传输。CarrierDetect是从调制解调器发送到相联计算机的

11、一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。8) CommEvent,返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。9) CommID,返回一个说明通讯设备的句柄。该属性在设计时无效,在运行时为只读。说明:该值与WindowsAPICreateFi1e函数返回的值一致。在WindowsAPI中调用任何通讯例程时使用该值。10) CTSHo1ding,确定是否可通过查询CIeaiTOSend(CTS)线的状态发送数据。C1earTOSend是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。11) DSRHo1din

12、g,确定DataSetReady(DSR)线的状态。DataSetReady信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。12) DTREnab1e,确定在通讯时是否使DataTermina1Ready(DTR)线有效。DataTermina1Ready是计算机发送到调制解调器的信号,指示计算机在等待接受传输。13) EOFEnab1e,EOFEnab1e属性确定在输入过程中MSComm控件是否寻找文件结尾(EOF)字符。如果找至UEoF字符,将停止输入并激活OnComm事件,此时CommEvent属性设置为ComEVEoF。14) Handshaki

13、ng,设置井返回硬件握手协议。语法为:ObjectHandshaking=va1ue说明:Vak1e一为整型表达式,说明握手约定。VaIUe的取值为:常数值说明ComNone0(缺省)没有握手ComXOnXOff1(XONXOFF)握手ComRTS2RTS/CTS(RequestToSend/C1earToSend)握手ComRTSXOnXOff3RequestToSend和XON/XOFF皆可HandShaking是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区,程序需要直接从硬件读取每

14、一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。15)InBufferCount,返回接收缓冲区中等待的字符数。该属性在设计时无效。说明:InBUffereOUnt是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。可以把InBufferCount属性设置为0来清除接收缓冲区。16)InBufferSize,设置并返回接收缓冲区的字节数。说明:InBUfferSiZe是指整个接收缓冲区的大小。缺省值是1024字节。注意接收缓冲区越大则应用程序可用内存越小。但若接受缓冲区

15、太小,若不使用握手协议。就可能有溢出的危险。一般的规律是,首先设置一个1024字节的缓冲区。如果出现溢出错误,则通过增加缓冲区的大小来控制应用程序的传输速率。17) Input1en,设置并返回InPUt属性从接收缓冲区读取的字符数。说明:InPUt1en属性的缺省值是0。设置InPUt1en为0时,使甩Input将使MSCo1nm控件读取接收缓冲区中全部的内容。若接收缓冲区中InPUt1en字符无效,Input。属性返回一个零长度字符串(心)。在使用InPUt前,用户可以选择检查InBUffereOUnt属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。例:这个例子说明如何读取25个数据字符:PrivateCmdRead_C1ick()DimCommDataasStringMSComm1.Input1en=25,确定一个25个字符的数据块。CoininData=MSCoinm1.Input,读数据。EndSub18) InputMode,设置或返回InPUt属性取回的数据的类型。说明:InPUtMode属性确定InPUt属性如何取回数据。数据取回的格式或是字符串或是一数据组的二进制数据

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

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服