当前位置:首页 >> 机械/仪表 >>

基于VB6


100

计算机与数字工程

第 34 卷

基于 VB6. 0 的多方式串口通信实现
侯志军
( 解放军理工 大学通信工程学院研一队 摘
1)

1)

高媛媛

2)




>
1)

南京

210007)

( 解放军理工大学通信 工程学院无线通信系2)

南京

210007)

要: 串口通信因其通信线路简单、 使用灵活方便, 在许 多领域应用广泛。基 于串口通信 和 MSComm 控件原理 , 详

细介绍了利用 VB6. 0 编程实现手 动和自动发送字符/ 数据、 文本文件等多方式串口通信的方法, 并给出了具 体程序和解 释。 对 VB6. 0 编程者的学习 具有一定的启发和参考价值。 关键词: RS- 232 Visual Basic 6. 0( VB6. 0) 中图分类号:TN915. 05 MSComm 多方式 串口通信

Use VB6. 0 to Program Multimode Serial Communication Program
Hou Zhijun1) Gao Yuanyuan2) Sha Nan1) 210007) 210007)
2)

( Postgraduate Team 1 ICE, PLAUST 1) , Nanjing

( Department of Radio Communication, ICE, PLAUST , Nanjing

Abstract: Serial communication program has broad application in many fields because of its simple communication circuitry, flexible uses. Based on the principle of serial communication program and MScomm control, the article introduces using VB6. 0 to program the Mul timode Serial Communication program such as manual or automatic transmitting symbol/ data , text file etc. , then gives a concrete program and explanation. It will be useful to the people who study VB6. 0. Key words: RS- 232, Visual Basic 6. 0, MSComm control, multimode, serial communication program Class number: TN915. 05

串口通信由于具有通信线路简单、 使用灵活方 便、 数据传输可靠等优点, 在工业监控、 数据采集和 实时控制等场合得到了广泛的应用。采用 VB6. 0 提供的MSComm 控件, 能很方便地实现所需的串口 通信功能。

口芯片进行编程, 可以使串口 具有不同的工 作方 式、 不同的波特率和不同的数据位数等 [ 1] 。 目前, 计算 机上常见的是 9 针 RS- 232 串 行 口, 常用的只有其中 4 针( 2、 5、 针) 。如下图所 3、 7 示:

1

串口通信简介
计算机中的串行通信就是一种典型的串口通

信, 它指的是数据在传输过程中是一位一位的进行 传输, 每一位数据占据一个固定的时间长度。一般 说来, 计算机都提供一个或多个符合 RS- 232 标准 的串行端口, 它们依次为 Com1、 Com2、. . , 这些串 . 口提供了外部设备与 PC 间进行数据传输和通信 的通道, 并在 CPU 和外设之间充当解释器的角色。 当字符数据从 CPU 发送 给外设时, 这些字符数据 将被转换成串行比特流数据; 当接收数据时, 比特 流数据被转换为字符数据传递给 CPU。通过对串
图 1 RS- 232 串行口

一条 9 针 RS232 电缆的两个接头在正常情况 下, 都是一一对应的, 但如果是使用单串口或双串 口直接连接测试时, 就必须将电缆的某些针对接, 才能满足串口通信的要求。单串口测试时, 需将 2 针和 3 针( 收发针) 对接; 对于双串口直接连接测 试, 则需将两个端口的 2 针和 3 针( 收发针) 相互

收到本文时间: 2005 年 5 月 25 日

第 34 卷( 2006) 第 2 期

计算机与数字工程

101

对接。

VB6. 0 按纽、 文本框等的标注) :

2 VB6. 0 的 MSComm 控件介绍
Visual Basic( 简称 VB) 是一种窗口操作平台上 的视觉 开发工具, 使 得开发更为方 便快捷。利用 VB6. 0 开发 串口通信程 序有两种 方法: 一是利用 Windows 的 API 函数, 另一种是采用 VB6. 0 标准控 件 MSComm 来实现。前种方法可编程实现的功能 较丰富, 应用面较广, 但它要求掌握大量的通信知 识, 相对而言比较复杂; 而利用 VB6. 0 提供的标准 MSComm 控件, 开发者只需知道 MSComm 控件的属 性和事 件 的用 法, 就 能 非常 方 便地 实现 串 口通 信
[ 2]

。 VB6. 0 提供的 MSComm 控 件, 提供了使 RS-

图2

编程后的执行界面

