SearialPort上位机实战经验

更新时间:2023-07-13 03:30:15 阅读: 评论:0

上位机实战经验  '
VB2010中有一个串口控件SerialPort。用这个控件很容易实现一个简单的上位机的功能。本文介绍使用中的几个主要问题:
如何打开串口;
如何发送数据;
如何接收数据;
如何显示接收到的数据;
如何关闭串口。
1  如何打开串口
在“打开串口”按键按下的事件处理程序中,先检查串口是否是“关闭”状态。如果是、则设置SerialPort 的属性(这些属性也可以在设计时在属性窗口中设置),然后打开串口。程序如下:
Private Sub Open_Click(ByVal nder As System.Object, ByVal e As System.EventArgs) Handles Ope
nPort.Click
梦寐以求是什么意思啊If (SerialPort1.IsOpen = Fal) Then
SerialPort1.PortName = "COM1"        ' 端口号
SerialPort1.BaudRate = 9600 ' 波特率
SerialPort1.ReceivedBytesThreshold = 1
' 接收到1个字符时,就触发DataReceived事件
SerialPort1.NewLine = "vbCrLf"        ' 接收到的数据的换行符
SerialPort1.Open()                    ' 打开串口
End If
End Sub
要注意的是:打开串口前,下位机必须接到PC的USB端口并上电。
2  如何发送数据
在“发送消息”按键按下的事件处理程序中,先检查串口是否处于“打开”状态。如果是,则发出消息。
程序如下:
Private Sub SendMessage_Click(ByVal nder As System.Object, ByVal e As
System.EventArgs) Handles SendMessage.Click
If (SerialPort1.IsOpen) Then
SerialPort1.Write("message")  ' 发出消息"message"
End If
End Sub
3  如何接收数据
接收数据比发送数据要复杂一些。接收数据的方式也有多种选择。
本文介绍的方法是:
按“行”接收数据;
数据的换行符是“vbCrLf”;
中国人用英语怎么说当串口接收到1个字符时,即触发“DataReceived”事件;
在“DataReceived”事件处理程序中,把接收到的一行数据存放在一个全局变量中,备系统处理。
Private Sub SerialPort1_DataReceived(ByVal nder As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived        If (bTryClosing) Then      '如果正在关闭串口
Return              '则直接退出
End If
bReceiving = True        '设置“正在接收数据”标志
strReceived = SerialPort1.ReadLine()
' strReceived是存放接收到的数据的全局变量
Me.Invoke(New EventHandler(AddressOf ShowText))  '委托调用ShowText        bReceiving = Fal
End Sub
程序中的其它行的说明,参看第4、5节。
4  如何显示接收到的数据
在DataReceived事件处理程序中,接收到的文本数据,是不能直接在文本框(TextBox)中显示出来的。必须用“委托调用”的方法,才能在文本框(TextBox)中显示出来。具体方法是:
在一个自定义的事件处理程序(ShowText)中,写入在文本框中显示strReceived的语句:
Private Sub ShowText ()
If (bTryClosing) Then    ' 如果正在关闭串口
Return            ' 则直接退出, 不再更新显示数据
End If
TextBox1.Text = strReceived  ' 在文本框中显示strReceived
End Sub
在DataReceived事件处理程序中,囟门闭合时间
写入Me.Invoke(New EventHandler(AddressOf ShowText)) 即可。昂立英语
程序的前3行,参看第5节
四个落实5  如何关闭串口
经验说明:不能在串口正在接收数据时关闭串口,否则会报错。
中年发福
为此,要用2个标志检查系统当前的状态,并在串口没有接收数据时,关闭串口。
先定义2个全局变量:
Dim bTryClosing As Boolean
Dim bReceiving As Boolean
bTryClosing =True 时,表示正在关闭串口
bReceiving =True 时,表示串口正在接收数据
在按下“关闭串口”的按键处理程序中,先检查串口是否处于“打开”状态。
如果是,再设置bTryClosing =True ,表示已发出关闭串口的命令。
接着检查标志bReceiving 是否为True , 即检查串口是否正在接收数据。
如果正在接收数据,则等待。
等待到串口不接收数据时,才关闭串口。
最后,设置bTryClosing =Fal ,表示已关闭串口。
Private Sub Clo_Click(ByVal nder As System.Object, ByVal e As System.EventArgs) Handles CloPort.Click
If (SerialPort1.IsOpen) Then
bTryClosing = True
While (bReceiving)
Application.DoEvents()  ' 等待串口接收完数据
End While
英语中文翻译SerialPort1.Clo()  ' 关闭串口
bTryClosing = Fal
End If
相应地,在DataReceived事件处理程序中,先检查串口是否在关闭。
如果是,则立即退出,不再接收数据,以加快关闭串口的过程。
即DataReceived事件处理程序中的下列语句:吃什么最有营养
If (bTryClosing) Then
Return
End If
如果不是,则设置bReceiving = True ,表示串口正在接收数据。
在接收完数据并委托调用ShowText后,令bReceiving = Fal,表示串口已接收完数据。这种关闭串口的方法是安全可靠的,但时延有时较长。
----------------------------------------------    全文完  ----------------------------------------------------

本文发布于:2023-07-13 03:30:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1079345.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:串口   关闭   接收数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图