(通信企业管理)经典串口调试助手源程序及串口通信设置精编

合集下载

经典的串口调试工具源代码(一)

经典的串口调试工具源代码(一)

经典的串口调试助手源代码(一)Dim OutputAscii As BooleanDim InputString As StringDim 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 AsString, ByVal nShowCmd As Long) As LongPrivate Sub CloseCom() '关闭串口On Error GoTo ErrIf 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 = TrueImgSwitchon.Visible = FalseErr:End SubPrivate Sub UpdateStatus()If MSComm.PortOpen ThenStatusBar1.Panels(1).Text = "Connected"mnuautosend.Caption = "自动发送"mnuconnect.Caption = "断开串口"ElseStatusBar1.Panels(1).Text = "断开串口"mnuautosend.Caption = "disautosend"mnuconnect.Caption = "打开串口"End IfStatusBar1.Panels(2).Text = "COM" & mPortStatusBar1.Panels(3).Text = MSComm.SettingsIf (OutputAscii) ThenStatusBar1.Panels(4) = "ASCII"ElseStatusBar1.Panels(4) = "HEX"End If'On Error GoTo ErrIf ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送If MSComm.PortOpen = True Then ' 串口状态判断mnuautosend.Caption = "Dis&autosend"TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间TmrAutoSend.Enabled = True ' 打开自动发送定时器Elsemnuautosend.Caption = "autosend"ChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送mnuautosend.Caption = "autosend"TmrAutoSend.Enabled = False ' 关闭自动发送定时器End IfErr:End SubPrivate Sub CmdSendFile_Click() '发送文件On Error GoTo ErrIf MSComm.PortOpen = True Then ' 如果串口打开了,则可以发送数据If FileData = "" Then ' 判断发送数据是否为空MsgBox "发送的文件为空", 16, "串口调试助手" ' 发送数据为空则提示ElseIf ChkHexReceive.Value = 1 Then ' 如果按十六进制接收时,按二进制发送,否则按文本发送MSComm.InputMode = comInputModeBinary ' 二进制发送ElseMSComm.InputMode = comInputModeText ' 文本发送End IfMSComm.Output = Trim(FileData) ' 发送数据ModeSend = True ' 设置文本发送方式End IfElseMsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfErr:End SubPrivate 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 ' 先判断串口是否打开,如果打开则先关闭mPort = 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 Thentxtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," & Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.TextElsetxtstatus.Text = "STATUS:COM Port Cloced" ' 串口没打开时,提示串口关闭状态End IfExit SubErrorTrap: ' 错误处理Select Case Err.NumberCase comPortAlreadyOpen ' 如果串口已经打开,则提示MsgBox "没有发现此串口或被占用", 49, "串口调试助手"CloseComCase ElseMsgBox "没有发现此串口或被占用", 49, "串口调试助手"CloseComEnd SelectErr.ClearEnd SubPrivate 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 ' 先判断串口是否打开,如果打开则先关闭mPort = Port ' 设定端口MSComm.Settings = BaudRate & "," & ParityBit & "," & DataBit & "," & StopBit ' 设置波特率,无校验,8位数据位,1位停止位MSComm.PortOpen = True ' 打开串口If MSComm.PortOpen = True Thencmdswitch.Caption = "关闭串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\kai.jpg") ' 显示串口已经打开的图标ImgSwitchoff.Visible = Falsemnuconnect.Caption = "disconnect"ImgSwitchon.Visible = Truetxtstatus.Text = "STATUS:" & cbocom.Text & " OPEND," & cbobaudrate.Text & "," & Left(cboparitybit.Text, 1) & "," & cbodatabit.Text & "," & cbostopbit.TextElsecmdswitch.Caption = "打开串口"'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭的图标ImgSwitchon.Visible = FalseImgSwitchoff.Visible = Truetxtstatus.Text = "STATUS:COM Port Cloced"End IfExit SubErrorHint: ' 错误处理Select Case Err.NumberCase comPortAlreadyOpen ' 如果串口已经打开,则提示MsgBox "没有成功,请重试", vbExclamation, "串口调试助手"CloseCom ' 调用关闭串口函数Case ElseMsgBox "没有成功,请重试", vbExclamation, "串口调试助手"CloseCom ' 调用关闭串口函数End SelectErr.Clear ' 清除Err 对象的属性End SubPrivate Sub Command1_Click()End SubPrivate Sub cbobaudrate_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1),cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbocom_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbodatabit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cboparitybit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub cbostopbit_Change()Call Comm_reSet(Val(Mid(cbocom.Text, 4, 2)), cbobaudrate.Text, Left(cboparitybit.Text, 1), cbodatabit.Text, cbostopbit.Text) '串口设置End SubPrivate Sub chkautosend_Click()On Error GoTo ErrIf ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送If MSComm.PortOpen = True Then ' 串口状态判断mnuautosend.Caption = "取消自动发送"TmrAutoSend.Interval = Val(TxtAutoSendTime) ' 设置自动发送时间TmrAutoSend.Enabled = True ' 打开自动发送定时器ElseChkAutoSend.Value = 0 ' 串口没有打开去掉自动发送MsgBox "串口没有打开,请打开串口", 48, "串口调试助手" ' 如果串口没有被打开,提示打开串口End IfElseIf ChkAutoSend.Value = 0 Then ' 如果无效,不发送mnuautosend.Caption = "自动发送数据"TmrAutoSend.Enabled = False ' 关闭自动发送定时器End IfErr:End SubPrivate 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 = 0Const NO_OPTIONS = 0Set spShell = CreateObject("Shell.Application")Set spFolder = spShell.BrowseForFolder(WINDOW_HANDLE, "选择目录:", NO_OPTIONS,"C:\Scripts")Set spFolderItem = spFolder.SelfspPath = spFolderItem.PathspPath = Replace(spPath, "\", "\") ' Replace函数的返回值是一个字符串txtsavepath.Text = spPath ' 把文件夹路径显示在标签上SaveTextPath = txtsavepath.Text ' 路径暂存Err:End SubPrivate Sub CmdClearCounter_Click()On Error GoTo ErrSendCount = 0 ' 发送计数器清零ReceiveCount = 0 ' 接收计数器清零txtRXcount.Text = "RX:" & 0 ' 接收计数txtTXcount.Text = "TX:" & 0 ' 发送计数Err:End SubPrivate Sub cmdclearrecieve_Click()TxtReceive.Text = ""End SubPrivate Sub cmdclearsend_Click()txtsend.Text = ""End SubPrivate Sub CmdHelp_Click()FrmHelp.ShowEnd SubPrivate Sub CmdQuit_Click()If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打开,如果打开则先关闭Unload Me ' 卸载窗体,并退出程序EndEnd SubPrivate 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 = FalseSavetime = Timer ' 记下开始的时间While Timer < Savetime + 5 ' 循环等待5 - 要延时的时间DoEvents ' 转让控制权,以便让操作系统处理其它的事件。

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置标题:串口调试助手之经典源程序及通信设置导言:串口调试助手是一种用于串口通信的调试工具,广泛应用于工业控制、测试等领域。

