vb串口通信复习资料总结

合集下载

VB串口

VB串口

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。

Micro soft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的A ctiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.MSComm控件两种处理通讯的方式1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。

在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。

OnCo mm 事件还可以检查和处理通讯错误。

所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。

在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。

这种方法的优点是程序响应及时,可靠性高。

每个MSC omm 控件对应着一个串行端口。

如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。

1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。

如果应用程序较小,并且是自保持的,这种方法可能是更可取的。

例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

2.MSComm控件的常用属性MSComm1.Settings:=’9600,n,8,1’; //设置波特率 ,校验位,数据位,停止位Settings属性:设置串口的波特率 ,校验位,数据位,停止位, ’9600,n,8,1’表示波特率为9600,无奇偶校验,数据位为8为,1位停止位MSComm1.InBufferSize:=1024; // 接受缓冲区大小InBufferSize 属性:接收缓冲区的大小,默认值为1024,也可以自己设定,比如, MSComm1.InBufferSi ze:=2000,则接收缓冲区的大小为2000字节MSComm1.OutBufferSize:=1024; // 发送缓冲区大小OutBufferSize属性:发送缓冲区的大小,默认值为1024,也可以自己设定。

VB基础与RS-232C通信技术第1章 概述

VB基础与RS-232C通信技术第1章 概述

4. 工程窗口 用于浏览工程中所包含的窗体和模块、查看代码、查 看对象。
a)单个工程
b)工程组
5. 属性窗口 属性窗口位于工程 窗口下方,用来显示 和设置被选定对象的 属性值。
6. 窗体布局窗口 窗体布局窗口中绘制了一个计算机显示器,并在上面 形象地显示了运行时窗体在显示器上的位置。
7. 窗体布局窗口 即对象窗口,就是工作台,在它上面可以使用窗体和工 具箱中提供的控件构造应用程序的界面。
1.3.1 VB 的安装
确认硬件配置和 软件环境满足 VB6.0 的安装与 使用条件
1.3.2 VB 的启动
常用的工
程类型为 标准EXE 类型
1.4 VB集成开发环境
1. 菜单栏 通过菜单栏可以实现VB的所有功能。 2. 工具栏 提供VB6.0中常用菜单命令的快速访问,只需要单击工 具栏上的按钮即可执行相应的菜单命令。 3. 工具箱窗口 相当于一个零件箱,里面包含的是用来构造应用程序界 面的部件——“控件”。
3. 企业版为专业编程人员开发程序提供了功能强大的 组内分布式应用程序。它包括专业版的所有特效, 加上BackOffice工具。
1.2 VB语言的特点
1. 可视化编程 2. 面向对象的程序设计 3. 结构化程序设计语言 4. 事件驱动编程机制 5. 数据库访问及强大开放的特点
1.3 VB的安装与启动
7. 类: 用来创建对象的样板,包含所创建对象的状态描 述和方法定义,对象是类的一个实例,如球和排球的关系。
8. 窗体:是创建应用程序界面的基础,相当于一块画布, 应用程序界面会全部在此画出,是运行应用程序时,与用 户交互操作的实际窗口。
9. 控件:组成用户界面的基本构件,如标签、命令按钮 等。每个控件按钮可以看作是一个类,单击按钮在窗体上 画下,即为由相应的类创建的对象。

vb复习资料

vb复习资料

vb复习资料VB复习资料近年来,计算机技术的快速发展使得编程成为了一项重要的技能。

而在编程学习的过程中,VB(Visual Basic)作为一种易学易用的编程语言,备受广大初学者的喜爱。

为了帮助大家更好地复习VB知识,本文将提供一些实用的复习资料和学习方法。

一、VB的基础知识在学习VB之前,我们首先需要了解一些基础知识。

VB是一种基于事件驱动的编程语言,它具有图形化的开发环境,使得编写程序变得更加直观和简单。

因此,我们需要掌握VB的基本语法、变量和数据类型、运算符、控制结构等内容。

可以通过阅读相关的教材或者参考资料来深入了解这些知识点。

二、VB的常用控件和功能VB作为一种用于开发Windows应用程序的语言,拥有丰富的控件和功能。

掌握这些常用的控件和功能对于开发实用的应用程序至关重要。

例如,文本框、标签、按钮、列表框、下拉框等控件的使用;对话框、文件操作、数据库连接、图形绘制等功能的实现。

可以通过编写小型的实例程序来熟悉这些控件和功能的使用方法。

三、VB的面向对象编程面向对象编程(OOP)是现代编程语言中的重要概念之一,也是VB编程的核心。

在VB中,我们可以使用类、对象、继承、封装等OOP的特性来实现更加灵活和可维护的代码。

因此,我们需要了解类的定义和使用、对象的创建和调用、继承和多态等概念。

可以通过编写简单的类和对象来加深对这些概念的理解。

四、VB的调试和错误处理在编程过程中,调试和错误处理是必不可少的环节。

VB提供了丰富的调试工具和错误处理机制,帮助我们快速定位和解决问题。

例如,可以使用断点来逐行调试程序,查看变量的值和执行流程;可以使用异常处理来捕获和处理程序运行中的异常。

熟练掌握这些调试和错误处理的技巧,可以提高程序的质量和效率。

五、VB的实践和项目开发学习VB不仅仅是为了掌握语法和知识,更重要的是能够应用到实际项目中。

因此,我们需要进行一些实践和项目开发。

可以选择一些简单的项目,例如制作一个学生管理系统、一个简单的游戏或者一个界面友好的计算器等。

VB串口编程,comm资料

VB串口编程,comm资料

使用 Communications 控件Communications 控件可以用来提供简单的串行端口通讯功能,也可以用来创建功能完备(full-featured)、事件驱动的高级通讯工具。

Communications 控件Communications 控件提供了一系列标准通讯命令的使用界面。

使用它可以建立与串行端口的连接,通过串行端口连接到其它通讯设备(例如调制解调器),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。

用途●拨打电话号码。

●监视串行端口的输入数据。

●创建功能完备的终端程序。

