用VB编写串口调试小助手
用VB编写串口调试小助手
![用VB编写串口调试小助手](https://img.taocdn.com/s3/m/ad256cd54128915f804d2b160b4e767f5acf8066.png)
经典的串口调试助手源代码分类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 quotshell32.dllquot Alias quotShellExecuteAquot 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 quotSTATUSCOM Port Clocedquot 串口状态显示mnuconnect.Caption quot断开串口quot cmdswitch.Caption quot打开串口quot ImgSwitch.Picture LoadPicturequotf:我的VB串口调试软件图片guan.jpgquot 显示串口已经关闭的图标ImgSwitchoff.Visible True ImgSwitchon.Visible False Err: End Sub Private Sub UpdateStatus If MSComm.PortOpen Then StatusBar1.Panels1.Text quotConnectedquot mnuautosend.Caption quot自动发送quot mnuconnect.Caption quot断开串口quot Else StatusBar1.Panels1.Text quot断开串口quot mnuautosend.Caption quotdisautosendquot mnuconnect.Caption quot打开串口quot End If StatusBar1.Panels2.Text quotCOMquot amp mPortStatusBar1.Panels3.Text MSComm.Settings If OutputAscii Then StatusBar1.Panels4 quotASCIIquot Else StatusBar1.Panels4 quotHEXquot End If On Error GoTo Err If ChkAutoSend.Value 1 Then 如果有效则自动发送If MSComm.PortOpen True Then 串口状态判断mnuautosend.Caption quotDisampautosendquot TmrAutoSend.Interval ValTxtAutoSendTime 设置自动发送时间TmrAutoSend.Enabled True 打开自动发送定时器Else mnuautosend.Caption quotautosendquot ChkAutoSend.Value 0 串口没有打开去掉自动发送MsgBox quot串口没有打开请打开串口quot 48 quot串口调试助手quot 如果串口没有被打开提示打开串口End If ElseIf ChkAutoSend.Value 0 Then 如果无效不发送mnuautosend.Caption quotautosendquot TmrAutoSend.Enabled False 关闭自动发送定时器End If Err: End Sub Private Sub CmdSendFile_Click 发送文件On Error GoTo Err If MSComm.PortOpen True Then 如果串口打开了则可以发送数据If FileData quotquot Then 判断发送数据是否为空MsgBox quot发送的文件为空quot 16 quot串口调试助手quot 发送数据为空则提示Else If ChkHexReceive.Value 1 Then 如果按十六进制接收时按二进制发送否则按文本发送MSComm.InputMode comInputModeBinary 二进制发送ElseMSComm.InputMode comInputModeText 文本发送End If MSComm.Output TrimFileData 发送数据ModeSend True 设置文本发送方式End If Else MsgBox quot串口没有打开请打开串口quot 48 quot串口调试助手quot 如果串口没有被打开提示打开串口End If Err: End Sub Private Sub Comm_initialPort As Byte BaudRate AsString ParityBit As String DataBit As Integer StopBit As Integer On Error GoTo ErrorTrap 错误则跳往错误处理If MSComm.PortOpen True ThenMSComm.PortOpen False 先判断串口是否打开如果打开则先关闭mPort Port 设定端口MSComm.Settings BaudRate amp quotquot amp ParityBit amp quotquot amp DataBit amp quotquot amp 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 quotSTATUSquot amp cbocom.Text amp quot OPENDquot amp cbobaudrate.Text amp quotquot amp Leftcboparitybit.Text 1 amp quotquot amp cbodatabit.Text amp quotquot amp cbostopbit.Text Else txtstatus.Text quotSTATUSCOM Port Clocedquot 串口没打开时提示串口关闭状态End If Exit Sub ErrorTrap: 错误处理Select Case Err.Number Case comPortAlreadyOpen 如果串口已经打开则提示MsgBox quot没有发现此串口或被占用quot 49 quot串口调试助手quot CloseCom Case Else MsgBox quot没有发现此串口或被占用quot 49 quot串口调试助手quot CloseCom End Select Err.Clear End Sub Private Sub Comm_reSetPort 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 amp quotquot amp ParityBit amp quotquot amp DataBit amp quotquot amp StopBit 设置波特率无校验8位数据位1位停止位MSComm.PortOpen True 打开串口IfMSComm.PortOpen True Then cmdswitch.Caption quot关闭串口quot ImgSwitch.Picture LoadPicturequotf:我的VB串口调试软件图片kai.jpgquot 显示串口已经打开的图标ImgSwitchoff.Visible False mnuconnect.Caption quotdisconnectquot ImgSwitchon.Visible True txtstatus.Text quotSTATUSquot amp cbocom.Text amp quot OPENDquot amp cbobaudrate.Text amp quotquot amp Leftcboparitybit.Text 1 amp quotquot amp cbodatabit.Text amp quotquot amp cbostopbit.Text Else cmdswitch.Caption quot打开串口quot ImgSwitch.Picture LoadPicturequotf:我的VB串口调试软件图片guan.jpgquot 显示串口已经关闭的图标ImgSwitchon.Visible False ImgSwitchoff.Visible True txtstatus.Text quotSTATUSCOM Port Clocedquot End If Exit Sub ErrorHint: 错误处理Select Case Err.Number Case comPortAlreadyOpen 如果串口已经打开则提示MsgBox quot没有成功请重试quot vbExclamation quot串口调试助手quot CloseCom 调用关闭串口函数Case Else MsgBox quot没有成功请重试quot vbExclamation quot串口调试助手quot CloseCom 调用关闭串口函数End Select Err.Clear 清除Err 对象的属性End Sub Private Sub Command1_Click End Sub Private Sub cbobaudrate_Change Call Comm_reSetValMidcbocom.Text 4 2 cbobaudrate.Text Leftcboparitybit.Text 1cbodatabit.Text cbostopbit.Text 串口设置End Sub Private Sub cbocom_Change Call Comm_reSetValMidcbocom.Text 4 2 cbobaudrate.Text Leftcboparitybit.Text 1 cbodatabit.Text cbostopbit.Text 串口设置End Sub Private Sub cbodatabit_Change Call Comm_reSetValMidcbocom.Text 4 2 cbobaudrate.Text Leftcboparitybit.Text 1 cbodatabit.Text cbostopbit.Text 串口设置End Sub Private Sub cboparitybit_Change Call Comm_reSetValMidcbocom.Text 4 2 cbobaudrate.Text Leftcboparitybit.Text 1 cbodatabit.Text cbostopbit.Text 串口设置End Sub Private Sub cbostopbit_Change Call Comm_reSetValMidcbocom.Text 4 2 cbobaudrate.Text Leftcboparitybit.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 quot取消自动发送quot TmrAutoSend.Interval ValTxtAutoSendTime 设置自动发送时间TmrAutoSend.Enabled True 打开自动发送定时器Else ChkAutoSend.Value 0串口没有打开去掉自动发送MsgBox quot串口没有打开请打开串口quot 48 quot串口调试助手quot 如果串口没有被打开提示打开串口End If ElseIf ChkAutoSend.Value 0 Then 如果无效不发送mnuautosend.Caption quot自动发送数据quot 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 ConstNO_OPTIONS 0 Set spShell CreateObjectquotShell.Applicationquot Set spFolder spShell.BrowseForFolderWINDOW_HANDLE quot选择目录:quot NO_OPTIONS quotC:Scriptsquot Set spFolderItem spFolder.Self spPath spFolderItem.Path spPath ReplacespPath quotquot quotquot Replace函数的返回值是一个字符串txtsavepath.Text spPath 把文件夹路径显示在标签上SaveTextPath txtsavepath.Text 路径暂存Err: End Sub Private Sub CmdClearCounter_Click On Error GoTo Err SendCount 0 发送计数器清零ReceiveCount 0 接收计数器清零txtRXcount.Text quotRX:quot amp 0 接收计数txtTXcount.Text quotTX:quot amp 0 发送计数Err: End Sub Private Sub cmdclearrecieve_Click TxtReceive.Text quotquot End Sub Private Sub cmdclearsend_Click txtsend.Text quotquot 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 amp quot1.txtquot For Output As 1 打开文件不存在的话会创建文件如已存在会覆盖output 改为append 为追加改为input 则只读Print 1 YearDate amp quot年quot amp MonthDate amp quot月quot amp DayDate amp _ quot 日quot amp HourTime amp quot时quot amp MinuteTime amp quot分quot amp SecondTime amp _ quot秒quot amp vbCrLf amp TxtReceive.Text vbCrLf 把接收区的文本保存文本前加上保存时间0000年00月00日00时00分00秒vbcrlf 为回车换行Close 1 关闭文件txtsavepath quotOK1.txt Savequot 提示保存成功cmdsavedisp.Enabled False Savetime Timer 记下开始的时间While Timer lt Savetime 5 循环等待5 - 要延时的时间DoEvents 转让控制权以便让操作系统处理其它的事件。
VB.NET串口控件的使用和说明来自安的博客
![VB.NET串口控件的使用和说明来自安的博客](https://img.taocdn.com/s3/m/d04dd1c9afaad1f34693daef5ef7ba0d4a736d94.png)
串口控件的使用和说明来自安的博客上位机软件,尤其是串口监听软件是我们常用到的工具。
这里我讲解一下使用时,串口控件的使用和串口的配置。
一、认识串口控件,名称SerialPort,调用方式如下图所示。
二、串口常用参数说明:名称说明BaseStream获取SerialPort对象的基础Stream对象。
BaudRate获取或设置串行波特率。
BreakState获取或设置中断信号状态。
BytesToRead获取接收缓冲区中数据的字节数。
BytesToWrite获取发送缓冲区中数据的字节数。
CDHolding获取端口的载波检测行的状态。
Container 获取 IContainer,它包含 Component。
(从Component 继承。
)CtsHolding获取“可以发送”行的状态。
DataBits获取或设置每个字节的标准数据位长度。
DiscardNull获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略。
DsrHolding获取数据设置就绪 (DSR) 信号的状态。
DtrEnable获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号。
Encoding获取或设置传输前后文本转换的字节编码。
Handshake获取或设置串行端口数据传输的握手协议。
IsOpen获取一个值,该值指示 SerialPort 对象的打开或关闭状态。
NewLine获取或设置用于解释ReadLine和WriteLine方法调用结束的值。
Parity获取或设置奇偶校验检查协议。
ParityReplace获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节。
PortName获取或设置通信端口,包括但不限于所有可用的 COM 端口。
ReadBufferSize获取或设置 SerialPort 输入缓冲区的大小。
ReadTimeout获取或设置读取操作未完成时发生超时之前的毫秒数。
vb.net编写的简易串口调试程序
![vb.net编写的简易串口调试程序](https://img.taocdn.com/s3/m/0e7093f4846a561252d380eb6294dd88d0d23d25.png)
编写的简易串口调试程序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进制发送,如果是换行将不可选。
串口调试小助手怎么用?串口调试小助手使用以及常见问题解答
![串口调试小助手怎么用?串口调试小助手使用以及常见问题解答](https://img.taocdn.com/s3/m/58288b3b657d27284b73f242336c1eb91a3733e4.png)
串⼝调试⼩助⼿怎么⽤?串⼝调试⼩助⼿使⽤以及常见问题解答串⼝调试⼩助⼿1.3是⼀款专门⽤于修改串⼝数据的调试⼩⼯具,⽀持修改串⼝波特率、校验位、数据位和串⼝停⽌位、设置接受区和发送区等功能。
其中软件⾃带的⾃定义波特率功能能够将列表框由只读变为可写,直接输⼊你想要的波特率,⽆需⼿动设定,并且当再选择其他内定的波特率时,列表框会恢复为只读的状态。
除此之外,软件内部接受⽂件采取2进制的保存⽅式,这使得该软件存储⽂件的速度远超于同类软件。
值得⼀提的是,该软件还⽀持编辑区快捷键的输出,能让串⼝编辑像Word⼀样简单⾃如。
串⼝调试⼩助⼿ v1.3 绿⾊免费版类型:调试⼯具⼤⼩:191KB语⾔:简体中⽂时间:2020-07-01查看详情使⽤教程1、连接:将ch340连接到电脑的USB接⼝上,这是买的⼀个ch340模块,⽹上⼗⼏块都可以得到。
2、检查:找到电脑的”设备管理器“:打开开始菜单,找到“计算机”;3、检查:找到电脑的”设备管理器“:单击右键在下拉菜单中选中“设备管理器”。
4、检查:找到电脑的”设备管理器“ 在电脑的“设备管理器”中查看是否有相应的硬件连接。
如果没有我们往往要下载ch340的硬件驱动,可以百度搜索⼀下,有很多的这样的驱动,任意下载⼀个安装后,在连接上就可以了。
如果正确连接应该有⼀下的结果。
软件快捷键ALT+A 发送所有内容'ALT+S 发送光标所在⾏的数据'ALT+D 发送光标所在⾏的数据,并发送回车换⾏ALT+C 清空发送区常见问题⼀、串⼝调试⼩助⼿怎样更换数据的路径?1、打开串⼝调试助⼿的软件界⾯2、在左边编辑栏中找到更换路径3、点击选择⾃⼰的预先设想的路径⼆、如何使⽤串⼝调试助⼿ComTone调试串⼝1、串⼝打开后,可随时修改通讯参数,只需要按⼀下应⽤2、设置“输⼊HEX”,则⽤户输⼊数据看作16进制字节,不区分⼤⼩写,接收的会显⽰为16进制HEX格式;如果设置“输⼊ASC“则⽤户输⼊数据看作ASCII字符,接收的也会显⽰为ASCII字符;3、选中“回车发送”,输⼊区内按回车相当于按发送按钮,如想输⼊多⾏,可⽤Ctrl+回车;不选中,则输⼊区内可⽤回车分⾏4、设”CRC校验“,加⼊了16位CRC校码放到每次发送的字节数的最后两位5、⽤户输⼊(从串⼝输出)的数据显⽰为绿⾊,从串⼝输⼊的数据显⽰为蓝⾊6、如果显⽰框中的数据太多了,想清除的话,可以点”清空显⽰“来清屏”7、如果需要保存当前配置,以便后⾯接着使⽤同样的配置,可以点”保存参数“,这样以且打开就可以使⽤默认的配置项了三、如何发送多条字符串1、打开串⼝调试助⼿⼯具2、然后配置串⼝号、波特率、数据位、停⽌位等串⼝信息3、配置好后就可以打开串⼝了4、然后点“扩展”功能,通过这个来设置要发送的多条字符串数据。
7 串口通讯实例程序(VB)
![7 串口通讯实例程序(VB)](https://img.taocdn.com/s3/m/5db6550190c69ec3d5bb7515.png)
第七篇串口通讯实例程序(VB版)上一篇文档中简单了解了一下SerialPort控件。
本篇文档将利用这个控件,编写一个简单的串口收发程序。
打开VS2005。
文件| 新建| 项目。
新建一个项目,名称:SerialPortTest。
打开Form1.vb窗口。
在窗口中添加几个控件。
包括4个按钮,两个编辑框,1个状态栏,两个静态文本,简单的调整一下窗体。
如下图:将两个编辑框的Multiline属性设置为True。
然后给窗体添加一个SerialPort控件。
调整一下其属性如下:BaudRate : 9600 DataBits : 8 Parity : None PortName : COM1StopBits : One ReceivedBytesThreshold : 1添加“打开串口”按钮的单击响应函数,如下:——————————————————————————————————Private Sub BTN_COM_OPEN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_COM_OPEN.ClickIf Me.SerialPort1.IsOpen = True ThenMe.StatusBar1.Text = "串口已经连接! COM1,9600,8,1"MsgBox("当前设备已连接", MsgBoxStyle.OkOnly, "提示") ElseMe.SerialPort1.Open()If Me.SerialPort1.IsOpen = True ThenMe.StatusBar1.Text = "打开串口成功!COM1,9600,8,1"ElseMe.StatusBar1.Text = "打开串口失败!"End IfEnd IfEnd Sub ——————————————————————————————————上面这段代码,打开串口,并在状态栏上显示一些提示信息。
VB实现PC与欧姆龙PLC通讯的串口编程
![VB实现PC与欧姆龙PLC通讯的串口编程](https://img.taocdn.com/s3/m/b5d56d4ecbaedd3383c4bb4cf7ec4afe04a1b1d1.png)
VB实现PC与欧姆龙PLC通讯的串口编程第一篇:VB实现PC与欧姆龙PLC通讯的串口编程Private Sub Form_Load()Dim i As Integer'OPEN COM1If ComTrue(1)= 0 ThenIf ComOpen(1, 38400, 7, 1, 1, “sjh”)= 1 Then 'MsgBox(“已注册”)'sjh为你的注册账号Call SetDelayNum(64)End IfEnd Ifjisujisu1jisu2End Sub第二篇:VB中串口通讯的实现VB中串口通讯的实现.txt VB中串口通讯的实现------------------一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC 间的通讯以及PC和单片机之间的通讯之中。
提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。
实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。
下面,笔者就介绍一下在VB 中实现串口通讯的方法。
在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。
我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。
下面,笔者就简要地介绍一下MSComm控件的使用方法。
二、MSComm控件的主要属性、事件1、MSComm的属性由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。
Commport:设置通讯所占用的串口号。
如设成1(默认值),表示对Com1进行操作。
Setting:对串口通讯的相关参数。
包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。
其默认值是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。
vb串口编程实例
![vb串口编程实例](https://img.taocdn.com/s3/m/3d4baf2011a6f524ccbff121dd36a32d7375c78b.png)
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代码](https://img.taocdn.com/s3/m/e1cf217231b765ce050814ef.png)
串口测试软件 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.net串口编程
![vb.net串口编程](https://img.taocdn.com/s3/m/e3cb0459f6ec4afe04a1b0717fd5360cba1a8d74.png)
Imports System.IO.PortsImports System.TextPublic Class JCFrmDim RS232 As SerialPortPrivate Sub JCFrm_Load(ByV al sender As System.Object, ByV al e As System.EventArgs) Handles MyBase.LoadDim mBaudRate As IntegerDim mParity As IO.Ports.ParityDim mDataBit As IntegerDim mStopbit As IO.Ports.StopBitsDim mPortName As StringmPortName = "com1" '欲开启的通讯端口mBaudRate = 9600 '比特率mParity = Parity.None '校验位检查设定mDataBit = 8 '数据位设定值mStopbit = StopBits.One '停止位设定值'建立一个通讯端口对象RS232 = New IO.Ports.SerialPort(mPortName, mBaudRate, mParity, mDataBit, mStopbit)If Not RS232.IsOpen Then '尚未开启RS232.Open() '开启通讯端口ElseMsgBox("~~通讯端口已开启~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)EndEnd IfPrivate Sub readBtn1_Click(ByV al sender As System.Object, ByV al e As System.EventArgs) Handles readBtn1.ClickTryIf readBtn1.Text = "读取" ThenTimer1.Interval = 100Timer1.Enabled = TruereadBtn1.Text = "确定"readBtn2.Enabled = False '检测A W1的值,不能同时检测A W2的值。
如何用VB编写串口程序
![如何用VB编写串口程序](https://img.taocdn.com/s3/m/69408410effdc8d376eeaeaad1f34693daef10da.png)
如何用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串口实验报告
![VB串口实验报告](https://img.taocdn.com/s3/m/bb7d530c4a7302768e993989.png)
VB串口实验报告一:实验任务设计远程控制系统,要求通过局域网完成远程测控任务。
远程测控节点通过串口采集RM4040模块和STD100无纸记录仪的数据。
二:主要内容(1)熟悉VB环境,练习文本框、标签、定时器等常用控件的使用方法。
(2)检查RS232连接情况,并使用串口调试助手测试通信情况,进行串口通信编程(3)针对RM4040模块,编写串口通信程序(无校验)、完成通讯错误处理、超时处理(4)编写带有校验协议的处理程序,读取STD100模块的数据(5)对读取的数据采用不同的滤波算法进行处理(6)***试编写程序模拟RM4040模块的通讯功能(7)编写简单的网络通信程序,实现远程计算机控制(8)编写权限控制,优化程序,完善设计。
三:实验程序及分析Dim a, b, c, d, e, f, g, h, i, z As Integer ‘定义变量名,类型Dim aa(10), bb(10), cc(10) As Double ‘定义数组名,类型Private Sub Command1_Click()Text1.Text = "@01R" ‘在Text1中写入需要发送的端口代码MSComm1.Output = Text1.TextTimer2.Enabled = TrueEnd SubPrivate Sub Command2_Click()If Timer1.Enabled = False ThenTimer1.Enabled = TrueCommand2.Caption = "结束自动发送" ‘控制是否进行自动发送ElseIf Timer1.Enabled = True ThenTimer1.Enabled = FalseCommand2.Caption = "自动发送"End IfEnd SubPrivate Sub Command3_Click() ‘通过MSComm1.RThreshold字符串的长度控制选择的是无纸记录仪还是数字输出模块If MSComm1.RThreshold = 39 ThenMSComm1.RThreshold = 22Command3.Caption = "无纸记录仪"ElseIf MSComm1.RThreshold = 22 ThenMSComm1.RThreshold = 39Command3.Caption = "数字输出模块"End IfEnd SubPrivate Sub Form_Load()z = 1mPort = 1 ‘选择端口号If MSComm1.PortOpen = False ThenMSComm1.PortOpen = True ‘打开串口End IfEnd SubPrivate Sub MSComm1_OnComm()Text2.Text = MSComm1.InputIf Command3.Caption = "无纸记录仪" Then ‘无纸输出记录仪b = Mid(Text2.Text, 8, 1)c = Mid(Text2.Text, 13, 1)d = Mid(Text2.Text, 18, 1)e = Mid(Text2.Text, 4, 4)f = Mid(Text2.Text, 9, 4)g = Mid(Text2.Text, 14, 4)Text3.Text = e * 10 ^ (-b)Text4.Text = f * 10 ^ (-c)Text5.Text = g * 10 ^ (-d) ‘显示压力温度流量Text6.Text = Mid(Text2.Text, 19, 2)'校验,个个位相互异或得出的结果,想与发送过来的效验值进行比较h = 0For i = 2 To 18h = h Xor Asc(Mid(Text2.Text, i, 1))Next iText7.Text = h'滤波,采用算术平均滤波法,连续采样10次求平均。
利用VB实现串口通信
![利用VB实现串口通信](https://img.taocdn.com/s3/m/41eec60cbb68a98271fefa1c.png)
利用 VB 实现串口通信
工作任务一 VB 的初步学习
【学习目的】
1.熟悉 Visual Basic 的基本概念。 2.掌握 Visual Basic 常用的语句。
【技能目标】
能初步使用 Visual Basic。
【相关知识】
知识一.Visual Basic
Visual Basic(简称 VB)是微软公司推出的一种可视化的、面向对象的结构化高级程 序设计语言,是当今世界上应用最广泛的编程语言之一,它也被公认为是编程效率最高的一 种编程语言。无论是开发功能强大、性能可靠的商务软件,还是编写能处理实际问题的实用 小程序,VB 都是最快速、最简便的语言。它简单易学、容易掌握,软件界面设计非常便捷, 编程工作量较小,开发周期短,特别适合非计算机专业的工程技术人员掌握和使用。
2
计算机测控系统安装与调试
Else If <语句> Else <语句> End If
4.选择语句 用了过多的 Else 后你会感到很不方便,而且程序结构也不清晰,所以 VB 中还有选择语 句帮助解决这个问题。 VB 中的选择语句的格式是这样的: Select Case <变量名> Case <情况 1> <语句> Case <情况 2> <语句> …… Case <情况 n> <语句> Case Else <语句> End Select 其中:<变量名>可以是数值型或字符串型,而每个 Case 指定的<情况>的数据类型必须 与<变量名>的类型一致。 5.循环语句 循环结构是计算机语言里一种重要的结构,它的应用广泛,最简单的例子是累加器的作 用,更直观的例子是把某件事重复指定次数,这样就不用把要重复的语句输入多次,而通过 循环结构完成,非常方便。循环是指在指定的条件下多次重复执行一组语句。被重复执行的 一组语句称为循环体。VB 提供了 4 种结构形式的循环语句: (1)For ... Next 语句 C 语言里有一个“for”循环语句,VB 里也有“For”关键字,作用也差不多,只是 VB 的“For”语句更容易理解。它的格式是: For <循环变量>=<初赋值> To <终值> [Step <步长>] 循环体 [Exit For] Next <循环变量> <循环变量>必须为数值型。默认时,<步长>值为 1,<初赋值>小于<终值>。当开始执行 For 语句时,首先将<循环变量>初始化为<初赋值>,程序每循环一次,<循环变量>增 1,直 到<循环变量>到达<终值>时为止。 注意:在默认情况下,Step 被设为“1”,可以省略,Step 也可以设为负值,例如: Dim a=0 For I=1 To 10 a=a+I Next I 这是一个最简单的累加器的例子,把 1 到 10 累加在一起,然后赋值给“a”。下面的效
VB串口调试助手源代码
![VB串口调试助手源代码](https://img.taocdn.com/s3/m/5456794a336c1eb91a375d28.png)
VB串口调试助手源代码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 As String, ByVal nShowCmd As Long) As LongPrivate Sub CloseCom() '关闭串口On Error GoTo ErrIf MSComm.PortOpen = True ThenMSComm.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 ’转让控制权,以便让操作系统处理其它的事件。
串口调试助手源代码
![串口调试助手源代码](https://img.taocdn.com/s3/m/e3fa0471f8c75fbfc67db283.png)
串口调试助手预源代码using System;using System.Collect ion s.Ge neric;using p onen tModel;using System.Data;using System.Draw ing;using System.Linq;using System.Text;using System.Thread in g.Tasks;using System.Wi ndows.Forms;using Syste m.IO;using Syste m.IO .Ports;using System.Thread ing;using DevExpress.XtraEditors;using System.Text.RegularExpressi ons;n amespace Win dowsFormsApplicatio n3 {public partial class Form1 : XtraForm {SerialPort sp1 = new SerialPort(); int Flag = 0;int StateCha nged = 0;int StateCha nged_Ascii = 1; int StateCha nged_16 = 0;string Temp = null;stri ng Temp_memoSe nd = n ull;private void memoSe nd_EditValueCha nged(object sen der, Even tArgs e) { - }public Form1(){In itializeComp onen t();sp1.DataReceived += sp1_DataReceived; }private void Form1_Load(object sen der, Even tArgs e) { -this.MaximizeBox = false;// 检查是否有串口stri ng[] str = SerialPort.GetPortNames();if (str == null) __________ |{MessageBox.Show(”本机没有串口!", "error");return;}// 添加串口项目foreach (stri ng port in Syste m.IO.P orts.SerialPort.GetPortNames()) { cbSerial.Properties .I tems.Add(port);}// 串口设置默认选择项cbSerial.Selectedl ndex = 0;Con trol.CheckForlllegalCrossThreadCalls = false; spl.DataReceived += new SerialDataReceivedEve ntHa ndler(sp1_DataReceived); //订阅委托e)//SerialPort sp1 = new SerialPort();if (!sp1.lsOpe n)〃串口是关闭的,设置参数,打开串口{try{// 获取串口号string serialName = cbSerial.Selectedltem.ToString(); sp1.PortName = serialName;// 设置各参数stri ng strBaudRate = cbBaudRate.Text;string strDateBits = cbDataBits.Text;string strStopBits = cbStop.Text;sp1.BaudRate = Con vert.ToI nt32(strBaudRate);〃波特率sp1.DataBits = Con vert.ToI nt32(strDateBi ts);// 数据位switch (cbStop.Text) // 停止位{case "1":sp1.StopBits = StopBits. On e;break;case "1.5":sp1.StopBits = StopBits. On e;break;case "2":sp1.StopBits = StopBits.Two;break; default:case " 奇校验":sp1.Parity = Parity.Odd; break;精品文档", "Error");case "偶校验":spl.Parity = Parity.Eve n; break; default:MessageBox.Show("Error: 参数不正确!break;labSerial.Text =" 串口号:” + sp1 .P ortName; labState.Text ="状 态:打开";}catch (System.Excepti on ex) {MessageBox.Show("Error:" + ex.Message, "Error"); return; } } }//private void CloseSerial_Click(object sen der, Even tArgs e) 〃{// if (sp1.lsOpe n) // { // sp1.Close(); // labSerial.Text =" 串口号:” + sp1.PortName; // labState.Text ="状 态:关闭";// } 〃}private void Sen d_Click(object sen der, Even tArgs e) { - stri ng StrSe nd = memoSe nd.Text; if (!sp1.lsOpe n) {MessageBox.Show (” 请先打开串口! ", "Error");return; } else {if (rbt nSen dStr.Checked)//〃bt nOpe n.En abled =false; 字符串发送{if (ckTimeSe nd.Checked&& !(stri ng.lsNullOrEmpty(textTime.Text)))//判断是否定时发送数据{string Time = textTime.Text;tmSe nd.l nterval = int. Parse(Time) * 1000;//时间单位是秒,化成毫秒单位后的空格//stri ng StrSe nd_2 = StrSe nd_1.Replace (” ", ""); //stri ng StrSe nd_3 = stri ng.J oi n (” ",Regex.Matches(StrSend_2, @"..|.").Cast<Match>().ToList());stri ng[] StrArray = StrSe nd_1.Split(' '); // 用空格符隔开字符串数组var Str_Se nd = new List<stri ng>();// i nt byteBufferLe ngth = StrArray.Le ngth; 数组StrArray 的长度for (int i = 0; i < StrArray.Le ngth; i++){if (StrArray[i].Trim()=="") {//byteBufferLe ngth--; con ti nue; }else} else //{if (ckTimeSe nd.Checked&& !(string.IsNullOrEmpty(textTime.Text))){卜六进制发送//tmSe nd.Start();//开启定时器{if (StrArray[i].Le ngth < 3){Str_Se nd.Add(StrArray[i]);}else{Str_Se nd.AddRa nge(Devide(StrArray[i]));}}}int byteBufferLe ngth = Str_Se nd.Cou nt; byte[] byteBuffer = new byte[byteBufferLe ngth];in t ii = 0;//decNum = Con vert.ToI nt32(Str_Se nd[i], 16); // 把字符串转成16进制数〃byteBuffer[ii] = Co nvert.ToByte(decNum);〃}try{decNum = Con vert.ToI nt32(Str_Se nd[i], 16); // 把字符串转成16进制数byteBuffer[ii] = Co nvert.ToByte(decNum);}catch (System.Exceptio n ex){MessageBox.Show(”输入错误!","提示");return;}ii++;}sp1.Write(byteBuffer, 0, byteBuffer.Length);// 从第0个开始写入byteBuffer ,长度bytebuffer 的长度。
VBNET开发全功能串口调试助手
![VBNET开发全功能串口调试助手](https://img.taocdn.com/s3/m/2dd8963ebceb19e8b8f6bac2.png)
开发全功能串口调试助手(含完整工程)小记: 的串口通信用了很长时间了,也只用 Write 和Read 这样的方 法,以前都是用这种方式做上位机软件, 如此足矣。
而前几天研究GSM 模块时对 串口返回的数据总是把握不好,参考开发板附送的例程,发现采用SerialPort的DataReCeiVed 事件,可以实现中断触发式的数据接收。
于是想到要自己做一 个串口调试助手,在实现基本功能的前提下增加一些方便自己调试的功能。
经过断断续续的编写,就做成了下面这个小软件:这个软件能够实现串口调试助手的全部功能,经过通信测试,数据接收性能 不亚于呼啸工作室的SCOmASSiStant2.2 ,通过加大输入缓冲区,可以满足大量 数据接收。
的串口通信主要使用 VS 自带的SerialPort 控件,而不是早先的 MSCOmm 更具有兼容性,这也是很久以前就放弃 VB 改用.NET 的直接原因。
该控 件的主要方法、属性如下(该数据来自 VS 的MSD帮助库):想要通过串口收发数据,就需要对串口进行配置,包括设置端口、波特率、数据格式(如CoM端口、9600bps、8位数据位、无校验位、1位停止位)等属性,之后通过OPen方法打开串口。
打开串口可通过手动指定,也可以使用GetPOrtNameS方法获取计算机中存在的串口。
如果打开出错,则可能是串口不存在或者已被占用。
下面是相应代码:PriVate SUbSeriaIPortOpen()OnError GoToErrIf SerialPort.IsOpen = TrUe ThenSeriaIPortCIoseO '避免重复打开端口SerialPort.Ope n()LabeICOMStatUS.Text ="串口已打开"EXit SUbErr: MsgBox('串口不存在或已被占用!" + VbNeWLine + ErrOrTOString()) ' 出现错误,显示错误信息En dSub如果想要在串口中支持中文字符收发,则可在初始化时设置串口控件的编码:SerialPort.E ncodi ng = SyStem.Text.E ncodi ng.Default发送数据通过Write方法来完成,由于串口调试助手需要支持文本和16进制, 需要加入转换代码:PriVate SUbBUttOnSendData_Click( ByVal Sender AsSystemQbject, ByVal e ASSyStem.EventArgs) Handles ButtonSendData.ClickOnError GoToErrDimOutDataBuf ASString = TeXtBOXSend.TextIf OUtDataBUf = "" ThenExit Sub'如果输入文本框中没有数据则不发送If SerialPort.IsOpen = TrUe Then'判断串口是否打开If HeXSendFlag = TrUe Then' ----- 十六进制发送------------OUtDataBUf = OUtDataBUf.Replace( "","")'清除空格与回车OUtDataBUf = OUtDataBUf.Replace(vbNewLine, "")'十六进制数据位数为偶数,例如:FF 00 15 AC 0DIf OUtDataBuf.Length Mod2 <> 0 ThenMSgBOXc请输入正确的十六进制数,用空格和回车隔开。
combobox控件使用针对串口助手设计
![combobox控件使用针对串口助手设计](https://img.taocdn.com/s3/m/9d71fdc96137ee06eff91888.png)
大家好,欢迎来到大苏苏讲课空间今天说一下:串口助手,里的波特率和端口号设计。
波特率要在COMBOBOX控件的属性里item里添加,通过回车换行,还行也可用代码实现。
端口号,从电脑里获得,注意下方代码:Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load'获取计算机有效串口'Me.Text = "串口助手大苏苏"Dim ports As String() = SerialPort.GetPortNames() '必须用命名空间,用SerialPort,获取计算机的有效串口Dim port As StringFor Each port In portsportnamebox.Items.Add(port) '向combobox中添加项Next port'初始化界面baudratebox.SelectedIndex() = 2portnamebox.SelectedIndex() = 0Serial_Port1() '初始化串口Label3.Text = SerialPort1.IsOpenstatuslabel.Text = "串口未连接"statuslabel.ForeColor = Color.Redsendbox.Text = "123"' baudratebox.Text = baudratebox.Items(0) 注释和不注释的地方可以替换'portnamebox.Text = portnamebox.Items(0)End Sub看波特率的输入:240048009600192003840057600115200ComboBox 控件使用详细说明。
使用VB开发串口、USB通信软件
![使用VB开发串口、USB通信软件](https://img.taocdn.com/s3/m/29d0b022bb4cf7ec4bfed0cf.png)
寻 找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编写的串口调试程序](https://img.taocdn.com/s3/m/b8af1b1fa8114431b90dd8ac.png)
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界面串口测温
![基于VB界面串口测温](https://img.taocdn.com/s3/m/b62c571dcc7931b765ce1564.png)
Private Sub Command1_Click()If C1.Text = "COM1" Then '设置串口mPort = 1End IfIf C1.Text = "COM2" ThenmPort = 2End IfIf C1.Text = "COM3" ThenmPort = 3End IfIf C1.Text = "COM4" ThenmPort = 4End IfIf C1.Text = "COM5" ThenmPort = 5End IfMSComm1.Settings = "9600,N,8,1" '设置波特率9600,不做同位检测,8位数据位,1位奇偶校验MSComm1.InBufferSize = 8 '8位接收缓冲区MSComm1.OutBufferSize = 2 '2位发送缓冲区If MSComm1.PortOpen = True Then MSComm1.PortOpen = False '开通讯端口MSComm1.RThreshold = 5 '接收5位数据位触发事件设置数字大于或者小于显示数据位数都造成显示混乱MSComm1.SThreshold = 1 '当MSCommn1缓冲区为空时触发事件MSComm1.InputLen = 0 '指定串口读书数据的长度以上两项可以不设置MSComm1.InputMode = comInputModeText '接收数据以文本形式接收If MSComm1.PortOpen = False Then MSComm1.PortOpen = True '关通讯端口MSComm1.InBufferCount = 0 '清除接收缓冲区否则一直触发事件Command1.Enabled = FalseCommand2.Enabled = TrueEnd SubPrivate Sub Command2_Click()Command1.Enabled = True '打开按键1的允许位Command2.Enabled = False '关闭按键2的允许位MSComm1.PortOpen = False '关闭串口End SubPrivate Sub Form_Load()C1.AddItem "COM1"C1.AddItem "COM2"C1.AddItem "COM3"C1.AddItem "COM4"C1.AddItem "COM5"Form1.Caption = "串口测温" '设置标题栏End SubPrivate Sub MSComm1_OnComm()Dim rec As String '设置字符串变量recSelect Case mEvent '判断是否有事件发生不管是错误还是事件都会触发oncomm事件Case comEvReceive '如果接收到RThreshold个数据rec = MSComm1.Input '接收缓冲区的数据赋给变量Text1.Text = rec '在文本框中显示数据MSComm1.InBufferCount = 0 '清除接收缓冲区否则一直触发事件End SelectEnd Sub。