本文将介绍一种基于Windows平台的经典串口调试助手源程序及相关的串口通信设置,旨在帮助读者更好地了解该工具的使用和配置方法。

一、经典串口调试助手源程序1.开发平台:本程序采用C++ Builder 6.0开发。

2.功能概述:(1)串口设置包括设置串口波特率、数据位、校验位、停止位、流控、超时等参数。

(2)发送数据支持以字符串或Hex方式发送数据。

(3)接收数据实时显示串口接收到的数据,并支持数据格式设置。

(4)自动发送数据支持单次或循环发送,可设置发送时间间隔和发送次数。

(5)保存数据支持将接收到的数据保存为文本或二进制文件。

3.源程序结构本程序主要由以下几个模块组成:(1)Main Form:主窗体,包含图形界面显示和基本操作控件。

(2)Serial:串口类,负责串口相关操作,例如打开、关闭、设置参数、发送、接收等。

(3)SaveToFile:文件保存类,负责数据保存到文件中。

(4)Config:配置类,负责程序设置和读取。

(5)Hex:十六进制转换类,用于将字符串转换为Hex格式。

二、串口通信设置1.串口连接串口连接有两种方式:一种是通过RS232串口连接,需要将串口线插入串口,然后将串口线连接到目标设备;另一种是通过USB转串口连接,需要将USB转串口转接器插入计算机USB接口,然后将串口线连接到USB转串口转接器。