示例应用程序:Dialer.vbp 和 VBTerm.vbpDialer.vbp 和 VBTerm.vbp 示例应用程序位于 Visual Basic CD-ROM 的 ProgramFiles\Microsoft Visual Studio\Common\Samples\vb directory 目录中,它们分别演示了 Communications 控件的简单编程技术和复杂编程技术。

串行通讯的基本知识每台计算机都提供了一个或多个串行端口。

它们被依次命名为:COM1、COM2 等等。

在标准的 PC 中,鼠标通常被连接到 COM1 端口。

调制解调器可能连接到 COM2,扫描仪被连接到 COM3,等等。

串行端口提供了计算机与这些外部串行设备之间的数据传输通道。

串行端口的本质功能是作为 CPU 和串行设备间的编码转换器。

当数据从 CPU 经过串行端口发送出去时,字节数据被转换为串行的位。

在接收数据时,串行的位将被转换为字节数据。

要完成数据的传输,还需要进一步一个解释层。

在操作系统一边,Windows 使用了通讯驱动程序 Comm.drv,以便使用标准的 Windows API 函数发送和接收数据。

驱动程序通常由串行设备制造商提供,以便将其硬件与 Windows 连接。

在使用 Communications 控件时,实际上使用了 API 函数,API 函数将被 Comm.drv 解释并传输给设备驱动程序。

利用VB实现串口通信

利用VB实现串口通信
计算机测控系统安装与调试
利用 VB 实现串口通信
工作任务一 VB 的初步学习
【学习目的】
1.熟悉 Visual Basic 的基本概念。 2.掌握 Visual Basic 常用的语句。
【技能目标】
能初步使用 Visual Basic。
【相关知识】
知识一.Visual Basic
Visual Basic(简称 VB)是微软公司推出的一种可视化的、面向对象的结构化高级程 序设计语言,是当今世界上应用最广泛的编程语言之一,它也被公认为是编程效率最高的一 种编程语言。无论是开发功能强大、性能可靠的商务软件,还是编写能处理实际问题的实用 小程序,VB 都是最快速、最简便的语言。它简单易学、容易掌握,软件界面设计非常便捷, 编程工作量较小,开发周期短,特别适合非计算机专业的工程技术人员掌握和使用。
2
计算机测控系统安装与调试
Else If <语句> Else <语句> End If
4.选择语句 用了过多的 Else 后你会感到很不方便,而且程序结构也不清晰,所以 VB 中还有选择语 句帮助解决这个问题。 VB 中的选择语句的格式是这样的: Select Case <变量名> Case <情况 1> <语句> Case <情况 2> <语句> …… Case <情况 n> <语句> Case Else <语句> End Select 其中:<变量名>可以是数值型或字符串型,而每个 Case 指定的<情况>的数据类型必须 与<变量名>的类型一致。 5.循环语句 循环结构是计算机语言里一种重要的结构,它的应用广泛,最简单的例子是累加器的作 用,更直观的例子是把某件事重复指定次数,这样就不用把要重复的语句输入多次,而通过 循环结构完成,非常方便。循环是指在指定的条件下多次重复执行一组语句。被重复执行的 一组语句称为循环体。VB 提供了 4 种结构形式的循环语句: (1)For ... Next 语句 C 语言里有一个“for”循环语句,VB 里也有“For”关键字,作用也差不多,只是 VB 的“For”语句更容易理解。它的格式是: For <循环变量>=<初赋值> To <终值> [Step <步长>] 循环体 [Exit For] Next <循环变量> <循环变量>必须为数值型。默认时,<步长>值为 1,<初赋值>小于<终值>。当开始执行 For 语句时,首先将<循环变量>初始化为<初赋值>,程序每循环一次,<循环变量>增 1,直 到<循环变量>到达<终值>时为止。 注意:在默认情况下,Step 被设为“1”,可以省略,Step 也可以设为负值,例如: Dim a=0 For I=1 To 10 a=a+I Next I 这是一个最简单的累加器的例子,把 1 到 10 累加在一起,然后赋值给“a”。下面的效

VB中串口通讯的实现详解说明

VB中串口通讯的实现详解说明

VB中串口通讯的实现详解说明在VB中实现串口通讯可以分为以下几个步骤:1.引用串口通讯相关的命名空间首先在项目中引用System.IO.Ports命名空间,该命名空间包含了实现串口通讯所需的类和方法。

2.创建串口对象使用SerialPort类创建一个串口实例,可以指定串口的名称、波特率、数据位、停止位、校验位等参数。

```vbDim serialPort As New SerialPortserialPort.PortName = "COM1"serialPort.BaudRate = 9600serialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Parity = Parity.None```3.打开串口使用Open方法打开串口,可以在Open之前先判断串口是否已经打开。

```vbIf serialPort.IsOpen Then'串口已经打开ElseserialPort.OpenEnd If```4.串口数据接收通过事件处理函数来处理串口接收到的数据。

可以使用DataReceived事件来处理数据接收,当串口接收到数据时会触发该事件。

```vbPrivate Sub SerialPort_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles serialPort.DataReceived Dim data As String = serialPort.ReadExisting'处理接收到的数据End Sub```5.串口数据发送通过串口的Write方法来发送数据。

```vbserialPort.Write("Hello World")```需要注意的是,串口通讯是一种异步操作,发送和接收数据都需要一定的时间,因此在程序中需要合理处理串口的状态。

VB知识点概述与复习

VB知识点概述与复习

VB知识点概述与复习VB(Visual Basic)是一种简单易学的编程语言,其核心思想是可视化编程,即通过拖拽控件和编写简单的代码来进行软件开发。

本文将对VB的知识点进行概述和复习。

1.VB的基本语法:VB的基本语法类似于英语,具有以下特点:-语句以换行符或冒号结束。

- 使用关键字定义变量、常量和函数,如Dim、Const、Function等。

-使用&和+进行字符串连接。

- 使用If、Then、Else等关键字进行条件判断。

- 使用For、While等关键字进行循环操作。

