基于vb的半双工串口调试软件设计

合集下载

vb.net编写的简易串口调试程序

vb.net编写的简易串口调试程序

编写的简易串口调试程序Imports SystemImports System.IO.PortsPublic Class Form1Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load'获取计算机有效串口Dim ports As String() = SerialPort.GetPortNames() '必须用命名空间,用SerialPort,获取计算机的有效串口Dim port As StringFor Each port In portsportnamebox.Items.Add(port) '向combobox中添加项Next port'初始化界面baudratebox.Text = baudratebox.Items(2) '注释和不注释的地方可以替换portnamebox.Text = portnamebox.Items(0)'baudratebox.SelectedIndex() = 2' portnamebox.SelectedIndex() = 0Serial_Port1() '初始化串口Label3.Text = SerialPort1.IsOpenstatuslabel.Text = "串口未连接"statuslabel.ForeColor = Color.Redsendbox.Text = "123"receivebytes.Text = "0"linecheck.Enabled = Truetimebox.Enabled = TrueEnd SubPrivate Sub Serial_Port1() '设置串口参数'SerialPort1.BaudRate = Val(baudratebox.Text) '波特率'SerialPort1.PortName = portnamebox.Text '串口名称SerialPort1.PortName = portnamebox.SelectedItemSerialPort1.BaudRate = Val(baudratebox.SelectedItem)SerialPort1.DataBits = 8'数据位SerialPort1.StopBits = IO.Ports.StopBits.One '停止位SerialPort1.Parity = IO.Ports.Parity.None '校验位End Sub'关闭串口连接Private Sub closebtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles closebtn.Click TrySerialPort1.Close() '关闭串口Label3.Text = SerialPort1.IsOpenIf SerialPort1.IsOpen = False Thenstatuslabel.Text = "串口未连接"statuslabel.ForeColor = Color.Redreceivebox.Text = ""receivebytes.Text = ""End IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'打开串口连接Private Sub openbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openbtn.Click TrySerialPort1.Open() '打开串口Label3.Text = SerialPort1.IsOpenIf SerialPort1.IsOpen = True Thenstatuslabel.Text = "串口已连接"statuslabel.ForeColor = Color.GreenEnd IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'手动发送数据Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Clicksend()End Sub'触发接收事件,接收数据Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceivedMe.Invoke(New EventHandler(AddressOf Sp_Receiving)) '调用接收数据函数End Sub'接收数据过程Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs)' Dim strIncoming As ByteDim strIncoming As IntegerDim str1() As StringDim str2() As StringDim bytes() As ByteDim i As IntegerTryThreading.Thread.Sleep(100) '添加的延时receivebytes.Text = Str(Val(receivebytes.Text) + SerialPort1.BytesToRead)If SerialPort1.BytesToRead > 0ThenReDim bytes(SerialPort1.BytesT oRead)'strIncoming = Convert.T oByte(SerialPort1.ReadByte())If receivecheck.Checked = True ThenstrIncoming = SerialPort1.ReadByte()bytes(0) = strIncomingFor i = 1To SerialPort1.BytesToReadstrIncoming = SerialPort1.ReadByte() '读取缓冲区中的数据bytes(i) = strIncomingNext' SerialPort1.Write(sendbox.Text)'发送数据SerialPort1.DiscardInBuffer()str1 = Split(BitConverter.ToString(bytes), "-")ReDim str2(str1.Length - 1) '去除str1中最后的字符For i = 0To str1.Length - 2str2(i) = str1(i)Nextreceivebox.Text = receivebox.Text & Join(str2, " ")'BitConverter.T oString(bytes)Elsereceivebox.Text = receivebox.Text & SerialPort1.ReadExisting()End IfEnd IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'更改串口设置Private Sub portnamebox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles portnamebox.SelectedIndexChangedTrySerial_Port1()Catch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'清空接收区Private Sub clearbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearbtn.Clickreceivebox.Text = ""End Sub'定时发送数据Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.TickTimer1.Interval = timebox.Textsend()End Sub'选择定时发送的触发事件Private Sub timecheck_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timecheck.CheckedChangedIf timecheck.Checked = True ThenIf timebox.Text = ""ThenMsgBox("时间间隔不能为0")timecheck.Checked = FalseElsesend()timebox.Enabled = FalseEnd IfElsetimebox.Enabled = TrueEnd IfEnd SubPublic Sub send() '发送数据过程Dim databyte() As ByteDim str1() As StringDim str2 As StringDim str3 As StringDim i As IntegerTryIf sendcheck.Checked = False Then'不按照16进制发送'timecheck.Enabled = TrueIf linecheck.Checked = False Then'判断是否选中分行发送SerialPort1.Write(sendbox.Text)ElseSerialPort1.WriteLine(sendbox.Text)End IfElse'按照16进制发送If InStr(sendbox.Text, " ") Then'判断是否有空格str1 = Split(sendbox.Text)str2 = Join(str1, "")Elsestr2 = sendbox.TextEnd IfIf str2.Length Mod2 = 0Then'判断字符串字节数是否为偶数ReDim databyte(str2.Length / 2) '重新定义数组For i = 0To str2.Length / 2 - 1databyte(i) = Convert.ToByte(Mid(str2, 2 * i + 1, 2), 16) '两个字符转换为一个16进制字节'databyte(i) = Val(Mid(str2, 2 * i + 1, 2))NextSerialPort1.Write(databyte, 0, databyte.Length - 1)sendbytes.Text = Str(Val(sendbytes.Text) + databyte.Length - 1)Elsestr3 = Mid(str2, 1, (str2.Length - 1)) & "0"& Mid(str2, str2.Length)ReDim databyte(str3.Length / 2)For i = 0To str3.Length / 2 - 1databyte(i) = Convert.ToByte(Mid(str3, 2 * i + 1, 2), 16)NextSerialPort1.Write(databyte, 0, databyte.Length - 1)sendbytes.Text = Str(Val(sendbytes.Text) + databyte.Length - 1)End If'databyte = System.Text.Encoding.Default.GetBytes(sendbox.Text)把每个字符转换成字节End IfCatch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd Sub'是否按照16进制发送,如果是换行将不可选。

