VB串口通信程序实例.doc

上传人:sk****8 文档编号:3149868 上传时间:2019-05-23 格式:DOC 页数:36 大小:3.24MB
下载 相关 举报
VB串口通信程序实例.doc_第1页
第1页 / 共36页
VB串口通信程序实例.doc_第2页
第2页 / 共36页
VB串口通信程序实例.doc_第3页
第3页 / 共36页
VB串口通信程序实例.doc_第4页
第4页 / 共36页
VB串口通信程序实例.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、VB 串口通信程序设计典型实例串口通信程序设计典型实例利用 VB 开发串口通信程序既可以使用 MSComm 控件也可以调用 Windows API 函数实现。不过,只要 MSComm 控件可以被选用,我们推荐选择此控件实现,因为 MSComm控件的功能和 API 调用一样强,甚至比它还好且使用起来更加简单。在本章提供的串口通信程序设计中,除了 PC 与 PC 串口通信外,PC 与单片机、PC 与智能仪表、PC 与 PLC、PC 与 GSM 短信模块等串口通信任务的实现均采用 MSComm 控件。6.1 PC 与 PC 串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在

2、通信中只需 3 根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。本设计通过两台 PC 串口 3 线连接,介绍了利用 API 函数和 MSComm 控件设计串口通信程序的方法,包括字符与文件的发送与接收。6.1.1 PC 与 PC 串口通信程序设计目的(1)掌握 PC 与 PC 串口通信的线路连接方法。(2)利用 MSComm 控件和 API 函数实现 PC 与 PC 串口通信的程序设计方法。6.1.2 PC 与 PC 串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表 6-1 所示。表 6-1 设计用软、硬件序 号 名 称 数 量1 PC 或 IPC 22 串口通信线(三线制

3、) 13 Visual Basic 6.0 16.1.3 PC 与 PC 串口通信程序硬件线路图线路说明,在计算机通电前,按图 6-1 所示将两台 PC 通过串口线连接起来:计算机A 串口 COM1 端口的 TXD 与计算机 B 串 口 COM1 端 口 的 RXD 相 连 , 计 算 机 A 串口 COM1端口的 RXD 与计算机 B 串口 COM1 端口的 TXD 相连,计算机 A 串口 COM1 端口的 GND与计算机 B 串口 COM1 端口的 GND 相连。COM1PC机 AGNDRXDTXD COM1PC机 BGNDRXDTXD图 6-1 PC 与 PC 串口通信线路6.1.4 设

4、计任务利用 MSComm 控件和 VB API 函数编写程序实现 PC 与 PC 串口通信。任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串 “abc123”,单击“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。6.1.5 任务实现6.1.5.1 利用 MSComm 控件 实现字符型数据发送与接收1建立新工程VB 使用“工程”来管理每一个应用程序要使用的所有文件,每建立一个新程序,就要新建一个工程。一个工程由窗体、标准模块、控件及应用所需的开发环境

5、设置等组成。运行 VB 程序,出现“新建工程”对话框,选择“标准 EXE”,单击“打开”命令按钮,进入 VB 工程集成开发环境,窗体设计器中自动出现一个名为 Form1 的空白窗体。2程序界面设计向空白窗体添加各种控件,以完成预定的各种功能。开始一个项目的设计时,VB 的工具箱中会有许多默认的控件让设计者予以选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设计者,但功能比较特别的控件就不会出现在其中,如用来设计串口通信功能的控件 MSComm 就不在其中。(1)添加串口通信控件 MSComm。由于 VB 的串行通信组件并不会主动出现在工具箱里中,当我们需要 MS

6、Comm 控件时,首先要把它加入到工具箱中。让 MSComm 控件出现在工具箱中的步骤如下。选择“工程”菜单下的“部件”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“Microsoft Comm Control 6.0”复选框,单击“确定”按钮后,在工具箱中就出现了一个形似“电话”的图标,它就是 MSComm 控件。工具箱中有了 MSComm 控件,就可以选择 MSComm 控件的图标后将其添加到程序窗体上,利用该控件编程,PC 就可以通过 VB 实现与串口设备的串口通信了。由于每个使用的 MSComm 控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须添加多个图