2.VB的数据类型:VB支持多种数据类型,包括整型、浮点型、字符型、布尔型等。

需要注意的是VB是一种变体安全的语言,可以在编译器中设置变体检查的级别。

3.VB的控件:4.VB的事件处理:VB的控件可以响应用户的鼠标点击、键盘输入等事件。

通过编写事件处理代码来实现相应的功能。

常用的事件有Click、TextChanged、KeyPress等。

5.VB的函数和子程序:可以使用Function和Sub关键字定义函数和子程序,用于封装重复使用的代码。

函数可以返回一个值,而子程序不返回值。

可以通过参数传递数据给函数和子程序。

6.VB的数组:VB支持一维和多维数组,在数组中存储多个相同类型的元素。

可以使用For循环遍历数组,并对数组中的元素进行操作。

7.VB的文件操作:可以使用VB进行文件的读写操作。

通过使用Open、Close、WriteLine等关键字进行文件的打开、关闭和写入操作。

可以使用Line Input、EOF等关键字从文件中读取内容。

8.VB的异常处理:VB提供了Try...Catch...Finally结构来捕获和处理异常。

可以在Try块中编写可能引发异常的语句,在Catch块中处理异常情况,并在Finally块中进行清理操作。

9.VB的数据库操作:可以使用VB连接和操作数据库。

通过使用ADO(ActiveX Data Objects)或OLEDB(Object Linking and Embedding Database)来实现与数据库的交互。

VB串口通讯

VB串口通讯

1.VB编译坏境的安装与启动、熟悉;2.建立新的工程文件、并使用工具箱设计目标界面;3.使用LINE函数编写绘图功能的代码;4.使用TIMER和LINE功能实现动画设计;5.MSCOMM串口控件的初始化和编程,两台机器互连并通讯;6.利用VB编程得到的界面实现驱动器参数调试;7.利用VB编程得到的模拟示波器显示驱动器当前参数曲线;8.熟悉VB的代码调试,并完成驱动器参数调试和参数显示的功能。

最后一次课后每人交一份实验报告。