串口通讯调试器用VB调试串口通讯-vb教程

串口通讯调试器用VB调试串口通讯-vb教程

串口通讯调试器:用VB调试串口通讯-vb教程疯狂代码 / ĵ:http://VisualBasic/Article15514.htmllass=MsoNormal style=\"MARGIN: 0cm 0cm 0pt\">现有电子秤台使用串口和计算机进行通讯编写VB来访问串口达到读取电子秤上显示数据该电子秤为BE01型仪表输出为RS-232C标准接口波特率为300-9600、偶校验、7个数据位、2个停止位所有均发送11位ASCII码个起始位在VB中和串口通讯需要引入Control控件MSComm串口通讯Control控件(在Microsoft Comm Control 6.0中)具体如下:Control控件简称: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_LoadClearTextWith MSC.CommPort = 1 ´设置Com1为通信端口.Settings = \"9600,E,7,2\" ´设置通信端口参数 9600赫兹、偶校验、7个数据位、1个停止位.(这里需要进步介绍说明是:.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 ClearTextText3.Text = \"\"Text2.Text = \"5\"Text1.Text = \"\"End SubPrivate Sub Command1_ClickClearText´ nRece = 0 ´计数器清零With MSC.InputMode = comInputModeBinary ´设置数据接收模式为 2进制形式.InBufferCount = 0 ´清除接收缓冲区If Not .PortOpen Then.PortOpen = True ´打开通信端口End IfEnd WithEnd SubPrivate Sub MSC_OnCommDelayTime ‘用来延续时间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 DelayTimeDim 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 = TrueEnd Sub(通信传输速率为9600bps则最快速度1.04ms发送个字节仪表每秒发送50帧数据每帧数据有4个字节即每秒发送200个字节平均5.0ms 发送个字节连续读取串口数据时要在中添加循环等待)Private Sub SwichVar(ByVal nNum As Integer)DelayTimevar = Nullvar = MSC.InputOut(nNum) = var(0)End Sub(设置接收数据模式采用 2进制形式即 InputMode=comInputModeBinary但用Input属性读取数据时不能直接赋值给 Byte 类型变量只能通过先赋值给个 Variant 类型变量返回个 2进制数据再转换保存到Byte类型数变量中)Private Sub Text1_ChangeText3.Text = CText(Text1.Text) - CText(Text2.Text)End Sub****************************************************************************Private Function CText(ByVal str As String) As CurrencyIf str <> \"\" ThenCText = CCur(Val(str))ElseCText = 0End IfEnd Function(仪表每秒发送50帧数据微机收到帧完整数据至少需要20 ms时间然后再进行数据处理如果微机在下帧数据接收前即20ms内能将数据计算处理完毕则接收缓冲区内只会保存有帧数据不会存有两帧以上数据接收缓冲区大小不会影响实时监测效果(接收缓冲区>4字节)这时完全可以实现实时监测或实时控制;如果微机在20ms内不能将数据计算处理完毕接收缓冲区设置得又很大在数据计算处理完毕前接收缓冲区内就会保存有两帧以上数据而且次工作时间越长缓冲区内滞留数据帧就越多数据采集和数据处理的间产生逐渐增大额外时间差当接收缓冲区充满后时间差不再增大固定在某值部分数据因不能及时采集到接收缓冲区中数据产生丢失现象真实工作情况就会和微机处理结果产生较大时间差对实时监测和实时控制很不利这种情况下接收缓冲区大小就会影响实时监测效果所以接收缓冲区设置不能过大以保证数据处理实时性)小结:本文所用仪表为梅特勒公司出产BE01型电子秤其输出每个编码均为标准ASCII码其他仪表存在发射编码中含有BCD压缩码而且分为高低位需要接收后对其进行解码换算的后还要将高位和低位数字进行相加即可以将其BCD码换算成实数另还存在误差可能:判断最大值仪表在刚开始工作时有干扰会传导些乱码位移传感器有参数偏差最大值般都略大于50毫米所以取51为极限最大值取-51为极限最小值暂时先写这些当然其他情况可以依此类推!2009-2-12 3:53:31疯狂代码 /。