2.串口参数设置在使用串口调试助手前,必须先设置串口参数。

打开主窗体后,点击“串口设置”按钮,在弹出的窗口中设置串口的参数,包括波特率、数据位、校验位、停止位、流控和超时等参数。

其中,波特率是指通信时的数据传输速率,常用的有9600、19200、38400、57600、115200等。

数据位是指每次传输的数据位数,常用的有8位、7位、6位等。

串口调试助手使用说明和技术总结

串口调试助手使用说明和技术总结

串口调试助手使用说明和技术总结串口调试助手的技术报告1.软件简介串口调试助手是在Windows平台下开发的,工具是VC++6.0。

串口调试助手版支持常用的300 ~ 115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送数据或字符(包括中文),能发送文本文件,可以任意设定自动发送周期,并能将接收数据保存成文本文件。

是工程师调试串口的好助手工具。

2.软件特点(1) 支持XP /Vista/Win7系统;(2) 绿色软件,不需安装。

运行解压软件,将压缩包解压到指定目录即可。

卸载时只需将程序目录删除;(3) 支持常用的300 ~ 115200bps波特率;(4) 端口范围是COM1-COM4;(5) 能设置校验、数据位和停止位;(6) 能以字符或十六进制收发数据,支持中文字符的收发;(7) 支持文件数据的发送;(8) 数据发送端允许设置发送周期,自动发送数据;(9) 支持键盘输入,将键盘数据发送到串口;(10)支持自动清空(若设置了“自动清空”,则达到50行后,自动清空接收编辑框中显示的数据)接收窗口数据;(11) 如果没有“自动清空”,数据行达到400后,也自动清空,因为数据过多,影响接收速度,显示是最费CPU时间的操作(12)能够保存接收到的数据,保存地址默认的是C:\COMDATA;(13)设置了“停止显示”和“继续显示”按钮,可以方便的照出要使用的信息;(14)图钉按钮功能使程序能浮在最上层。

3.软件界面图1串口调试助手V3.0界面4.软件的设计流程本软件使用的是Windows API 串口编程,其编程基本步骤如下:(1)打开串口;(2)建立串口通信事件;(3)初始化串口;(4)建立数据线程;(5)读写数据;(6)结束时关闭串口。

5.遇到的问题与相应的解决方案(1)串口打开或者关闭有明显的提示(2)界面的大小设置问题,起初只有最小化按钮,按要求加上最大化以及界面要按照一定的规则能进行缩放(3)能发送和接收汉字(4)串口接收显示的数据丢失原因:接收显示是影响程序性能的一个大问题,当接收到大量数据时,串口通信助手响应不太及时,这个可能与调用类中的使用机制有关,但显示也没能很好地处理,不过在实际的传输过程中是没有丢失数据的。

串口调试助手使用方法

串口调试助手使用方法

串口调试助手使用方法你可以试试串口监控器,一个功能强大,非常易用的软件。

串口监控器是一个免费的多功能串口通讯监控软件,它能够多种方式显示,接收,分析通讯数据;能够以多种灵活方式发送数据;功能强大,操作简便,在串口通讯监控,设备通讯测试中,能够有效提高工作效率。

主要功能如下:接收数据:1. 以十六进制方式显示接收到的数据。

2. 以字符方式显示接收到的数据。

3. 数据帧自动识别,分行显示。

4. 接收数据自动换行设置。

5. 显示或隐藏数据帧的接收时间。

6. 自动清除,自动保存接收到的数据。

7. 接收数据个数计数。

发送数据:1. 十六进制方式发送数据。

2. 字符串方式发送数据。

3. 发送“发报窗口”当前光标行的数据帧。

4. 循环发送“发报窗口”当前光标行的数据帧。

5. 循环发送“发报窗口”固定行的数据帧。

6. 循环依次发送“发报窗口”的多行数据帧。

(设置起始行,行数)7. 触发发送,接收到“发报窗口”某一行数据,触发发送“发报窗口”另一行数据。

8. 发送数据个数计数。