串口断口初始化Private Sub PortInitial() '中断形式的232口设置,没接受80个字符产生一次中断'On Error GoTo FinishSubWith Form9mPort = PortNumber.MSComm1.Settings = PortSet '设置通信口参数.MSComm1.InBufferSize = 1024 * 30 '设置MSComm1接收缓冲区为20K字节.MSComm1.OutBufferSize = 1024 '设置MSComm1发送缓冲区为1K字节.MSComm1.InputMode = comInputModeBinary '设置接收数据模式为二进制形式.MSComm1.InputLen = PutByte '设置Input 一次从接收缓冲读取字节数为50 .MSComm1.InBufferCount = 0 '清除接收缓冲区.MSComm1.OutBufferCount = 0 '清除发送缓冲区.MSComm1.RThreshold = ReceByte '设置接收一个字节产生OnComm事件.MSComm1.PortOpen = TrueEnd With'FinishSub:' MsgBox "请确认串行端口是否正常连接?", vbInformation, "串行端口连接问题" End Sub中断方式接收串口过来的数据并进行显示:在Private Sub MSComm1_OnComm()过程里通过232发送数据(非中断)是在Private Sub ModbusSendData(ByVal WorR As Boolean, ByVal Longth As Byte) 里Private Sub ModbusSendData(ByVal WorR As Boolean, ByVal Longth As Byte) '根据modbus协议发送数据程序Longth代表加上CRC总共长度从1 开始Dim sendbuffer() As Byte '发送缓冲区Dim ArrayModbusCheck() As Byte 'CRC校验数组Dim i As ByteDim j As ByteReDim sendbuffer(0)'设备号码ModbusSendBuffer(0) = 1 'DeviceNum'功能号码读写If WorR = True ThenModbusSendBuffer(FunctionBy) = WriteFunctionElseModbusSendBuffer(FunctionBy) = ReadFunctionEnd If'进行CRC校验'校验前赋值给函数形参数组长度下标从0----Longth-3ReDim ArrayModbusCheck(Longth - 3)j = 0For i = 0 To Longth - 3 Step 1ArrayModbusCheck(j) = ModbusSendBuffer(i)j = j + 1Next iCall CRC16(ArrayModbusCheck())ModbusSendBuffer(Longth - 2) = CRCHiCheckModbusSendBuffer(Longth - 1) = CRCLoCheck'以下是发送程序延迟1毫秒For i = 0 To Longth - 1 Step 1sendbuffer(0) = ModbusSendBuffer(i)MSComm1.Output = sendbufferDoDoEventsLoop Until MSComm1.OutBufferCount = 0delay (0.001)Next iEnd SubPrivate Sub CRC16(ByRef data() As Byte)Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器Dim CL As Byte, CH As Byte '多项式码&HA001Dim CRCLo As String, CRCHi As StringDim SaveHi As Byte, SaveLo As ByteDim i As IntegerDim Flag As IntegerCRC16Lo = &HFFCRC16Hi = &HFFCL = &H1CH = &HA0For i = 0 To UBound(data)CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或For Flag = 0 To 7SaveHi = CRC16HiSaveLo = CRC16LoCRC16Hi = CRC16Hi \ 2 '高位右移一位CRC16Lo = CRC16Lo \ 2 '低位右移一位If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1End If '否则自动补0If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或CRC16Hi = CRC16Hi Xor CHCRC16Lo = CRC16Lo Xor CLEnd IfNext FlagNext iCRCHiCheck = CRC16LoCRCLoCheck = CRC16HiEnd SubPrivate Sub PortInitial() '中断形式的232口设置,没接受80个字符产生一次中断'On Error GoTo FinishSubWith Form9mPort = PortNumber.MSComm1.Settings = PortSet '设置通信口参数.MSComm1.InBufferSize = 1024 * 30 '设置MSComm1接收缓冲区为20K字节.MSComm1.OutBufferSize = 1024 '设置MSComm1发送缓冲区为1K字节.MSComm1.InputMode = comInputModeBinary '设置接收数据模式为二进制形式.MSComm1.InputLen = PutByte '设置Input 一次从接收缓冲读取字节数为50 .MSComm1.InBufferCount = 0 '清除接收缓冲区.MSComm1.OutBufferCount = 0 '清除发送缓冲区.MSComm1.RThreshold = ReceByte '设置接收一个字节产生OnComm事件.MSComm1.PortOpen = TrueEnd With'FinishSub:' MsgBox "请确认串行端口是否正常连接?", vbInformation, "串行端口连接问题" End SubPrivate Sub MSComm1_OnComm()Dim buffer() As ByteDim num As ByteDim sum As Single '临时数据累加变量Dim h As Byte '临时数据累加变量Dim k As Byte '临时数据累加变量Dim i As Integer '临时数据累加变量Dim j As Integer '接受位置数据个数统计,上限32767Dim TempPos As Single '速度计算临时寄存器Dim nResult As IntegerDim numbertest As LongDim ModbusBuffer() As ByteDim StartPointNum As IntegerDim LoopSign As BooleanDim nowtime As DoubleDim TempVelocity1 As SingleDim TempVelocity2 As SingleDim VelocityStartPoint As Integer '计算速度数据开始点Dim n As IntegerDim NextTimePoint As SingleDim Adjust(1 To 2) As ByteDim Reverse As ByteDim HistoryV As SingleRefreshShapeTimes = RefreshShapeTimes - 1Select Case RefreshShapeTimesCase 1 To 5Shape3.Visible = TrueCase 6 To 10Shape3.Visible = FalseCase 0RefreshShapeTimes = 10End SelectSelect Case mEventCase comEvReceiveIf ModbusSign = False Then '非modbus数据MSComm1.RThreshold = 0j = 1 'j下标从1开始For num = 1 To 10 Step 1 '缓冲区中数据字节型数据变为位置编码器绝对值MSComm1.InputLen = 1buffer = MSComm1.InputIf buffer(0) = &HFD Or buffer(0) = &HFB Thenbuffer = MSComm1.InputIf buffer(0) = &HFD Or buffer(0) = &HFB ThenReverse = buffer(0)MSComm1.InputLen = 2buffer = MSComm1.Input '1PointP(j) = buffer(1)PointP(j) = PointP(j) * 256 + buffer(0)NowEncoderValue = PointP(j)If PointP(j) > Motor_Encoder_Num ThenMSComm1.RThreshold = ReceByteGoTo FinishSubEnd Ifbuffer = MSComm1.Input '2PointPRef(j) = buffer(1)PointPRef(j) = PointPRef(j) * 256 + buffer(0)buffer = MSComm1.Input '3PointI(j) = buffer(1)PointI(j) = PointI(j) * 256 + buffer(0)j = j + 1 'PointP()下标从1到PutByte/2 ElseMSComm1.RThreshold = ReceByteGoTo FinishSubEnd IfElse 'buffer(0)<>&HFD MSComm1.RThreshold = ReceByteGoTo FinishSubEnd If 'buffer(0)=&HFDNext numElse 'modbus形式接收'不做任何事情放数据过去GoTo FinishSubEnd IfCase ElseEnd Selectj = j - 1 'j多加一次If j < 1 Then GoTo FinishSub '为发送激发响应本次响应结束h = 1sum = 0'接受缓冲区中电机位置数据个数为j'以下程序为画图接受数据处理程序For i = 1 To j Step 1'依次对缓冲区中的数据进行判断位置'PointP(j)为编码器反馈的原始数据(没加圈数)PointP(i) = PointP(i) + rmin '反馈位置数据加上历史记载圈数'If PointP(i) - Historyp < -1 * 0.8 * Motor_Encoder_Num Then '判断是否正转加一圈位置数据'rmin = rmin + Motor_Encoder_Num'PointP(i) = PointP(i) + Motor_Encoder_Num + 1'ElseIf PointP(i) - Historyp > Motor_Encoder_Num * 0.8 Then '判断是否反转减一圈位置数据'rmin = rmin - Motor_Encoder_Num'PointP(i) = PointP(i) - Motor_Encoder_Num - 1'End IfIf Reverse = &HFD And PointP(i) - Historyp < -1 * 0.2 * Motor_Encoder_Num Then '正转rmin = rmin + Motor_Encoder_NumPointP(i) = PointP(i) + Motor_Encoder_Num + 1ElseIf Reverse = &HFB And PointP(i) - Historyp > Motor_Encoder_Num * 0.2 Thenrmin = rmin - Motor_Encoder_NumPointP(i) = PointP(i) - Motor_Encoder_Num- 1End If'电流实际位置位置偏差赋值PointDataP(ArrowPoint) = PointP(i) - Initial_Position'判断电流是否正数If PointI(i) > 16384 ThenPointDataI(ArrowPoint) = PointI(i) - 65536ElsePointDataI(ArrowPoint) = PointI(i)End If'判断位置偏差是否为负数0-65535 正转正值反转负值'If PointPRef(i) - HistoryPref > 32767 Then PointPRef(i) = HistoryPrefIf Reverse = &HFD ThenIf PointPRef(i) <= 32767 ThenPointDataPRef(ArrowPoint) = PointPRef(i)ElsePointDataPRef(ArrowPoint) = PointPRef(i) - 65536End If'PointDataPRef(ArrowPoint) = -PointDataPRef(ArrowPoint)ElseIf PointPRef(i) <= 32767 ThenPointDataPRef(ArrowPoint) = PointPRef(i)ElsePointDataPRef(ArrowPoint) = PointPRef(i) - 65536End If'PointDataPRef(ArrowPoint) = -PointDataPRef(ArrowPoint)End If'HistoryPref = PointDataPRef(ArrowPoint)PointV(i) = (PointP(i) - Historyp) * Drawing_ConstIf Abs(PointV(i) - HistoryV) > 3600 Then PointV(i) = HistoryV '前后两次采样速度变化过大滤波PointDataV(ArrowPoint) = PointV(i)HistoryV = PointV(i)'*****************保存位置历史数据为判断电机转过整数圈数准备********************Historyp = PointP(i)ArrowPoint = ArrowPoint + 1 '指针移动加一后面多加一If ArrowPoint > DrawMemory ThenArrowPoint = 1 '越界从1开始PointDataP(0) = PointDataP(DrawMemory) '方便以后画图PointDataV(0) = PointDataV(DrawMemory)PointDataPRef(0) = PointDataPRef(DrawMemory)PointDataI(0) = PointDataI(DrawMemory)End IfNext i'画图程序'触发条件时间If FirstReceive = True ThenHistoryTime = TimerFirstReceive = FalseEnd IfIf (Timer - HistoryTime > RefreshTime) And (StopSign = False) Then '判断是否该显示Shape1.RefreshDrawWidth = 2axisT = 2715'定起始数组坐标TraceTime = count_limitIf ArrowPoint - TraceTime < 0 ThenStartPointNum = DrawMemory - Abs(TraceTime - ArrowPoint) - 1ElseStartPointNum = ArrowPoint - 1 - TraceTimeEnd IfHistoryTime = TimerEnd If '显示条件Text1.Text = Str(Fix(PointDataV(ArrowPoint - 1))) '转速Text5.Text = Str(PointDataP(ArrowPoint - 1)) '脉冲数MSComm1.RThreshold = ReceByteFinishSub:Exit SubEnd Sub。