【推荐下载】基于VB的串口通讯

【推荐下载】基于VB的串口通讯

基于VB的串口通讯现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。

以下是VB的串口通讯。

 1串口通信的通信机理 PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信。

PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址为2F8H-2FEH。

10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为 1 ,该位也称为DLAB状态位。

[1] 一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2 。

这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。

当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。

在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接受数据。

当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。

 作为一个VB程序员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。

 2串行通讯接口RS-232 前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。

目前使用最广泛的串行接口有两种:RS-232和RS-485。

本文着重讨论RS-232,RS- 485不作介绍。

 tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!3G,指第三代移动通信技术。

基于VB6.0的串口通信方法

基于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控件来实现串口通信。

Visual-Basic串口通信程序设计典型实例

Visual-Basic串口通信程序设计典型实例

第6章V B串口通信程序设计典型实例利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。

不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。

在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC、PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。

6.1 PC与PC串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。

本设计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。

6.1.1 PC与PC串口通信程序设计目的(1)掌握PC与PC串口通信的线路连接方法。

(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。

6.1.2 PC与PC串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1所示。

表6-1设计用软、硬件6.1.3 PC与PC串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A 串口COM1端口的TXD与计算机B串口COM1端口的RXD相连,计算机A串口COM1端口的RXD与计算机B串口COM1端口的TXD相连,计算机A串口COM1端口的GND与计算机B串口COM1端口的GND相连。

图6-1 PC与PC串口通信线路6.1.4 设计任务利用MSComm控件和VB API函数编写程序实现PC与PC串口通信。

任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。

使用VB实现的基于串口通信的数据采集系统毕业设计

使用VB实现的基于串口通信的数据采集系统毕业设计

基于串行口的数据采集系统的设计摘要:数据采集在日常生活中有着广泛的应用,特别是在一些对数据的准确性,实时性要求比较高的场合,需要设计专用的电路来实现系统的需求,而系统的功能的实现,与我们对元器件的选型,设计搭建的电路有直接的关系,它们直接影响着系统对外界环境的感知和响应能力,决定着系统的性能。

数据采集在工业控制领域有着广泛的需求,本设计是实现基于串行口的数据采集系统,以采集周围的环境温度为采集对象,以STC89C51单片机作为下位机,以PC机作为上位机,使用9针串口来实现下位机和上位机的通讯。

通过在PC机上使用VB6.0开发软件来开发实现数据接收显示控制界面。

系统调试结果表明,该系统设计合理,对周边环境温度的变化反应敏感,数据采集的波特率达到9600bps.关键字:数据采集系统、STC89C51单片机、串口通信、VB中图分类号:TP2IDesign of Data Acquisition System Base on SerialCommunicationABSTRACT: Data collection is widely applied in daily life, especially in the place which is very high request in data accuracy, real time display. A special circuit is need to be designed to realize it. Also, it have much connection with the sensor and circuit design , they influence the system’s sensor and response ability very much , it directly determined the system’s character.Nowadays, Data collection is widely requested in the industry control area. The system is designed to realize the data acquisition according to the serial port , collecting the temperature around the environment as collection object , use STC89C51 single-chip microcomputer as down machine , use personal computer as upper machine , use 9 pin serial port to realize the down SCM and upper PC’s communication . A display control form was made use the VB6.0 software . The experiment have done display that , the design was reasonable , it was very sensitive to the temperature’s ch ange around the environment .The system’s data collection speed could arrived to 9600bps.关键词:data collection system;STC89C51 single-chip microcomputer;serial communication;Visual Basic中图分类号:TP2II目次摘要 (I)ABSTRACT (II)目次 .......................................................................................................................................I II 1绪论. (1)1.1研究的背景和意义 (1)1.2数据采集系统的研究现状 (1)1.3研究思路和方法比较 (2)1.4本章小结 (3)2 基于串行口的数据采集系统的总体设计与分析 (4)2.1 基于串行口的数据采集系统的总体设计思想 (4)2.2 设计方案与论证 (4)2.3 本章小结 (5)3 下位机的设计 (6)3.1传感器的选择 (6)3.2 TTL与RS232电平的转换 (7)3.3单片机电路设计 (8)3.4系统总的电路设计实现 (8)3.5本章小结 (10)4 上位机的设计 (11)4.1 Visual Basic设计介绍 (11)4.2 Visual Basic 设计实现 (12)III4.3 本章小结 (13)5 系统结果和分析 (14)5.1 实验调试与结果 (14)5.2 本章小结 (18)6总结 (19)参考文献 (20)附录(下位机实现程序代码) (21)个人简历 (22)学位论文数据集 (23)IV1 绪论1.1 研究的背景和意义在计算机广泛应用的今天,数据采集在很多领域有着十分重要的应用。

基于VB集成开发环境的串口编程毕业设计开题报告模板

基于VB集成开发环境的串口编程毕业设计开题报告模板

毕业设计开题报告题目:基于VB集成开发环境的串口编程专业:测控技术与仪器一、毕业设计内容与研究意义1.内容:1、实现串口调试助手功能(协议传送)2、从Excel中读取数据和写入数据3、VB界面显示时间等基本信息4、面板上有简单控制按钮,控制动作通过串口传递,靠单片机与继电器来模拟控制动作的响应过程(或者LCD显示来模拟响应过程)2.研究意义vb是Visual Basic的简称,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。

它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。

在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。

而在可视界面的基础上,加上单片机或者是LCD的显示来模拟控制动作的响应过程,实现VB的完美功能与单片机的巨大功效结合。

二、研究方法利用VB进行串口通信的开发,主要是使用一个控件:Mscomm控件。

它的目的是为了让用户设计一个系统可以和串行端口进行沟通及传送数据,提供了下列两种方式米处理信息的流动:事件驱动:是处理连接端口通信的一种有效方法。

当有事件发生时,程序会被告知。

例如,在有一个字符到达或者一个变化发生时,程序都可以利用Mscomm控件来侦测并处理这些通信事件及通信错误。

预先将程序写入控件的事件程序区块中,一旦事件发生即可自动执行该段程序。

三、串口通讯编程实例在完成了对MSComm 控件的简要介绍之后,笔者就以实际程序为例,介绍一下串口通讯的具体实现方法。

1、PC 机间的串口通讯(1)、实现方法:A、新建一个窗体,在上面放两个Text 控件、两个CommandButton 控件和两个Label 控件(如图1.bmp 所示)。

基于VB6.0的串口通讯程序设计

基于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不 但 提 供 了 良好 的

vb串口编程实例

vb串口编程实例

VB串口编程实例介绍VB(Visual Basic)是一种基于对象的编程语言,可用于开发Windows应用程序。

串口编程是指通过串行通信接口与外部设备进行数据交互。

本文将介绍如何使用VB进行串口编程,以实现与外部设备的通信。

前提条件在开始编写VB串口程序之前,需要确保以下条件已满足: - 安装了Visual Studio开发环境,可以选择最新版本的Visual Studio Community免费版。

- 确保计算机上有可用的串口(如COM1、COM2等)或USB转串口适配器。

步骤1. 创建新项目打开Visual Studio,选择创建一个新的VB Windows应用程序项目。

2. 添加控件在窗体上添加以下控件: - 一个ListBox控件用于显示接收到的数据。

- 两个Button控件分别用于打开和关闭串口。

- 一个ComboBox控件用于选择串口号。

- 一个TextBox控件用于输入要发送的数据。

- 一个Button控件用于发送数据。

3. 设置串口属性在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click' 打开串口TryserialPort.PortName = ComboBox1.SelectedItem.ToString()serialPort.BaudRate = 9600serialPort.Parity = Parity.NoneserialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueCatch ex As ExceptionMessageBox.Show("无法打开串口:" + ex.Message)End TryEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口TryserialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseCatch ex As ExceptionMessageBox.Show("无法关闭串口:" + ex.Message)End TryEnd SubEnd Class4. 接收数据和发送数据在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button 1.Click' 打开串口' 省略部分代码...AddHandler serialPort.DataReceived, AddressOf DataReceivedHandlerserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口' 省略部分代码...RemoveHandler serialPort.DataReceived, AddressOf DataReceivedHandler serialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseEnd SubPrivate Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedE ventArgs)' 接收数据并显示在ListBox中Dim data As String = serialPort.ReadLine()ListBox1.Invoke(Sub() ListBox1.Items.Add(data))End SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button 3.Click' 发送数据If serialPort.IsOpen ThenDim dataToSend As String = TextBox1.TextserialPort.WriteLine(dataToSend)TextBox1.Clear()ElseMessageBox.Show("请先打开串口")End IfEnd SubEnd Class5. 运行程序点击运行按钮,程序将打开一个窗口,其中包含串口选择、打开/关闭串口、接收数据和发送数据的功能。