232 进行数据通信的所有协议, 它有两种处理通信 的方式, 即事件驱动和查询方式, 文章只讨论事件 驱动方式。事件驱动是处理串口通信的一种有效 方法, 它利用 MSComm 提供的一个事件 OnComm 来 截取串口的消息, 进而转入事件处理程序。使用事 件驱动方式来处理和解决各类通信软件的开发设 计问 题, 实 时 性 很 强[ 3] , [ 4] 。 要 注 意 的 是: 一 个 MSComm 控件只能对应一个串口。 MSComm 控件的属性较多, 下表介绍了与本文 有关、 也比较重要的几个属性。
表 1 MSComm 属性 属性 CommPort Settings PortOpen 描述 设置或返回通信端口号 以字符 串的形式设 置或 返回波 特率、 偶校 奇 验、 数据位和停止位 设置或返回通信端口的状态。也可以打开和

实现如上操作的 VB6. 0 程序具体如下: 3. 1 启动 VB6. 0 新建一个标准工程, 按上图所示往其中导入命 令按纽、 文本框、 时钟控件和 MSComm 控件等, 并进 行窗口加载, 完成初始化编程。初始化编程主要完 成对主 窗口 以及 MSComm 控件 属性 的初 始化 设 置[ 5] , [ 6] 。 3. 2 发送程序 3. 2. 1 手动发送字符/ 数据 包括对串口进行设置、 对发送的字符/ 数据计 数等。
Private Sub Command7 Click( ) Dim aa As String 定义字符/ 数据 Dim d As Integer Shape1. FillColor = &HFF& MSComm1. Settings = Combo2.T ext & a & Combo4.Text & Combo5.Text aa = Text10. Text d = Len( aa) 以下程序完成对 文本框内字符/ 数据的发送 If MSComm1. PortOpen = True Then MSComm1. Output = aa Else: MSComm1. PortOpen = True MSComm1. Output = aa End If Tcounter = Tcounter + d Text8. Text = End Sub TX: & Tcounter

关闭端口 Input 返回和删除接收缓冲区中的字符 Output 将字符串写入发送缓冲区 RThreshold 设置或 传回 引发 ONCOMM 事 件 中接 收事 件 的字符数, 即引起接收事件的 门槛阀值

利用 MSComm 控件进行串口通信的一般步骤 为: 设置通信对象、 通信端口以及其它属性; 设定通 信协议; 打开通信端口, 进行数据的传送; 关闭通信 端口。下面通过一个实例说明。

3

应用实例
文章旨在通过 VB6. 0 编程实现多功能的串口

3. 2. 2 自动发送字符/ 数据 点击自动发送复选框后, 发送文本框中的字符 / 数据, 第一次发 送完毕, 开始进行自动 发送计时 ( 这里是通过时钟控件实现自动发送的) 。
Private Sub Check3 Click( )