VB(11)第五章 串口通信方法与实现1

VB(11)第五章 串口通信方法与实现1

(9) InBufferSize 属性 语 法: MSComm1.InBufferSize [= Value] 设置或返回接收缓冲区大小。 作 用:设置或返回接收缓冲区大小。 类 型:Integer型 型 接收缓冲区的字节数, 取 值 : 接收缓冲区的字节数 , 默认值为 1024字节。 字节。 字节 InBufferSize 属性的最大值为:32767 属性的最大值为: 字节。 字节。 说 明 : InBufferSize 值应根据需要选 取。
(10) InputMode属性 属性 语 法: MSComm1.InputMode [=Value] 设置或返回接收数据的数据类型。 作 用 : 设置或返回接收数据的数据类型 。 类 型:Integer型 型 接收文本型数据; 取 值:0 - 接收文本型数据; 1 - 接收二进制数据。 接收二进制数据。 说 明:InputMode 属性决定 Input 属 性取回数据的格式是字符串还是二进制数据的 数组。 数组。
1 0 00110001 接收速度 0 1 0 0 1 1 1 0 原始信号 发送速度
2. 数据的传送单位(数据包含的位数) 数据的传送单位(数据包含的位数) 例如: 个起始位 例如:1个起始位 + 8个数据位 + 0个校验 个数据位 个校验 位 + 1个停止位 个停止位 数据格式共有10位 所以通信中最小的传 数据格式共有 位, 所以通信中最小的传 输单位是10位。 输单位是 位 每秒钟传输的字节数(波特率为9600bps, 每秒钟传输的字节数(波特率为 , 采用十位数据格式, 采用十位数据格式,则: 9600/10 = 960(字节 秒) (字节/秒 传输1M字节的数据,需要的时间为: 字节的数据, 传输 字节的数据 需要的时间为: 1000000/960 ≈ 17(分) ( 因此, 因此,串口通信通常用在数据量不是很大 的场合。 的场合。

VB与串口通信

VB与串口通信
Visual Basic 数据采集与串口通信测控应用实战
1 1 0
发 送 端
0
接 收 端
1 1 0 1
5-1
通信
数据 数据 数据 数据 2 串 通信 串 通信 通信 制 0 1 数据 用
数据 1 集 通信 通 数据信 5-2
5.1 串行接口简介
串行接口一般包括 RS232/422/485,其技术简单成熟,性能可靠,价格低廉;所要求的 软/硬件开发环境都很低,广泛应用于计算机及相关领域,如调制解调器(Modem) 、串行打 印机、各种监控模块、PLC、摄像头云台、数控机床、单片机及相关智能设备,甚至路由器 也不例外(通过串口设置参数) 。 在计算机测控系统中,主控机一般采用 PC 或 IPC,通过串口与测控模块相连,测控模 块再连接相应的传感器和执行器,如此形成一个简单的双层结构的计算机测控系统。这种结 构主要用于单独的中小型企业或部门,如果属于综合型企业或部门,如电力系统监控,高速 公路监控和收费系统,则可以此为基础结构进行扩充,用集线器将众多双层监控系统连接起 来,再用交换机将若干集线器连接起来,统一接上路由器,从而与 Internet 互联,如此即可 形成一个庞大的计算机测控网络。由此可见,尽管现代计算机的新接口层出不穷,各种网络 应用也日新月异,其规模也越来越大,但是,其基础结构却有不少是串行通信系统,串行通 信也成了其中的核心技术。
送,按照数据流的方向可分成 3 种传送模式:单工、半双工和全双工。 (1)单工形式。 单工形式的数据传送是单向的。通信双方中,一方固定为发送端,另一方则固定为接收 端。信息只能沿一个方向传送,使用一根传输线。如图 5-3 所示。
接 发 送 器 器 收
ቤተ መጻሕፍቲ ባይዱ

VB串口通讯详解

VB串口通讯详解

一、VB串行通信利用VB开发通信程序主要的方法有两种:一是利用VB本身提供的控件(CONTRALS);另一种方法是利用Windows API应用程序接口。

Windows API 主要提供了三个动态连接库(KERNEL.EX E、USER.EX E、GDI.EX E)供开发人员调用,其中KERNEL.EX E 主要包括一些底层操作函数,完成一些资源管理、任务、内存等操作;USER.EX E包含了一些与Windows管理有关的函数,如通信、菜单、消息、光标、插入符、计时器以及绝大多数非显示函数;GDI.EX E图形设备接口库,主要内容为与设备输出有关的函数。

和串口通信有关系的函数BuilidCommDCB、ClearCommBreak、SetCommBreak、FlushComm、GetCommError、GetCommState、WriteComm、ReadComm、SetCommState、CloseComm等均在\Windows\system 子目录下的USER.EX E动态连接库中,在VB调用之前应该先在全局变量定义处声明API通信函数、定义常量。

在VB的控件工具箱中,提供了一个使用非常方便的串行通信控件MSComm,它提供了一个事件OnComm,该事件可以截取串口的任何消息,转入事件处理程序。

OnComm事件是唯一的,OnComm可以捕获通信时发生的串口事件和错误信息,当有串口事件或错误发生时,VB会立刻触发一个OnComm 事件,程序就会自动转入OnComm事件处理程序中。

CommEvent属性是OnComm事件的指示器,该属性在设计时不能使用,在程序运行时为只读,CommEvent 属性存有最近的事件或错误的数值代码,可以在程序中随时读取CommEvent 属性值来了解通信的状况,OnComm事件是和CommEvent属性密切相关、一起使用,当任何一个OnComm 事件或错误发生时,都会使得CommEvent属性值改变,在OnComm事件处理过程中,可以通过判断CommEvent属性值,对于不同的属性值转入不同的事件处理过程,一般采用的办法是SELECT CASE.......END SELECT。

VB串口通信详解

VB串口通信详解

VB串口通信目前,Visual Basic (简称VB)已成为WINDOWS 系统开发得主要语言,以其高效、简单易学及功能强大得特点越来越为广大程序设计人员及用户所青睐。

VB 支持面向对象得程序设计,具有结构化得事件驱动编程模式并可以使用无限扩增得控件。

在VB 应用程序可以方便地调用WINDOWS API函数,使得编程效率提高,应用功能增强。

利用VB 提供得这些功能,我们可以有三种方法完成串口通信。

一种就是用VB 提供得具有强大功能得通信控件;另一种方法就是调用WINDOWS API 函数,使用WINDOWS 提供得通信函数编写移植性强得应用程序;第三就是利用文件得输入/ 输出完成,该方法简便易行,但有一定得局限性。

一、利用通信控件(MSCOMM)完成串口通信VB 提供了通信控件MSCOMM,文件名为MSCOMM、VBX。

该控件可设置串行通信得数据发送与接收,对串口状态及串行通信得信息格式与协议进行设置。

在通信过程中可以触发OnComm事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问CommEvent 属性来了解通信得情况,进行收发数据得处理。

每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。

1、通信控件得事件及基本属性(1)事件OnComm:通信控件只提供了一个事件,该事件得触发可以对串口得通信事件及错误进行处理。

通过对CommEvent 属性得判断可知当前得通信错误与事件,分别对每个CommEvent 值进行编程就完成了对各个错误与事件得处理。

如:CommEvent = MSCOMM—EV—SEND 表示发送事件。

这些信息可从VB 提供得常量文件CONSTANT、TXT中查出。

(2)属性CommPort :设置通信控件与哪个串口相连接,设置并返回通信口号。

Setting :设置通信得信息格式,为字符型。

顺序为:波特率、校验、数据位、停止位。

PortOpen :布尔型、开关通信口。

vb 串口 二进制

vb 串口 二进制

vb 串口二进制VB中的串口通信及二进制数据处理一、VB中的串口通信1. 什么是串口通信?在计算机领域,串口是指一种串行接口,用于将数据以连续的比特流的形式传输。

串口通信是指通过串口进行数据传输的过程。

2. VB中如何进行串口通信?VB提供了MSComm控件,可以方便地进行串口通信。

使用该控件需要进行以下步骤:(1)在工具箱中找到MSComm控件并拖放到窗体中。

(2)设置MSComm控件的属性,包括端口号、波特率、数据位、校验位和停止位等。

(3)编写代码实现打开、关闭、发送和接收数据等功能。

3. VB中如何打开和关闭串口?打开和关闭串口可以使用MSComm控件的Open和Close方法实现。

例如:Private Sub cmdOpen_Click()MSComm1.PortOpen = TrueEnd SubPrivate Sub cmdClose_Click()MSComm1.PortOpen = FalseEnd Sub4. VB中如何发送和接收数据?发送和接收数据可以使用MSComm控件的Output和Input方法实现。

例如:Private Sub cmdSend_Click()MSComm1.Output = "Hello World"End SubPrivate Sub MSComm1_OnComm()If mEvent = comEvReceive ThenMsgBox MSComm1.InputEnd IfEnd Sub二、VB中的二进制数据处理1. 什么是二进制数据?在计算机领域,二进制是一种用0和1表示的数字系统。

在数据传输和存储中,经常使用二进制来表示数据。

2. VB中如何处理二进制数据?VB提供了一些函数和方法,可以方便地进行二进制数据的处理。

以下是常用的函数和方法:(1)ChrB函数:将一个字节转换为字符。

(2)AscB函数:将一个字符转换为字节。

(3)StrConv函数:进行字符串编码转换,包括Unicode、ASCII、UTF-8等编码方式。

计算机二级VB基础VB串口的基础知识

计算机二级VB基础VB串口的基础知识

一个简单接收的程序Dim inputstr As StringPrivate Sub Command1_Click()If MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueEnd IfEnd SubPrivate Sub Command2_Click()List1.ClearEnd SubPrivate Sub Form_Load()Timer1.Enabled = FalseWith MSComm1.CommPort = 1 ’使用COM2.Settings = "9600,N,8,1" ’设置通信口参数.InBufferSize = 40’设置MSComm1接收缓冲区为40字节.OutBufferSize = 2’设置MSComm1发送缓冲区为2字节’.InputMode = comInputModeBinary’设置接收数据模式为二进制形式.InputLen = 1’设置Input 一次从接收缓冲读取字节数为1.SThreshold = 1’设置Output 一次从发送缓冲读取字节数为1 InBufferCount = 0 ’清除接收缓冲区.OutBufferCount = 0 ’清除发送缓冲区.RThreshold = 1’设置接收一个字节产生OnComm事件If .PortOpen = False Then’判断通信口是否打开.PortOpen = True ’打开通信口If Err Then ’错误处理MsgBox "串口通信无效"Exit SubEnd IfEnd IfEnd WithEnd SubPrivate Sub MSComm1_OnComm()Select Case mEventCase comEvReceiveav = MSComm1.InputText2.Text = Text2.Text & " " & Asc(av)’Timer1.Enabled = TrueIf av >= 0 And av <= 9 Theninputstr = inputstr & avElseText3.Text = Text3.Text & inputstr & "*"Text1.Text = Asc(av)If Len(inputstr) <> 14 Thenresponse = MsgBox("条码格式不正确,取消格式限制请按“是”,否则按“否”,退出程序按“取消”数据长度=" & Len(inputstr) & " " & inputstr, vbY esNoCancel, "条码格式")List1.AddItem (inputstr)inputstr = ""MSComm1.InBufferCount = 0ElseList1.AddItem (inputstr)inputstr = ""MSComm1.InBufferCount = 0End IfEnd IfEnd SelectEnd SubPrivate Sub Timer1_Timer()Dim inputstrTimer1.Enabled = Falseinputstr = MSComm1.InputList1.AddItem (inputstr)End Sub。

总结串口通信知识点

总结串口通信知识点

总结串口通信知识点1. 串口通信的基本原理串口通信是一种通过串行传输数据的方式进行数据交换和控制的通信方式。

串口通信的基本原理是将数据逐位地传输,以及通过时序控制来实现数据同步。

串口通信将数据分为一个个的比特,通过逐位地传输数据来完成数据交换。

串口通信一般使用一对差分信号线(TX和RX线)来进行数据传输,其中TX线用于发送数据,RX线用于接收数据。

串口通信通过按照一定的协议对数据进行封装和解封装,从而实现数据的有效传输和同步。

2. 串口通信的协议和协议栈串口通信协议是串口通信中用于规定数据传输格式和传输控制的一种规范。

串口通信协议包括物理层、数据链路层、网络层和传输层等不同层次的协议。

其中,物理层协议用于规定传输时的物理介质和物理信号的特性,数据链路层协议用于规定数据帧的格式和流控制、差错控制等功能,网络层协议用于规定数据包的路径选择和数据传输,传输层协议用于规定数据传输的可靠性、流控制和差错控制等功能。

串口通信的协议栈通常包括串口通信物理层、串口通信数据链路层、串口通信网络层和串口通信传输层等多个层次的协议。

这些协议在串口通信中起着不同的作用,包括规定数据传输的物理介质、物理信号的特性、数据帧的格式、流控制、差错控制、路径选择、数据传输可靠性、流控制和差错控制等功能。

3. 串口通信的硬件接口串口通信的硬件接口是串口通信中用于连接各种设备的接口。

串口通信的硬件接口通常包括RS-232、RS-485、RS-422、TTL等多种接口。

其中,RS-232是一种串口通信的标准接口,用于连接计算机和外围设备;RS-485是一种串口通信的差分信号接口,用于连接多台设备进行数据传输;RS-422是一种串口通信的差分信号接口,用于连接两台设备进行数据传输;TTL是一种串口通信的低压差动信号接口,用于连接嵌入式系统和外围设备。

串口通信的硬件接口在连接设备和传输数据时起着重要的作用。

4. 串口通信的软件编程串口通信的软件编程是串口通信中用于实现数据传输和控制的软件程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串口基本概念与串口调试1. 串口的定义:串口即串行接口的简称。

CPU 与外设连接的接口电路称为I/O 口,串口是I/O 口的一种,采用串行通信协议在一条信号线上将数据逐位传输的通信模式,所以又称“串行通信接口。

2. 数据传输方式:串行通信(同步&异步)、并行通信。

3. 同步通信:指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致,这就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

4. 异步通信:5. 异步通信特点: a) 时钟要求不高,硬件成本低; b) 在不同传输系统中,通信格式设定可完全不同; c) 通信速率较慢; d) 依靠起始位和停止位可以到达同步;6. 数据编码的方式:不归零编码(NRZ )、曼彻斯特编码、差分曼彻斯特编码。

