版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z.使用VB中的MSm控件实现RS-232串口通信实验准备:需要准备一些与串口通信有关的设备,如外置式调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE的无调制解调器连接线接法见本章有关习题的参考答案,在实验前检查计算机的两个串口是否能够正常工作。实验环境:Windows 95/98操作系统,Microsoft VB 5.0以上程序设计环境。对例题中涉及调制解调器的容,采用计算机与调制解调器连接的方式;对在例题中设计数据传输的容,须事先将DTE到DTE的无调制解调器连接线的两端,分别插入1和2串口。实验说明:VB中的MSm控件通过串行端口传输和接收数据,为应用程序提供串行通讯
2、功能。MSm控件提供以下两种处理通讯的方式:1事件驱动(实时)方式,这是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在Carrier DetectCD或RequestToSendRTS线上一个字符到达或一个变化发生时。在这些清况下,可以利用MSm控件的Onm事件捕获并处理这些通讯事件。Onm事件还可以检查和处理通讯错误。2轮询方式,在程序的每个关键功能之后,可以通过检查mEvent属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的
3、字符是调制解调器的OK响应。每个使用的MSm控件都对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSm控件。可以在Windows控制面板中改变端口地址和中断地址。下面这个简单的例子采用了轮询方法演示了用调制解调器进展根本的串行通讯:Private Sub Form_LoadDim Instring As String保存输入子串的缓冲区MSm1.mPort=3使用3。MSm1.Settings=2400,N,8,12400波特率,无奇偶校验,8位数据位,一位停顿位MSm1.InputLen0当输入占用时,告诉控件读人整个缓冲区。MSm1.PortOpenTrue翻开端口。M
4、Sm1.Output=AT+Chr$(13)将调制解调器的Attention命令送到调制解调器。Do等待数据返回到串行端口。DoEventsLoop Until MSm1.InBufferCount=2InstringMSm1.Input从串行端口读OK响应。进展相应的处理,这里省略MSm1PortOpenFalse关闭串行端口。End Sub下面我们将讲述一下MSm控件的所有属性,其中前5个是最根本的,必须首先掌握。Msm控件属性mPort,设置并返回通讯端口号。语法为:Object.mPort=value说明:value一为一个整型值,说明端口号。在设计时,va1ue可以设置成从1到16的
5、任何数缺省值为1。但是如果用PortOpen属性翻开一个并不存在的端口时,MSm控件会产生错误68设备无效。注意:必须在翻开端口之前设置mPort属性的值。Settings,设置并返回波特率、奇偶校验、数据位、停顿位参数。语法为:0bject.Settingsvalue说明:value一为字符串表达式,说明通讯端口的设置值。Value由四个设置值组成,其格式如下:BBBB,P,D,S,其中:BBBB为波特率,P为奇偶校验,D为数据位数,S为停顿位数。value的缺省值:9600,N,8,1PortOpen,设置并返回通讯端口的状态开或关。在设计时无效。语法为:object.PortOpenva
6、lue说明:value一为布尔表达式,说明通讯端口的状态。value的取值为:True端口开,False一端口关注意:设置PortOpen属性为True时翻开端口。设置为False时关闭端口并去除接收和传输缓冲区。当应用程序终止时,MSm控件自动关闭串行端口。串行端口设备必须支持Settings属性当前的设置值。如果Settings属性包含硬件不支持的通讯设置值,则硬件可能不会正常工作。如果在端口翻开之前,DTREnable或RTSEnable属性设置为True,当关闭端口时,该属性设置为False。否则,DTR和RTS线保持其先前的状态。下例以波特率2400翻开4号通讯端口,没有奇偶检查,7
7、个数据位,1。5个停顿位:MSm1.Settings=2400,n,7,1.5MSm1.mPort=4MSm1.PortOpen=TrueInput,返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。语法为:Object.Input说明:InputLen属性确定被Input属性读取的字符数。设置InputLen为0,则Input属性读取缓冲区中全部的容。InputMode属性确定Input属性读取的数据类型。如果设置InputMode为lnputModeTe*t,则Input属性通过一个Variant返回文本数据。如果设置InputMode为InputModeBinary,I
8、nput属性通过一个Variant返回一二进制数据的数组。例:这个例子说明如何从接收缓冲区读取数据:Private Sub CmdReceive_ClickDim InString as StringMSm1.InputLen=0读取所有可用数据。If MSm1.InBufferCount Then检查数据。InStringMSm1.Input 读入数据End IfEnd SubOutput,往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。语法为:object.Output=value说明:value一为准备写到传输缓冲区中去的一个字符串。Output属性可以传输文本数据或二进制数据
9、。用Output属性传输文本数据,必须定义一个包含一个字符串的Variant。发送二进制数据,必须传递一个包含字节数组的variant到Output属性。一般情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌人控制字符、Null字符等等的数据,要以二进制形式发送。例:这个例子说明如何将用户键人的每一个字符送到串行端口:Private Sub Form_KeyPressKeyAscii As lntegerDim Buffer as VariantMSm1.mPort=1 设置并翻开端口MSm1.PortOpen=True BufferChr$(KeyAsci
10、iMSm1.Output=BufferEnd SubBreak,设置或去除中断信号的状态。该属性在设计时无效。CDHolding,通过查询载波侦听CarrierDetectCD线的状态确定当前是否有传输。CarrierDetect是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。mEvent,返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。mID,返回一个说明通讯设备的句柄。该属性在设计时无效,在运行时为只读。说明:该值与Windows API CreateFile函数返回的值一致。在WindowsAPI中调用任何通讯例程时使用
11、该值。CTSHolding,确定是否可通过查询ClearToSendCTS线的状态发送数据。C1ear To Send是调制解调器发送到相联计算机的信号,指示传输可以进展。该属性在设计时无效,在运行时为只读。DSRHolding,确定DataSetReadyDSR线的状态。Data Set Ready信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。DTREnable,确定在通讯时是否使DataTerminalReadyDTR线有效。Data Terminal Ready是计算机发送到调制解调器的信号,指示计算机在等待承受传输。EOFEnable,EOFE
12、nable属性确定在输入过程中MSm控件是否寻找文件结尾EOF字符。如果找到EOF字符,将停顿输入并激活Onm事件,此时mEvent属性设置为EvEOF。Handshaking,设置井返回硬件握手协议。语法为:Object.Handshaking=value说明:value一为整型表达式,说明握手约定。value的取值为:常数值说明None0(缺省)没有握手*On*Off .1(*ON/*OFF)握手RTS2RTS/CTS (Request To Send/Clear To Send)握手RTS*On*Off3Request To Send 和 *ON/*OFF皆可Handshaking是指部
13、通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有承受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丧失,因为字符到达的速度可以非常快。握手协议保证在缓冲区过载时数据不会丧失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。InBufferCount,返回接收缓冲区中等待的字符数。该属性在设计时无效。说明:InBufferCount是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。可以把InBufferCount属性设置为0来去除接收缓冲区。InBufferSize,设置
14、并返回接收缓冲区的字节数。说明:InBufferSize是指整个接收缓冲区的大小。缺省值是1024字节。注意:接收缓冲区越大则应用程序可用存越小。但假设承受缓冲区太小,假设不使用握手协议。就可能有溢出的危险。一般的规律是,首先设置一个1024字节的缓冲区。如果出现溢出错误,则通过增加缓冲区的大小来控制应用程序的传输速率。InputLen,设置并返回Input属性从接收缓冲区读取的字符数。说明:InputLen属性的缺省值是0。设置InputLen为0时,使甩Input将使MSColnm控件读取接收缓冲区中全部的容。假设接收缓冲区中InputLen字符无效,1nput。属性返回一个零长度字符串。
15、在使用Input前,用户可以选择检查InBuffereount属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。例:这个例子说明如何读取25个数据字符:Private CmdRead_ClickDim mData as StringMSm11nputLen25 确定一个25个字符的数据块。mDataMSm1.Input读数据。End SubInputMode,设置或返回Input属性取回的数据的类型。说明:InputMode属性确定Input属性如何取回数据。数据取回的格式或是字符串或是一数据组的二进制数据的数组。假设数据只用ANSI字符集,则用I
16、nputModeTe*t。对其它字符数据,如数据中有嵌入控制字符、Nulls等等,则使用InputModeBinary。NullDiscard,确定null字符是否从端口传送到接收缓冲区。OutBufferrCount,返回在传输缓冲区中等待的字符数。也可以用它来去除传输缓冲区。该属性在设计时无效。说明:设置OutBufferCount属性为0可以去除传输缓冲区。OutBufferSize,以字节的形式设置并返回传输缓冲区的大小。说明:OutBufferSize指整个传输缓冲区的大小:缺省值是512字节。传输缓冲区设置的越大则应用程序可用存越小。但假设缓冲区太小,假设不使用握手协议,就可能有溢
17、出的危险。一般的规律是,首先设置一个512字节的缓冲区。如果出现溢出错误,则通过增加缓冲区的大小来控制应用程序的传输速率。ParityReplace,当发生奇偶校验错误时,设置并返回替换数据流中一个非法字符的字符。说明:缺省的情况是,Msm控件用问号?替换非法字符。如果设置parityRep1ace为一个空字符串,则当奇偶校验错误出现时,字符替换无效。但onm事件仍然产生,并且设置mEvent。属性为EventR*parity。ParityReplace字符被用于面向字节的操作,它必须是单字节字符。可指定0到255之间的任何ANSI字符代码。Rthreshold,在MSCoinm控件设置mEv
18、ent属性为EvReceive,并产生onm事件之前,设置并返回的要接收的字符数。RTSEnable,确定是否使RequestrosendRTS线有效。一般情况下,由计算机发送RequestToSend信号到联接的调制解调器,以请示允许发送数据。Sthreshold,在MSm控件设置。mEvent属性为EvSend并产生onm事件之前,设置并返回传输缓冲区中允许的最小字符数。事件onm,无论何时当mEvent属性的值变化时,就产生onm事件,它标志发生了一个通讯事件或一个错误。说明:mEvent属性包含实际错误或产生onm事件的编码。但是,当Rthresho1d或Sthreshold属性被设置
19、为0时,则会分别使EvReceive和EvSend事件无效。使用轮询方式实现串口通信工程名称:MSm_Show1.vbp发送窗体名称:MSm_Send1.frm接收窗体名称:MSm_Receive_Polling.frm控件及属性设置:对象名称属性对象名称属性MSm_SendCaption: MSm_SendMSm_Receive_PollingCaption: MSm_Receive_PollingLabel1Caption:发送窗口Label1Caption:接收窗口Label2Caption: 请将发送容写入文本框Label2Caption: 接收到的文本将在文本框中显示Te*t1Te*
20、t:Te*t1Te*t:MSm1Mam1程序代码:发送窗体程序Private Sub Form_Load() MSm1.mPort = 1 使用1。 MSm1.Settings = 2400,N,8,1 2400波特率,无奇偶校验,8位数据位,一位停顿位 MSm1.InputLen = 0 当输入占用时,告诉控件读人整个缓冲区。 MSm1.PortOpen = True 翻开端口。Msm_Receive_Polling.Show显示轮询接收窗体,启动接收程序End SubPrivate Sub Te*t1_KeyPress(KeyAscii As Integer) MSm1.Output =
21、Chr$(KeyAscii) 发送用户从键盘上输入的字符End SubPrivate Sub Form_Unload(Cancel As Integer) MSm1.PortOpen = False 关闭串行端口End Sub接收窗体程序Private Sub Form_Load() MSm1.mPort = 2 使用2。 MSm1.Settings = 2400,N,8,1 MSm1.InputLen = 0 MSm1.PortOpen = True End SubPrivate Sub Form_Click() Te*t1.Te*t = MSm1.Input 从串行端口读容。End Sub
22、Private Sub Form_Unload(Cancel As Integer) MSm1.PortOpen = FalseEnd Sub实验操作步骤:用发送窗体MSm_Send作为启动对象,启动程序后,发送窗体和轮询接收窗体都将出现在屏幕上;用鼠标将光标设置到发送窗体的文本框中,在文本框中输入字母或数字,观察承受窗口的文本框有无变化;移动鼠标光标单击接收窗体,接收窗体由deactivate成为一个Activate状态,再观察接收窗体的文本框有什么变化,请考虑一下程序执行的过程和轮询方式的工作原理。使用事件驱动实时方式实现串口通信工程名称:MSm_Show2.vbp发送窗体名称:MSm_S
23、end2.frm接收窗体名称:MSm_Receive_Realtime.frm控件及属性设置:对象名称属性对象名称属性MSm_SendCaption: MSm_SendMSm_Receive_PollingCaption: MSm_Receive_RealtimeLabel1Caption:发送窗口Label1Caption:接收窗口Label2Caption: 请将发送容写入文本框Label2Caption: 接收到的文本将在文本框中显示Te*t1Te*t:Te*t1Te*t:MSm1Mam1Rthreshold:1程序代码:发送窗体程序Private Sub Form_Load() MSm1.mPort = 1 MSm1.Settings = 2400,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版实习生实习期间实习单位培训责任协议3篇
- 写字楼电梯管理协议
- 2025个人货车租赁合同书
- 建筑工程:车库雨棚施工合同范本
- 家政服务伸缩缝安装施工协议
- 2025版劳动合同补充协议范本汇编3篇
- 2024年教育培训机构广告合作合同范本3篇
- 自建房屋建筑设备租赁合同
- 证券投资联合体投标协议模板
- 2025年度爬架租赁及拆除服务合同3篇
- 询价单模板范本
- 基于微信小程序的运动健身管理系统的设计与实现
- 国标《电化学储能电站生产安全应急预案编制导则》
- 施工升降机安装方案
- 嗅神经视神经
- 围手术期胃肠营养
- 2024年有色金属分选机行业特点分析
- 小学师德师风培训的课件
- 水土保持法培训课件
- 吸粉活动推广方案
- 系统集成实施方案
评论
0/150
提交评论