7、6-2 程序窗体界面计算机 A 计算机 BMSComm 控件。(2)为了实现连续的自动接收,将工具箱中的 Timer 控件添加到程序窗体上。(3)添加两个文本框控件:Text1 和 Text2,用于输入要发送的字符和显示要接收的字符。(4)添加两个标签控件:Label1 和 Label2,作为发送和接收字符区的标签。(5)添 加 一 个 按 钮 控 件 : Command1 执 行 发 送 字 符 命 令 。程序设计界面如图 6-2 所示。3属性设置从属性窗口设置属性时,只需从对象列表框中选择待设置属性的对象,然后从属性列表的左列选择属性,最后在属性列表的右列中输入或选择新的属性值。程序窗体、

8、控件对象的主要属性设置如表 6-2 所示。表 6-2 窗体、控件对象的主要属性设置控 件 类 型 主 要 属 性 功 能(名称) = COMForm 窗体控件BorderStyle = 3 运行时窗体固定大小FormCaption = PC 与 PC 串口通信 窗体标题栏显示程序名称(名称) = Label1 标签控件LabelCaption = 显示接收字符区: 标签文本(名称) = Label2 标签控件LabelCaption = 输入发送字符区: 标签文本(名称) = Textsend 文本框控件MultiLine = True 允许多行显示TextBoxScrollBars = 2-

9、Vertical 垂直滚动条可用(名称) = TextReceive 文本框控件MultiLine = True 允许多行显示TextBoxScrollBars = 2-Vertical 垂直滚动条可用(名称) = Cmdsend 按钮控件CommandButtonCaption = 发送字符 手动发送字符(名称) = MSComm1 串口通信控件MSComm其他属性在程序中设置(名称) = Timer1 时钟控件Enabled = True 时钟初始可用TimerInterval = 500 设置发送周期(ms)两台计算机中 VB 程序界面及属性设置应完全相同,尤其 MSComm 控件的 I

10、nputMode 和Settings 属性 值应相同。4程序代码设计程序要实现自动发送或读取,在 VB 程序中有两个方式可以达到,一是查询方式,利用查询事件是否发生,当发生时,去执行默认的程序代码。可以使用计时器控件(Timer) ,该控件属性中的 Interval 可以控制计时器被启动的时间间隔,当时间间隔一到,便会执行原先放在计时器中的程序代码。下面是利用查询方式编写的 PC 与 PC 串口通信的参考程序,代码如下所示: 串口初始化Private Sub Form_Load()MSComm1.CommPort = 1 设置通信端口号为 COM1MSComm1.Settings = “960

11、0,n,8,1“ 设置串口 1 参数MSComm1.InputMode = 0 接收文本型数据MSComm1.PortOpen = True 打开通信端口 1End Sub 把字符通过串口发送出去Private Sub Cmdsend_Click()If Textsend.Text = “ Thenpp = MsgBox(“发送的数据不能为空!“, 16)Exit SubEnd IfMSComm1.Output = Trim(Textsend.Text)For i = 1 To 20000000Next iEnd Sub 通过时钟控制来自动接收字符Private Sub Timer1_Time