实用增强功能:1. 强大易用的进制转换功能。

2. 智能识别当前光标处数据帧的行号,“字符”或“十六进制数”的个数。

3. 智能计算当前选择的“字符”或“十六进制数”的个数。

4. 强大的数据查找功能。

5. 定时保存,定时清除数据。

6. 根据自己的喜好,灵活变换操作界面。

应用场合:1. 截取和分析设备之间通讯数据流。

2. 串行外围设备硬件开发。

3. 串行设备驱动程序开发。

4. 调试和测试设备和设备之间的串行通讯过程。

5. 记录和分析RS232/422/485通信过程。

6. 模拟某设备通讯过程,对另外设备进行通讯测试。

串口调试助手设计思路与手册

串口调试助手设计思路与手册

(2016-11-21)本设计包含的函数模块有:1.打开/关闭串口和设置串口参数2.软件退出3.获取串口参数4.发送数据5.接受数据6.清空发送区7.清空接收区8.计数清零9.暂停/开启接收数据10.自动发送11.发送周期设置12.打开文件13.保存数据补充说明:1.设置串口参数里面包括了1)获取串口可用串口。

2)波特率下拉参数设置。

3)校验位下拉参数设置。

4)数据位下拉参数设置。

5)默认设置。

6)2.发送数据前先判断是否为十六进制,是否为自动发送。

是十六进制发送则把数据先转为十六进制格式并获取数据长度,再把数据转到发送缓冲区发送,否则ASCII码文本发送3.接收数据函数在串口运行时一直在判断是否有新数据,并根据不同的接收模式,加显不同格式的数据软件代码详细介绍:(74-92h)可用串口检测及下拉控件。

(96-109h)波特率下拉控件设置。

(113-121h)校验位下拉控件。

(125-131h)数据位下拉控件。

(135-141h)停止位下拉控件。

(145-155h)默认参数设置。

(159-162h)接收数据串口说明与启动。

(168-174h)关闭软件设置。

(176-180h)关闭窗口后先关闭线程再关闭进程。

(182-194h)定义串口各参数。

(197-281h)打开串口按钮回调函数,先判断是否有可用串口,没有则显示“无可用串口,无法打开”然后返回,有则继续判断当前是要打开串口还是关闭串口,若是需要打开串口则尝试设置串口参数并打开串口,打开串口失败会提示无法打开串口,打开串口成功则串口参数下拉控件变灰发送数据按钮点亮,判断自动发送控件如果被选中则打开串口后直接自动发送数据。

如果之前判断按钮回调是关闭串口,则进行关闭串口并配置相关参数。

(282-347h)CRC16查表法校验函数。

(349-357h)发送数据按钮回调及自动发送按钮回调。

(358-369h)发送数据线程配置。

(371-510h)发送数据函数,先判断是否正在发送数据,如不在发送则设置当前正在发送状态,后继续判断是写序列号模式还是串口调试模式,串口调试模式时先定义发送缓冲区和数组,再判断是否为16进制发送后进行对应进制转码,再尝试发送并刷新发送字节数。

串口调试助手监控设置及使用说明

串口调试助手监控设置及使用说明

串口调试助手简易操作说明
一、软件介绍
串口调试助手是一款串口通讯软件,用它通过RS232可以实现UPS与电脑之间的通讯。

通过发送232协议里面的相应指令,可以查询、设置以及监控UPS工作情况。

二、软件操作
1、本软件无需安装,双击图标如下图标,即可打开软件。

2、打开软件后,先进行下设置。

“串口”栏根据实际情况选择所使用的端口,软件默认的是COM1。

“波特率”栏选择2400。

其他栏保持为默认状态。

3、输入指令
输入相应的指令后按一次回车键。

如输入“QGS+回车键”,即可通讯,
通讯数据如下图示。

UPS常用通讯协议
注:无论是通过软件方式对UPS进行参数设置,还是在UPS LCD显示屏进行参数设置均需要注意以下事项。

1:系列机型,参数设置内容均需要在连接电池的情况下,方可保存,否则SUC33 30-80K
设置内容当次有效,重启机器后,即恢复为原设置。

2:其他机型均可在无电池下保存设置(更改设置后,不可立即断电,需等待几秒,再断电,否则设置有可能没有保存成功)。