串口测试软件 VB代码

串口测试软件 VB代码

串口测试软件 VB代码部分代码如下:Dim Port 'COM端口检测Dim p 'COM端口检测Dim s(255) As Integer '端口1-255Dim s1(255) '端口1-255Dim str '奇偶校验传递符Dim portstr As StringPrivate Sub Command1_Click()On Error Resume Next'---------------端口参数设置--------------- If Command1.Caption = "打开串口(&O)" Then Command1.Caption = "关闭串口(&C)"Command2.Enabled = TrueIf Combo3.Text = "无" Thenstr = "n"End IfIf Combo3.Text = "奇校验" Thenstr = "o"End IfIf Combo3.Text = "偶校验" Thenstr = "e"End IfIf Combo3.Text = "空格" Thenstr = "s"End IfIf Combo3.Text = "标记" Thenstr = "s"End If'---------------端口识别---------------For Port = 1 To 255s1(Port) = "COM" & PortIf Combo5.Text = s1(Port) ThenmPort = PortMSComm1.PortOpen = TrueIf MSComm1.PortOpen = True ThenRichTextBox2 = "COM" & Port & "已成功打开。

基于VB的双串口通信

基于VB的双串口通信

基于VB的双串口通信基于VB的双串口通信实验目的:利用VB编程,实现PC机双串口互相通信,掌握利用VB 实现通信的方法.实验仪器:PC机,vb软件实验原理:如果一台计算机有两个串口,可通过串口线将两个串口连接起来:COM1端口的TXD与COM2端口的RXD相连,COM1端口的RXD与COM2端口的TXD相连,COM1端口的GND与COM2端口的GND相连,如图6-6(a)所示,这是串口通信设备之间的最简单连接(即三线连接),图中的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可以发送也可以接收。

