设计与开发

vb与单片机串口通信 VB串口通信

小编 2024-11-24 设计与开发 23 0

VB串口通信

描述

  上位机是指可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。简言之如此,实际情况千差万别,但万变不离其宗:上下位机都需要编程,都有专门的开发系统。

  上位机工作原理

  两机如何通讯,一般取决于下位机,TCP/IP一般是支持的,但是下位机一般具有更可靠的独有通讯协议,购买下位机时,会带一大堆手册光盘,告诉你如何使用特有协议通讯,里面会举大量例子,一般对编程人员而言一看也就那么回事,使用一些新的API(API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节罢了,多语言支持功能模块,一般同时支持数种高级语言为上位机编程。

  通常上位机和下位机通讯可以采用不同的上位机示例图片通讯协议,可以有RS232的串口通讯或者采用RS485串行通讯。当用计算机和PLC通讯的时候,不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的PROFIBUS-DP通讯。采用封装好的程序开发工具就可以实现PLC和上位机的通讯,当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。

  通常工控机,工作站,触摸屏作为上位机,通信控制PLC,单片机等作为下位机,从而控制相关设备元件和驱动装置。

  上位机开发的软件

  1、visual studio 2008

  Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2005的一次及时、全面的升级。

  VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用程序。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。

  2、MFC

  是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

  3、Qt

  Qt[1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。

  4、GTK

  GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。并且,GTK+也有Windows版本和Mac OS X版。

  5、wxWidgets

  wxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。开源跨平台, 和 CodeBlocks (开源跨平台的IDE)配合的很好, 而且可以用 wxSmith 很方便的设计界面。 而且学过MFC上手 wxWidgets 很快。

  上位机快速开发教程

  (1)准备工作

  一台装有VS2010的计算机,用于测试的虚拟串口软件。同时你必须具有VB基础知识,这个VB上位机开发是入门级的,仅将VB.NET通信基础方法稍作介绍。

  (2)串口通信常识

  在串口通信中,通过编写单片机程序知道,我们应对如下参数进行设置:波特率、数据位和停止位、奇偶校验位。如果自己编写上位机的时候,我们考虑的不能仅仅是这些了,下面介绍上位机开发过程中需要特别注意的知识点。

  MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。

  常用属性和方法

  利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。以下是MSComm控件的常用属性和方法:

  ●Commport:设置或返回串口号。其值从COM1到COM16。

  ●Settings:以字符串的形式设置或返回串口通信参数。

  ●Portopen:设置或返回串口状态。

  ●InputMode:设置或返回接收数据的类型。有文本和二进制两种类型。

  ●Inputlen:设置或返回一次从接收缓冲区中读取字节数。

  ●InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。

  ●InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。

  ●Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。

  ●OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。

  ●OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。

  ●Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。

  ●Rthreshold:该属性为一阀值。当接收缓冲区中字符数达到该值时,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:这是一个非常重要的属性。该属性设计时无效,运行时只读。一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理。

  (3)开发步骤(仅供参考)

  1. 运行VS2010,新建一个Visual Basic的Windows窗体应用程序项目。将窗体的StartPosition属性改为CenterScreen,运行程序时,窗体在屏幕中央显示。

  2. 由于默认情况下,通信所需的“Microsoft Communications Control,version 6.0”组件不在工具箱里面,所以我们需要手动添加。单击左侧的工具箱,并在控件栏单击鼠标右键,在弹出的菜单中选中“选择项”,在弹出的对话框中单击“COM组件”并选中“MicrosoftCommunications Control,version 6.0”,单击确定即可完成添加。

  此时移动鼠标到窗体上时,鼠标箭头就会变成电话的形状,在窗体任意位置单击放置该控件。

  3. 单击工具箱,在窗体上添加5个Label,并在属性里将Text属性依次改为:串口号、波特率、校验、数据位、停止位。再向窗体上添加5个ComboBox,从上到下依次排列。 4. 向窗体添加一个OvalShape和一个Button。将OvalShape的size属性改为“24,24”,FillStyle改为Solid。

  5. 向窗体添加一个CheckBox、一个按钮Button和一个TextBox,将CheckBox的Text属性改为“十六进制发送”将这个按钮的text属性改为“发送”。

  6. 向窗体添加一个Label和一个TextBox。更改Label的Text属性为“接收区”。 7. 向窗体添加一个CheckBox,将其Text属性改为“十六进制显示”

  下面将要对部分控件进行设置,这样可以减少代码的长度 将波特率一栏ComboBox的Item属性中添加如下内容:

  将校验一栏ComboBox的Item属性中添加如下内容

  将数据位一栏ComboBox的Item属性中添加如下内容

  将波特率一栏ComboBox的Item属性中添加如下内容

  四、源代码

  Public Class Form1 Dim cpSetting As String

  Dim com_last_num As Integer = 0 ‘定义一个全局变量,作用为记录上一个串口号 Sub GetSerialPortNames() ’搜索计算机中所有可用串口函数 On Error GoTo eRRHND ‘错误处理 ’搜索计算机中可用串口

  For Each sp As String In My.Computer.Ports.SerialPortNames ComboBox1.Items.Add(sp) Next

  ComboBox1.Sorted = True

  ComboBox1.SelectedIndex = 0 ‘选择搜索到的第一个串口名称 Exit Sub

  eRRHND: ’表示未搜到串口 MsgBox(“Oh, NO!”) End Sub

  ‘检测串口是否可用函数

  Private Function Test_COM(ByVal com_num As Integer) As Boolean

  If com_num 《》 com_last_num Or Button1.Text = “打开端口” Then ’如果选择的端口跟上次一样就不检测了

  On Error GoTo Comm_Error

  AxMSComm1.CommPort = com_num ‘将新串口号赋给ComPort

  AxMSComm1.PortOpen = True ’打开串口

  AxMSComm1.PortOpen = False ‘关闭串口

  Test_COM = True ’串口可用则返回

  Exit Function

  Comm_Error: ‘根据错误号作出相应处理 If Err.Number = 8002 Then

  MsgBox(“串口错误,请重新选择串口”, vbOKOnly, “错误提示!”) ElseIf Err.Number = 8005 Then MsgBox(“串口已打开!”) Else

  MsgBox(“其它错误”) End If

  Test_COM = False ’如果出错,则返回0 Exit Function Resume Next End If End Function

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  ‘载入窗体初始化

  GetSerialPortNames() ’将搜到的串口在下拉菜单中显示出来

  AxMSComm1.InBufferSize = 1024 ‘接收缓冲区大小,此项无法在串口打开时进行设置 AxMSComm1.OutBufferSize = 1024 ’发送缓冲区大小 ComboBox2.Text = “9600” ComboBox3.Text = “无校验” ComboBox4.Text = “8” ComboBox5.Text = “1” ChangePortProperty()

  ‘设置接收数据的格式为二进制

  AxMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary AxMSComm1.InputLen = 0 ’设置从缓冲区读取全部数据 AxMSComm1.RThreshold = 1 ‘设置接收串口OnCommon事件 AxMSComm1.PortOpen = True ’打开串口 If AxMSComm1.PortOpen = True Then

  OvalShape1.FillColor = Color.Green ‘OvalShape颜色设为绿色 Button1.Text = “关闭端口” ’按钮上的文字显示为关闭端口 Else

  OvalShape1.FillColor = Color.Red ‘OvalShape颜色设为红色 Button1.Text = “打开端口” ’按钮上的文字显示为打开端口 End If End Sub

  ‘打开关闭串口代码

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim ptNum As Integer ’通过串口名称获取串口号

  If Len(ComboBox1.SelectedItem) 》 4 Then

  ptNum = Val(Microsoft.VisualBasic.Strings.Right(ComboBox1.Text, 2)) Else

  ptNum = Val(Microsoft.VisualBasic.Strings.Right(ComboBox1.Text, 1)) End If

  If AxMSComm1.PortOpen = False Then ‘如果串口是关闭的 If Test_COM(ptNum) = True Then ’如果选择的串口可用? ‘ ChangePortProperty()

  AxMSComm1.PortOpen = True ’则打开该串口

  Button1.Text = “关闭端口” ‘按钮上的文字显示为关闭端口 OvalShape1.FillColor = Color.Green ’OvalShape颜色设为绿色 End If Else

  AxMSComm1.PortOpen = False ‘关闭该串口

  OvalShape1.FillColor = Color.Red ’OvalShape颜色设为红色 Button1.Text = “打开端口” ‘按钮上的文字显示为打开端口 End If End Sub

  ’如下是访问网站的链接的代码,可以选择访问网站的浏览器,这里只使用默认的IE浏览器 Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked LinkLabel1.LinkVisited = True

  System.Diagnostics.Process.Start(“www.baidu.com/p/huzhiqianglz”) End Sub

  ‘处理发送数据的代码

  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

  Dim hexString() As Byte Dim source_Txt As String Dim i As Integer

  source_Txt = TextBox1.Text ’将要发送的数据存放到变量source_Txt中

  If CheckBox1.CheckState = CheckState.Checked Then ‘如果十六进制发送复选框被勾上 If Len(source_Txt) Mod 2 = 0 And Len(source_Txt) 《》 0 Then ’如果将要发送的数据长度不为或者能被2整除

  ReDim hexString(Len(source_Txt) / 2 - 1) ‘重新定义hexString数组 For i = 0 To Len(source_Txt) - 1 Step 2

  hexString(i / 2) = Val(“&H” & Mid(source_Txt, i + 1, 2)) ’将hexString转换成十六进制显示

  Next

  AxMSComm1.Output = hexString ‘将转换的数据发送到串口 Else ’否则提示格式不正确 MsgBox(“格式不正确!”) End If

  Else ‘否则输出字符串

  AxMSComm1.Output = TextBox1.Text

  End If End Sub

  Sub ChangePortProperty() Dim comSetting As String Dim parity As String = “” ‘关闭端口

  If AxMSComm1.PortOpen = True Then AxMSComm1.PortOpen = False End If ’获取串口号

  If Len(ComboBox1.SelectedItem) 》 4 Then

  AxMSComm1.CommPort = Val(Microsoft.VisualBasic.Strings.Right(ComboBox1.Text, 2)) Else

  AxMSComm1.CommPort = Val(Microsoft.VisualBasic.Strings.Right(ComboBox1.Text, 1)) End If ‘设置校验方式

  If ComboBox3.Text = “无校验” Then parity = “N”

  ElseIf ComboBox3.Text = “奇校验” Then parity = “O”

  ElseIf ComboBox3.Text = “偶校验” Then parity = “E” End If

  comSetting = ComboBox2.Text & “,” & parity & “,” & ComboBox4.Text & “,” & ComboBox5.Text

  ’串口设置格式:9600,N,8,1 AxMSComm1.Settings = comSetting End Sub

  ‘将十进制转换为16进制

  Private Function Decimal2Hex(ByRef c As String) As String Decimal2Hex = Hex(CInt(c)) If Len(Decimal2Hex) 《 2 Then

  Decimal2Hex = “0” & Decimal2Hex End If End Function

  ’串口号发生改变的处理程序

  Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged ChangePortProperty()

  End Sub

  Private ReadStr As String = “”

  Private Sub AxMSComm1_OnComm(ByVal sender As System.Object, ByVal e As System.EventArgs)

  Handles AxMSComm1.OnComm

  Dim i As Object

  Dim bytData As Object ‘用来从接收缓冲区读取数据

  Select Case AxMSComm1.CommEvent ’

  对接收事件进行处理

  Case MSCommLib.OnCommConstants.comEvReceive

  bytData = AxMSComm1.Input ‘将接收到的数据暂存 For i = 0 To UBound(bytData)

  If CheckBox2.CheckState = CheckState.Checked Then

  ReadStr = ReadStr & Decimal2Hex(CStr(bytData(i)))

  Else

  ReadStr = ReadStr & CStr(bytData(i))

  End If

  Next

  TextBox2.Text = ReadStr ’将转换后的数据在接收区显示

  End Select

  End Sub

  End Class

  五、程序中用到的几个函数解释

  Microsoft.VisualBasic.Strings.Right(String,Num):将字符串从右边开始截取字符串String中Num个字符。例如当String的值为“Welcome”,Num值为3,则该函数返回的值为字符串“ome”。另外通过将COM1拆分即可得到1,这是上例中得到得到串口号的方法。

  Val(String):将字符串类型转换为数值型。例如String为字符串“123”,则返回值为数值型123。 Hex(Integer):将整型数转换为16进制数。如:Integer为13,则返回十六进制的D

  其实有些函数看不懂也没关系,可能我介绍的不是很详细,有些资料上网查一下也很方便的,这里就不再多罗嗦了。

利用VB实现PC机与多单片机通讯

摘要:在Windows98下利用VB的串行通讯控件可实现PC机与多单片机之间的通讯。采用定时器控制大大加快了自动化进程,克服了往多“握手”协议造成的通讯速度缓慢的缺点。本文以PS1016单片机为例,详细介绍了PC机与单片机之间的串行通讯、数据的发送和接收。

关键词: 通讯 属性 事件

前言

在采用以PC机为控制中心的数据采集自动化控制系统中,通常需要单片机采集数据,然后用异步串行通讯方式传给PC机,PC对单片机进行定时控制,需要多个单片机协同工作。如果系统不很复杂,可通过定时器控件控制收发过程,在必要的地方自动接收装置,使定时控制和通讯过程完美地结合起来。这样,可以免去“握手”协议的繁琐过程,简化编程,提高速度。VB具有面向对象的设计方法,友好的用户界面,简单方便的串行通讯和实用性强等优点,无论借用其他语言就可以开发出优秀的控制系统通讯软件。本文介绍在Windows 98环境下如何利用VB来实现PC机与多个PS1016单片机之间的串行通讯。

VB环境下通讯程序的设计

VB提供了串行端口控制Mscomm来为应用程序提供串行通讯。该控件屏蔽了通信过程中的底层操作,程序员可以设置、监视Mscomm控件的属性和事件,结合Timer控件即可完成对串行口的初始化和数据的输入输出工作。Mscomm控件的主要属性如下:

(1)Commport 设置并返回通讯端口号。端口号可以设置为1~16的任何数,如Mscomm.Commport=2表示设置当前通讯端口为COM2。

(2)Setting 设置并返回波特率、奇偶校验、数据位、停止位。格式为Mscomm.Setting=String。String是一个包含四部分的字符串:第一部分为波特率;第二部分为奇偶校验,N表示不校验,M表示符号校验,E表示偶校验,O表示奇校验,S表示空格校验;第三部分为数据位数,其可选值为4,5,6,7,8;第四部分为停止位位数,其可选值为1,1.5,2。Setting属性的缺省值为“9600,N,8,1”。

(3)Portopen 设置并返回通讯端口的状态,也可以打开和关闭端口。

(4)Input 从接收缓冲区返回和删除字符。该属性在运行时为只读。

(5)InputLen 设置并返回每次Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时,Input将读取接收缓冲区的全部字符。

(6)Output 向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。

(7)CommEvent 返回最近的通讯事件或错误。只要有通讯错误或事件发生错误时就会产生Oncomm事件。CommEvent属性中存有该错误或事件的数值代码。

Timer控件的主要属性如下:

(1)Enabled 返回或设置一个值,该值用来确定一个窗体或控件否能够对用户产生的事件作出反应。通过把Enabled设置为“Galse”来使Timer控件成为无效,将取消由控件的Interval属性所建立的倒计时数。

(2)Interval 返回或设置对Timer控件的计时事件调用间的毫秒数。Timer控件的Enabled属性决定该控件是否对时间的推移作出响应。将Enabled设置为“False”会关闭Timer控件,设置为“True”则打开Timer控件。当Timer控件置为有效时,倒计时总是从其Interval属性设置值开始。创建Timer事件程序。可通知VB在每次Interval到时该做什么。Timer控件和Enabled属性设置为“True”时,VB将在Interval时间到后自动访问Timer_Timer过程。

为实现通讯程序,须在VB开发环境下设置一个用做控制通讯的窗体。窗体上主要有一个通讯控件Mscomml和两个Timer控件。VB的特点是事件驱动,定时器控件会定时触发相应事件的驱动程序。

1.发送单片机命令

为了使主机能够对整个检测过程进行实时控制,须要在发送命令以后设定等待的时间,也可以通过条件判断下一步是发达还是接收命令。对发送的命令,可能是文本方式或二进制代码。在发送二进制代码时,应特别注意发送的格式。

发送命令过程是一个带参过程,这样可使发送命令简便易行。具体程序如下:

Sub发送单片机命令过程(command As Byte)

Dim输出命令(1 To 1)As Byte

DoEvents

输出命令(1)=command

MSComm1.OutBufferCount=0

MSComm1.Output=输出命令

MSComm1.InBufferCount=0

End Sub

2.接收数据

接收数据是一个被动的过程,可以通过函数来实现,由定时器开启。在接收过程中,多数用特征字符,如“OK”、“#”等。这些需要在通讯协议中约定。

Function接收数据()

Do

DoEvents

In_buffer $=In_bufferamp;MSComm2.Input

Loop Until InStr(_buffer$,“OK”)'从串行端口读“OK”响应'

In_buffer=Left(In_buffer,len(In_buffer)-2)

接收数据=In_buffer$

End Function

3.Timer控件控制

通过Timer控件来控制通讯中的发送命令和接收数据过程,在通讯程序中设置两个Timer控件分别控制发送单片机命令和接收单片机数据。为了实现一台PC机和多单片机之间的通讯,可在一个Timer控件的过程中,在发送命令之前设定命令参数和要接收数据的单片机号,然后发送单片机命令;在另一个Timer控件的过程中,根据发送前设定的单片机号,接收不同单片机的数据。

Timer控件控制程序如下:

'发送命令主控程序

Privata Sub TimerSend_Timer()

TimerSend.Enabled=False

Select Case command

Case 1]

Call发送单片机命令过程(任务1)

TimerReceive.Enabled=False'启动自动接收

Case2

Call发送单片机命令过程(任务2)

MSComm1.Rthreshold=0'关闭自动接收

TimerReceive.Interval=500

TimerReceive.Enabled=True'启动定时器接收机号=1

Case 3

Call发送单片机命令过程(任务3)

MSComm1.Rthreshold=0'关闭自动接收

TimerReceive.lnterval=500

TimerReceive.Enabled=True'启动定时器接收

机号=2

Case 4

Case n

End Select

End.Sub

'接收数据主控程序

Private Sub TimerReceive_Timer()

TimerReceive.Enabled=False

Select Case机号

Case 1

In_buffer$=接收数据(机号)

Call任务2

Case 2

In_buffer$=接收数据(机号)

Call任务3

Case 3

Case n

In_buffer$=接收数据(机号)

Call任务n

End Select

End Sub

4.自动接收、监视总线状态和通讯错误的处理

自动接收、监视总线状态和通讯错误的处理可以通过OnComm事件实现。VB程序运行过程中只要设置MSComm1.Rthreshold=1,在接收事件发生时程序就会自动访问MSComm1.OnComm()过程。

由于外界干扰或电压波动等原因,PC机和单片机之间的通讯可能会出现错误,如接收缓冲区溢出、网络端口超速等。这些可能发生的事件都能在代码中引起运行错误。为了处理这些错误,须要将错误处理代码添加到程序中。通过控件中的OnComm事件可以捕捉和处理错误。在通讯过程中所发生的通讯错误是CommEvent属性返回的。当CommEvent属性值发生改变时,表明有通讯错误,就会产生OnComm事件。同时,可以利用自动引发OnComm事件的特点在接收过程中加入状态显示码。这样可以监视通讯线路状态,得到单片机和主机及单片机和单片机之间的通讯进程。通讯错误的处理程序如下:

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case ComReceive 'Receive data '自动数据接收、监视总线通信信息

Select Case In_buffer $

Call A

Label.Enabled=“正在执行任务1”

Call B

End Select

Case comFrame 'Framing Error '通讯错误处理

X=MsgBox(“Framing Error!”,16)

…'错误处理

Case comEventOverrun '数据丢失

X=MsgBox(“数据丢失!”,16)

…'错误处理

End Select

End Sub

相关问答

怎么实现51 单片机与 电脑 串口 之间的 通信 ?

首先,单片机和微机通信的电气标准要一致,微机串口一般是RS232电气标准,所以要加电平转换芯片,大多用MAX232,一般单片机实验板上都提供这样的标准串口。其...

串口通信 怎样发送hex数据?

1:先去下一个通用的串口调试软件代替你的vb程序,用你原来单片机的程序给计算机发数据,这样如果串口调试软件接收到的数据是正确,说明你的vb程序问题。2:如...

vb串口通信 代码详解?

VB串口通信代码详解如下:引入命名空间:在VB代码中,需要引入System.IO.Ports命名空间,用于操作串口。创建SerialPort对象:创建一个SerialPort对象,通过该...

单片机 中如何将DS18b20测得的温度通过 串口 发送到上位机 VB 中?

你的一位十进制数据+0x30,不就变成字符的数字了吗例如:TN是十进制温度fasong[0]=TN/10+0x30;fasong[1]=TN%10+0x30;DS18B20采集到的数据你可以在单片机中...

VB 如何向指定的 串口 发送数据?

私人小组Command1_Click()尺寸B()字节,S作为字符串'B到串行的头发是一个字节数组B=STRCONV(右(串(6,0)和十六进制(文本),6),vbFromUnicode...

怎么实现pc机与三个 单片机 串行通讯?rs485-ZOL问答

pc机用RS232-485,再按485连接3个单片机,当然都要用485接口协议嘛,当然是modbusRTU单片机与的单片机串口通讯仿真实例,可以参考一下,单片机串口与P...

串口通信 程序包括什么内容?

com,communication。串行通讯端口.单片机与电脑通讯经常用到。因为对单片机来说,它可以直接使用TXD,RXD口(或任意io口)加232与电脑进行通讯。串口com模...

VB 程序使用MSComm控件与西门子S7-200PLC使用PC/PPI编程电缆进行串行通讯,现改用USB-PC/PPI通讯电缆,问 VB ?

我有,不过不是VB,是DELPHI的,通过MODBUS,或者OPC我有,不过不是VB,是DELPHI的,通过MODBUS,或者OPC

怎样用 VB 实现RS232接口 通信 - 小红薯D0463273 的回答 - 懂得

为二进制模式,也就是值为1的那...然后将你要的数据逐一赋值到这个数组,将MSComm控件串行模式属性:InputMode设为二进制模式,也就是值为1的那个,然...

个人电脑如何控制 单片机 ?

个人电脑控制单片机,主要通过以下步骤:1)建立个人电脑和单片机的通信连接普通的单片机通常有UART、SPI、IIC、USB等通信模块。和电脑通信最常用的是UART,可...

猜你喜欢