第一范文网 - 专业文章范例文档资料分享平台

VB与串口

来源:用户分享 时间:2025/10/9 17:40:25 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

三、VB平台下的实现

使用MSCOMM控件主要是通过事件来处理串行口的交互,即当数据到达时,控件的OnComm的事 件就会来捕获或处理这些通讯事件。而OnComm事件也可以用来捕获和处理通讯错误。在实际应用 中,一个MSCOMM控件就对应一个串行口,所以如果要处理多个串行口的话,必须有相应数量的控 件与之对应。下面介绍一下此控件的主要属性:

CommPort ------ 设置或者返回串行端口号, 如设成1(默认值),表示对Com1进行操作。 Settings ------ 用来设置和返回波特率,奇偶校验,数据位和结束位 对串口通讯的相关参数。包括串口通讯的比特率,奇偶校验, 数据位长度、停止位等。其默认值 是“9600,N,8,1”,表示串口比特率 是9600bit/s,不作奇偶校验,8位数据位,1个停止位。

PortOpen ------ 设置或者返回通讯端口的状态,也可以打开和关闭一个端口; 值为True时打开串口,值为False时关闭串口。 Input ------ 从接受缓冲区里获取或删除数据;

从输入寄存器读取数据,返回值为从串口读取的数据内容,同时输 入寄存器将被清空。

该属性设计时无效,运行时只读

Output ------- 发送缓冲区里写数据; 发送数据到输出寄存器。 该属性设计时无效,运行时只读

InBufferCount: 设置输入寄存器所存储的字符数,当将其值设为0时,则输入寄存器将被清空。 设置或返回接收缓冲区中等待计算机接收的字符数。

InputMode: 设置从输入寄存器中读取数据的形式。若值为0,则表示以文本形式读取; 值为1,则表示以 二进制形式读取。

Inputlen: 设置或返回一次从接收缓冲区中读取字节数。 InBufferSize: 设置或返回接收缓冲区的大小,缺省值为1024字节

OutBufferCount: 设置输出寄存器所存储的字符数,当将其值设为0时,则输出寄存器将被清空。 OutBufferSize: 设置或返回发送缓冲区的大小,缺省值为512字节

RThreshold: 设置在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm事件之前 要接受的字符数

该属性为一阀值。当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent 属性为ComEvReceive,并产生OnComm事件。用户可在OnComm事件处理程序中进行 相应处理。若Rthreshold属性设置为0,则不产生OnComm事件。例如用户希望接收 缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。这样接收缓冲 区中接收到一个字符,就产生一次OnComm事件。

Sthreshold: 该属性亦为一阀值。当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent 属性为ComEvSend,并产生OnComm事件。若Sthreshold属性设置为0,则不产生 OnComm事件。要特别注意的是仅当发送缓冲区中字符数小于该值的瞬间才产生 OnComm事件,其后就不再产生OnComm事件。例如Sthreshold设置为3,仅当发送缓冲 区中字符数从3降为2时,MSComm控件设置Commevent属性为ComEvSend,同时产生 OnComm事件,如发送缓冲区中字符始终为2,则不会再产生OnComm事件。这就避免了 发送缓冲区中数据未发送完就反复发生OnComm事件。

CommEvent属性: 返回最近的通讯事件或错误。通过对它具体属性值的查询,我们就可以获得 通讯事件和通 讯错误的完整信息。当其值是comEvReceive时表示接收到数据。 这是一个非常重要的属性。该属性设计时无效,运行时只读。一旦串口发生通信事件 或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,

同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行 相应的处理。

除了公共事件之外,MSComm只有一个OnComm事件。当CommEvent属性值变化时将发生OnComm事件, 指示发生 一个通讯事件或错误。当我们设置Rtheshold属性值为0时,将使得捕获comEvReceive 事件无效。CommEvent属性里面包含了通讯事件或者产生的错误的编号。

CommEvent属性的代码、常数及含义参见表1及表2。 表1 CommEvent通信事件 代码 常数 含义

1 ComEvReceive 接受到Rthreshold个字符。该事件将持续产生,直到用Input属性从 接受缓冲区中读取并删除字符。

2 ComEvSend 发送缓冲区中数据少于Sthreshold个,说明串口已经发送了一些数据, 程序可以用Output属性继续发送数据。 3 ComEvCTS Clear To Send信号线状态发生变化。 4 ComEvDSR Data Set Ready信号线状态从1变到0。 5 ComEvCD Carrier Detect信号线状态发生变化。 6 ComEvRing 检测到振铃信号。 7 ComEvEOF 接受到文件结束符。 表2 CommEvent通信错误 代码 常数 含义

1001 ComEvntBreak 接受到一个中断信号。 1002 ComEvntCTSTO Clear To Send信号超时。 1003 ComEvntDSRTO Data Set Ready信号超时。 1004 ComEvnt 帧错误。

