使用VB中的MSComm控件实现串口通信

合集下载

VB6.0下MSComm控件实现串口通信

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为布尔类型,表明通讯端口的状态。

用VB怎么做COM口通讯`

用VB怎么做COM口通讯`

用VB怎么做COM口通讯`Private Sub Command1_Click()MSComm1.Output = "123456"End SubPrivate Sub Form_Load()MSComm1.PortOpen = TrueMSComm1.RThreshold = 1MSComm1.SThreshold = 1MSComm1.InputMode = comInputModeTextText1 = ""End SubPrivate Sub MSComm1_OnComm()Select Case mEventCase comEvSendText1 = "comEvSend"Case comEvReceiveText1 = "comEvReceive"Case comEvCTSText1 = "comEvCTS"Case comEvDSRText1 = "comEvDSR"Case comEvCDText1 = "comEvCD"Case comEvRingText1 = "comEvRing"Case comEvEOFText1 = "comEvEOF"End SelectEnd Sub以下参考MSDN:OnComm 常数常数值描述comEvSend 1 发送事件。

comEvReceive 2 接收事件。

comEvCTS 3 clear-to-send 线变化。

comEvDSR 4 data-set ready 线变化。

comEvCD 5 carrier detect 线变化。

comEvRing 6 振铃检测。

comEvEOF 7 文件结束。

MSComm 控件提供下列两种处理通讯的方式:事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

vb串口通讯usb通讯,很有用哦

vb串口通讯usb通讯,很有用哦
(1)事件
OnComm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。通过对CommEvent 属性的判断可知当前的通信错误和事件,分别对每个CommEvent 值进行编程就完成了对各个错误和事件的处理。如:CommEvent = MSCOMM—EV—SEND 表示发送事件。这些信息可从VB 提供的常量文件CONSTANT. TXT中查出。
完成发送数据后的一系列操作。如:对刚发送的数据进行处理,当串口是和MODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。
RThreshold :设置并返回不触发OnComm事件时接收缓冲区被允许的最多字符数。当缓冲区的字符多于设置的值时,则触发OnComm 事件,并把CommEvent 设为MSCOMM—EV—RECEIVE,当RThreshold = 0 则禁止接收触发OnComm 事件,当RThreshold = 1 则接收缓冲区有一个或更多字符时就触发OnComm事件。利用这一属性,就可完成对串口接收数据的处理。
comm1. OutBufferSize = 512 ′设置发送缓冲区为512 字节 comm1. InBufferSize = 512 ′设置接收缓冲区为512 字节
comm1. SThreshold = 0 ′禁止发送事件
comm1. RThreshold = 1 ′每一个字符到接收缓冲区都触发接收事件 ′设置COM2
(2)属性
CommPort :设置通信控件与哪个串口相连接,设置并返回通信口号。 Setting :设置通信的信息格式,为字符型。顺序为:波特率、校验、数据位、停止位。
PortOpen :布尔型、开关通信口。
InputLen :从接收缓冲区读取字符个数。

使用VB中的MSComm控件实现串口通信

使用VB中的MSComm控件实现串口通信

使用VB中的MSm控件实现RS-232串口通信实验准备:需要准备一些与串口通信有关的设备,如〔外置式〕调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE的无调制解调器连接线〔接法见本章有关习题的参考答案〕,在实验前检查计算机的两个串口是否能够正常工作。

实验环境:Windows 95/98操作系统,Microsoft VB 5.0以上程序设计环境。

对例题中涉及调制解调器的容,采用计算机与调制解调器连接的方式;对在例题中设计数据传输的容,须事先将DTE到DTE 的无调制解调器连接线的两端,分别插入1和2串口。

实验说明:VB中的MSm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSm控件提供以下两种处理通讯的方式:〔1〕事件驱动(实时)方式,这是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在Carrier Detect〔CD〕或RequestToSend〔RTS〕线上一个字符到达或一个变化发生时。

在这些清况下,可以利用MSm 控件的Onm事件捕获并处理这些通讯事件。

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

〔2〕轮询方式,在程序的每个关键功能之后,可以通过检查mEvent 属性的值来查询事件和错误。

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

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

每个使用的MSm控件都对应着一个串行端口。

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

可以在Windows"控制面板〞中改变端口地址和中断地址。

下面这个简单的例子采用了轮询方法演示了用调制解调器进展根本的串行通讯:Private Sub Form_Load〔〕Dim Instring As String '保存输入子串的缓冲区MSm1.mPort=3 '使用3。

VB6.0环境下利用Mscomm控件实现串行通信

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)来加快应用程序关键部分的执行速度。

基于VB中MSComm控件的串行通信

基于VB中MSComm控件的串行通信
1 12 查 询 方 式 ..
为复杂 的 AP 函数 ,而且在 Viu l ( I s a C 以下简称 VC ,V ) B,D lh 等语言 中均可使用 。Mir sf ep i coot
C mmu iain o to( C mm) 是
王 丽 英 : 于 VB中 MS o 基 C mm 控 件 的 串行 通 信
■]●
下,这种 方式显 得更为便捷。在程序 的每个 关键功 能之后 , 以通过检查 C mmE e t属性值来查询 可 o vn
事件和错误 。 如果应用程序较小 , 并且是 自保持 的,
准 串行连接线路 图如 图 2 所示 。
王 丽英
( 宁 机 电职 业技 术 学 院 ,辽 宁 辽 丹 东 18 0 ) 0 2 1
摘 要 : 了降低仪 器仪 表成 本、减 小体 积,采用 串行方式传递数据 。要做到 准确 无误 ,P 机和 单片机的波 为 C
特 率 必 须 一致 。V 的 数据 格 式 必 须 采 用二 进 制 。利 用# cm . 件 的 事件 驱 动 通 信方 式捕 获 并处 理 通 信 中发 B中 somf  ̄
维普资讯
2 0 0 6年 4月 第 1卷第 2 0 期
宁 波 职 业 技 术 学 院 学 报
J OURNAL OF NI NGBO P YTECHNI OL : C
A pr 2006 , V0I 0NO. .1 2
基于 V B中 MS o C mm 控件 的串行通信
0 引 言
在工业控制领域 , 经常遇 到需要 把信号 远距 离 传输的 问题 。尤其是 由于计算机 的广泛使用 ,需 要 P C机 和单片机之 间进行数据交换 。本文将讨论 利 用 V s a B s 作为计算机语 言 ,与单片机进行 串 i l ai u c 行通 信。在 V s a B s ( i l ai 以下简称 VB 中,微软专 u c ) 门设计 了通 信控件 MS o C mm, 它利用 P C机 的两个

VB控件MSComm串口通讯实例教程

VB控件MSComm串口通讯实例教程

现有电子秤一台,使用串口与计算机进行通讯。

编写VB程序来访问串口,达到读取电子秤上显示的数据。

该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。

所有字符现有电子秤一台,使用串口与计算机进行通讯。

编写VB程序来访问串口,达到读取电子秤上显示的数据。

该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。

所有字符均发送11位ASCII码,一个起始位。

在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 6.0中)。

具体程序如下:控件简称:MSCDim Out(12) As Byte '接收var中的值Dim var As Variant '接收MSC.input中的数值Dim nRece As Integer '计算MSC.inputbuffer的个数Dim i As Integer, j As Integer '随即变量,计算循环************************************************************************** **Private Sub Form_Load()ClearTextWith MSC.CommPort = 1 '设置Com1为通信端口.Settings = "9600,E,7,2" '设置通信端口参数 9600赫兹、偶校验、7个数据位、2个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。

含义是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit).InBufferSize = 40 '设置缓冲区接收数据为40字节.InputLen = 1 '设置Input一次从接收缓冲读取字节数为1.RThreshold = 1 '设置接收一个字节就产生OnComm事件End WithEnd Sub************************************************************************** **Private Sub ClearText()Text3.Text = ""Text2.Text = "5"Text1.Text = ""End SubPrivate Sub Command1_Click()ClearText' nRece = 0 '计数器清零With MSC.InputMode = comInputModeBinary '设置数据接收模式为二进制形式.InBufferCount = 0 '清除接收缓冲区If Not .PortOpen Then.PortOpen = True '打开通信端口End IfEnd WithEnd SubPrivate Sub MSC_OnComm()DelayTime ‘用来延续时间ClearTextWith MSCSelect Case .CommEvent '判断通信事件Case comEvReceive: '收到Rthreshold个字节产生的接收事件SwichVar 1If Out(1) = 2 Then '判断是否为数据的开始标志.RThreshold = 0 '关闭OnComm事件接收End IfDoDoEventsLoop Until .InBufferCount >= 3 '循环等待接收缓冲区>=3个字节' nRece = nRece + 1For i = 2 To 12SwichVar iText1.Text = Text1.Text & Chr(Out(i))NextText1.Text = LTrim(Text1.Text)Text2.Text = Text2.Text & CStr(nRece).RThreshold = 1 '打开MSComm事件接收Case Else' .PortOpen = FalseEnd SelectEnd WithEnd Sub************************************************************************** **Private Sub DelayTime()Dim bDT As BooleanDim sPrevious As Single, sLast As SinglebDT = TruesPrevious = Timer (Timer可以计算从子夜到现在所经过的秒数,在Microsoft Windows中,Timer函数可以返回一秒的小数部分)Do While bDTIf Timer - sPrevious >= 0.3 Then bDT = FalseLoopbDT = True(通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)Private Sub SwichVar(ByVal nNum As Integer)DelayTimevar = Nullvar = MSC.InputOut(nNum) = var(0)End Sub(设置接收数据模式采用二进制形式,即 InputMode=comInputModeBinary,但用Input 属性读取数据时,不能直接赋值给 Byte 类型变量,只能通过先赋值给一个 Variant 类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。

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 :布尔型、开关通信口。

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

使用VB中的MSComm控件实现RS-232串口通信实验准备:需要准备一些与串口通信有关的设备,如(外置式)调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE的无调制解调器连接线(接法见本章有关习题的参考答案),在实验前检查计算机的两个串口是否能够正常工作。

实验环境:Windows 95/98操作系统,Microsoft VB 5.0以上程序设计环境。

对例题中涉及调制解调器的内容,采用计算机与调制解调器连接的方式;对在例题中VB(1(CD)(2来查询事件和错误。

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

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

每个使用的MSComm控件都对应着一个串行端口。

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

可以在Windows“控制面板”中改变端口地址和中断地址。

下面这个简单的例子采用了轮询方法演示了用调制解调器进行基本的串行通讯:Private Sub Form_Load()Dim Instring As String '保存输入子串的缓冲区mPort=3 '使用COM3。

MSComm1.Settings="2400,N,8,1"'2400波特率,无奇偶校验,8位数据位,一位停止位下面我们将讲述一下MSComm控件的所有属性,其中前5个是最基本的,必须首先掌握。

⑴MsComm控件属性1)CommPort,设置并返回通讯端口号。

语法为:mPort[=value]说明:value一为一个整型值,说明端口号。

在设计时,va1ue可以设置成从1到16的任何数(缺省值为1)。

但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。

注意:必须在打开端口之前设置CommPort属性的值。

2)Settings,设置并返回波特率、奇偶校验、数据位、停止位参数。

语法为:0bject.Settings[=value]S为件不支持的通讯设置值,那么硬件可能不会正常工作。

如果在端口打开之前,DTREnable或RTSEnable属性设置为True,当关闭端口时,该属性设置为False。

否则,DTR和RTS线保持其先前的状态。

下例以波特率2400打开4号通讯端口,没有奇偶检查,7个数据位,1。

5个停止位:MSComm1.Settings="2400,n,7,1.5"mPort=4MSComm1.PortOpen=True4)Input,返回并删除接收缓冲区中的数据流。

该属性在设计时无效,在运行时为只读。

语法为:Object.Input说明:InputLen属性确定被Input属性读取的字符数。

设置InputLen为0,则为End IfEnd Sub5)Output,往传输缓冲区写数据流。

该属性在设计时无效,在运行时为只读。

语法为:object.Output[=value]说明:value一为准备写到传输缓冲区中去的一个字符串。

Output属性可以传输文本数据或二进制数据。

用Output属性传输文本数据,必须定义一个包含一个字符串的Variant。

发送二进制数据,必须传递一个包含字节数组的variant到Output属性。

一般情况下,如果发送一个ANSI字符串到应用程序,可以以文本数据的形式发送。

如果发送包含嵌人控制字符、Null字符等等的数据,要以二进制形式发送。

例:这个例子说明如何将用户键人的每一个字符送到串行端口:7)8)CommEvent,返回最近的通讯事件或错误。

该属性在设计时无效,在运行时为只读。

9)CommID,返回一个说明通讯设备的句柄。

该属性在设计时无效,在运行时为只读。

说明:该值与Windows API CreateFile函数返回的值一致。

在WindowsAPI中调用任何通讯例程时使用该值。

10)C TSHolding,确定是否可通过查询ClearToSend(CTS)线的状态发送数据。

C1earTo Send是调制解调器发送到相联计算机的信号,指示传输可以进行。

该属性在设计时无效,在运行时为只读。

11)D SRHolding,确定DataSetReady(DSR)线的状态。

Data Set Ready信号由调制解调器发送到相连计算机,指示作好操作准备。

该属性在设计时无效,在运行时为只读。

12)D TREnable,确定在通讯时是否使DataTerminalReady(DTR)线有效。

Data Terminal13)E(Handshaking是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。

当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。

如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。

握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。

15)I nBufferCount,返回接收缓冲区中等待的字符数。

该属性在设计时无效。

说明:InBufferCount是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。

可以把InBufferCount属性设置为0来清除接收缓冲区。

"")。

有需要数目的字符。

该属性在从输出格式为定长数据的机器读取数据时非常有用。

例:这个例子说明如何读取25个数据字符:Private CmdRead_Click()Dim CommData as StringMSComm1.1nputLen=25 '确定一个25个字符的数据块。

CommData=MSComm1.Input '读数据。

End Sub18)I nputMode,设置或返回Input属性取回的数据的类型。

说明:InputMode属性确定Input属性如何取回数据。

数据取回的格式或是字符串或是一数据组的二进制数据的数组。

若数据只用ANSI字符集,则用comInputModeText。

对其它字符数据,如数据中符的字符。

说明:缺省的情况是,Mscomm控件用问号(?)替换非法字符。

如果设置parityRep1ace为一个空字符串(""),则当奇偶校验错误出现时,字符替换无效。

但onComm事件仍然产生,并且设置CommEvent。

属性为comEventRXparity。

ParityReplace字符被用于面向字节的操作,它必须是单字节字符。

可指定0到255之间的任何ANSI字符代码。

23)R threshold,在MSCoinm控件设置CommEvent属性为comEvReceive,并产生onComm事件之前,设置并返回的要接收的字符数。

24)R TSEnable,确定是否使Requestrosend(RTS)线有效。

一般情况下,由计算机发送RequestToSend信号到联接的调制解调器,以请示允许发送数据。

25)S threshold,在MSComm控件设置。

CommEvent属性为comEvSend并产生onComm事件之前,设置并返回传输缓冲区中允许的最小字符数。

1)和控件及属性设置:程序代码:'发送窗体程序Private Sub Form_Load()mPort = 1 '使用COM1。

End Sub'接收窗体程序Private Sub Form_Load()mPort = 2 '使用COM2。

MSComm1.Settings = "2400,N,8,1"MSComm1.InputLen = 0MSComm1.PortOpen = TrueEnd SubPrivate Sub Form_Click()Text1.Text = MSComm1.Input '从串行端口读内容。

End SubPrivate Sub Form_Unload(Cancel As Integer)1)2)3)状态,工程名称:MSComm_Show2.vbp发送窗体名称:MSComm_Send2.frm接收窗体名称:MSComm_Receive_Realtime.frm控件及属性设置:Private Sub Form_Unload(Cancel As Integer) MSComm1.PortOpen = FalseEnd Sub'接收窗体程序Private Sub Form_Load()mPort = 2 '使用COM2。

MSComm1.Settings = "2400,N,8,1"MSComm1.InputLen = 0MSComm1.PortOpen = TrueMscomm_Receive_Reatime.Show '显示轮询接收窗体,启动接收程序End Sub1)2)用鼠标将光标设置到发送窗体的文本框中,在文本框中输入字母或数字,观察接受窗口的文本框有无变化;3)请将接受窗体的MSComm1的Rthreshold属性改为5,重新启动程序,注意收发过程的变化,请考虑一下程序执行的过程和实时方式的工作原理。

相关文档
最新文档