经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置

什么是 VARIANT 数据类型?如何使用 VARIANT 数据类型? 怎么以十六进制或二进制发送和接收? 如果还想再深入了解,请看: 串口调试助手源程序及编程详细过程(二)2001.8.26 这是更新后适合本文的源程序(2001.8.25 制作),如果还没有下载源程序,又对本文有兴趣,请 立即 下载 (当然,你看完本文也可以自己做出来,这个程序是接着上一个做的,如果你没下载前面程序, 则没必要再下载了,本程序全部包含)。
描述380无效属性值cominvalidpropertyvalue383属性为只读comsetnotsupported394属性为只读comgetnotsupported8000端口打开时操作不合法comportopen8001超时值必须大于8002无效端口号comportinvalid8003属性只在运行时有效8004属性在运行时为只读8005端口已经打开comportalreadyopen8006设备标识符无效或不支持该标识符8007不支持设备的波特率8008指定的字节大小无效8009缺省参数错误8010硬件不可用被其它设备锁定8011函数不能分配队列8012设备没有打开comnoopen8013设备已经打开8014不能使用comm通知资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除
现在你可以试试程序了,将串口线接好后(不会接?去看看我写的串口接线基本方法),打开串口调试助 手,并将串口设在com2,选上自动发送,也可以等会手动发送。再执行你编写的程序,接收框里应该有数 据显示了。 7.发送数据 先为发送按钮添加一个单击消息即 BN_CLICKED 处理函数,打开 ClassWizard->Message Maps,选择类 CSCommTestDlg,选择 IDC_BUTTON_MANUALSEND,双击 BN_CLICKED 添加 OnButtonManualsend()函数,并在函数中添加如下代码: void CSCommTestDlg::OnButtonManualsend() { // TODO: Add your control notification handler code here UpdateData(TRUE); //读取编辑框内容 m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据 } 运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别 的调试工具)接收框里出现了什么。 如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序时可费劲了, 那时网上的资料也不好找。开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄一份。 最后说明一下,由于用到 VC 控件,在没有安装 VC 的计算机上运行时要从 VC 中把 mscomm32.ocx、 msvcrt.dll、mfc42.dll 拷到 Windows 目录下的 System 子目录中(win2000 为 System32) 龚建伟 2001.6.20

【技术经验】串口调试助手的使用精讲

【技术经验】串口调试助手的使用精讲

【技术经验】串口调试助手的使用精讲以单片机为核心的电子产品行业,是一个瞬息万变的领域,不时时关注行业动态,不了解行业大势所向,不善于把握大势,如何能够抢抓机遇,顺势而为,请关注【微信号】:wujianying_danpianji,实时了解信息,抓住机遇时不我待。

扫一扫二维码或者长按图片关注导读串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。

在调试中常用的工具就是串口调试助手。

当把“串口调试助手”红色圆框中的打勾选项去掉时,则上位机(PC键盘)中的非控制字符都可以发给单片机方框①中选中“字符格式显示”时,“接收区/键盘发送区”可以显示如图所示“普天同庆”字符。

方框②中为“多字符串发送区”,在需要的编号后填入字符后点击“自动循环发送”即可方框③中为“单字串发送区”,应选“字符格式发送”,在“单字串发送区”输入字符后,点击“自动发送”按钮即可。

方框④中为与串口相关参数的设置区域。

上图中方框①中刚开始的是选中“十六进制显示”,“十六进制发送”选项后出现的选中“字符格式显示”,“十六进制发送”按钮后,出现的是选中选中“字符格式显示”,“字符格式发送”按钮后,出现的是上图线头① 指向的为“十六进制显示”,“十六进制发送”时,“接收区”显示的图形线头②指向的为“十六进制显示”,“字符格式发送”时,“接收区”显示的图形方框③中为“字符格式显示”,“十六进制发送”时,“接收区”显示的图形方框④中为“字符格式显示”,“字符格式发送”时,“接收区”显示的图形喜欢本文的亲们,请在页尾点赞| 单 | 片| 机 | 精 | 讲 | 吴| 鉴 | 鹰 |微信第一单片机分享最受欢迎图文公号微信号:wujianying_danpianji《2015.3.13》● 技术源于积累,成功来自执着——单片机精讲。

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

(通信企业管理)经典串口调试助手源程序及串口通信设置串口调试助手源程序及编程详细过程作者:龚建伟2001.6.20能够任意转载,但必须注明作者和说明来自,不得作为商用目次:1.建立项目2.于项目中插入MSComm控件3.利用ClassWizard定义CMSComm类控制变量4.于对话框中添加控件5.添加串口事件消息处理函数OnComm()6.打开和设置串口参数7.发送数据如果你仍没有下载源程序,又对本文有兴趣,请立即下载于众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短壹个月,于全国各地累计下载量近5000人次,于近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,且写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就能够轻而易举地完成串口编程任务了。

(也许本文过于详细,高手就不用见)开始吧:1.建立项目:打开VC++6.0,建立壹个基于对话框的MFC应用程序SCommTest(和我源代码壹致,等会你会方便壹点);2.于项目中插入MSComm控件选择Project菜单下AddToProject子菜单中的ComponentsandControls…选项,于弹出的对话框中双击RegisteredActiveXControls项(稍等壹会,这个过程较慢),则所有注册过的ActiveX控件出当下列表框中。

选择MicrosoftCommunicationsControl,version6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。

(如果你于控件列表中见不到MicrosoftCommunicationsControl,version6.0,那可能是你于安装VC6时没有把ActiveX壹项选上,重新安装VC6,选上ActiveX就能够了),这时于ClassView视窗中就能够见到CMSComm类了,(注意:此类于ClassWizard中见不到,重构clw 文件也壹样),且且于控件工具栏Controls中出现了电话图标(如图1所示),当下要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是见不到的。

3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard->MemberViariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你能够见壹见,于对话框头文件中自动加入了//{{AFX_INCLUDES()#include"mscomm.h"//}}AFX_INCLUDES(这时运行程序,如果有错,那就再从头开始)。

4.于对话框中添加控件向主对话框中添加俩个编辑框,壹个用于接收显示数据ID为IDC_EDIT_RXDATA,另壹个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加壹个按钮,功能是按壹次就把发送编辑框中的内容发送壹次,将其ID设为IDC_BUTTON_MANUALSEND。

别忘记了将接收编辑框的Properties ->Styles中把Miltiline和VerticalScroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。

再打开ClassWizard->MemberViariables选项卡,选择CSCommTestDlg类,为IDC_EDIT_RXDATA 添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。

说明:m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。

5.添加串口事件消息处理函数OnComm()打开ClassWizard->MessageMaps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。

这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生壹个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们于OnComm()函数加入相应的处理代码就能实现自已想要的功能了。

请你于函数中加入如下代码:voidCSCommTestDlg::OnComm(){//TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArraysafearray_inp;LONGlen,k;BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.CStringstrtemp;if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符{////////以下你能够根据自己的通信协议加入处理代码variant_inp=m_ctrlComm.GetInput();//读缓冲区safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize();//得到有效数据长度for(k=0;k<len;k++)safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组for(k=0;k<len;k++)//将数组转换为Cstring型变量{BYTEbt=*(char*)(rxdata+k);//字符型strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放m_strRXData+=strtemp;//加入接收编辑框对应字符串}}UpdateData(FALSE);//更新编辑框内容}到目前为止仍不能于接收编辑框中见到数据,因为我们仍没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没见仔细,因为我是打开VC6对照着做壹步写壹行的,运行试试。

没错吧?那么做下壹步:6.打开串口和设置串口参数你能够于你需要的时候打开串口,例如于程序中做壹个开始按钮,于该按钮的处理函数中打开串口。

当下我们于主对话框的CSCommTestDlg::OnInitDialog()打开串口,加入如下代码://TODO:Addextrainitializationhereif(m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(FALSE);m_ctrlComm.SetCommPort(1);//选择com1if(!m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(TRUE);//打开串口elseAfxMessageBox("cannotopenserialport");m_ctrlComm.SetSettings("9600,n,8,1");//波特率9600,无校验,8个数据位,1个停止位m_ctrlComm.SetInputModel(1);//1:表示以二进制方式检取数据m_ctrlComm.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发壹个接收数据的OnComm事件m_ctrlComm.SetInputLen(0);//设置当前接收区数据长度为0m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据当下你能够试试程序了,将串口线接好后(不会接?去见见我写的串口接线基本方法),打开串口调试助手,且将串口设于com2,选上自动发送,也能够等会手动发送。

再执行你编写的程序,接收框里应该有数据显示了。

7.发送数据先为发送按钮添加壹个单击消息即BN_CLICKED处理函数,打开ClassWizard->MessageMaps,选择类CSCommTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED 添加OnButtonManualsend()函数,且于函数中添加如下代码:voidCSCommTestDlg::OnButtonManualsend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);//读取编辑框内容m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据}运行程序,于发送编辑框中随意输入点什么,单击发送按钮,啊!见见,于另壹端的串口调试助手(或别的调试工具)接收框里出现了什么。

如果你真是初次涉猎串口编程,又壹次成功,那该说声谢谢我了,因为我第壹次做串口程序时可费劲了,那时网上的资料也不好找。

开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄壹份。

最后说明壹下,由于用到VC控件,于没有安装VC的计算机上运行时要从VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目录下的System子目录中(win2000为System32)龚建伟2001.6.20什么是VARIANT数据类型?如何使用VARIANT数据类型?怎么以十六进制或二进制发送和接收?如果仍想再深入了解,请见:串口调试助手源程序及编程详细过程(二)2001.8.26这是更新后适合本文的源程序(2001.8.25制作),如果仍没有下载源程序,又对本文有兴趣,请立即下载(当然,你见完本文也能够自己做出来,这个程序是接着上壹个做的,如果你没下载前面程序,则没必要再下载了,本程序全部包含)。

8.发送十六进制字符于主对话框中加入壹个复选接钮,ID为IDC_CHECK_HEXSENDCaption:十六进制发送,再利用ClassWizard为其添加控制变量:m_ctrlHexSend;于ClassView中为SCommTestDlg类添加以下俩个PUBLIC成员函数,且输入相应代码;//由于这个转换函数的格式限制,于发送框中的十六制字符应该每俩个字符之间插入壹个空隔//如:A123450B0029//CByteArray是壹个动态字节数组,可参见MSDN帮助intCSCommTestDlg::String2Hex(CStringstr,CByteArray&senddata){inthexdata,lowhexdata;inthexdatalen=0;intlen=str.GetLength();senddata.SetSize(len/2);for(inti=0;i<len;){charlstr,hstr=str[i];if(hstr==''){i++;continue;}i++;if(i>=len)break;lstr=str[i];hexdata=ConvertHexChar(hstr);lowhexdata=ConvertHexChar(lstr);if((hexdata==16)||(lowhexdata==16))break;elsehexdata=hexdata*16+lowhexdata;i++;senddata[hexdatalen]=(char)hexdata;hexdatalen++;}senddata.SetSize(hexdatalen);returnhexdatalen;}//这是壹个将字符转换为相应的十六进制值的函数//好多C语言书上均能够找到//功能:若是于0-F之间的字符,则转换为相应的十六进制字符,否则返回-1charCSCommTestDlg::ConvertHexChar(charch){if((ch>='0')&&(ch<='9'))returnch-0x30;elseif((ch>='A')&&(ch<='F'))returnch-'A'+10;elseif((ch>='a')&&(ch<='f'))returnch-'a'+10;elsereturn(-1);}再将CSCommTestDlg::OnButtonManualsend()修改成以下形式:voidCSCommTestDlg::OnButtonManualsend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);//读取编辑框内容if(m_ctrlHexSend.GetCheck()){CByteArrayhexdata;intlen=String2Hex(m_strTXData,hexdata);//此处返回的len能够用于计算发送了多少个十六进制数m_ctrlComm.SetOutput(COleVariant(hexdata));//发送十六进制数据}elsem_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送ASCII字符数据}当下,你先将串口线接好且打开串口调试助手V2.1,选上以十六制显示,设置好相应串口,然后运行我们这个程序,于发送框中输入00010203A1CC等十六进制字符,且选上以十六进制发送,单击手动发送,于串口调试助手的接收框中应该能够见到00010203A1CC了。

相关文档
最新文档