基于VB 6.0的串口通讯程序设计
基于VB6_0的多方式串口通信实现

基于VB6.0的多方式串口通信实现侯志军1) 高媛媛2) 沙 楠1)(解放军理工大学通信工程学院研一队1) 南京 210007) (解放军理工大学通信工程学院无线通信系2) 南京 210007)摘 要:串口通信因其通信线路简单、使用灵活方便,在许多领域应用广泛。
基于串口通信和MSComm控件原理,详细介绍了利用VB6.0编程实现手动和自动发送字符/数据、文本文件等多方式串口通信的方法,并给出了具体程序和解释。
对VB6.0编程者的学习具有一定的启发和参考价值。
关键词:RS-232 Visual Basic6.0(VB6.0) MSComm 多方式 串口通信中图分类号:TN915.05Use VB6.0to Program Multimode Serial Communication ProgramHou Zhijun1) Gao Yuanyuan2) Sha Nan1)(Postgraduate Team1ICE,PLAUS T1),Nanjing 210007)(Department of Radio Communication,ICE,PLAUST2),Nanjing 210007)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.0to program the Mu-l ti mode 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 Basic6.0,MSComm control,mul timode,serial communication programClass number:TN915.05串口通信由于具有通信线路简单、使用灵活方便、数据传输可靠等优点,在工业监控、数据采集和实时控制等场合得到了广泛的应用。
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的PC机与单片机串口通讯的实现

基于VB6.0的PC机与单片机串口通讯的实现魏延萍【期刊名称】《信息技术》【年(卷),期】2011(000)007【摘要】RS-232 serial port is used to carry out the communication between PC and singlechip microcomputer. The hardware connection scheme and the associated communication protocols are designed in details. The MSComm component is researched, and the communication program based on VB6.0 is developed, and the detailed programming is presented. An example proved that the design is stable and reliable, and can satisfy the design requirement and function, and the system is provided with a good reference value for developing similar system.%应用RS-232串口实现PC机与单片机之间的通讯,设计了其硬件连接电路及相关通讯协议.研究了MSComm控件,并编写了基于VB6.O的通讯软件程序,给出了详细的程序设计.通过实例,证明该设计运行稳定可靠,能满足设计的需求和功能,对于开发类似的系统具有很好的参考价值.【总页数】3页(P38-40)【作者】魏延萍【作者单位】宝鸡文理学院物理与信息技术系,宝鸡721007【正文语种】中文【中图分类】TP311.1【相关文献】1.基于VC6.0的多台MSP430单片机和PC机串口通讯实现方案 [J], 周辉军;许亮;韩瑞宁2.基于VB6.0的PC机与多单片机串行通信设计与实现 [J], 孔德刚;肖海荣;安国建;刘文江3.利用VB6.0实现PC机与单片机的串口通讯 [J], 付旭;方康玲4.基于VB6.0实现单片机与PC机的串口通信 [J], 陈代胜;张莉君;;;5.基于VB6.0实现PC机与单片机的串行通讯 [J], 杨佩璐因版权原因,仅展示原文概要,查看原文内容请购买。
VB6.0串口操作