7. 数据调制方式:幅移键控(ASK )、频移键控(FSK )、相移键控(PSK )。

8. 调幅方式:a) TTL 标准:+5v ——“1”,0v ——“0”(正逻辑); b) RS-232标准:-3V~-15V ——“1”,+3V~+15V ——“0”;(负逻辑); c) 20mA 电流环:存在20mA 电流为“1”,不存在为“0”; d) 60mA 电流环:存在60mA 电流为“1”,不存在为“0”; 9. 数据传送方式:单工、半双工、全双工。

10. 数据传送速率:a) 码元速率(R B )单位:波特/秒(baud/S )波特率;R B =log 2N (N 为编码级数); b) 信息速率(R b )单位:比特/秒(Bit/S )比特率;R b =log 22;R B /R b =log 2N /log 22=log 2N (计算机中编码级数为2,比特率等于波特率)c) 位时间(位周期):传送一个二进制位所需时间;T d =1波特/波特率11. 发送时钟与接收时钟: a) 公式:F =n ×Bb) F —发送时钟频率(Hz );B —数据传输的波特率(Baud/s );n —波特率因子(Baud -1); c) 发送/接收时钟周期:T c =1/F =T d /n ;12. 串口接头类型:9针串口(DB-9)、25针串口(DB-25)13. 串口接线:接收接发送、发送接接收、信号地相连(25为7脚,9为5脚。

) 14. 串行通信特点:接线少、成本低。