如果一台计算机只有一个串行通信端口可以使用,那么将第2脚与第3管脚短路,如图6-6(b)所示,那么第3脚的输出信号就会被传送到第2脚,用以发送到同一串行端口的输入缓冲区,程序只要再由相同的串行端口上作读取的操作,即可将数据读入,一样可以形成一个测试环境。

串口设备最简单连接程序清单: ' 串口初始化' 串口1与串口2的通信参数应一致Private Sub Form_Load()mPort = 1 ' 设置通信端口号为COM1 MSComm1.Settings = "9600,n,8,1" ' 设置串口1参数MSComm1.InputMode = 0 ' 接收文本型数据MSComm1.PortOpen = True ' 打开通信端口1mPort = 2 ' 设置通信端口号为COM2 MSComm2.Settings = "9600,n,8,1" ' 设置串口2参数MSComm2.InputMode = 0 ' 接收文本型数据MSComm2.PortOpen = True ' 打开通信端口2End Sub' 把字符通过串口发送出去' 启动定时器Private Sub Cmdsend_Click()MSComm1.Output = Trim(Textsend.Text)Timer1.Enabled = TrueEnd Sub' 接收字符Private Sub Timer1_Timer()Dim buf$Timer1.Enabled = Falsebuf = Trim(MSComm2.Input) ' 将缓冲区内的数据读入buf变量中If Len(buf) = 0 Then ' 判断缓冲区内是否存在数据 TextReceive.Text = ""ElseTextReceive.Text = bufEnd IfEnd Sub' 停止程序运行Private Sub Cmdquit_Click()Unload MeEnd Sub' 关闭通信端口,Private Sub Form_Unload(Cancel As Integer)MSComm1.PortOpen = FalseMSComm2.PortOpen = FalseEnd Sub程序运行结果:心得体会:通过这次实验,让我们了解了如何用VB实现串口通信,同时对VB有了新的认识。

如何用VB编写串口程序

如何用VB编写串口程序

如何用VB编写串口程序VB控件MSComm功能介绍VB中的MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi 等语言中均可使用。

Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.MSComm控件两种处理通讯的方式MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。

1.1 事件驱动方式事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。

在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。

在这些情况下,可以利用MSComm 控件的OnComm 事件捕获并处理这些通讯事件。

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

所有通讯事件和通讯错误的列表,参阅CommEvent 属性。

在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。

这种方法的优点是程序响应及时,可靠性高。

每个MSComm 控件对应着一个串行端口。

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

1.2 查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来查询事件和错误。

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

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

使用VB开发串口USB通信软件

使用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接口与外部设备进行连接。

基于VB proteus和虚拟串口的调试

基于VB proteus和虚拟串口的调试

一利用Proteus,Serialnull,VB模拟串口通信的简单例子各软件介绍:VB:编写上位机。

Serialnull:建立虚拟串口连接。

Proteus:仿真单片机及相关电路。

步骤:1.在Serialnull中建立虚拟串口连接:下图左边已经有了两对虚拟端口,下面我们需要com2,和com5.其中上位机选择com5,proteus端的设备采用com2. 如图:2. 打开vb,编写程序。

这是本人今天熬夜做毕设整理出来的,能省就省。

3.打开Proteus,为了方便,只添加了一个串口元件,即compim。

点击该元件,设置属性中的PORT为com2.这样才能与上位机(com5)沟通。

4.这时,点击proteus仿真按钮,观察此时compim各脚电平。

5.打开自己编的小软件。

先打开串口,再点“亮”。

至此,实验完成。

灵感来源于罗洪达同学的文章,本人经过多次摸索,终得其精髓,拿出来和广大网友分享。

源代码:Private Sub Command1_Click()Timer1.Enabled = TrueCommand1.Enabled = FalseCommand2.Enabled = TrueEnd SubPrivate Sub Command2_Click()Timer1.Enabled = FalseCommand1.Enabled = TrueEnd SubPrivate Sub Command3_Click()mPort = Combo1.Text MSComm1.PortOpen = TrueCommand3.Enabled = FalseCommand1.Enabled = TrueEnd SubPrivate Sub Form_Load()Command1.Enabled = FalseTimer1.Enabled = FalseTimer1.Interval = 200Command2.Enabled = FalseLabel1.Caption = 0Combo1.AddItem "1"Combo1.AddItem "2"Combo1.AddItem "3"Combo1.AddItem "4"Combo1.AddItem "5"Combo1.Text = 5End SubPrivate Sub Timer1_Timer()Label1.Caption = Label1.Caption + 1Me.MSComm1.Output = "1"End Sub。

用VB调试串口通讯

用VB调试串口通讯

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