VB6.0串口操作职业2010-12-22 11:30:58 阅读60 评论0 字号:大中小订阅一直想通过计算机人机界面来控制单片机,感觉用软件控制硬件,即计算机控制是一件比较有意思的事情。
计算机与单片机的连接,是通过串口来实现的。
如何实现,我想应该明白VB怎样来操作串口,实现VB操作串口,就可以把单片机串口线接入计算机,从而实现真正的计算机控制单片机。
这其他是别人早已实现了的,我因为是刚接触,就写下来留作纪念吧。
开发软件:Visual Basic 6.0企业版(VB6)新建一个工程:标准EXE。
接下来做Form界面。
代码:Private Sub Combo1_Click()If MSComm1.PortOpen = True Then '如果串口打开先关闭后再进行其他操作MSComm1.PortOpen = FalseEnd IfmPort = Combo1.ListIndex + 1End SubPrivate Sub Command1_Click()Dim Temp(0) As ByteDim strBuff As StringIf Option3.Value = True Then '如果显示16进制发送则进行16进制处理,这里只发送一个Temp(0) = "&H" & Text1MSComm1.Output = Temp '发送一个16进制ElsestrBuff = Text1End IfIf MSComm1.PortOpen = False ThenMsgBox "请打开串口"End IfOn Error GoTo uerrorMSComm1.Output = strBuffuerror: End SubPrivate Sub Command2_Click()On Error GoTo uerror '发现错误跳转到错误处理If Command2.Caption = "关闭串口" ThenMSComm1.PortOpen = FalseCommand2.Caption = "打开串口" '按钮文字改变Shape1.FillColor = &HFFFFC0 '灯颜色改变ElseMSComm1.PortOpen = TrueCommand2.Caption = "关闭串口"Shape1.FillColor = &HFFEnd IfExit Subuerror:msg$ = "无效端口号" '错误显示Title$ = "串口调试助手"x = MsgBox(msg$, 48, Title$) '48标示显示警告图标End SubPrivate Sub Command3_Click()Text2.Text = ""End SubPrivate Sub Command4_Click()Text1.Text = ""End SubPrivate Sub Form_Load()If MSComm1.PortOpen = True ThenMSComm1.PortOpen = FalseElseEnd IfCombo1.AddItem "COM1"Combo1.AddItem "COM2"Combo1.AddItem "COM3"Combo1.AddItem "COM4"Combo1.AddItem "COM5"Combo1.AddItem "COM6"Combo1.AddItem "COM7"Combo1.AddItem "COM8"Combo1.AddItem "COM9"Combo1.AddItem "COM10"Combo1.AddItem "COM11"Combo1.AddItem "COM12"Combo1.AddItem "COM13"Combo1.AddItem "COM14"Combo1.AddItem "COM15"Combo1.AddItem "COM16"Combo1.ListIndex = 0mPort = Combo1.ListIndex + 1 MSComm1.Settings = "9600,n,8,1"Command2.Caption = "打开串口"Shape1.FillColor = &HFFFFC0Option2.Value = TrueOption4.Value = TrueCombo2.AddItem "256000"Combo2.AddItem "128000"Combo2.AddItem "115200"Combo2.AddItem "57600"Combo2.AddItem "38400"Combo2.AddItem "28800"Combo2.AddItem "19200"'Combo2.AddItem "14400"'Combo2.AddItem "12800"'Combo2.AddItem "11520"Combo2.AddItem "9600"Combo2.AddItem "4800"Combo2.AddItem "2400"Combo2.AddItem "1200"Combo2.AddItem "600"Combo3.AddItem "无None"Combo3.AddItem "奇Odd"Combo3.AddItem "偶Even"Combo4.AddItem "4"Combo4.AddItem "5"Combo4.AddItem "6"Combo4.AddItem "7"Combo4.AddItem "8"Combo5.AddItem "1"Combo5.AddItem "2"End SubPrivate Sub MSComm1_OnComm()Dim BytReceived() As ByteDim strBuff As StringDim i As IntegerSelect Case mEvent '事件发生Case 2ClsMSComm1.InputLen = 0 '读入缓冲区全部内容strBuff = MSComm1.Input '读入到缓冲区If MSComm1.InputMode = 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()MSComm1.InputMode = comInputModeBinaryEnd SubPrivate Sub Option2_Click()MSComm1.InputMode = comInputModeTextEnd Sub重要:一。
VB6.0环境下利用Mscomm控件实现串行通信

VB6.0环境下利用Mscomm控件实现串行通信Use Mscomm Control Component to Implement Serial Communication under Visual Basic摘要: 本文简要介绍了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)来加快应用程序关键部分的执行速度。
基于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的串口通讯程序设计