12、r()Dim buf$buf = Trim(MSComm1.Input) 将缓冲区内的数据读入 buf 变量中If Len(buf) Len(txt(2) ThenMsgBox “写入错误“Exit SubEnd IfEnd Sub向串口写数据Function WriteCOM32(COMString As String) As IntegerOn Error GoTo handelwritelptDim RetBytes As Long, LenVal As LongDim retval As LongIf Len(COMString) 255 ThenWriteCOM32 Left$(CO

13、MString, 255)WriteCOM32 Right$(COMString, Len(COMString) - 255)Exit FunctionEnd IfFor LenVal = 0 To Len(COMString) - 1bRead(LenVal) = Asc(Mid$(COMString, LenVal + 1, 1)Next LenValretval = WriteFile(ComNum, bRead(0), Len(COMString), RetBytes, 0)WriteCOM32 = RetByteshandelwritelpt:Exit FunctionEnd Fun

14、ction读取数据Private Sub TMRComm_Timer()Dim Ans As String, i As Integer, RtnStr As StringAns = ReadCommPure()If Ans = “ Then Exit SubRtnStr = RtnStr & CleanStr(Ans)txtRec.Text = RtnStrFlushCommEnd Sub从串口读取数据Function ReadCommPure() As StringOn Error GoTo handelpurecomDim RetBytes As Long, i As Integer, R

15、eadStr As String, retval As LongDim CheckTotal As Integer, CheckDigitLC As Integerretval = ReadFile(ComNum, bRead(0), 255, RetBytes, 0)ReadStr = “If (RetBytes 0) ThenFor i = 0 To RetBytes - 1ReadStr = ReadStr & Chr(bRead(i)Next iElseFlushCommEnd IfReadCommPure = ReadStrhandelpurecom:Exit FunctionEnd

16、 FunctionFunction CleanStr(TextLine As String) As StringDim i As Integer, RtnStr As StringRtnStr = “For i = 1 To Len(TextLine)Select Case Asc(Mid$(TextLine, i, 1)Case &H5DRtnStr = RtnStr & “Case &H5BRtnStr = RtnStr & “Case Is = &H30RtnStr = RtnStr & Mid$(TextLine, i, 1)Case 13RtnStr = RtnStr & “Case

17、 10RtnStr = RtnStr & “Case ElseRtnStr = RtnStr & “End SelectNext iCleanStr = RtnStrEnd Function清空文件缓冲区Function FlushComm()FlushFileBuffers (ComNum)End Function初始化端口Function Init_Com(ComNumber As String, Comsettings As String) As BooleanOn Error GoTo handelinitcomDim ComSetup As DCB, Answer, Stat As

18、COMSTAT, RetBytes As LongDim retval As LongDim CtimeOut As COMMTIMEOUTS, BarDCB As DCB 打开通讯口读/写(&HC0000000). 必须指定存在的文件 (3).ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0)If ComNum = -1 ThenMsgBox “端口 “ & ComNumber & “无效. 请设置正确.“, 48Init_Com = FalseExit FunctionEnd If超时CtimeOut.ReadInter

19、valTimeout = 20CtimeOut.ReadTotalTimeoutConstant = 1CtimeOut.ReadTotalTimeoutMultiplier = 1CtimeOut.WriteTotalTimeoutConstant = 10CtimeOut.WriteTotalTimeoutMultiplier = 1retval = SetCommTimeouts(ComNum, CtimeOut)If retval = -1 Thenretval = GetLastError()MsgBox “端口超时设定无效 “ & ComNumber & “ 错误: “ & ret

20、valretval = CloseHandle(ComNum)Init_Com = FalseExit FunctionEnd Ifretval = BuildCommDCB(Comsettings, BarDCB)If retval = -1 Thenretval = GetLastError()MsgBox “无效设备 DCB 块 “ & Comsettings & “ 错误: “ & retvalretval = CloseHandle(ComNum)Init_Com = FalseExit FunctionEnd Ifretval = SetCommState(ComNum, BarD

21、CB)If retval = -1 Thenretval = GetLastError()MsgBox “无效设备 DCB 块 “ & Comsettings & “ 错误: “ & retvalretval = CloseHandle(ComNum)Init_Com = FalseExit FunctionEnd IfInit_Com = Truehandelinitcom:Exit FunctionEnd Function关闭程序Private Sub BTNCloseCom_Click()Unload MeEnd Sub关闭端口Private Sub Form_Unload(Cancel

22、 As Integer)CloseHandle (ComNum)End Sub4运行程序程序设计、调试完毕,执行菜单“运行/启动”命令或单击工具栏快捷按钮 “启动” ,运行程序。(1)首先在程序窗体中发送字符区输入要发送的字符,单击“发送数据”按钮,发送区的字符串通过 COM1 口发送出去。(2)另一台计算机发送数据,本计算机自动读入并显示在接收数据区中。程序运行界面如图 6-5 所示。6.1.5.3 利用 MSComm 控件 实现 PC 双串口互通信如果一台计算机有两个串口,可通过串口线将两个串口连接起来:COM1 端口的 TXD与 COM2 端口的 RXD 相连,COM1 端口的 RXD 与 COM2 端口的 TXD 相连,COM1 端口的 GND 与 COM2 端口的 GND 相连,如图 6-6(a)所示,这是串口通信设备之间的最简单连接(即三线连接) ,图中的 2 号接收脚与 3 号发送脚交叉连接是因为在直连方式时,把图 6-5 程序运行界面

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 建筑建材

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。