编写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 V ariant 接收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个数据位、1个停止位.(这里需要进一步说明的是:.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 = 5Text1.Text =End SubPrivate Sub Command1_Click()ClearTextnRece = 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 = TrueEnd Sub(通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)Private Sub SwichV ar(ByV al nNum As Integer)DelayTimevar = Nullvar = MSC.InputOut(nNum) = var(0)End Sub(设置接收数据模式采用二进制形式,即 InputMode=comInputModeBinary,但用Input属性读取数据时,不能直接赋值给 Byte 类型变量,只能通过先赋值给一个 V ariant 类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。

使用VB开发串口、USB通信软件

使用VB开发串口、USB通信软件
说明:当EOFEnable属性设置为False,OnComm控件将不在输入流中
寻 找EOF字符。
使用VB开发串口、USB通信软件
使用Windows的API应用程序接口
• Handshake常数。 Handshake常数如表所示。
常数

描述
comNone 0 无握手
comXonXoff 1 XOn/Xoff握手
使用VB开发串口、USB通信软件
使用串口通信控件
针对串口通信,微软公司专门提供了MSComm控件, 使用该控件进行串口通信设计是十分方便的,程序员不必 花时间去了解较为复杂的API函数。通过简单修改控件的 属性和使用控件提供的方法,就可以实现对串口的配置、 完成串口接收和发送数据。
使用VB开发串口、USB通信软件
使用VB开发串口、USB通信软件
使用Windows的API应用程序接口
• Settings属性的设置由4个设置组成,格式如下:
BBBB
P
D
S
各个属性值间用逗号隔开,其中BBBB为波特率,P为奇偶校验,D为数 据位数,S为停止位数。其默认值为“9600,N,8,1”。
• InputLen属性。设置并返回Input属性从接收缓冲区中读取的字符数。 InputLen 属性的默认值是0。设置InputLen为0时,使用Input将使MSComm 控件读取缓冲区中全部的内容。
4
comEvCD
5
comEvRing
6
使用VB开co发mE串v口EO、F USB通信7软件
描述 发送事件 接收事件 clear-to-send线变化 data-set ready线变化 carrier detect线变化 振铃检测 文件结束

vb编写的串口调试程序

vb编写的串口调试程序

vb编写的串口调试程序(源代码)作者:Javen_yue,2005-5-17 13:23:00 发表于:《自动化软件论坛》共有8人回复,2108次点击加为好友播客博客发送留言小弟刚入行不久,写了个小程序,希望各位大侠能帮我指点一二,谢谢!Public countRX As IntegerPublic countTX As IntegerPublic num As BytePublic setport As StringPrivate Sub Combo1_Click()openportEnd SubPrivate Sub combo2_click()openportEnd SubPrivate Sub combo3_click()openportEnd SubPrivate Sub combo4_click()openportEnd SubPrivate Sub combo5_click()openportEnd SubPrivate Sub Command3_Click()Text1.Text = ""End SubPrivate Sub Command4_Click() '手动发送Dim send() As ByteDim i As IntegerDim length As IntegerDim a() As ByteDim b As Bytelength = Len(Text2.Text)If length > 0 ThenReDim a(length - 1)ReDim send(length - 1)End Ifsend = Text2.TextcountTX = countTX + lengthIf Check2.Value = 0 ThenMSComm1.Output = send'countTX = countTX + MSComm1.OutBufferCountElsei = 0b = 0Do While i <= (length - 1) * 2If ((send(i) >= 48 And send(i) <= 57) Or (send(i) >= 65 And send(i) <= 70) Or (send(i) >= 97 And s end(i) <= 102)) ThenIf (send(i) >= 97 And send(i) <= 102) Thena(b) = send(i) - 32Elsea(b) = send(i)End IfElseIf b > 0 ThenReDim Preserve a(b - 1)End IfExit DoEnd Ifi = i + 2b = b + 1DoEventsLoopMSComm1.Output = aEnd IfLabel5.Caption = "TX:" & countTX End SubPrivate Sub command5_Click()Text2.Text = " "End SubPrivate Sub Command6_Click() Label4.Caption = "RX:0 "Label5.Caption = "TX:0 "End SubPrivate Sub Form_Load()Combo1.ListIndex = 0 'initialCombo2.ListIndex = 0Combo3.ListIndex = 0Combo4.ListIndex = 0Combo5.ListIndex = 0End SubSub openport()'Dim num As Byte'Dim setport As StringOn Error GoTo msgnum = Combo1.ListIndex + 1If MSComm1.PortOpen = True Then 'MsgBox ("没有发现串口或被占用") MSComm1.PortOpen = FalseEnd IfmPort = numsetport = Combo2.Text + ","If Combo3.ListIndex = 0 Thensetport = setport + "N,"End IfIf Combo3.ListIndex = 1 Thensetport = setport + "O,"End IfIf Combo3.ListIndex = 2 Thensetport = setport + "E,"End IfIf Combo4.ListIndex = 0 Thensetport = setport + "8,"End IfIf Combo4.ListIndex = 1 Thensetport = setport + "7,"End IfIf Combo5.ListIndex = 0 Thensetport = setport + "1"End IfIf Combo5.ListIndex = 1 Thensetport = setport + "2"End IfMSComm1.Settings = setportMSComm1.PortOpen = True'If MSComm1.PortOpen = True Then'Label3.Caption = "stats:" & num & ",open" & "," & setport'Else' Label3.Caption = "stats:" & num & "close" & "," & setport 'End Ifmsg:End SubSub command1_click()On Error GoTo msgMSComm1.PortOpen = Truemsg: MsgBox ("port had opened")End SubSub command2_click()MSComm1.PortOpen = FalseEnd SubPrivate Sub Timer1_Timer()If MSComm1.PortOpen = True ThenShape1.FillColor = RGB(0, 255, 0)Command1.Visible = Falsecommand2.Visible = TrueLabel3.Caption = "stats:" & num & ",open" & "," & setport ElseShape1.FillColor = RGB(255, 0, 0)Command1.Visible = Truecommand2.Visible = FalseLabel3.Caption = "stats:" & "close" & "!"End IfEnd SubPrivate Sub Timer2_Timer() '接收信号Dim recBuf() As ByteDim recCnt As IntegerDim str As StringDim i As IntegerDim str1 As String'Dim countRX As Integer' Do Until MSComm1.InBufferCount <> 0' DoEvents' LooprecCnt = MSComm1.InBufferCountcountRX = recCnt + countRXIf recCnt > 0 ThenReDim recBuf(recCnt)recBuf = MSComm1.Inputstr = "" ' CStr(Now) & " rec:"If Check1.Value = 1 ThenFor i = 0 To recCnt - 1str = str & CStr(Hex(recBuf(i)))Next iElseFor i = 0 To recCnt - 1str = str & Chr(recBuf(i))Next iEnd IfText1.Text = Text1.Text + strLabel4.Caption = "RX:" & countRXEnd IfEnd SubPrivate Sub Timer3_Timer() '自动发送Dim length As Integerlength = Len(Text2.Text)Timer3.Interval = Text3.TextIf (Check3.Value = 1 And length <> 0) Then Dim send() As ByteDim i As IntegerDim a() As ByteDim b As ByteReDim a(length - 1)ReDim send(length - 1)countTX = countTX + lengthsend = Text2.TextIf Check2.Value = 0 ThenMSComm1.Output = sendElsei = 0b = 0Do While i <= (length - 1) * 2If ((send(i) >= 48 And send(i) <= 57) Or (send(i) >= 65 And send(i) <= 70) Or (send(i) >= 97 And s end(i) <= 102)) ThenIf (send(i) >= 97 And send(i) <= 102) Thena(b) = send(i) - 32Elsea(b) = send(i)End IfElseIf b > 0 ThenReDim Preserve a(b - 1)End IfExit DoEnd Ifi = i + 2b = b + 1DoEventsLoop。

VB.NET开发全功能串口调试助手(含完整工程)

VB.NET开发全功能串口调试助手(含完整工程)

开发全功能串口调试助手(含完整工程)开发全功能串口调试助手(含完整工程)[软件开发]发布时间:2011-07-16 18:20:30小记:的串口通信用了很长时间了,也只用Write和Read这样的方法,以前都是用这种方式做上位机软件,如此足矣。

而前几天研究GSM模块时对串口返回的数据总是把握不好,参考开发板附送的例程,发现采用SerialPort的DataReceived事件,可以实现中断触发式的数据接收。

于是想到要自己做一个串口调试助手,在实现基本功能的前提下增加一些方便自己调试的功能。

经过断断续续的编写,就做成了下面这个小软件:这个软件能够实现串口调试助手的全部功能,经过通信测试,数据接收性能不亚于呼啸工作室的SComAssistant2.2,通过加大输入缓冲区,可以满足大量数据接收。

的串口通信主要使用VS自带的SerialPort控件,而不是早先的MSComm,更具有兼容性,这也是很久以前就放弃VB改用.NET的直接原因。

该控件的主要方法、属性如下(该数据来自VS 的MSDN帮助库):想要通过串口收发数据,就需要对串口进行配置,包括设置端口、波特率、数据格式(如COM1端口、9600bps、8位数据位、无校验位、1位停止位)等属性,之后通过Open方法打开串口。

打开串口可通过手动指定,也可以使用GetPortNames方法获取计算机中存在的串口。

如果打开出错,则可能是串口不存在或者已被占用。

下面是相应代码:Private Sub SerialPortOpen()On Error GoTo ErrIf SerialPort.IsOpen = True Then SerialPort.Close() '避免重复打开端口SerialPort.Open()LabelCOMStatus.T ext = "串口已打开"Exit SubErr: MsgBox("串口不存在或已被占用!"+ vbNewLine + ErrorToString()) '出现错误,显示错误信息End Sub如果想要在串口中支持中文字符收发,则可在初始化时设置串口控件的编码:SerialPort.Encoding = System.Text.Encoding.Default发送数据通过Write方法来完成,由于串口调试助手需要支持文本和16进制,需要加入转换代码:Private Sub ButtonSendData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSendData.ClickOn Error GoTo ErrDim outDataBuf As String = TextBoxSend.TextIf outDataBuf = ""Then Exit Sub'如果输入文本框中没有数据则不发送If SerialPort.IsOpen = True Then'判断串口是否打开If HexSendFlag = True Then'-----------十六进制发送------------outDataBuf = outDataBuf.Replace(" ", "") '清除空格与回车outDataBuf = outDataBuf.Replace(vbNewLine, "")'十六进制数据位数为偶数,例如:FF 00 15 AC 0DIf outDataBuf.Length Mod 2 <> 0 ThenMsgBox("请输入正确的十六进制数,用空格和回车隔开。

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

基于vb的半双工串口通信调试软件设计
一、任务
使用RS-485标准实现两台PC之间的半双工通信。

二、硬件概况
硬件设计如图1所示,由于目前多数电脑不带DB9通信接口,因此需要购买usb转R-S232转换头,并安装好相关驱动。

此模块使用DB9接口的7脚(RTS端)作为485通信的数据收发控制端。

图1 使用max485和max232设计半双工通信硬件电路板
三、软件设计
1、界面设计
该程序有两个界面,主界面和设置界面。

图2所示,是程序的主界面。

图3所示,是通信参数设置界面。

图2 调试软件主界面
图3 设置界面2、变量及函数声明
Private tx As Integer ‘发送字符数
Private rx As Integer ‘接受字符数
Function addRx(X As Integer)
rx = rx + X
LabelRx.Caption = CStr(rx)
End Function
Function addTx(X As Integer)
tx = tx + X
LabelTx.Caption = CStr(tx)
End Function
Function clearRx()
rx = 0
LabelRx.Caption = "0"
End Function
Function clearTx()
tx = 0
LabelTx.Caption = "0"
End Function
3、窗体加载与卸载
Private Sub Form_Load()
'MSComm1.PortOpen = True '打开串口
' ss = False
Combo1.Text = "COM1"
With Combo1
.AddItem "COM1"
.AddItem "COM2"
.AddItem "COM3"
.AddItem "COM4"
.AddItem "COM5"
.AddItem "COM6"
End With
On Error GoTo err_handle
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
mPort = 1
MSComm1.PortOpen = True
Command3.Caption = "关闭串口"
If MSComm1.RTSEnable Then
Label3.Caption = "高"
Else
Label3.Caption = "低"
End If
Exit Sub
err_handle:
Command3.Caption = "打开串口"
Label3.Caption = ""
MsgBox "串口不存在或被占用"
End Sub
Private Sub Form_Unload(Cancel As Integer)
'关闭串口
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End Sub
4、串口设置与操作
(1)打开与关闭串口
Private Sub Command3_Click()
If Command3.Caption = "打开串口" Then
On Error GoTo err_handle1
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
mPort = Combo1.ListIndex + 1
MSComm1.PortOpen = True
Command3.Caption = "关闭串口"
Else
On Error GoTo err_handle2
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
Command3.Caption = "打开串口"
End If
Exit Sub
err_handle1:
Command3.Caption = "打开串口"
MsgBox "串口不存在或被占用"
Exit Sub
err_handle2:
Exit Sub
End Sub
(2)串口参数设置
Private Sub CommSet_Click()
Form2.Show
End Sub
Public comport As Integer
Public comsetting As String
Private Sub command1_Click()
Dim t As Integer
If mand3.Caption = "打开串口" Then
MsgBox "打开串口后才能设置!", 52, "提示"
Else
comsetting = Combo2.Text & "," & Combo3.Text & "," & Combo4.Text & "," & Combo5.Text
If (Form1.MSComm1.PortOpen) Then
Form1.MSComm1.PortOpen = False
Form1.MSComm1.Settings = comsetting
Form1.MSComm1.PortOpen = True
End If
Form1.MSComm1.Settings = comsetting
End If
Unload Me
End Sub
Private Sub Command2_Click()
comport = 1
comsetting = "9600,N,8,1"
Unload Me
End Sub
Private Sub Form_Load()
comsetting = "9600,N,8,1"
End Sub
5、RTS状态设置
Private Sub Command2_Click()
If MSComm1.RTSEnable = False Then
MSComm1.RTSEnable = True '抬高电位
Label3.Caption = "高"
Else
MSComm1.RTSEnable = False
Label3.Caption = "低"
End If
End Sub
6、MSComm事件响应程序
Private Sub MSComm1_OnComm()
Select Case mEvent
Case comEvReceive
Dim Buffer As Variant
Buffer = MSComm1.Input
MSComm1.InputLen = 0
TextIn.Text = TextIn.Text + CStr(Buffer)
addRx Len(CStr(Buffer))
Case Else
MsgBox "没有发生comEvReceive事件"
End Select
End Sub
7、发送按钮响应事件
Private Sub Command7_Click()
'发送按钮
If MSComm1.PortOpen = False Then
MsgBox "串口没有打开", 52, "提示"
Else
Dim outstring As String
outstring = TextOut.Text
For i = 1 To Len(outstring)
MSComm1.Output = Mid(outstring, i, 1) Next i
addTx Len(outstring)
If outstring = "" Then
MsgBox "无发送数据!", 52, "提示"
End If
End If
四、结论
此软件可以实现两台电脑的半双工通信(发送与接受字符),调试结果如图4和图5所示。

图4 PC1发送送据
图4 PC2接收送据。

相关文档
最新文档