基于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不 但 提 供 了 良好 的
  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接收送据。

相关文档
最新文档