通信: 包括手动和自动发送字符/ 数据, 手动选择和 发送文本文件, 以及对收发的字符/ 数据进行计数、 清零等功能。 编程后的 执行界面如下 图所示( 其中注释为

102
Dim aa As String Dim d As Integer If Check3. Value = 1 Then * * * * * * * * Shape1. FillColor = &HFF &

基于 VB6. 0 的多方式串口通信实现

第 34 卷

是, 读完文件后, 一定要关闭文件。
Private Sub Command9 Click( ) Dim aa As String Dim d As Integer Dim myexit As String Shape1. FillColor = &HFF& MSComm1. Settings = Combo2.T ext & a & Combo4.Text & Combo5.Text If T ext5. Text = vbOKOnly, End If 如果 text5 中有文件 的话, 就 进行以 下的 发送 文本文 件操 作 Else: Command9. Enabled = False Check3. Enabled = False Open Text5.T ext For Input As # 1 d= 0 Do While Not EOF( 1) aa = Input( 1, # 1) If MSComm1. PortOpen = True Then MSComm1. Output = aa Else: MSComm1. PortOpen = True MSComm1. Output = aa End If d = d + 1 对发送的数据/ 字符进行计数 Loop Text5. Text = 发 送完毕 Timer3. Enabled = True Close # 1 关闭文 件 Tcounter = Tcounter + d Text8. Text = End If 选择目录 End Sub All Files( * . * ) | * . * | Text TX: & Tcounter 还没有选择文件 T hen myexit = MsgBox ( open file failed , vbExclamation + 串口调试助手 v2. 1 ) If myexit = vbOK Then

MSComm1. Settings = Combo2. Text & a & Combo4. Text & Combo5. Text aa = T ext10.T ext d = Len( aa) If MSComm1. PortOpen = True Then MSComm1. Output = aa Else: MSComm1. PortOpen = True MSComm1. Output = aa End If Tcounter = Tcounter + d Text8. Text = TX: & Tcounter Timer1. Interval = Text2. Text Timer1. Enabled = True 自动定时开始 Else Timer1. Enabled = False End If * * * * * * * * End Sub

第一次自动发送定时完成后, 跳入下面的时钟 控件程序: 只要自动发送复选框被选上, 那么自动 发送仍将继续进行。
Private Sub Timer1 Timer( ) 重复上面两串* * * * * * * * 之间的 程序 End Sub

3. 2. 3 发送文件 在发送文件之前, 首先得利用 CommonDialog 控 件选择要发送的文本文件。
Private Sub Command8 Click( ) On Error GoTo Errhandler CommonDialog1. DialogTitle = CommonDialog1. Filter =

Files( * . txt) | * . txt| Batch Files( * . bat) | * . bat CommonDialog1. FilterIndex = 2 CommonDialog1. ShowOpen Text5. Text = CommonDialog1. FileName Exit Sub Errhandler: Exit Sub End Sub

3. 3 接收程序 在窗口加载过程中, 就得将 Rthreshold 置为 1, 它表示每接收到一个字符( 无论来自文本框的还是 文本文件的字符/ 数据) , 都产生接收通信, 同时对 接收的字符/ 数据进行计数。
Private Sub MSComm1 OnComm( ) Dim Buffer As Variant Buffer = MSComm1. Input Rcounter = Rcounter + Len( Buffer) Text7. Text = End Sub RX: & Rcounter Text9. Text = Text9. Text & Buffer

接着就可以 发送文件了, 对于文本 文件的发 送, 其基本思想就是将文本文件逐一读出, 再进行 发送, 同时进行发送字符/ 数据的计数。要注意的

第 34 卷( 2006) 第 2 期

计算机与数字工程

103

3. 4 其它功能的实现 保存接 收区的 数据 可以 直接 保存 在 C 盘下 面, 也可以点击更改按纽, 改变保存路径。
Private Sub Command4 Click( ) Dim afile Set fs = CreateObject( Scripting. FileSystemObject ) Set afile = fs. CreateT extFile( Text3. Text & True) 件 afile. Close 关闭文件 End Sub 创建一个 afile 文 件 afile. WriteLine T ext9.Text 将 text9. text 的 内容写 入文 \ test1. txt ,

设置、 数据发送、 数据接收等。文章利用 VB6. 0 中 的 MSComm 控件编程实现了一个较为完整的串口 通信, 该程序还具有自动发送数据、 自动清空、 对收 发字符/ 数据串计数等功能, 对 VB6. 0 编程者的学 习具有一定的启发和参考价值。文章提供的源程 序全部调试通过, 并且在作者的调制解调器研究项 目过程中得到了较好的应用。
参考文献 [1] 刘 建 军. 利 用 VB 实 现串 行 通 信 [ J] . 福 建 电 脑, 2004, ( 7) : 84 [ 2] 徐 永洪, 符 影杰, 江峰 等. 基于 VB6. 0 的 串口 通信 实现 [ J] . 仪器仪表用户, 2004, 11( 1) : 67~ 68 [ 3] 李旭东, 陈俊杰. 基于 VB 中 MSComm 控件的通信软件开 发与实现[ J] . 电脑开发与应用, 2004, 17( 7) : 25~ 27 [ 4] 王炳立, 姚中华. 用 VB 实现单台微机上的串口通信[ J] . 现代计算机, 2001, 127( 11) : 92~ 94 [ 5] 王向阳, 谢双喜, 杨明忠. 利用 VB 实现计 算机串 口通信 实例[ J] [ 6] 张树兵, 戴红, 陈哲等. Visual Basic 6. 0 中 文版入 门与提 高[ M] . 北京: 清华大学出版社, 1999: 67~ 104

通过多个列表框可实现对串口参数( 串口号、 波特率, 校验位, 数据位, 停止位) 的设置, 也可实现 对计数进行清零、 改变重复发送数据/ 字符的周期 以及改变保存的路径等功能[ 4] 。

4

结论
一个完整的串口通信程序应该包括串口参数

( 上接第 99 页) 定为需要事务。这样就节省了时间, 提高了系统的 效率。由于协调对象是通过后端的事务数据模块 来查询数据, 因此需添加组件 TDCOMConnection 连 接到后端事务数据模块, 以及 TclientDataSet 连接后 端事务数据模块的 TdataSetProvider 组件以取得数 据, 再通过 TdataSetProvider 组件取得协调对象所需 要的数据封包。

的执行效率。 结语: 分布式数据库是数据库领域中的一个主 要研究方向, 数据的一致性维护是分布式数据库系 统中的一个关键的技术问题。本文建立了一个基 于分布式数据库的主副本算法的并发控制模型, 并 运用 Delphi 以及 MTS/ COM + 组件, 实现 对多台数 据库服务器上副本的一致更新。由于我们采取了 一些优化措施, 从实验结果来看, 还是比较满意的。
参考文献 [ 1] 沈娟, 赵雄芳. 对分布 式数 据库发 展方 向的分 析[ J] . 计 算机工程与科学, 1994, ( 01) [ 2] 陈宇枫. 分布式数据库多副 本封锁解决方法[ J] . 吉林师 范大学学报( 自然科学版) , 2003, ( 04) [ 3] 钟洪涛, 连杰鑫 等. 时间参数 在分布 式数据 库中的 应用 [ J] . 计算 机工程与应用, 2004, ( 08) [ 4] 林清滢. 关于 COM + 事务运行机制的分析[ J] . 重庆师范 学院学报( 自然科学版) , 2003, ( 04) [ 5] 陈哲, 杨 明福. 基于 MTS/ COM + 和 Windows DNA 的三层 企业级应用研究[ J] . 计算机工程与应用, 2004, ( 18)

5

结果分析
本文采取主副本法实现对多副本的并发控制。

即对数据项的加锁, 只是对主副本的加锁, 所以其 报文传送次 数很少, 执行速度快, 但并发度较低。 如采取多数法, 报文发送次数较多, 执行时间比主 副本法要长, 但并发度较高。为了比较, 我们分别 用主副本法和多数法进行了 8 次实验, 主副本法执 行时间比多数法平均减少了 2. 125 秒。这说明, 采 取主副本法实现对多副本的并发控制, 确实有较高


相关文章:
基于VB6教务管理系统
基于VB6_0与SQL建立的教... 2页 1财富值 vb6 8页 2财富值 vb6 18页 1财富值 VB6 20页 免费 VB6 第一章 34页 2财富值 vb6-1 19页 免费 浅谈用...
VB(6)
vbGreen Case 3 To 5 Label1.Caption = "黄灯" Label1.ForeColor = vbYellow Case 6 To 7 Label1.Caption = "红灯" Label1.ForeColor = vbRed If k =...
基于VB6 0学生成绩管理系统的设计与实现
基于VB6 0学生成绩管理系统的设计与实现_工学_高等教育_教育专区。基于 VB6.0 学生成绩管理系统的设计与实现 摘要: 本论文叙述了学校学生成绩管理的现状以及 Visual...
VB6
VB6_计算机软件及应用_IT/计算机_专业资料。VB章节习题VB 实验 6 过程 第 12 周 一 实验目的: 1. 掌握函数过程和子过程的定义和调用方法 2. 形参和实参的对...
基于VB6的自动化控制设计与应用
基于VB6 的自动化控制设计与应用温且兵 廖德伟 摘要: 笔者针对目前冶炼行业中的高炉喷吹煤粉通道阻塞问题, 设计了一套基于串口通信 的自动化控制系统。该系统实现...
VB6特点
6、丰富的开发实例: 拥有大量的基于 VB 应用软件开发平台的针对 Windows CE 特性的详细开发实 例,能够为你提供快速的参考。 分享到: X 分享到: 使用一键...
VB6
“白色窗体”按钮,窗体背景颜色变成白色 3、单击“红色文本”按钮,标题为“VB ...6、单击“清除”按钮,将窗体上的文字,及文本框中的文字全 部清空。 7、单击...
浅谈用VB6
V​B​6浅谈用 VB6.0 编写 BO 程序 作者:佚名 文章来源:未知 点击数: 23 更新时间:2005-12-13 BO 又称“特洛伊木马”, 是在美国一次黑客技术讨论会上由...
使用VB6编写COM加载项
使用VB6编写COM加载项_计算机软件及应用_IT/计算机_专业资料。使用 VB6 编写 COM 加载项一个简单的 COM 加载项示例 步骤 1:启动 VB6,在“新建工程”对话框中...
6VB
6VB 答案答案隐藏>> 1. 基本操作(2小题,每小题15分,共计30分) 注意:下面出现的"考生文件夹"均为C:\WEXAM\00000000\ *** 请根据以下各小题的要求设计Vis...
更多相关标签:
基于vb的图书管理系统 | vb基于象素的放大代码 | 基于vb的trend控件 | 基于vb的温度采集 | 基于vb的仓库管理系统 | flyme6基于安卓 | flyme6基于 | flyme6基于安卓几 |