基于VB6.0的串行通信中的错误预防方法
VB6.0下MSComm控件实现串口通信
VB6.0下用MSComm控件实现串口通信MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能,以下先对其属性进行详细的说明后再举一个例子进行说明:1基本属性CommPortO mPort[=value]Object为MSComm控件,value为整数值,标志端口号。
说明:该属性设置并返回通讯端口号,value的值可以设为1-16间的任意数(默认为1)。
在打开端口之前必须先设置CommPort属性,当端口不存在时,如果用PortOpen属性打开它,MSComm控件会产生错误68(即设备无效的错误)。
SettingsObjiect.Setting[=value]Object为MSComm控件,value为字符串类型,表示通讯端口的设置值。
说明:本属性用来设置并返回端口的波特率、奇偶校验位、数据位和停止位参数。
当端口打开时,如果指定的value参数非法,则MSComm控件产生380号(非法属性值)错误。
有效的value参数值由四个设置值组成,有如下格式:“BBBB,P,D,S”,其中BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。
Value的默认值为:“9600,N,8,1”,下面给出合法的波特率、奇偶校验位、数据位和停止位参数:波特率:110,300,600,1200,2400,4800,9600(默认),14400,19200,28800,38400,56000,57600,115200,128000,256000。
奇偶校验值:E(偶校验,Even)、M(标记,Mark)、N(默认,Default,None)、O(奇校验,Odd)、S(空格,Space)。
数据位值:4,5,6,7,8(默认),9。
停止位值:1(默认),1.5,2。
PortOpenO bject.PortOpen[=value]Object为MSComm控件。
Value为布尔类型,表明通讯端口的状态。
基于VB6_0的计算机与单片机之间的串行通信
Ser ial Communication between Computer and Single Chip Micr ocomputer Based on VB
SUN Ying, SHEN Jinghu ( The College of Mechanical and Electronic Engineering , Qingdao University, Qingdao 266071) Abstr act: In this paper, some important properties of Microsoft Communication control ( MSComm) of Visual Basic 6.0 are introduced, and designing method of program for applying MSComm to realize serial communication between Microcomputer and Microprocessor is dealt with Windows. A basic communication program is given combining with a concrete example. Key wor ds:Visual Basic 6.0, Serial Communication, Microsoft Communication Control, Properties
图 2 电机驱动监控系统界面
图 3 控制命令流程图
这个例子用 于 解 决 PC 机 同 单 片 机 之 间 的 通 信 问题, 上位机与单片机之间用 RS—232 串行通信标 准, 以事件驱动方式进行通信, 使用通信控件 MSComm 发送、接收数据。设置计算机串口与 DSP 串 口之间的关于此系统的通信协议如下:
VB6.0环境下利用Mscomm控件实现串行通信
VB6.0环境下利用Mscomm控件实现串行通信VB6.0环境下利用Mscomm控件实现串行通信摘要: 本文简要介绍了VB6.0中Mscomm通信控件的属性和使用方法,并结合具体实例给出了基本的通信程序。
主题词:串行通信 Visual Basic Mscomm .vbx控件Abstract: This paper briefly introduces the principle and method of Mscomm object of Visual basic 6.0, and with a real example basic program codes are given.Key Words:Serial Communication; Visual Basic; Mscomm .vbx control component随着计算机技术的飞速发展及其广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,温限宽和面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。
在需要对采集的数据进行分析处理或在远程需要对控制对象的控制过程进行统计或有条件控制时,采用数据库访问技术能有效地解决这类问题。
Visual Basic 6.0以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows系统开发的主要编程语言。
首先表现在VB可直接使用户自定义控件VBX或OCX文件;其次表现在VB 可通过调用动态链接库(DLL,dynamic link library)来加快应用程序关键部分的执行速度。
利用VB提供的这些功能可方便地完成程序设计,如串行编程等,本文将介绍VB6.0通信控件Mscomm .vbx及其编程方法,并结合实例给出计算机与单片机进行数据通信的基本程序。
基于VB6.0的串口通信方法
基于VB6.0的串口通信方法串口通信在数据采集中有着广泛的应用,因为串口通信通信线路简单、灵活方便、数据可靠。
作为快速开发,利用VB开发串口通信程序既可以使用MSComm控件也可以调用WindowsAPI函数实现。
这里我们使用VB6.0提供的MSComm控件,因为MSComm控件的功能和API调用一样强,甚至更好且使用起来更加简单,能很方便地实现所需的串口通信功能。
1.MSComm控件简介MSComm控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。
具体的来说,它提供了两种处理通信问题的方法:一是事件驱动方法,当串口通信产生错误时,MSComm控件会触发OnComm事件,程序员可以在OnComm事件处理函数中加入自己的处理代码。
另外一种是查询法。
查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。
在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。
2.MSComm控件的常用属性MSComm控件有很多重要的属性,但首先必须熟悉几个关键属性。
CommPort 设置并返回通讯端口号Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位PortOpen 设置并返回通讯端口的状态。
也可以打开和关闭端口Input 从接收缓冲区返回和删除字符Output 向传输缓冲区写一个字符串3.程序代码设计利用MSComm控件编写串口通信程序是十分便利和简单的。
下面我就事件驱动方式以VB6.0为平台编写了PC间串口通信程序的实例。
代码如下:'串口初始化PrivateSubForm_Load()mPort=1 '设置通信端口号为COM1MSComm1.Settings="9600,n,8,1" '设置串口参数MSComm1.InputMode=0 '接收文本型数据MSComm1.RThreshold=1'接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件MSComm1.PortOpen=True '打开通信端口1EndSub'把字符通过串口发送出去'启动定时器PrivateSubCmdsend_Click()IfTextsend.Text=""Thenpp=MsgBox("发送的数据不能为空!",16)ExitSubEndIfMSComm1.Output=Trim(Textsend.Text)EndSub'MSComm的OnComm事件程序'由CommEvent属性值的不同,将各自的程序代码写入相关的子程序中'只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成comEvReceive'因此接收的子程序便会被执行PrivateSubMSComm1_OnComm()Dimbuf$mEvent'通过取代每一个case表达式来处理每个事件与错误CasecomEvCD'CD线的状态发生变化CasecomEvCTS'CTS线的状态发生变化CasecomEvDSR'DSR线的状态发生变化CasecomEvReceivebuf=Trim(MSComm1.Input)'将缓冲区内的数据读入buf变量中CasecomEvSendEndSelectTextReceive.Text=TextReceive.Text&bufEndSub'停止程序运行PrivateSubCmdquit_Click()UnloadMeEndSub'关闭通信端口,PrivateSubForm_Unload(CancelAsInteger)MSComm1.PortOpen=FalseEndSub4结束语本文通过具体实例介绍了如何利用VB6.0中的MSComm控件来实现串口通信。
用VB6_0实现串行通信
用 VB6.0 实现串行通信
文/ 李 思
MSCOMM 控 件 实 现 了 基 础 封 装 , 省 去 对 硬 件 底 层 的开发, 通过对该控件提供的属性的设置和事件的处理, 方便实现串口间的通信。
comopt (3) =Mid (nextline,5,Len (nextline) - 4) Case “端” comopt (4) =Mid (nextline,5,Len (nextline) - 4) End Select Loop Close # 1 2. 参数设置— —— Form2 重设 参 数 , 点 击 保 存 按 钮 保 存 设 置 值 于 ComOpt.INI 文件中, 刷新 MSCOMM 控件。代码如下: Form1.MSComm1.Settings = “Combo1.Text &” , “& Combo2.Text&”, “&combo3.text&”, “&combo4.text” Form1.MSComm1.CommPort = Val (comopt (4)) Form1.MSComm1.PortOpen = True cFileCombo1.Text,Combo2.Text,Combo3.Text,Combo4. Text,Str (Idx) Unload Form2 ComOpt.INI 文件格式为: 速率= 9600 奇偶校验=n 字符长度=8 停止位=0 端口号=1 cFile 子程序如下: Set cf=CreateObject (“Scripting.FileSystemObject”) Set tf=cf.CreateTextFile (“comopt.ini”,True) tf.WriteLine (“R = ”&rate) tf.WriteLine (“C= ”&chk) tf.WriteLine (“S= ”&slen) tf.WriteLine (“P= ”&splen) tf.WriteLine (“N= ”&cpn) tf.Close 3. 发送数据 点击发送按钮。代码如下: MSC omm1.O utput= T ext1.T ext 4. 接收数据 ( 1) 接收按钮单击事件: If Check1.Value=1 Then If Command2.Caption= “接收” Then Command2.Caption= “停止” Else Command2.Caption= “接收” End If Else T ext2.T ext= MSC omm1.Input End If ( 2) OnComm 事 件 : 本 文 利 用 CommEvent 的 comEvR eceive 状态, 当 OnComm 事件触发时, 自动处理 用户设定的程序, 代码如下: Select Case MSComm1.CommEvent Case comEvR eceive If Check1.Value=1 And Command2.Caption= “停止” Then T ext1.T ext= T ext1.T ext&MSC omm1.Input End If End Select
解决VB6.0编写的EXE程序运行错误提示
解决V B6.0编写的E X E程序运行错误提示概述:1、在Windows XP或者Win 7的某些少量电脑上运行VB6.0编写的软件会提示缺少“COMDLG32.OCX”等控件信息!2、在安装“AotoCAD2007简体中文版”的电脑上会出现“Windows 正在配置AotoCAD2007,请稍候。
”情况,现给出解决方案如下:一、解决运行软件时提示缺少“COMDLG32.OCX”等控件!方法如下:Win 7 运行显示提示:Component 'COMDLG32.OCX' or one of its dependenciesnot correctly registered:a file is missing or invalid Windows XP 运行显示提示:部件COMDLG32.OCX 或其附件之一不能正确注册:一个文件丢失或无效备注:运行软件时出现以上窗口说明你电脑系统System32目录中没有该文件(缺少该控件)。
解决方法:1、下载“COMDLG32.OCX”等提示控件!控件地址:下载:COMDLG32.OCX下载:XPCMD.OCX下载:MSFLXGRD.OCX2、将下载这个文件复制到:C:\Windows\System32系统目录下。
3、点击“开始”菜单→运行→输入regsvr32 comdlg32.ocx→确定→提示成功。
(或者C:\Windows\System32\cmd.exe 进入后输入regsvr32 comdlg32.ocx)示意图二、解决电脑上装有AotoCAD 2007简体中文版提示错误:运行“曲线坐标计算程序V1.10.30”等软件、会提示Windows 正在配置 AotoCAD2007,请稍候,然后会出现错误 1308,附图如下。
软件图标提示:正在配置 AotoCAD 2007 图标显示:错误 1308 图标解决方法:1、用鼠标一直点击“取消”或“忽略”即可运行该软件,但是下次运行该软件时还会出现同样错误,为了避免下次再出现而进行如下解决方案:1.1、进入“AotoCAD 2007 简体中文版”安装路径:X:\AotoCAD2007简体中文版\Bin\AcadFEUI\Program Files\Root\Support\目录下1.2、在Support文件夹下用记事本新建一个“空白dfst.dll文件”,方法:开始→程序→附件→记事本,在记事本上点击:文件→另存为(保存类型:选择所有文件)选择桌面→文件名:dfst.dll→保存,然后将dfst.dll文件复制到……/Support文件夹内即可,图示如下:1.3、新建空白dfst.dll文件,另存为:选择桌面1.4、保存类型选择“所有文件”点击保存1.5、保存后的dfst.dll文件1.6、将dfst.dll文件复制到Support\文件夹内,重新运行软件即可。
基于VB6.0的串口通讯程序设计
ห้องสมุดไป่ตู้
基 于 VB 6 0的 串口通讯 程 序设 计 .
收 稿 日期 :20 — 7 1 02 0 — 9
基 于 V . B 6 0的 串 口通 讯程序设 计
D e i n o o r m o e i lCO m u c tO s d o s a s c 6・ s g f Pr g a f r S ra m ni a i n Ba e n Vi u lBa i 0
采 集 和对 设备 一级 的监控 ,上位 机则 要 完成对 整 个 系
MS o C mm 是 Mi o ot 司 提供 的主 要用 于 串行 c sf公 r
统 的 采集 、 析 、 分 处理 和控 制 以及 数 据 、图形显 示 、打 印、人 机对 话 等工 作 。而 上位 机 与下 位机 大多 是 通过 P C机 的 R - 2 2串行 接 口实 现 通 信 。随着 Wid ws S 3 no 系 统 的 普 及 ,越 来 越 多 的 用 户 由 D OS系 统 转 向 了 W id ws系统 , 使得 数据 采 集及 工业 控 制软 件 也上 no 这
升 到 了Wid w n o s环境 下 。这就 给程 序员 提 出 了如何 编
通 信编 程 的Acie t X控 件 。 t e v Aci X控 件包括 一 系列 的 v
属性 、 法和 事件 , 用程 序通 过 Acie 方 应 t X控 件 提供 的 v 接 口来访 问控件 的功能 。我 们 知道 通过 C、VC+ 编 写 +
它 以所 见 即所 得 的 可视 化 界 面设 计 风 格 和 3 2位 面 向 对象 程序 设计 的 特点 ,已被 广泛 应用 到各 个领 域 ,成
为众 多开 发人 员 采 用 的工 具 。VB不 但 提 供 了 良好 的
VB6.0环境下基于USB的虚拟串口通讯实现
VB6.0环境下基于USB的虚拟串⼝通讯实现2019-09-20摘要:以FTDI公司的FT232BL芯⽚为核⼼设计并实现了基于USB接⼝的计算机与单⽚机之间的虚拟串⼝通讯。
单⽚机采⽤Philips公司P89系列单⽚机,完成数据的存储。
计算机在Windows环境下利⽤MSComm通讯控件实现上位机与下位机之间的数据传输。
在此提出了PC机对虚拟串⼝的⾃动识别⽅法,并提供了程序的源代码。
实验结果表明,⽤虚拟串⼝实现计算机与单⽚机之间的USB通信,具有速度快,软件实现简单等优点。
关键词:VB6.0; USB⼝; FT232BL;虚拟串⼝中图分类号:TN91934⽂献标识码:A⽂章编号:1004373X(2012)06004504Implementation of communication through virtual serial port based on USBNING Hui, SUN Xueyan, LIU Jian, ZHANG Jianguo(Beijing Aeronautical Technology Research Center, Beijing 100076, China)Abstract: The communication between SCM and USB port based computer through virtual serial port is designed and implemented by taking FT232BL of FTDI Incorperated as a kernel. The data storage is completed by Philips P89 series MCU. The data tranmission between host computer and lower computers is achieved by means of MSComm communication control in the Windows environment. The method that PC automatically identifies the virtual serial port is presented. The source code of the program is provided. The experimental result shows that the USB communication between SCM and PC implemented by virtual serial port is speedy and easy to implement by software.Keywords: VB6.0; USB port; FT232BL; virtual serial port收稿⽇期:201109230引⾔数据传输是现代通讯过程中的⼀个重要环节,在数据传输过程中,不仅要求数据传输的准确率要⾼,⽽且要求速度快、连接⽅便。
基于VB6_0的计算机与单片机串行通信
1.4.2 程序设计 Option Explicit '= = = = = = = = = = = = = = = ' 窗体装载程序 Private Sub Form_Load() If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If MSComm1.OutBufferCount = 0 MSComm1.InBufferCount = 0 End Sub '= = = = = = = = = = = = = = = = ' 数据接收和文件操作的 OnComm 事件程序 Private Sub MSComm1_OnComm() Dim fs As New FileSystemObject Dim ts As TextStream Dim minsec() As Byte
第四期
张修太 胡雪惠:基于 VB6.0 的计算机与单片机串行通信
65
其中 receive()为 byte 型数组。 9)Outbuffersize。以字节的形式设置并返回传
输缓冲区的大小,缺省值为 512 字节。 10)Inbuffersize。设置并返回接收缓冲区的字
节数,即整个接收缓冲区的大小。接收缓冲越大则 应用程序的内存越小。 1.2 用 VB6 实现的数据接收和发送
文件系统对象模型可以创建顺序型的文本文 件,方便地实现文件的打开、关闭、读和写等操作。 文 件 的 创 建 主 要 使 用 CreateTextFile 方 法 、带 ForWriting 属 性 的 OpenTextFile 方 法 和 带 ForWriting 属性的 OpenAsTextSteam 方法。添加数 据 到 文 件 主 要 使 用 Textstream 对 象 的 Write 和 Writeline 方 法 。 从 文 件 中 读 取 数 据 是 使 用 Textstream 对象的 Read、Readline 和 ReadAll 方法 实现的。 1.4 VB 串行通信实例
VB6.0常见错误和难点解析
VB6.0常见错误和难点解析1.在选择结构中缺少配对的结束语句对多行式的If 块语句中,应有配对的End If 语句结束。
否则,在运行时系统会显示"块 If 没有End If"的编译错误。
同样对Select Case 语句也应有与其相对应的End Select 语句。
2.多边选择ElseIf 关键字的书写和条件表达式的表示多边选择ElseIf 子句的关键字ElseIf 之间不能写有空格,即不能写成Else If 。
在多个条件表达式的表示时,应从最小或最大的条件依次表示,以避免条件的过滤。
例如,已知输入某课程的百分制成绩mark ,要求显示对应五级制的讦定,评定条件如下:有以下几种表示方式,语法上都没有错,但执行后结果有所不同,请分析哪些正确? 哪些错误? 下面给出的答案中,方法一、二、五正确,其余错误,请分析各自的原因。
方法一: 方法二: 方法三: 方法四: 方法五: If mark>=90ThenPrint"优" ElseIf mark>=80Then Print"良" ElseIf mark>=70Then Print"中"ElseIfmark>-60Then Print"及格" ElsePrint"及格"End IfIf mark<60ThenPrint"不及格" ElseIf mark<70Then Print"及格"ElseIf mark<80ThenPrint"中"ElseIf mark<90Then Print"良"ElsePrint"优" End IfIf mark>=60ThenPrint"及格" ElseIf mark>=70Then Print"中" Elselfmark>=80Then Print"良" Elselfmark>=90Then Print"优" ElsePrint"不及格"End If If mark>=90ThenPrint"优"ElseIf 80<=mark<90 Then Print"良"ElseIf 70<=mark<80 ThenPrint"中"ElseIf 60<=mark<70 ThenPrint"及格"ElsePrint"不及格"End IfIf mark>=90Then Print"优"ElseIf 80<=mark And mark<90ThenPrint"良"ElseIf 70<=mark And mark<80ThenPrint"中"ElseIf 60<=mark And mark<70ThenPrint"及格"ElsePrint"不及格"End If3.Select Case 语句的使用(1) "表达式列表i" 中不能使用"变量或表达式"中出现的变量。
VB6.0在PC机与单片机串行通信中的应用
VB6.0在PC机与单片机串行通信中的应用[摘要] 在开发微机控制及数据采集系统中,要实现pc机与单片机中的串行通信,经常用到的是rs232接口。
我们普通pc机后面的com端口即rs232接口。
vb6.0提供了mscomm通信控件,只需编写少量的程序代码,即可在windows环境下轻松实现串口的数据交换。
本文以笔者曾研制的压力测定系统为例简单介绍通过vb实现计算机串口通信的方法。
[关键词] 串口通信 rs232 vb6.0随着计算机技术的迅速发展及其在各领域的广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,以及面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。
一、vb6.0实现串行通信方法vb提供的通信控件mscomm32.ocx,使用前只需从project菜单下的components中选择microsoft comm control 6.0把mscomm32.ocx控件调入工具框中即可使用。
利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以通过触发oncomm事件来追踪、处理通信和错误事件的发生。
由于每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。
硬件连接:(1)当单片机以rs232接口为端子连接时,单片机与计算机的连接如下图:(2)当仪表以rs485接口(其它接口如422等类同)为端子连接时,单片机与计算机的连接如下图:2.mscomm控件简介为支持串行通信的实现,vb6.0中mscomm控件提供了众多的串行通信属性,但首先必须要熟悉的几个属性主要包括:commport:设置并返回通讯端口号。
基于VB 6.0的串口通讯程序设计
基于VB 6.0的串口通讯程序设计摘要:详细介绍了VB6.o中通讯控件MSComm的一些重要属性及在Windows环境下用通讯控件来实现串行通信的编程方法,并结合实例给出了一个基本的通讯程序。
关键词:串行通信;通信控件;Visual Basic 6.01引言随着计算机的迅速普及和计算机控制技术的发展,计算机被广泛应用于自动化控制领域之中。
而要完成一个控制过程一般都要利用集散式计算机控制系统。
在这种控制系统中,下位机主要完成对现场数据采集和对设备一级的监控,上位机则要完成对整个系统的采集、分析、处理和控制以及数据、图形显示、打印、人机对话等工作。
而上位机与下位机大多是通过PC机的RS-232串行接口实现通信。
随着Windows系统的普及,越来越多的用户由DOS系统转向了Windows系统,这使得数据采集及工业控制软件也上升到了Windows环境下。
这就给程序员提出了如何编写面向Windows的串行通信程序问题。
虽然Windows提供了完备的开放式通用增强的W32API(应用程序接口)函数,它把对串口和其他通信设备的支持和基本输入驱动程序集于一体。
但是,对于非专业软件设计人员来说,使用VC++,C等高级语言来完成这类程序的设计,其复杂性与专业化程度依然很高。
而Visual Basic 6.0(以下简称VB)是一个Windows下简单、易学、高效的可视化软件开发平台,它以所见即所得的可视化界面设计风格和32位面向对象程序设计的特点,已被广泛应用到各个领域,成为众多开发人员采用的工具。
VB 不但提供了良好的界面设计能力,而且在串口通信方面也有很强的功能。
它提供的Microsoft Communication control(以下简称MSComm)这样一个通信控件,该控件“隐藏”了大部分串口通信的低层运行过程和许多繁琐的过程,它使用户能够方便地访问Windows下串口通信驱动程序的大多数特性。
所以整个串行通信程序的开发过程变得十分简单易行,程序员不需要处理繁琐的细节,而通过利用通信控件,只需编写少量的代码来实现主要应用功能和界面的设计,就可以完成软件的开发过程。
基于VB6.0智能水环境监控系统的串行通信
关键 词 :Vs a B sc . ;单片机 ;串行通信 ;监控 ;P iu l a i60 C机
中图分类号 :T 2 3 P 7 文献 标识码 :B 文章编号 :1 0 —0 3 ( o 6 o — 0 4 4 9 1 4 t o ) 8 0 7 0 0
0 引言
智能 水环 境 多参数 检测 及监 控 系统 ( 称监 控 简 系统 )是 由 1 I M— C 8 计 算机 为上 位机 ,多台 台 B P 66 单 片机作 为 下位机 组 成 ,上位 机能 够 在线监 控水 中 氧 气量 和温 度 ,并 能按照 给 定值 自动调 节水 中 的水
多参数 检测 及监控 系统 的帮助 系统 , 为增 强可读 性 、 直 观性 ,使用 We 设 计帮 助 系统 。系统总体 结 构 图 b
如图 1 所示 。
溶
1 通 信 原 理
蛰水 制 增 阀毡 氧量 调面i 路
11 通信控 制方式 .
通 信控 制 是为 了避免 网上 多个C U同时 向通信 P
l 化 I 5
串 f 】 } 化 』 J
’
嫂霞 通 f 约 “
’
定 时 分 钟 , 时 川 剑
’
发 送 帧 1 个 0
要求
采 集 数 据 信 .、 0
’
等 f 接 收 化 机 々
’
中{ I数捌 }
l 分钟 后又 回到 此监控 点 , 际上 ,l 分钟 内水 中 0 实 0
总线 上发 信 号( 总线竞 争) 称 。对于 自己组 建 的控 制
网络 来说, 一般 都 用主 从式 的通信 控 制方 式。 位机 上 ( 主机) 和下 位机 ( 机) “ 从 的 收”和 “ 发”通信线 的 连
基于VB的串行通信
…
…
…
…
…
…
…
…
…
一
道信 翟一 I
基 于 VB的 串 行 通 信
江西科技 学院信 息工程 学院
可提高 串行数据的处理效率和准确率 ,并且可对 串行通信协议不确定 的数据 帧进行 完整接 收。 【 关键词】 串行通信 ;一帧数据 ;时间片
吴
燕
【 摘要 】针对 串行通信 中一帧数据接收的完整性 ,提 出时间片的设 计思路 ,基于V B 6 . 0 中的Ms c o mm控件,实现 了P c 机 与单片机之间 串行通信数据 帧的完整接 收。该方 法
1 . 引 言
在计 算机网络 以及 工业控制系统 中, 串 口通 信 具 有 硬 件 简 单 、 操 作 方 便 、成 本 低 和 容 易实 现 等优 点 而 得 到 广 泛 应 用 。但 实 际 应 用 中 , 串 口软 件 易 出现 数 据 阻塞 、 丢失等 问题 。为此 ,诸多学者提 出了具 体 的 解 决 方 案 , 如 采 用 基 于 消 息方 式 的 多 线程编程 思想 ,有效地解决 了大量 数据 的 连续存储和 实时显示 占用大量系统 资源 的 问题 ,提 高了数据 的吞吐量和应用程序 的 实 时 性 和 可 靠 性 J ;采 用 一 种 基 于 事 件 驱 动和双缓冲 区的串行通信设计方案 ,解 决 了低速 串行通信与系统高实时性要 求之间 的矛盾 ,并在 此基础上实现 了一个 实时多 任务委托 代理等 。在 考虑系统 的资源 利 用率和实 时性的同时 ,保证 串行数据完 整 接收是 串行通 信设计 中非常关键 的一个 环 节 ,不完整 的数据会影响数据 的处理和 存 储 ,浪 费系统 资源 和降低系统 的实 时性。 本文通过 改进 串行通信数据链路层 数据帧 的接收方 法,保证一帧 串行数据 的完整接 收。 2 . 一帧 串行数据 不完整接收的原 因分
分析串行通信数据接收错误类型及发生原因
分析串行通信数据接收错误类型及发生原因
1间隔中断:RxDn的输入被保持为0状态的时间超过了一个帧传输的时间
2.数据帧错误,:波特率不一致,导致接收到的数据没有有效的停止位
串口数据每一次传输一个字节。
每个字节有一个特定的格式比如起始位,数据位,校验位和停止位。
帧错误的情况是收到一帧数据,但是不是期望的帧。
最常见的原因是串口和设备配置使用了不同的设置。
波特率,数据位,校验位和停止位不一致。
3.奇偶校验错误:数据传输过程中信号收到干扰产生的错误
4.溢出错误:旧的数据没有及时被读入,新的数据覆盖了旧的数据。
一般溢出错误主要是由于MCU的速度较慢造成的。
VB6.0串口操作
V B6.0串口操作-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN串口操作职业 2010-12-22 11:30:58 阅读60 评论0 字号:大中小订阅一直想通过计算机人机界面来控制单片机,感觉用软件控制硬件,即计算机控制是一件比较有意思的事情。
计算机与单片机的连接,是通过串口来实现的。
如何实现,我想应该明白VB怎样来操作串口,实现VB 操作串口,就可以把单片机串口线接入计算机,从而实现真正的计算机控制单片机。
这其他是别人早已实现了的,我因为是刚接触,就写下来留作纪念吧。
开发软件:Visual Basic 企业版(VB6)新建一个工程:标准EXE。
接下来做Form界面。
代码:Private Sub Combo1_Click()If = True Then '如果串口打开先关闭后再进行其他操作= FalseEnd If= + 1End SubPrivate Sub Command1_Click()Dim Temp(0) As ByteDim strBuff As StringIf = True Then '如果显示16进制发送则进行16进制处理,这里只发送一个Temp(0) = "&H" & Text1= Temp '发送一个16进制ElsestrBuff = Text1End IfIf = False ThenMsgBox "请打开串口"End IfOn Error GoTo uerror= strBuffuerror: End SubPrivate Sub Command2_Click()On Error GoTo uerror '发现错误跳转到错误处理If = "关闭串口" Then= False= "打开串口" '按钮文字改变= &HFFFFC0 '灯颜色改变Else= True= "关闭串口"= &HFFEnd IfExit Subuerror:msg$ = "无效端口号" '错误显示Title$ = "串口调试助手"x = MsgBox(msg$, 48, Title$) '48标示显示警告图标End SubPrivate Sub Command3_Click()= ""End SubPrivate Sub Command4_Click()= ""End SubPrivate Sub Form_Load()If = True ThenElseEnd If "COM1" "COM2" "COM3" "COM4" "COM5" "COM6" "COM7" "COM8" "COM9" "COM10" "COM11" "COM12" "COM13" "COM14" "COM15" "COM16"= 0= + 1= "9600,n,8,1" = "打开串口" = &HFFFFC0= True= True "256000" "128000" "115200" "57600" "38400" "28800" "19200"' "14400"' "12800"' "11520""4800""2400""1200""600""无None""奇Odd""偶Even""4""5""6""7""8""1""2"End SubPrivate Sub MSComm1_OnComm()Dim BytReceived() As ByteDim strBuff As StringDim i As IntegerSelect Case '事件发生Case 2Cls= 0 '读入缓冲区全部内容strBuff = '读入到缓冲区If = comInputModeBinary ThenBytReceived() = strBuff '如果是二进制接收模式则进行数据处理,否则直接显示字符串For i = 0 To UBound(BytReceived)If Len(Hex(BytReceived(i))) = 1 ThenstrData = strData & "0" & Hex(BytReceived(i)) & " " '如果只有一个字符,则前补0,如F显示0F,最后补空格Else '方便显示观察如: 00 0F FEstrData = strData & Hex(BytReceived(i)) & " "End IfNextText2 = Text2 & strDatastrData = ""ElseText2 = Text2 & strBuffEnd IfEnd SelectEnd SubPrivate Sub Option1_Click()= comInputModeBinaryEnd SubPrivate Sub Option2_Click()= comInputModeTextEnd Sub重要:一。
基于VB6.0的串行通信中的错误预防方法
基于VB6.0的串行通信中的错误预防方法
曾小勇
【期刊名称】《《可编程控制器与工厂自动化(PLC FA)》》
【年(卷),期】2005(000)007
【摘要】在串行通信中常出现数据传输错误的情况,本文介绍了基于 VB 的串行通信中的错误预防方法,并给出了相关实例。
【总页数】4页(P73-75,69)
【作者】曾小勇
【作者单位】武汉大学自动化系
【正文语种】中文
【中图分类】TP393
【相关文献】
1.基于VB6.0的PC机与AT89c51的串行通信的实现及应用 [J], 兰娜;文露
2.基于VB6.0串行通信中的错误预防方法 [J], 曾小勇;李彬
3.西门子S7-200 PLC与PC机基于VB6.0的串行通信设计 [J], 靳永亮;张雯
4.基于VB6.0的红外甲烷检测仪串行通信的实现 [J], 黎湘贵;梁永直;贾文沛;容幸福
5.基于VB
6.0的工控机与空气检漏仪的串行通信 [J], 梁增提;赵佳萌;王莉莉;覃京翎;曾庆文;林峻锋
因版权原因,仅展示原文概要,查看原文内容请购买。
VBA中的错误处理方法和原则
VBA中的错误处理方法和原则错误处理是编程中不可避免的一部分。
当程序运行出现错误时,如何对其进行处理是一个关键问题。
在VBA(Visual Basic for Applications)中,错误处理方法和原则是确保程序正常运行和有效性操作的重要组成部分。
本文将介绍VBA中常用的错误处理方法和原则,以帮助开发人员更好地理解和利用它们。
首先,让我们了解在VBA中常见的错误类型。
VBA中的错误可以分为两类:编译错误和运行时错误。
编译错误是代码编写阶段的错误,例如拼写错误、语法错误等。
编译错误在编译过程中被捕获,不会导致程序崩溃。
另一方面,运行时错误是程序在运行过程中出现的错误,例如除数为零、数组越界等。
运行时错误会导致程序中断并弹出错误信息。
在处理VBA错误时,以下是一些常见的方法和原则:1. 使用On Error语句:On Error语句用于指定在出现错误时执行的代码。
它有三种不同的形式:On Error Resume Next、On Error GoTo和On Error GoTo 0。
On Error Resume Next指示程序继续执行下一行代码而不中断,而On Error GoTo指示程序跳转到指定的错误处理代码。
On Error GoTo 0则表示取消错误处理,程序将中断并显示运行时错误信息。
2. 使用Err对象:Err对象包含有关最近一次错误的信息。
我们可以使用Err对象中的属性(如Number、Description等)来获取和处理错误信息。
在运行时错误发生后,可以使用Err对象来查找错误的代码行、错误的描述和错误的类型等信息。
3. 使用Error命令:Error命令可用于显示用户定义的错误信息。
通过使用Error命令,可以自定义错误消息,并将其与特定的错误代码相关联。
这样,在程序运行过程中出现错误时,我们可以提供更具体和明确的错误信息,以帮助用户理解和解决问题。
4. 使用一般错误处理:针对多个可能的错误,我们可以使用一般错误处理的方法。
【推荐下载】基于VB6.0的MSComm通信方法设计
基于VB6.0的MSComm通信方法设计 MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,而且在VB中容易使用。
这是一篇基于VB6.0的MSComm通信方法设计,接下来让我们一起来看看吧~ 摘要:本文介绍了基于VB6.0的MSComm串行通信设计方法,并给出了计算机与智能采集模块进行通信的程序设计的框架。
关键词:串行通信,vb6.0,MSComm 1 前言 在工业控制领域,我们经常需要进行计算机与其他设备之间的通信,而串行通信作为一种灵活、方便、可靠的通信方式被广泛采用。
在开发串行通信程序的过程中,利用微软的MSComm通信控件则相对较简单,该控件具有丰富的与串行通信密切相关的属性及事件,提供了对串口的各种操作。
MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,而且在VB中容易使用。
2 用visual basic 6.0进行串行通信程序设计的方法 (1) 用visual basic 6.0进行串行通信程序的设计有两种方式,一是直接调用Windows API,另一种方式是使用通信组件,但后一种方式实际上是通过通信组件间接的调用了Windows API函数,其过程要比直接调用API要复杂,但是在程序的实现上要比前一种方式简单的多。
在操作系统方面,Windows使用通信驱动程序Comm.drv,以便于应用程序能够使用标准的Windows API函数来传递和接收数据。
串行外围设备的制造商则提供硬件驱动程序,以便让其硬件能与Windows连接。
使用MSComm控件时,实际上就是使用了API函数,API函数将被Comm.drv解释并传送给外围设备驱动程序,使用MSComm的用户只需要关心如何使用MSComm所提供的属性或事件,以驱动API函数的接口完成工作。
串行通信程序的执行过程 (2) MSComm提供了两种处理通信问题的方法,一是事件驱动方法,一是查询法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 引言随着计算机技术特别是单片机技术的发展,通信在诸多领域得到了广泛的应用,技术人员可以通过计算机的串口来获取设备的各种数据,然后利用计算机强大的运算和分析处理功能进行处理,再根据处理的结果发送数据来控制设备。
通常通信的型式可以分为两种,即并行通信(Parallel Communication)和串行通信(Serial Communication)。
就通信速度来看,并行通信一次的传输量为8个位(1个字节),而串行通信一次只传输1个位(也就是一个标准电位状态),很明显,并行通信的传输速度要快得多。
但就传输的安全性来说,由于并行通信在传输过程中更容易产生电压衰减和信号间相互串音干扰等问题而使得传输的数据发生错误,相对而言,串行通信一次只传输处理的数据电压只有一个标准电位,因此不容易把数据丢失。
不论是采用哪种通信方式,在数据的传输过程中,数据都有可能受到干扰而使得原来的数据信号发生扭曲,此时的接收到的数据当然是错误的,为了检测数据在发送过程中发生的错误,发送与接受必须对数据进行进一步的确认工作。
最简单的方式就是使用校验码(CheckSum),其次是使用CRC(Cyclic Redundancy check Code,循环冗余校验码)。
2 串行通信2.1 通信步骤通常情况下,串行通信过程就是交换字符串的数据过程,而数据的交换必须有一定的格式。
通信的双方才能根据一定的数据格式针对所传输的数据进行解析,以工业上最常用的PLC为例,计算机与PLC进行通信时,任何厂牌的机器均会定义通信协议,所谓的通信协议就是服务器端与客户端的通信语言及定义。
每一次计算机与设备的数据交换都会有3个步骤,(1) 设备要求发送数据时,计算机会发送一组字符串过去通常该字符串的第一个字符就是前导码,设备根据前导码辨认是否应该读取该字符串、该字符属于哪一个命令集,以及用什么格式去解读该字符串等。
前导码不会是一般的字符,通常是一些不可见字符(位于ASCII码的前30个)或很少被使用的符号字符,这是因为避免数据字符与前导码一样而发生错误判断。
在前导码之后是后站号,通常是以两个字符代表,单纯以RS-232连接的单一设备也许不需要站号的设置,不过如果以RS-485进行网络连接,就需要用站号来辨别命令是属于哪一个设备。
站号之后就是要设备解读的命令或数据。
(2) 当设备收到要求字符串,并经过判断确定后,便会送出计算机所要求的数据同样,数据被送出时会在数据之前加上前导码与站号,计算机也以此前导码与站号判别数据来自何处。
(3) 握手计算机端接收到设备发送回来的字符串即进行解读检查的操作,当检查完成后,便再送一个确定的字符串给设备,用以说明计算机端已成功收到字符串;而发送失败,计算机也在该回送的字符串中要求设备重新发送数据。
以上3个步骤就是计算机与设备数据的发送交换的一般情况,对于不同的设备可能会有不同的数据发送流程,应视具体情况而定。
另外,在数据发送时,一般都会加上错误检查机制,最常用的方法是将字符进行计算,而在字符串的最后加上CheckSum字符。
发送的双方利用CheckSum字符的检查而判断出字符串的正确性。
2.2 串行通信方法就工业上最常用的串行通信来说,我们在用VB开发串行通信程序中通常用到两种方法:(1) 一是利用Windows的通信API函数;(2) 另一种是采用VB标准控件MSComm来实现。
本文采用第二种方法,其实,MSComm控件的通信功能实现,实际上也是调用了API函数,而API函数是由Comm.drv解释并传给设备驱动程序的,对于VB程序开发者只需知道MSComm控件的属性和事件的用法就可以实现操作。
在该控件的Setting属性设置中,如:MSComm.Setting=9600,N,8,1就表示所使用的通信端口是以每秒9600为的速率进行传输,不进行奇偶校验位的检查,每个数据单元是8个位,而停止位是1个位。
3 CheckSum的使用前面提到过的奇偶校验位的使用在于避免传输过程错误的发生,导致数据的不正确;不过,由于在串行通信中每一组的传输过程最多只有一个字节,而奇偶校验位的检查也是针对一个字节。
当传输的数据量增大时,如何确保数据的正确性?一般的做法也是类似奇偶校验位的方式,将检查码放到所发送的字符串中同时发送到接收端,接收端再对数据进行一次检查码的确认,而检查码的使用最常见的就是CheckSum。
CheckSum的实际做法因设备的不同而异,主要的做法是将双方发送的字符串中的字符一一地进行相加(以对应的ASCII码),再对255或者128取余数,所得的余数即为CheckSum。
部分的做法是将该余数当成一个字节含在原来发送的字符串尾端送出;还有一种是将该余数转成两个字符,并含在原来的字符串尾端送出,现在我们对255取余数示范第二种情况。
针对CheckSum的计算,首先必须将所要发送的字符串中的字符一个个地转换为ACSII码中所对应的号码。
在Visual Basic中,将一个字符转换为ASCII码的函数就是Asc函数例如:No1=Asc{“$”}所返回的结果就是字符”$”在ASCII码中的号码(结果是36)。
根据该号码将全部发送字符的ASCII 码相加,所得的数值取十六进制,并取该十六进制中的最末端两位,即为CheckSum的结果。
程序的部分代码如下:checksum = 0 初始化For i = 1 To BuFLenBuf = Mid(InBuf, i, 1) 取出字符和&HFF进行and运算可以将结果限定在&HFF以内,即取255的余数CheckSum = (CheckSum + Asc(Buf)) And &HFFNext i上述程序的最后,CheckSum变量即为进行完计算的数值,为了使其可以同时和原字符串一起发送,只要在程序中加入Hex(CheckSum)即可形成字符。
Hex函数会将要转换的数值转成字符串形式,因此CheckSum 数值就会变成了字符串。
4 程序实现由于CheckSum的使用必须使得通信的双方都同意,所以除了发送方必须进行CheckSum的计算外,接收方通常也必须针对对方传来的字符串再进行一次确认的操作,该确认的操作也必须再执行一次计算的工作,若为了方便,最好的方式就是开发两个子程序,一个专门进行输出字符串时的CheckSum计算及合并原字符串的工作;另一个则是在接收到对方传来的字符串后,再一次计算其CheckSum的结果,并和字符串尾端的CheckSum结果进行比较,确认结果的正确性。
因此笔者分别就这两个部分开发了两个函数。
4.1 发送端函数OutCheckSum用于处理所要送出的字符串,只要将所要送出的字符串传入,返回的结果字符串即已经过CheckSum处理,其流程图如图1所示:图1 输出命令时的CheckSum流程图而程序编写则如下:Function OutCheckSum(InBuf As String) As StringDim BufLen As Integer, Buf As StringDim i As IntegerDim CheckSum As LongBufLen = Len(InBuf) 取得传入字符串的长度CheckSum = 0 初始化For i = 1 To BufLenBuf = Mid(InBuf, i, 1) 取出字符和&HFF进行and运算可以将结果限定在&HFF以内,即取255的余数CheckSum = (CheckSum + Asc(Buf)) And &HFFNext i字符串重组,并加上结尾字符CrBuf = IIf(Len(Hex(CheckSum)) = 1, "0" & Hex(CheckSum), Hex(CheckSum))OutCheckSum = InBuf & Buf & vbCrEnd Function上述的函数中使用了IIf函数的第1个参数是判断式,当该判断式成立时,第2个参数结果返回;当该判断式不成立时,则返回第3个参数。
我们用来判断所形成的CheckSum是一位数还是两位数,一般均要求CheckSum字符串必须是两位数,故不足的位数前面必须加上一个0。
4.2 接收端函数INCheckSum用于处理接收到的返回字符串,只要将所接收到的字符串传入,返回的结果字符串即已经过CheckSum 检查,并删除CheckSum及结尾字符,其流程如图2所示:图2 检查返回结果的CheckSum流程而程序编写如下:Function InCheckSum(InBuf As String) As StringDim BufLen As Integer, Buf As StringDim i As IntegerDim CheckSum As LongBufLen = Len(InBuf) 取得传入字符串的长度CheckSum = 0 初始化For i = 1 To BufLen - 3需扣掉两个CheckSum字符和结尾字符Buf = Mid(InBuf, i, 1) 取得字符和&HFF进行and运算可以将结果限定在&HFF以内CheckSum = (CheckSum + Asc(Buf)) And &HFFNext iIf CheckSum = Val("&H" & Mid(InBuf, BufLen - 3 + 1, 2)) ThenInCheckSum = Mid(InBuf, 1, BufLen - 3)ElseInCheckSum = ""End IfEnd Function有了以上的两个函数,只要在输出时先调用OutCheck Sum将检查码计算出;而接收到数据后,送入INCheckSum进行再一次的确认,即可建立错误预防机制了。