15.串口连接线种类: a) 串口直连线;一公一母;发发/收收(延长) b) 串口交叉线;双公/双母;收发/发收(双机通信) 16. RS-232C : a) 全称:EIA-RS-232C (EIA :美国电子工业协会;RS :推荐标准)b) 全名:数据终端设备和数据通信设备之间串行二进制数据交换接口标准 c) 电气特性:i. RxD/TxD 上为1负0正; ii. RTS 、CTS 、DSR 、DTR 、DCD 上有效为正,无效为负17. 串口调试的内容:a) 认识串口连接线和制作串口连接线;b) 采用相应串口调试工具软件对所使用的串口进行诊断。

18. 串口参数的设置:波特率、数据位、停止位和校验位。

MSComm 控件1. MSComm 控件处理通信问题的方式2. 握手协议(Handshaking 属性):指从硬件端口向接收缓冲区发送数据时所用的内部通信协议。

3. MSComm 常用属性: a) CDHdcding :查询CD 线是否有传输(布尔型); b) CommPORT :返回端口号(整型1~16); c) CTSHoding :查询CTS 线的状态发送数据,指示传输可进行; d) DSRRcoding :查询DSR 线状态,指示做好操作准备;e) InputBufferSize :设置/返回接收缓冲区大小,以字节数为单位(默认1024) f) Input :返回并删除接收缓冲区中的数据流i. InputLen (读取字符数)=0 读取缓冲区的全部内容 ii. InputMode (检索数据类型)=commInputModeText 返回校本文本数据 iii. InputMode (检索数据类型)=commInputModeBinary 返回二进制数据 g) OutputBufferSize :设置/返回发送缓冲区大小,以字节数为单位(默认512) h)Output :往输出缓冲区写数据流 4. 产生OnComm 事件:a) CD 线为高(CDHolding=Ture )且超时,MSComm 控件中commEvent 属性设为commEventCDTO; b) CTS 线为低(CTSHolding=False )且超时,MSComm 控件中commEvent 属性设为commEventCTSTO; c) DSR 线为高(DSRHolding=Ture )且超时,MSComm 控件中commEvent 属性设为commEventDSRTO; d) 找到EOF 字符,MSComm 控件中commEvent 属性设为commEvEOF;e) RThreshold 属性设置为1,接收缓冲区每收到一个字符产生一次OnComm 事件;f) SThreshold 属性设置为1,发送缓冲区清空产生OnComm 事件,设为其它值,字符数交叉时激活一次; 5. CommEvent 属性:一旦发生通信事件或产生通信错误,依据产生的错误和事件MSComm 控件为CommEvent属性赋予不同的代码,并产生OnComm 事件。