ห้องสมุดไป่ตู้
基 于 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不 但 提 供 了 良好 的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VB6.0的串口通讯程序设计摘要:详细介绍了VB6.o中通讯控件MSComm的一些重要属性及在Windows环境下用通讯控件来实现串行通信的编程方法,并结合实例给出了一个基本的通讯程序。
关键词:串行通信;通信控件;Visual Basic6.01引言随着计算机的迅速普及和计算机控制技术的发展,计算机被广泛应用于自动化控制领域之中。
而要完成一个控制过程一般都要利用集散式计算机控制系统。
在这种控制系统中,下位机主要完成对现场数据采集和对设备一级的监控,上位机则要完成对整个系统的采集、分析、处理和控制以及数据、图形显示、打印、人机对话等工作。
而上位机与下位机大多是通过PC机的RS-232串行接口实现通信。
随着Windows系统的普及,越来越多的用户由DOS系统转向了Windows系统,这使得数据采集及工业控制软件也上升到了Windows环境下。
这就给程序员提出了如何编写面向Windows的串行通信程序问题。
虽然Windows提供了完备的开放式通用增强的W32API(应用程序接口)函数,它把对串口和其他通信设备的支持和基本输入驱动程序集于一体。
但是,对于非专业软件设计人员来说,使用VC++,C等高级语言来完成这类程序的设计,其复杂性与专业化程度依然很高。
而Visual Basic6.0(以下简称VB)是一个Windows下简单、易学、高效的可视化软件开发平台,它以所见即所得的可视化界面设计风格和32位面向对象程序设计的特点,已被广泛应用到各个领域,成为众多开发人员采用的工具。
VB 不但提供了良好的界面设计能力,而且在串口通信方面也有很强的功能。
它提供的Microsoft Communication control(以下简称MSComm)这样一个通信控件,该控件“隐藏”了大部分串口通信的低层运行过程和许多繁琐的过程,它使用户能够方便地访问Windows下串口通信驱动程序的大多数特性。
所以整个串行通信程序的开发过程变得十分简单易行,程序员不需要处理繁琐的细节,而通过利用通信控件,只需编写少量的代码来实现主要应用功能和界面的设计,就可以完成软件的开发过程。
2VB6.0串行通信控件的介绍MSComm是Microsoft公司提供的主要用于串行通信编程的ActiveX控件。
ActiveX控件包括一系列的属性、方法和事件,应用程序通过ActiveX控件提供的接口来访问控件的功能。
我们知道通过C、VC++编写串口通信程序,是要使用API函数发送和接收数据。
而MSComm控件实际上是这些Windows API函数的有机集成,它以属性和事件的形式提供了对Windows通信驱动程序的API接口,封装了API函数的低层操作,为应用程序提供了通过串行接口收发数据的简便方法。
因此,编程人员只需在程序中设置和监视MSComm控件的属性和事件即可完成对串口的编程。
MSComm控件不在最常用的控件工具箱中出现,故编程的第一步应添加到工具栏上以方便编程。
具体的做法如下:单击VB6.0菜单栏中的“工程”菜单,并选择“部件”命令,在部件对话框种选择Microsoft Comm Control6.0,此时工具箱应出现一个电话图表,这就是MSComm图标。
2.1VB6.0中MSComm通信控件的属性通信控件把许多复杂的操作都留给了VB和Windows处理,编程人员编程时只需设置其中的一些属性,下面是几个常用的属性:Commport:设定或传回通信连接端口代号。
程序必须指定所要使用的串行端口的号码,Windows系统会使用所设定的通讯端口与外界做通讯。
程序亦可经由此属性读回所使用的连接端口的号码。
在此所设定的通讯端口由1开始往上递增,MSComm控件的最大值为16,当使用的通讯端口超过16时,控件会通知错误。
如:MSComm1Commport=1指定Com1作为通讯传输。
Settings:设定初始化参数。
以字符串型式设定或传回联机速度、同位检查、数据位、停止位等4个参数。
其格式为“BBBB,P,D,S”,其中BBBB为联机速度,P为同位检查方式,D为数据位数,S为停止位数。
默认值是“9600,n,8,1”,意为“所使用的通讯端口是以每秒9600B的速度作传输,不做同位的检查,每个元是8个Bit,而停止位是1个Bit”,而且此4项必须是依照顺序,不可前后对调。
Settings设定完成以后,所送出及收回的字符串便以此设定为主,使用RS-232通讯的两方,Settings必须完全一样,彼此才能顺利地沟通,否则双方无法收到彼此所送的信号。
如:MSComm1Settings=“9600,n,8,1”PortOpen:设定或传回通讯接口端口的状态。
使用串行端口之前必须先将使用的串行埠先行开启,而使用完毕之后,也必须执行关闭的动作。
InPut:从输入缓冲区传回并移除字符。
程序靠这个指令将从对方所传至缓冲区的字符读进程蓄洪,并清除缓冲区中已被读取得自负,这是一种FIFO 的机制。
如:Buffer$=MSComm1Input将输入缓冲区的字符读入Buffer字符串变量中Output:将一个字符串写入传输缓冲区。
当程序需要向对方传输字符串时,可将字符串使用此指令写入输出缓冲区中。
至于串行端口是否将此字符传送到对方的串行输入缓冲区中,则要视送出字符串这方是否设定传送门槛属性而定。
如:MSComm1Output=“ABCDE”,此即将ABCDE五个字母通过RS-232传送出去。
InPutLen:指定由串行端口读入的字符串的长度。
InPut指令将存放在输入暂存区的字符读入,但欲指定所读入的字符长度则需要使用本属性而设定。
如:MSComm1InPutLen=10,当程序执行Input指令时,只会读取10个字符。
那什么时候使用InPutLen指令呢?如果我们需要对固定的字符串长度作特别的运算或判断时,就必须使用这个技巧。
Rthreshold:设定或传输引发接收事件的字符数。
即属性页上的“最小接收字符数”,当接收缓冲区达到所设定的字符数时,将会引起OnComm事件中的接收事件。
所以此属性也就是引起接收事件的“门槛值”,此属性的默认值是0,其意义是无论缓冲区中有多少字符都不引起接收事件。
如:MSComm1Rthreshold=20。
当接收缓冲区达到20个字符时,引发接收事件。
Sthreshold:设定或传回引发传送事件的字符数。
如果在传输暂存缓冲区种的字符少于所设定的数值,则CommEvent属性会被设定为CommEvSend,并产生OnComm事件。
如:MSComm1Sthreshold=20。
当传送缓冲区字符少于20个字符时,引起传送事件。
CommEvent:只要有通讯错误或事件发生时都会产生OnComm事件,CommEvent属性存有该事件或错误的数值码,其中最常用到的通讯事件是CommEvReceive,它的值为2,表示收到了Rthreshold个字符。
该事件将持续产生直到用Input属性从接受缓冲区移出数据。
2.2MSComm处理通信的两种方法MSComm控件提供了两种控制串口的方法,类似于DOS的中断和查询。
事件驱动方式OnComm事件是MSComm控件提供的唯一事件。
当有数据到达端口或端口状态发生改变或有通信错误产生时,都将触发OnComm事件,以捕获和处理这些通信中产生的错误,通过查询CommEvent属性值,可以获得关于通信事件和通信错误的完整信息,进而进行处理。
这是一种功能很强的处理串行口活动的方法,具有程序响应及时、可靠性高的特点。
查询法MSComm控件的CommEvent属性返回通信中产生的事件和错误类型,由通信控件自动检测和跟踪通信状态后设置。
因此,在小的程序中,程序员可以在每个重要的程序功能之后检查CommEvent属性值来检测事件和通信错误。
如果程序小,实时性不高,这种方法是可取的。
两种方式都可以达到数据传送的目的,到底谁较好?并没有一个定论,要看实际的系统环境而定,也许这两种方式都用得上。
2.3MSComm控件数据通信的两种格式我们在进行串口通信时,一般为字符传送方式。
但在某些情况下传送的却不见得是纯文字形态的数据,而是数据或文件。
在这种情况下,位在传输线上的数据就是一个字节接一个字节地被传送过来,接收端收到这些数据后,再与以组合形成数据资料或文件,这种情形就是Binary(二进制数据)方式传送。
对应这两种传送方式,用户可以通过对MSComm控件中的InputMode属性的设置来决定Input属性如何取回数据。
数据是以字符串的形式接收还是作为字节数组中的二进制来接收,完全视此属性来决定。
当InputMode取值为0时(默认值)数据以文字形式取回,当取值为1时,数据以二进制形式取回。
3应用举例下面我们就来探讨一个简单的传输试验。
为了方便,我们把一条RS-232串口传输线上的第2脚与第3脚短路,即从Com1的TXD引脚发送出去的数据又由Com1的RXD引脚接收回来。
那么由第3脚输出的讯号就会被传送到第2脚而形成一个完整的回路,从而进入同一部计算机的输入缓冲区。
程序只要再由相同的计算机上做续回的动作,即可将数据读入,一样可以形成一个测试环境。
这样就达到了我们用单部计算机来模拟两部计算机进行串口通讯的目的。
本例中以二进制格式发送和接收数据。
首先设计程序的界面:开启一个新的VB项目,并于窗体上安排一个MSComm控件,作为串行通讯的信道,按F4调出其属性窗口,将CommPort属性值改为1;另外将InputMode属性改为1,使其以Binary方式接收数据。
安排两个Label控件,在其Caption属性分别填入“*传送区*”和“*接收区*”作为提醒使用者之用。
安排两个文本框,分别对应到传送区与接收区,作为传送的输入区域与接收讯息的显示区域。
安排两个按钮,在其Caption属性内分别填入“传送字符”与“结束系统”。
所设计出的画面如下:程序所实现的功能:我们希望的表现是按下“传送字符”后,送处在传送区所键入的文字及数据。
当接收门槛值一达到程序员所设定的值,便会将缓冲区中的内容读如,并显示在接收区的文本框里。
程序的几个关键之处:(1)程序将使用到两个动态数组,类型为字节(Byte),分别用于存储传送及接收数据之用。
(2)在送出数据之前,先对数据做一些处理,由于我们要传送的是字节的数据。
因此,首先将输入区内的文字转换为相应的ASCⅡ码,转换后再把数据送出去。
(3)接收数据时先从缓冲区把数据读入事先定义的变量中,再从该变量中读取真正的二进位数据并显示在接收区中。
MSComm只有一个OnComm事件,所有可能发生的状况全部集中在此一事件中处理。
而且只要CommEvent属性值一产生变化,就会产生OnComm事件,这表示发生了一个通讯事件或一个错误。