一、实验目的
练习VB程序设计,学以致用,与专业内容相结合,使用VB设计实用工具。
二、实验内容及原理
1.实验内容
查阅VB程序设计书籍,学习Visual Basic6.0程序开发。查阅串口通讯原理,学习VB6.0串口控件的使用,然后使用VB6.0设计一款串口调试助手。
2.实验原理
通过串口控件MSComm与标准串行通讯协议,实现电脑与其他电子设备间的串口通讯。
三、实验步骤或程序流程
1.实验步骤
(1)添加MSComm控件,由于使用的是VB6.0精简版,电脑上并没有串口许可证,需要自百度添加控件许可。
(2)学习标准串口通讯协议格式,百度学习MSComm控件的基本使用方法
(3)设计人机交互界面:根据需求摆放控件,在属性窗口初始化赋值,如DTREnable=True使能串口接收触发事件。
(4)根据标准串口通讯协议,编写代码逻辑,实现端口动态刷新,波特率、停止位、校验位等可调,数据收发等功能。
(5)优化代码,排除可能出现的BUG。
2.程序流程
(1)打开程序后,先加载窗体,初始化控件,串口初始化
(2)若串口选择框发生列表下拉事件则更新端口,若发送选项点击事件则更新参数,其他combo控件同理。
(3)点击打开串口则可打开串口,往文本输入框输入想要发送的数据点击发送即可发送,点击清除数据即可清除数据。若有数据上传,则触发接收事件,程序先判断事件类型,若为接收事件,则将数据显示在文本输入框内,点击清除程序清除文本内容。
(4)若在没有任何端口情况下打开串口,则程序运行提示框没有任何可以端口。
四、实验数据及程序代码
Private Sub Uart_Init()
Dim a
Dim temp%
temp = 0
For a = 1 To 16 '循环检查可能存在的16个串口
MSComm1.CommPort = a
On Error Resume Next '出现错误时,不会被打断
MSComm1.PortOpen = True '打开串口
If MSComm1.PortOpen = True Then
Combo1.AddItem ("COM" & a), temp '将检测可用的端口添加到组合框中
temp = temp + 1
MSComm1.PortOpen = False
End If
Next
'显示默认初始化
Combo1.Text = Combo1.List(0) '默认端口为第一个可用端口
Command1.Caption = "打开串口"
Command1.BackColor = vbRed
'串口默认初始化
MSComm1.CommPort = Val(Mid(Combo1.List(0), 4)) 'Mid用于删除字符串COMX前三个字符,Val把字符数字转化为数字
MSComm1.Settings = Combo2.Text & "," & Combo5.Text & "," & Combo4.Text & "," & Combo3.Text '设置通讯参数
MSComm1.RThreshold = 1 'comEvReceive事件有效
MSComm1.PortOpen = False '关闭串口
End Sub
Private Sub Combo1_Click() '改变端口
If MSComm1.PortOpen = False Then '在未打开串口时改变端口
MSComm1.CommPort = Val(Mid(Combo1.Text, 4))
Else '若串口已打开,则先关闭,改变端口号之后再打开
MSComm1.PortOpen = False
MSComm1.CommPort = Val(Mid(Combo1.Text, 4))
MSComm1.PortOpen = True
End If
End Sub
Private Sub Combo1_DropDown() '当显示 ComboBox 的下拉部分时发生。
Combo1.Clear '删除所有List项
If MSComm1.PortOpen = False Then '在未打开串口时扫描串口
Call Uart_Init
Else '若串口已打开,则先关闭再扫描串口
MSComm1.PortOpen = False
Call Uart_Init
End If
End Sub
Private Sub Combo2_Click() '改变波特率
MSComm1.Settings = Combo2.Text & "," & Combo5.Text & "," & Combo4.Text & "," & Combo3.Text
End Sub
Private Sub Combo3_Click() '改变停止位
MSComm1.Settings = Combo2.Text & "," & Combo5.Text & "," & Combo4.Text & "," & Combo3.Text
End Sub
Private Sub Combo4_Click() '改变数据位
MSComm1.Settings = Combo2.Text & "," & Combo5.Text & "," & Combo4.Text & "," & Combo3.Text
End Sub
Private Sub Combo5_Click() '改变校验位
MSComm1.Settings = Combo2.Text & "," & Combo5.Text & "," & Combo4.Text & "," & Combo3.Text
End Sub
Private Sub Command1_Click() '打开/关闭串口
If Combo1.List(0) Like "" Then '如果没有搜索到任何串口,即Combo1.List(0)=""
MsgBox "未搜索到任何串口!", vbCritical, "提示"
Else '否则执行开关串口操作
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
Command1.Caption = "打开串口"
Command1.BackColor = vbRed
Else
MSComm1.PortOpen = True
Command1.Caption = "关闭串口"
Command1.BackColor = vbGreen
End If
End If
End Sub
Private Sub Command2_Click() '串口发送数据
If MSComm1.PortOpen = True Then
If Text2.Text Like "" Then '发送区空则不加换行符
MSComm1.Output = Text2.Text
Else
MSComm1.Output = Text2.Text & vbCrLf '文本附带vbcrlf,即结尾加上换行符,标准串口通讯文本格式
End If
Else
MsgBox "请先打开串口!", vbCritical, "提示"
End If
End Sub
Private Sub Command3_Click() '清空发送区
Text2.Text = ""
End Sub
Private Sub Command4_Click() '清空收区
Text1.Text = ""
End Sub
Private Sub Form_Load()
Call Uart_Init
End Sub
Private Sub MSComm1_OnComm()
'...通讯事件发生
Select Case MSComm1.CommEvent
Case comEvReceive '...有接受事件发生
Text1.Text = Text1.Text & MSComm1.Input '...接受显示数据
MSComm1.InBufferCount = 0 '...清空输入寄存器
End Select
End Sub
五、实验数据分析及处理
1.串口初始化函数:串口初始化封装成通用函数,在form_load时运行一遍,此后若ComboBox发生下拉事件,则可再次根据条件调用此函数,以实现端口的动态刷新。其余细节注释已给出。
2.端口切换与刷新:在Combo1下拉列表项点击事件发生时,进行端口的切换,此处使用了一个if else语句判断串口是否已打开,如果打开了需要先关掉才能切换,否则报错。
用combo1列表下拉事件来进行端口刷新的操作,正好符合行为逻辑。此处的if else同上述。
3.通讯参数可调:预先在属性框填入默认值,在列表框LIST里面填入固定的通讯可调参数,比如停止位只能1、1.5、2这三项。然后经百度Setting用法如MSComm1.Settings = " 9600 ,n,8,1" 字符串形式,所以使用&来拼接。
4.打开/关闭串口:如果没有当前电脑上没有任何串口设备,则弹出提示框,否则就打开或者关闭串口。
5.串口收/发:注释即分析!
六、实验结论与感悟
学会了使用VB6.0设计简单实用小工具,与专业内容相结合,学以致用,举一反三。学会查阅相关资料,遇到问题学会优先百度解决。