VB串口通信详细讲解
vb串口通讯usb通讯,很有用哦
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中的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。
VB.Net串口通信用法
串口通信用法 串口通信用法对于初次使用 的SerialPort 编写串口通信的朋友,这些是很必要的知识,也是编写串口通信程序前的知识准备。
1、使用 SerialPort 设置串口属性进行串口通讯时,需要设置一些相关参数,可以通过设置SerialPort 类的属性来进行。
串口属性主要包括.PortName 串口名称,COM1, COM2等。
.BaudRate 波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。
.Parity 奇偶校验。
可以选取枚举Parity中的值.DataBits 数据位.StopBits 停止位,可以选取枚举StopBits中的值.Handshake 握手方式,也就是数据流控制方式,可以选取枚举Handshake中的值对其中几个关键术语解释:a,波特率:这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ASCII码是0~127(7位)。
扩展的ASCII码是0~255(8位)。
如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:用于表示单个包的最后一位。
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串口通信(附图教程)
界面如下:代码如下:Private Sub Form_Load()If MSComm1.PortOpen = True Then MSComm1.PortOpen = False ElseEnd 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 = 2Combo2.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"mPort = Combo1.ListIndex + 1 MSComm1.Settings = "9600,n,8,1"ComOpen.Caption = "打开串口"Shape1.FillColor = &HFFFFC0End SubPrivate Sub ComOpen_Click()On Error GoTo uerror '发现错误跳转到错误处理If ComOpen.Caption = "关闭串口" ThenMSComm1.PortOpen = FalseComOpen.Caption = "打开串口" '按钮文字改变Shape1.FillColor = &HFFFFC0 '灯颜色改变ElseMSComm1.PortOpen = TrueComOpen.Caption = "关闭串口"Shape1.FillColor = &HFFEnd IfExit Subuerror:msg$ = "无效端口号" '错误显示Title$ = "串口调试助手"X = MsgBox(msg$, 48, Title$) '48标示显示警告图标End SubPrivate Sub MSComm1_OnComm()Dim BytReceived() As ByteDim strBuff As StringDim i As IntegerSelect Case mEvent '事件发生Case 2ClsMSComm1.InputLen = 0 '读入缓冲区全部内容strBuff = MSComm1.Input '读入到缓冲区Label10.Caption = Label10.Caption + Len(strBuff) '接收计数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 IfNextTextReceive = TextReceive & strDatastrData = ""ElseTextReceive = TextReceive & strBuffEnd IfEnd SelectEnd SubPrivate Sub ComSend1_Click() '手动发送Dim Temp(0) As ByteDim strBuff As StringIf Option1.Value = True Then '如果显示16进制发送则进行16进制处理,这里只发送一个Temp(0) = "&H" & TextSendMSComm1.Output = Temp '发送一个16进制ElsestrBuff = TextSendEnd IfIf MSComm1.PortOpen = False ThenMsgBox "请打开串口"End IfOn Error GoTo uerrorMSComm1.Output = strBuffLabel11.Caption = Label11.Caption + Len(strBuff) '发送计数uerror:End SubPrivate Sub ComSend2_Click()If ComSend2.Caption = "自动发送" ThenComSend2.Caption = "关闭自动发送"Timer1.Interval = TextTime.TextTimer1.Enabled = TrueElseComSend2.Caption = "自动发送"Timer1.Enabled = FalseEnd IfEnd SubPrivate Sub ComClean1_Click()TextSend.Text = "" '清空发送窗口End SubPrivate Sub Option3_Click()MSComm1.InputMode = comInputModeBinary '选择接收方式End SubPrivate Sub Option4_Click()MSComm1.InputMode = comInputModeText '选择接收方式End SubPrivate Sub Timer1_Timer()Call ComSend1_Click '定时调用手动发送End SubPrivate Sub Timer2_Timer()If Combo3 = "无None" ThenMSComm1.Settings = Str(Combo2) + "N" + Str(Combo4) + Str(Combo5) ElseIf Combo3 = "奇Odd" ThenMSComm1.Settings = Str(Combo2) + "O" + Str(Combo4) + Str(Combo5) ElseIf Combo3 = "偶Even" ThenMSComm1.Settings = Str(Combo2) + "E" + Str(Combo4) + Str(Combo5) End IfEnd SubPrivate Sub Combo1_Click()If MSComm1.PortOpen = True Then '如果串口打开先关闭后再进行其他操作MSComm1.PortOpen = FalseEnd IfmPort = Combo1.ListIndex + 1 '读取com口号End SubPrivate Sub ComClean3_Click()Label10.Caption = 0Label11.Caption = 0End SubPrivate Sub ComClean2_Click()TextReceive.Text = "" '接收窗口End Sub功能上:实现了字符串的发送和接收,8位数据的十六进制发送和接收,有端口,波特率等设置。
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串口设置介绍
mscomm.vbx通信控件描述mscomm.vbx通信控件可直接从vb的toolb ox中加入窗体form,即可用其进行通信。
若toolbo x 中无此控件,则用tools的custo m control s 将mscomm.vbx从win dows的s ystem子目录中加入v b的tool box中。
1.1 通信方式mscomm.vbx有2种不同的方式来处理和解决各类通信软件的开发和设计问题1、事件驱动。
它与c/c++写window s 软件时的窗口回调函数类似,是1种功能强大的处理问题的方法。
在实际工作中,往往要处理许多通信中的相关事件,例如:当线路数据到达本端或cd线和rts 信号线状态发生变化时,要求我们使用相应的事件来跟踪和处理,该控件是使用o ncomm事件来实现的,它也包括检测和处理通信错误等方面的问题,commeve nt 值返回最近的通信事件或错误的数字代码。
通信控件详细的错误和事件举例有:mscomm-er-break 收到1个bre ak signalmscomm-er-cdto cd 信号超时……mscomm-ev-cd cd信号改变……2、查询方式。
由程序设计者负责读取com mevent的值并处理所发生的错误或事件。
通常简单的应用程序设计可采用这种办法。
1.2 通信控件的属性利用通信控件编制通信程序,关键是准确理解设置通信控件的属性。
mscomm.vbx提供了27个关于通信控件方面的属性,例如:commpor t:设置或返回通信口编号。
setting s:设置或返回以字符串形式出现的数据通信格式:波特率、校验、数据位和停止位。
portope n:设置或返回通信口状态(包括打开和关闭1个通信口)……2、实例本程序应用背景为dcc95型静电除尘器自动监控系统软件,解决1个pc工控机(主站)与32个单片机(子站)之间的通信问题。
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下实现串口通信的方法1 VB下实现串口通信的方法1.1 通信控件MSComm简介VB下的串行端口通信是通过其提供的控件Microsoft Comm control(简称MSComm)实现的。
该控件屏蔽了通信过程中的底层操作,程序员只需设置并监视MSComm控件的属性和事件,结合其它VB提供的控件就可完成对串口的初始化和数据的发送接收。
本系统中用到的主要MSComm控件属性如下:①、Commport:设置并返回通信端口代码。
默认值为1,最大值为16,需要使用超过16个通信端口时,要采用其他方式操控通信端口(如PcommPro软件)。
例如将串口2设为通信端口:mPort=2。
②、Setting:设置初始化参数。
其格式为“****,P,D,S”,其中****为波特率(baud),P为校验方式,D为数据位数,S为停止位。
默认值为“9600,N,8,1”,意为“串口通信速度为9600Baud,无校验,每次数据为8个Bit,停止位为1个Bit”。
波特率可为110,300,600,1200,2400,9600,14400,19200,28800,38400(保留)等等。
校验位默认为None(无校验),若传输距离长,可增加校验位,可选M为符号校验,E为偶校验,O为奇校验,S为空白校验。
停止位的设定值可为:1(默认值),1.5,2。
此处的设置要和单片机侧的设置保持一致,否则不能实现正常的通信。
例如我们采用的初始化参数为“2400,N,8,1”,则单片机侧的设置相应项为:定时器1的初值为E6并且SMOD(串行口波特率加倍位)为1(对应2400Bit),串口控制寄存器SCON为40(10位异步收发,对应8Bit数据位,1Bit停止位)。
③、PortOpen:设置或返回通信端口状态。
④、Input:从缓冲区返回并删除字符。
将串行输入寄存器的数据读出,并清除寄存器中已读取的数据。
寄存器的特性是FIFO(First In First Out,先进先出)。
VB中串口通讯的实现详解说明
VB中串口通讯的实现VB中串口通讯的实现一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。
提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。
实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB 中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。
下面,笔者就介绍一下在VB中实现串口通讯的方法。
在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。
我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。
下面,笔者就简要地介绍一下MSComm控件的使用方法。
二、MSComm控件的主要属性、事件1、MSComm的属性由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。
Commport:设置通讯所占用的串口号。
如设成1(默认值),表示对Com1进行操作。
Setting:对串口通讯的相关参数。
包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。
其默认值是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。
Portopen:设置串口状态,值为True时打开串口,值为False时关闭串口。
Input:从输入寄存器读取数据,返回值为从串口读取的数据内容,同时输入寄存器将被清空。
Ouput:发送数据到输出寄存器。
InBufferCount:设置输入寄存器所存储的字符数,当将其值设为0时,则输入寄存器将被清空。
InputMode:设置从输入寄存器中读取数据的形式。
若值为0,则表示以文本形式读取;值为1,则表示以二进制形式读取。
OutBufferCount:设置输出寄存器所存储的字符数,当将其值设为0时,则输出寄存器将被清空。
利用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开发串口USB通信软件
使用VB开发串口USB通信软件串口和USB通信软件是一种用于在计算机和外部设备之间进行数据传输的工具。
VB语言是一种适用于Windows平台的编程语言,可以使用VB 开发串口、USB通信软件。
串口通信是一种常见的数据传输方式,它通过计算机的串口(串行通信口)与外部设备进行连接。
在VB中,可以使用SerialPort类来实现串口通信。
下面是一个使用VB编写的串口通信软件的示例代码:```vbImports System.IO.PortsPrivate WithEvents SerialPort As New SerialPortPublic Sub New'设置串口参数SerialPort.PortName = "COM1"SerialPort.BaudRate = 9600SerialPort.Parity = Parity.NoneSerialPort.DataBits = 8SerialPort.StopBits = StopBits.OneEnd SubPublic Sub Open'打开串口SerialPort.OpenEnd SubPublic Sub Close'关闭串口SerialPort.CloseEnd SubPublic Sub WriteData(ByVal data As String)'向串口写入数据SerialPort.WriteLine(data)End SubPrivate Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) HandlesSerialPort.DataReceived'串口接收到数据时触发的事件Dim data As String = SerialPort.ReadLine'处理接收到的数据Console.WriteLine("Received data: " & data)End SubEnd Class```USB通信是另一种常用的数据传输方式,它通过计算机的USB接口与外部设备进行连接。
visualbasic串口通信及编程实例
visualbasic串口通信及编程实例Visual Basic串口通信及编程实例在实际的工业控制、机器人控制、智能家居等领域中,使用串口通信是一种非常广泛的方式。
Visual Basic (VB) 是一种微软公司开发的高级编程语言,它不仅易于学习,而且拥有丰富的图形界面设计和数据处理功能。
在本篇文章中,我们将深入介绍如何使用VB实现串口通信。
1. 建立串口通信首先,我们需要在VB中创建一个新的窗口(Form),然后打开工具箱,从中拖拽出一个SerialPort(串口)控件。
在控件属性中,我们需要为其指定相关的参数,例如串口名称、波特率、数据位、停止位、校验位等。
通常情况下,这些参数需要根据硬件设备的配置来进行调整。
在VB中实现串口通信的核心部分是对于SerialPort控件的事件监控。
具体来讲,当SerialPort收到一个数据包时,它会触发一个DataReceived事件。
对于这个事件,我们可以在程序中编写回调函数进行处理。
例如:Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e AsSystem.IO.Ports.SerialDataReceivedEventArgs) HandlesSerialPort1.DataReceived'在这里实现对于数据包的解析和处理End Sub2. 数据读取和发送在SerialPort控件中,有几种方法可以实现数据的读取和发送。
下面我们将介绍其中两种方法:(1) ReadExisting这个方法可以从串口中读取所有现有的数据,例如:Dim data As String = SerialPort1.ReadExisting()(2) Write这个方法可以向串口发送数据,例如:SerialPort1.Write("Hello World")注意,这个函数只能发送字符串数据。
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(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与串口通信
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本身提供的控件(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串口通信目前,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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB串口通信目前,Visual Basic (简称VB)已成为WINDOWS 系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。
VB支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。
在VB应用程序可以方便地调用WINDOWS API函数,使得编程效率提高,应用功能增强。
利用VB提供的这些功能,我们可以有三种方法完成串口通信。
一种是用VB提供的具有强大功能的通信控件;另一种方法是调用WINDOWS API函数,使用WINDOWS 提供的通信函数编写移植性强的应用程序;第三是利用文件的输入/输出完成,该方法简便易行,但有一定的局限性。
一、利用通信控件(MSCOMM)完成串口通信VB提供了通信控件MSCOMM,文件名为MSCOMM. VBX。
该控件可设置串行通信的数据发送和接收,对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以触发On Comm 事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问CommEvent属性来了解通信的情况,进行收发数据的处理。
每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。
1、通信控件的事件及基本属性(1)事件On Comm :通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。
通过对CommEvent属性的判断可知当前的通信错误和事件,分别对每个CommEvent 值进行编程就完成了对各个错误和事件的处理。
如:CommEvent = MSCOMM —EV—SEND表示发送事件。
这些信息可从VB提供的常量文件CONSTANT.TXT中查出。
(2)属性CommPort :设置通信控件与哪个串口相连接,设置并返回通信口号。
Setting :设置通信的信息格式,为字符型。
顺序为:波特率、校验、数据位、停止位。
PortOpen :布尔型、开关通信口。
InputLen :从接收缓冲区读取字符个数。
In put ,Output :读取接收缓冲区或写入发送缓冲区字符。
以上五种属性对串口完成基本的设置和操作,下面的三种属性是描述如何利用VB提供的事件驱动机制来实现通信。
CommEvent :返回通信过程中产生的错误信息及事件,了解通信状况。
SThreshold :设置并返回不触发On Comm 事件时发送缓冲区被允许的最少字符数。
当缓冲区的字符少于设置的值时,则触发On Comm 事件,并把CommEve nt设为MSCOMMM —EV—SEND。
当SThreshold = 0 则禁止发送触发On Comm 事件,当SThreshold = 1 则发送缓冲区为空时就触发On Comm 事件。
利用这一属性,就可完成发送数据后的一系列操作。
女口:对刚发送的数据进行处理,当串口是和MODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。
RThreshold :设置并返回不触发On Comm 事件时接收缓冲区被允许的最多字符数。
当缓冲区的字符多于设置的值时,则触发On Comm 事件,并把CommEve nt设为MSCOMM—EV—RECEIVE 当RThreshold = 0 则禁止接收触发On Comm 事件,当RThreshold = 1 则接收缓冲区有一个或更多字符时就触发On Comm事件。
利用这一属性,就可完成对串口接收数据的处理。
2、利用通信控件的实例Sub Forml — load () forml. show 设置COM1comml. commport = 1 End Subcomml. Setti ng = " 9600,o , 8,1"波特率:9600奇校验,8位数据1位停止位comm1. In putle n = 0 读取接收缓冲区的所有字符 comm1. OutBufferSize = 512 设置发送缓冲区为 512字节 comm1. I nBufferSize = 512设置接收缓冲区为 512字节 comm1. SThreshold = 0 comm1. RThreshold = 1 设置COM2'禁止发送事件'每一个字符到接收缓冲区都触发接收事comm2. commport = 2comm2. Setti ng = "2400,e , 8 , 1 "波特率:2400偶验,8位数据,1位停止位comm2. In putle n = 0 读取接收缓冲区的所有字符 comm2. OutBufferSize = 512 设置发送缓冲区为 512字节 comm2. I nBufferSize = 512'设置接收缓冲区为 512字节 comm2. SThreshold = 1comm2. RThreshold = 0发送缓冲区空触发发送事件 禁止接收事件打开 COM1 , COM2 comm1. Portope n = Truecomm2. Portope n =Timer1. i nterval = 5000Sub Comml —On Comm ()Dim Inbuf as stri ngDim i as integer , n as integer , t as integer Select Case Comm1. CommEve ncase MSCOMM —EV—RECEIVEInbuf = Comm1. In putn = len ( Inbuf )For i = 1 to nt = Asc (Mid ( In buff , i , 1) ) or & HFF print fNext iEnd SelectEnd SubSub Comm2 —On Comm ()Select Case Comm2. CommEve ntCase MSCOMM —EV—SENDPrint timeEnd SelectEnd SubSub Timer1 —Timer ()Comm2. output = Second ( Now )End sub二、通过调用API函数实现通信以上说明了用VB提供的控件实现通信的方法,只要理解了VB控件的机制就很容易完成对串口的操作,但可移植性差。
但VB可以很容易调用API函数实现通信。
1、VB对API的调用VB使用动态链接库DLL(Dynamic Link Libraries)的能力,大大扩展了其功能。
WINDOWS 本身提供了API函数包括三大动态链接库:KERNEL库、GDI库、USER库,通过VB用户可以直接调用这些库中的函数。
调用之前,必须首先在VB中声明。
该声明可为模块级或窗体级,当作为模块级声明时,其作用域为所有FORM和MODULE,而作为窗体级声明时其作用域为该声明所在的FORM。
VB调用DLL的格式:Declare Sub 过程名Lib 〃库名〃[Alias 〃别名〃]([ByVai 参数As 类型])Declare Function 函数名Lib "库名"[Alias "别名"]([ByVai 参数As 类型])As 类型在声明中:DECLARE表示声明DLL中的函数,当声明是不具有返回值的过程时用SUB关键字,而如果调用的函数具有返回值,则必须用FUNCTION关键字将其声明为函数并在声明语句的最后用AS指明函数返回值的类型。
LIB关键字表示当前声明的过程或函数是库名所指定的库中函数而非VB 本身的函数。
库名,就是对应动态链接库的名称,其中通信函数在USER库中。
ByVai关键字将原参数数据类型一一对应到VB类型中。
WINDOWS 的HELP文件WINSDK. HLP 中包含了完整的WINDOWS API 函数信息,可用该文件查看联机函数、数据结构及错误信息。
2、API提供的通信函数为了方便说明,我们将有关通信的函数及相关的数据结构放在全局模块中,文件名为COMM.BAS (见API编程函数实例)。
以下是这些函数的基本介绍:(1)Open Comm (IpComName As String ,win Queue As In te-ger ,wOutQueue As Integer)IpComName :设备名,以“COMn "的形式来说明,n为设备号;wI nQueue 、wOutQueue :分别以字节为单位说明发送、接收缓冲区的大小。
该函数调用成功返回打开的设备号,否则返回一负数代表错误信息码。
(2)SetCommState (IpDCB As DCB )IpDCB :是DCB结构存放设备所希望的通信设置(DCB结构如COMM.BAS 中所示),其中DCB的ID成员必须标识该设备。
如果函数调用成功返回0 ;否则,返回值小于0。
(3)ReadComm (nCid As Integer ,IpBuf As String ,nSize As Integer )WriteComm (nCid As Integer ,IpBuf As String ,nSize As In-teger )这是用来对通信设备进行读写的函数,nCid :说明要读写的通信设备号,IpBuf :为读写缓冲区,nSize :为要读写的字节数。
如果读写成功,返回读写的字节数,否则是小于0 的值,并且其绝对值为读写的字节数。
(4)Closecomm (nCid As Integer )该函数关闭nCid所指定的通信设备,并且释放分配给设备的发送,接收缓冲存储器,调用成功返回0 ;否则,返回值小于0。
(5)BuildCommDCB ( IpDef As String , IpDCB As DCB )IpDef :为一字符串指定设备控制信息,此字符串具有MS-DOS中MODE命令所使用的参数形式。
IpDCB :为一DCB数据结构。
该函数将IpDef字符串转换成串行设备控制块(DCB) 代码。
(6)GetCommError (nCid As Integer ,IpStat As COMSTAT )该函数检取nCid指定的设备最近的错误值和当前状态,IpStat :是COMSTAT结构,具体形式如COMM.BAS中所定义的。
返回值为COMM.BAS中带CE-的常量的某种组合。
3. 用API函数编程实例这个例子是一仿真发送机,将从键盘输入的字符发送给COM端口。
在FORM中加一按钮COMMAND1 来关闭通信口。
Type DCBId As Stri ng 3 1BaudRate As In tegerByteSize As Stri ng 3 1Parity As Stri ng 3 1StopBits As String 3 1RlsTimeout As In tegerCtsTimeout As In tegerDsrTimeout As In tegerBits1 As Stri ng 3 1Bits2 As Stri ng 3 1Xon Char As Stri ng 3 1XoffChar As Stri ng 3 1Xon Lim As In tegerXoffLim As In tegerPeChar As Stri ng 3 1EofChar As Stri ng 3 1EvtChar As String 3 1TxDelay As In tegerEnd TypeType COMSTATBits As Stri ng 3 1cbln Que As In tegercbOutQue As In tegerEnd TypeDeclare Fun cti on Ope nComm Lib "User" ByVal IpComName AsStri ng , ByVal win Queue As In teger , ByVal wOutQueue As In teger ) As In tegerDeclare Function SetCommState Lib "User" ( IpDCB As DCB )As In tegerDeclare Function ReadComm Lib "User" ByVal nCid As Integer , ByVal IpBuf As String , ByVal n Size As In teger ) As In tegerDeclare Function WriteComm Lib "User" ByVal nCid As Integer , ByVal IpBuf AsString , ByVal n Size As In teger ) As In tegerDeclare Fun cti on Closecomm Lib "User" ByVal n Cid As In teger ) As In tegerDeclare Function BuildCommDCB Lib "User" ( ByVai IpDef AsString , IpDCB As DCB ) As IntegerDeclare Function GetCommError Lib "User" ( ByVai nCid AsInteger , IpStat As COMSTAT ) As IntegerGlobal IpDCB As DCBGlobal nCid As IntegerSub Forml —load ()Dim comset As Stringcomset = “ COM2"512 nCid = OpenComm (comset , 512 , 512) 打开COM2 设置接收,发送缓冲区为字节If n Cid < 0 The n '处理错误MsgBox 不能打开COM:" + Str ( nCid) + Error Num2ber :" + Str (nCid) ,16endend ifCommandl. Caption = 关闭通信口” ’设置串口DCB设备控制块comset = COM2 :9600 , n , 8 , 1"If (BuildCommDCB (comset , LpDCB) ) ThenMsgBox 不能建立COMM DCB" , 16end end ifLpDCB. Id = Chr ( nCid )If (SetCommState (LpDCB) ) Then 设置串口状态MsgBox"不能设置串口状态”,16enden difEnd SubSub Form1-keyPress ( keyAscii As Integer )Dim nsend As integer , x As integerDim Lpstate As COMSTAT '通信状态块Static inbuff as stringin buff = imbuff + Chr ( KeyAscii )x = GetCommError (ncid , Lpstate )'读取当前串口错误或状态if lpstate. cbOutQue < 512 The n 送缓冲区有空间否?Nsend = WriteComm ( n Cid ,in buff ,Len (in buff ))'发送in buff if Nsend < = 0 then Nse nd = - Nse nd 忽略错误in buff = Mid (in buff , Nse nd + 1 ) 清除已发送的字符end ifend ifEnd SubSub Comma nd1-Click ()Dim Nclose As in tegerNclose = CloseComm (nCid )If Nclose < 0 The nMsgBox 不能关闭COMM 口:" + Str (nCid ) , 16endelsencid = 0end ifCmmand1. Caption = 通信已关闭”End Sub三、用文件输入/输出技术完成通信用VB提供的以上两种方法已足以应付各种串行通信的问题。