1006 ComEvntOverrun 串口超速。 1007 ComEvntCDTO 载波检测超时。

1008 ComEvntRxOver 接受缓冲区溢出,缓冲区中已没有空间。 1009 ComEvntRxParity 奇偶校验错。

1010 ComEvntTxFull 发送缓冲区溢出,缓冲区中已没有空间。 1011 ComEvntDCB 检索串口的设备控制块时发生错误。

写一个串口通信程序首先要放一个控件进去,然后在Form_Load()的时候,通常是在load的时 候定义好mscomm的各种属性,比如速率,数据位,停止位等等.然后打开某个端口,再想办法 触发OnComm事件,然后对缓冲区的内容收或者发。然后对收到的数据加工处理。或者处理好 数据发出去。就这么简单,的确简单。如果想让程序变得聪明点,出了问题知道问题在哪里, 那一定要好好利用CommEvent属性

为了能够更加清楚的说明上述问题,下面给出一个例程,

例程要实现的功能很简单,就是在一个过程里给一个特定的串行口发送数据,然后在另外一个 过程里实时检测此串行口以便一旦此串行口的发送缓冲区有数据就显示消息,如果发送空数据 就会显示\无数据的字样\。 主要核心代码如下: Private Sub Command1_Click() If Text1.Text = \

List1.AddItem \发送缓冲区无数据\Exit Sub End If

MSComm1.Output = Text1.Text End Sub

Private Sub Command2_Click() Unload Me End Sub

'主要进行串口的初始化 Private Sub Form_Load() '选择com1

MSComm1.CommPort = 1

'设置波特率为9.6kpbs,没有奇偶校验,8位数据位,1位结束位 MSComm1.Settings = \'读取全部的输入缓冲区 MSComm1.InputLen = 0 '端口打开

MSComm1.PortOpen = True MSComm1.RThreshold = 10 MSComm1.SThreshold = 10 '以下就可以进行数据的发送了 End Sub

'所有的通讯事件都可以激发MSComm1控件的OnComm事件 Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive

'此处的代码可以进行当串口的接受缓冲区里有RThreshold个字符的处理 Case comEvSend

'此处的代码可以进行当串口的发送缓冲区里有SThreshold个字符的处理 List1.AddItem \发送缓冲区有数据\End Select End Sub 四、小结

虽然上面的例程实现的功能简单,但是从文中的分析不难看出,通过控件MSCOMM的input 和 output属性可以很方便的接受和发送串口缓冲区的数据。当然要编制比较完善的通讯应用程序, 还需要进行更深入的研究,比如通过使用\握手\的机制来增强通讯的安全性和稳定性,另外通过 数据的重复的发送达到收发数据的准确性等等。这些方面希望读者在实际开发中多实践,以便能 够满足实际的需要。

串口通讯编程实例 二

在完成了对MSComm控件的简要介绍之后,笔者就以实际程序为例,介绍一下串口通讯的具体 实现方法。

1、PC机间的串口通讯 (1)、实现方法:

A、新建一个窗体,在上面放两个Text控件、两个CommandButton控件和两个Label控件(如图1.bmp所示)。 具体见下表:

控件类型 名称 Caption属性 作用

------------------------------------------------------------------------------- Text Text1 ------- 输入所要发送的信息 Text Text2 ------- 显示接收到的信息 CommandButton Command1 发 送 --------- CommandButton Command2 退 出 --------- Label Label1 发送的数据 提示 Label Label2 接收的数据 提示

B、在控件工具箱中的空白处点击鼠标右键,在弹出的菜单中选择“部件”,在弹出的窗口中的控 件列表中 找到“Microsoft Comm Control”,将其选中,在点击“应用”、“关闭”,在控件工具栏 中就会出现一个电 话的小图标。

C、用串口线将两台电脑连接起来。您可以使用Com1对Com1的对应连接,也可以使用Com1和Com2 的交叉连接。本程序使用的是Com1对Com1的连接。

D、输入以下代码: Private Sub Command1_Click() '...发送数据

MSComm1.OutBufferCount = 0 '...清空输出寄存器 MSComm1.Output = Text1.Text '...发送数据 End Sub

Private Sub Command2_Click() '...退出 Unload Me End Sub

Private Sub Form_Load() '...初始化

MSComm1.CommPort = 1 '...使用Com1口 MSComm1.Settings = \设置通讯参数 MSComm1.PortOpen = True '...打开串口 End Sub

Private Sub Mscomm1_Oncomm() '...通讯事件发生

Select Case MSComm1.CommEvent Case comEvReceive '...有接受事件发生 Text2.Text = MSComm1.Input '...接受显示数据 MSComm1.InBufferCount = 0 '...清空输入寄存器 End Select End Sub

搜索更多关于: VB与串口 的文档
VB与串口.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0453g7rc988iiwm479fh_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top