经典的串口调试助手源代码(一)

经典的串口调试助手源代码(一)
2011年04月26日
  经典的串口调试助手源代码(一)VB在单片机中的应用
  Dim OutputAscii As Boolean
  Dim InputString As String
  Dim OutputString As String
  '=====================================================================================
  ' 变量定义
  '=====================================================================================
  Option Explicit ' 强制显式声明
  Dim ComSwitch As Boolean ' 串口开关状态判断
  Dim FileData As String ' 要发送的文件暂存
  Dim SendCount As Long ' 发送数据字节计数器
  Dim ReceiveCount As Long ' 接收数据字节计数器
  Dim InputSignal As String ' 接收缓冲暂存
  Dim OutputSignal As String ' 发送数据暂存
  Dim DisplaySwitch As Boolean ' 显示开关
  Dim ModeSend As Boolean ' 发送方式判断
  Dim Savetime As Single ' 时间数据暂存 延时用
  Dim SaveTextPath As String ' 保存文本路径
  ' 网页超链接申明
  Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  Private Sub CloseCom() '关闭串口
  On Error GoTo Err
  If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
  txtstatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示
  mnuconnect.Caption = "断开串口"
  cmdswitch.Caption = "打开串口"
  'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标
  ImgSwitchoff.Visible = True
  ImgSwitchon.Visible = False
  Err:
  End Sub
  Private Sub UpdateStatus()
  If MSComm.PortOpen Then
  StatusBar1.Panels(1).Text = "Connected"
  mnuautosend.Caption = "自动发送"
  mnuconnect.Caption = "断开串口"
  Else
  StatusBar1.Panels(1).Text = "断开串口"
  mnuautosend.Caption = "disautosend"
  mnuconnect.Caption = "打开串口"
  End If
  StatusBar1.Panels(2).Text = "COM" & MSComm.CommPort
  StatusBar1.Panels(3).Text = MSComm.Settings
  If (OutputAscii) Then
  StatusBar1.Panels(4) = "ASCII"
  Else
  StatusBar1.Panels(4) = "HEX"
  End If
  '
  On Error GoTo Err
  If ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送
  If MSComm.PortOpen = True Then ' 串口状态判断
  mnuautosend.Caption = "Dis&autosend"
  TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间
  TmrAutoSend.Enabled = True ' 打开自动发送定时器
  Else
  mnuautosend.Caption = "autosend"
  ChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送
  MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
  End If
  ElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送
  mnuautosend.Caption = "autosend"
  TmrAutoSend.Enabled = False ' 关闭自动发送定时器
  End If
  Err:
  End Sub
  Private Sub CmdSendFile_Click() '发送文件
  On Error GoTo Err
  If MSComm.PortOpen = True Then ' 如果串口打开了,则可以发送数据
  If FileData = "" Then ' 判断发送数据是否为空
  MsgBox "发送的文件为空", 16, "串口调试助手" ' 发送数据为空则提示
  Else
  If ChkHexReceive.Value = 1 Then ' 如果按十六进制接收时,按二进制发送,否则按文本发送
  MSComm.InputMode = comInputModeBinary ' 二进制发送
  Else
  MSComm.InputMode = comInputModeText ' 文本发送
  End If
  MSComm.Output = Trim(FileData) ' 发送数据
  ModeSend = True ' 设置文本发送方式
  End If
  Else
  MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
  End If
  Err:
  End Sub
  Private Sub Comm_initial(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)
  On Error GoTo ErrorTrap ' 错误则跳往错误处理
  If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
  MSComm.CommPort = Port ' 设定端口
  MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位
  MSComm.InBufferSize = 1024 ' 设置接收缓冲区为1024字节
  MSComm.OutBufferSize = 4096 ' 设置发送缓冲区为4096字节
  MSComm.InBufferCount = 0 ' 清空输入缓冲区
  MSComm.OutBufferCount = 0 ' 清空输出缓冲区
  MSComm.SThreshold = 1 ' 发送缓冲区空触发发送事件
  MSComm.RThreshold = 1 ' 每X个字符到接收缓冲区引起触发接收事件
  MSComm.OutBufferCount = 0 ' 清空发送缓冲区
  MSComm.InBufferCount = 0 ' 滑空接收缓冲
  MSComm.PortOpen = True ' 打开串口
  If MSComm.PortOpen = True Then
  txtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," & Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.Text
  Else
  txtstatus.Text = "STATUS:COM Port Cloced" ' 串口没打开时,提示串口关闭状态
  End If
  Exit Sub
  ErrorTrap: ' 错误处理
  Select Case Err.Number
  Case comPortAlreadyOpen ' 如果串口已经打开,则提示
  MsgBox "没有发现此串口或被占用", 49, "串口调试助手"
  CloseCom
  Case Else
  MsgBox "没有发现此串口或被占用", 49, "串口调试助手"
  CloseCom
  End Select
  Err.Clear
  End Sub
  Private Sub Comm_reSet(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)
  On Error GoTo ErrorHint ' 错误则跳往错误处理
  If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
  MSComm.CommPort = Port ' 设定端口
  MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位
  MSComm.PortOpen = True ' 打开串口
  If MSComm.PortOpen = True Then
  cmdswitch.Caption = "关闭串口"
  'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\kai.jpg") ' 显示串口已经打开的图标
  ImgSwitchoff.Visible = False
  mnuconnect.Caption = "disconnect"
  ImgSwitchon.Visible = True
  txtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," & Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.Text
  Else
  cmdswitch.Caption = "打开串口"
  'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标
  ImgSwitchon.Visible = False
  ImgSwitchoff.Visible = True
  txtstatus.Text = "STATUS:COM Port Cloced"
  End If
  Exit Sub
  ErrorHint: ' 错误处理
  Select Case Err.Number
  Case comPortAlreadyOpen ' 如果串口已经打开,则提示
  MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"
  CloseCom ' 调用关闭串口函数
  Case Else
  MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"
  CloseCom ' 调用关闭串口函数
  End Select
  Err.Clear ' 清除 Err 对象的属性
  End Sub
  Private Sub Command1_Click()
  End Sub
  Private Sub cbobaudrate_Change()
  Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置
  End Sub
  Private Sub cbocom_Change()
  Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置
  End Sub
  Private Sub cbodatabit_Change()
  Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置
  End Sub
  Private Sub cboparitybit_Change()
  Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置
  End Sub
  Private Sub cbostopbit_Change()
  Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置
  End Sub
  Private Sub chkautosend_Click()
  On Error GoTo Err
  If ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送
  If MSComm.PortOpen = True Then ' 串口状态判断
  mnuautosend.Caption = "取消自动发送"
  TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间
  TmrAutoSend.Enabled = True ' 打开自动发送定时器
  Else
  ChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送
  MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
  End If
  ElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送
  mnuautosend.Caption = "自动发送数据"
  TmrAutoSend.Enabled = False ' 关闭自动发送定时器
  End If
  Err:
  End Sub
  Private Sub cmdamend_Click()
  Dim spShell As Object ' 定义存放引用对象的变量
  Dim spFolder As Object ' 定义存放引用对象的变量
  Dim spFolderItem As Object ' 定义存放引用对象的变量
  Dim spPath As String ' 定义存放的变量
  On Error GoTo Err ' 错误处理,防止取消打开文件夹时报错
  Const WINDOW_HANDLE = 0
  Const NO_OPTIONS = 0
  Set spShell = CreateObject("Shell.Application")
  Set spFolder = spShell.BrowseForFolder(WINDOW_HANDLE, "选择目录:", NO_OPTIONS, "C:\Scripts")
  Set spFolderItem = spFolder.Self
  spPath = spFolderItem.Path
  spPath = Replace(spPath, "\", "\") ' Replace函数的返回值是一个字符串
  txtsavepath.Text = spPath ' 把文件夹路径显示在标签上
  SaveTextPath = txtsavepath.Text ' 路径暂存
  Err:
  End Sub
  Private Sub CmdClearCounter_Click()
  On Error GoTo Err
  SendCount = 0 ' 发送计数器清零
  ReceiveCount = 0 ' 接收计数器清零
  txtRXcount.Text = "RX:" & 0 ' 接收计数
  txtTXcount.Text = "TX:" & 0 ' 发送计数
  Err:
  End Sub
  Private Sub cmdclearrecieve_Click()
  TxtReceive.Text = ""
  End Sub
  Private Sub cmdclearsend_Click()
  txtsend.Text = ""
  End Sub
  Private Sub CmdHelp_Click()
  FrmHelp.Show
  End Sub
  Private Sub CmdQuit_Click()
  If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭
  Unload Me ' 卸载窗体,并退出程序
  End
  End Sub
  Private Sub cmdsavedisp_Click()
  On Error GoTo Err ' 错误处理
  SaveTextPath = txtsavepath ' 路径暂存
  Open txtsavepath & "\1.txt" For Output As #1 ' 打开文件
  ' 不存在的话 会创建文件,如已存在 会覆盖
  ' output 改为append 为追加
  ' 改为input 则只读
  Print #1, Year(Date) & "年" & Month(Date) & "月" & Day(Date) & _
  "日" & Hour(Time) & "时" & Minute(Time) & "分" & Second(Time) & _
  "秒" & vbCrLf & TxtReceive.Text + vbCrLf ' 把接收区的文本保存 文本前加上保存时间 (0000年00月00日00时00分00秒)
  ' vbcrlf 为回车换行
  Close #1 ' 关闭文件
  txtsavepath = "OK,1.txt Save" ' 提示保存成功
  cmdsavedisp.Enabled = False
  Savetime = Timer ' 记下开始的时间
  While Timer < Savetime + 5 ' 循环等待 5 - 要延时的时间
  DoEvents ' 转让控制权,以便让操作系统处理其它的事件。
  Wend
  txtsavepath = SaveTextPath ' 显示保存路径
  cmdsavedisp.Enabled = True
  Err:
  End Sub
  '=====================================================================================
  ' 选择要发送的文件并放入内存中
  '=====================================================================================
  Private Sub CmdSelectFile_Click() ' 选择要发送的文件
  On Error GoTo Err ' 错误处理
  CommonDialog1.Flags = cdlCFBoth
  CommonDialog1.ShowOpen
  TxtSendPath.Text = CommonDialog1.FileName ' 把打开的文件名给于TxtSendPath
  Open TxtSendPath.Text For Input As 1 ' 打开选择的文件
  FileData = StrConv(InputB$(LOF(1), 1), vbUnicode) ' 显示打开的文件
  Close 1 ' 关闭文件
  Err:
  End Sub
  Private Sub cmdsend_Click()
  On Error GoTo Err
  If MSComm.PortOpen = True Then ' 如果串口打开了,则可以发送数据
  If txtsend.Text = "" Then ' 判断发送数据是否为空
  MsgBox "发送数据不能为空", 16, "串口调试助手" ' 发送数据为空则提示
  Else
  If ChkHexsend.Value = 1 Then ' 发送方式判断
  MSComm.InputMode = comInputModeBinary ' 二进制发送
  Call hexSend ' 发送十六进制数据
  Else ' 按十六进制接收文本方式发送的数据时,文本也要按二进制发送发送
  If ChkHexReceive.Value = 1 Then
  MSComm.InputMode = comInputModeBinary ' 二进制发送
  Else
  MSComm.InputMode = comInputModeText ' 文本发送
  End If
  MSComm.Output = Trim(txtsend.Text) ' 发送数据
  ModeSend = False ' 设置文本发送方式
  End If
  End If
  Else
  MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口
  End If
  Err:
  End Sub
  Private Sub cmdstopdisp_Click()
  On Error GoTo Err
  If DisplaySwitch = False Then
  DisplaySwitch = True ' 关闭显示
  cmdstopdisp.Caption = "继续显示"
  Else
  DisplaySwitch = False ' 开启显示
  cmdstopdisp.Caption = "停止显示"
  End If
  Err:
  End Sub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python串口调试助手是一款基于Python语言开发的串口通信软件,可以用于串口的发送、接收、调试等操作。该软件的源代码可以在网上找到,使用者可以根据自己的需求对其进行修改和定制,以使其能够更好地适应不同场景的使用。 该软件的主要功能包括:串口的打开、关闭、设置,数据的发送、接收,数据的显示和保存等。用户可以在界面上输入要发送的数据,选择串口号和波特率等参数,点击发送按钮即可将数据发送到串口中。同时,该软件还支持接收数据的功能,并将接收到的数据以文本的形式展示在界面上,方便用户进行调试和分析。 由于该软件是基于Python语言开发的,因此其具有良好的跨平台性,在Windows、Linux和MacOS等不同操作系统中都可以正常运行,为用户带来了便利。此外,用户还可以根据自己的需要对该软件进行二次开发,添加自己的功能和模块,使其更加符合自己的需求。 Python串口调试助手源代码简单易懂,适合初学者学习和参考。在使用过程中遇到问题,可以通过查找源代码进行分析和解决,提高自己的编程能力。总之,Python串口调试助手源代码是一份非常有价值的开源项目,为广大Python爱好者和硬件爱好者提供了良好的学习和交流平台。 ### 回答2: Python 串口调试助手源代码是一份用Python编写的程序代码,用来帮助调试串口通信。这份源代码是基于Python编写的,并且使用了Pyserial库进行串口通信的读写操作。在程序中,用户可以设置串口的基本参数,例如波特率、数据位、校验位和停止位等,同时还可以进行串口的打开、关闭、读写操作。 程序中主要的函数包括初始化串口函数、打开串口函数、关闭串口函数、写串口函数和读串口函数。其中初始化串口函数用于设置串口的基本参数,打开串口函数用于打开设备并初始化串口参数,关闭串口函数用于关闭串口,写串口函数用于向串口写入数据,读串口函数用于从串口读取数据。 此外,该程序还具备界面功能,用户可以通过在程序窗口中输入发送的数据,同时接收串口数据也会在程序界面中显示出来。在程序中还设置了一个清空数据按钮,用户可以通过点击该按钮清除收到的数据。 总之,Python 串口调试助手源代码是一份非常实用的Python编写的串口调试工具,其代码源码易于看懂、易于修改,可以满足初学者以及专业程序员的调试需求。 ### 回答3: Python 串口调试助手源代码是一段很有用的程序,用于串口通讯和调试。它的主要作用是帮助用户测试串口数据传输的稳定性和正确性,以及进行串口设备的调试。下面是 Python 串口调试助手源代码的详细介绍: 1. 导入必要的库 首先,要导入所需的库文件,包括PyQt5、serial、sys、threading和time等。其中PyQt5用于编写界面,serial库用于处理串口通讯,sys和threading库用于处理程序异常和多线程等,time库用于控制时间。 2. 创建主窗口 接下来,创建一个主窗口,在此窗口中放置可用的控件,如文本框、输入框、下拉框、按钮等。这些控件可以通过调用PyQt5的API实现,可以设置控件的属性,如大小、位置、颜色、字体等。 3. 初始化串口 在串口调试助手中,需要初始化一个串口变量,用于处理串口通讯。可以使用Serial库实现,通过传入串口号、波特率、数据位、校验位和停止位等参数,实现串口的初始化。还可以使用try...except语句,处理初始化时可能发生的异常。 4. 接收和发送数据 在串口调试助手中,主要涉及两个操作:接收数据和发送数据。在接收数据时,可以使用Serial库的readline()函数,实现从串口读取数据,并将数据显示在主窗口的文本框中。在发送数据时,用户可以在主窗口的输入框中输入数据,然后调用Serial库的write()函数,实现向串口发送数据。 5. 开启多线程 在串口调试助手中,接收数据和发送数据是两个独立的操作,这意味着它们可以并行执行。为了使程序更加可靠和高效,可以使用多线程技术,分别开启两个独立的线程来处理接收数据和发送数据。可以使用threading库的Thread()函数实现多线程。 总之,Python 串口调试助手源代码是非常有用的工具,可以帮助用户快速测试和调试串口设备。通过使用Python的强大功能和丰富的库文件,开发者可以轻松创建一个简洁实用的串口调试助手
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值