串口调试软件开发1. 程序错误分为两类:编译错误、运行期间错误。

2. 两个编译选项:请求编译、后台编译。

3. Err 对象:属于运行期对象,包含最新关于错误的信息。

4. 捕获错误语句(on Error ):a) On Error GoTo line :转到line 执行错误处理语句。

b) On ErrorResume Next :忽略所有错误,从发生错误语句下一语句执行。

c) On Error GoTo 0:禁止当前过程中任何已启动的错误处理程序。

5. 退出错误处理语句(Resume ):a) Resume[0]:如果产生错误和处理错误程序出现在同一程序中,则从产生错误的语句恢复运行;如果错误出现在被调用过程中,则从最近一次调用包含错误处理程序的过程中的语句处恢复运行b) Resume Next :如果产生错误和处理错误程序出现在同一程序中,则从紧随产生错误的语句的下个语句恢复运行;如果错误出现在被调用过程中,则返回最后一次调用包含错误处理程序的过程,从紧随该句之后的语句处恢复运行c) Resume 标号:程序返回到标号处继续执行发送接收字符型数据程序:Private Sub CmdOpenPort_Click()mPort=1(设置串口号为1)MSComm1.PortOpen=TURE(打开串口)MSComm1.InputMode=comInputModeT ext(以字符输入)MSComm1.InputLen=0(从缓冲区输入所有字符)End SubPrivate Sub CmdSend_Click()MSComm1.Output=TxtSend.Text(将发送框的数据送入输入缓冲区) End SubPrivate Sub CmdReceive_Click()TxtReceive.Text=MSComm1.Input(将输入缓冲区字符读入接收框中) End Sub将用户键入的每个字符送到串行端口: Option ExplicitDim Buffer As VariantDim InString As StringPrivate Sub Form_Load()Form1.AutoReadraw=TruemPort=1(设置串口号为1)MSComm1.Setting="9600,N,8,1"(设置波特率)MSComm1.PortOpen=TURE(打开串口)Timer1.Interval=10(设置定时器为10ms)End SubPrivate Sub Form_KeyPress(KeyAscii As Interger)Buffer=Chr$(KeyAscii)(将输入的字符转化为字符型)MSComm1.Output=Buffer(将Buffer内的内容放入输出缓冲区) End SubPrivate Sub Timer1_Timer() If MSComm1.InBufferCount Then(如果检测到输入缓冲区有字符输入)InString=MSComm1.InputPrint InStringEnd IfEnd Sub保存数据文件:Private Sub CmdSaveData_Click()On Error GoTo ErrLineDim SaveFileId As IntegerDim I As IntegerDim FileCount As Integer(定义相同文件名称的统计)Dim StrFileName As String(定义存储文件名)FileCount = 0SaveFileId = FreeFile()(取得可以打开的文件编号)(以指定名字为文件名建立存储数据文件)StrFileName = App.Path + "\" + "数据文件_" + CStr(Year(Date)) + "年" + CStr(Month(Date)) + "月" + CStr(Day(Date)) + "日_" + CStr(FileCount) + ".txt"Do While Dir(StrFileName) <> ""(指定文件名存在)FileCount = FileCount + 1(文件记数器加1)StrFileName = App.Path + "\" + "数据文件_" + CStr(Year(Date)) + "年" + CStr(Month(Date)) + "月" + CStr(Day(Date)) + "日_" + CStr(FileCount) + ".txt"LoopOpen StrFileName For Output As #SaveFileId (打开指定文件用于存储接收到的数据)(保存文件头)Print #SaveFileId, "日期: ";Print #SaveFileId,Date(向应用程序目录下的保存文件输出日期)Print #SaveFileId, "时间: ";Print#SaveFileId, Time(向应用程序目录下的保存文件输出时间)Print #SaveFileId, TxtReceive.Text(向应用程序目录下的保存文件输出要保存的内容)Close#SaveFileId(关闭文件)。

相关文档
最新文档