当前位置: 代码迷 >> VB Dotnet >> SerialPort1.Read()接收到0x1a时产生有关问题
  详细解决方案

SerialPort1.Read()接收到0x1a时产生有关问题

热度:71   发布时间:2016-04-25 02:06:22.0
SerialPort1.Read()接收到0x1a时产生问题
想要实现的功能描述:通过串口,使用SerialPort.Read 方法 (Byte(), Int32, Int32)接收来自下位机的数据。
当前存在的问题:当使用SerialPort.Read 方法接收到下位机传输的数据中如果包含0x1a就会出现问题。
具体配置和代码如下,望各位大侠查看

Imports System.Windows.Forms
Imports System.IO.Ports

Public Class Form1
Public buffB(50) As Byte
Public Outputbuff(10) As Byte

Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load
If SerialPort1.IsOpen = False Then SerialPort1.Open()'打开串口
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender AS Object,ByVal e As System.IO.PortsDataReceiveEventArgs)Handles SerialPort1.DataReceived ‘接收下位机或串口大师数据
Try
buffB(1)=0
SerialPort1.Read(buffB,0,1)
SerialPort1.ReceiveBytesThreshold =1
SerialPort1.DiscardInBuffer()
Catch
MessageBox.Show("SerialPort1.DataReceived")
End Try
End Sub

Private Sub Button1_Click(ByVal sender AS System.Object,ByVal e As System.EventArgs)Handles Button1.Click ‘发送数据
Outputbuff(0)=TextBox1.Text
SerialPort1.Write(Outputbuff,0,1)
SerialPort1.ReceiveBytesThreshold =1
SerialPort1.DiscardInBuffer()
End Sub

Private Sub Timer2_Tick(ByVal sender AS System.Object,ByVal e As System.EventArgs)Handles Timer2.Tick ’刷新显示
Label1.Text = buffB(0)
End Sub

------解决思路----------------------
首先,到底出现什么问题没说
其次
SerialPort1_DataReceived里,你要把缓冲区里的数据都接收上来啊,怎么接收一个字节后面的就不管了
------解决思路----------------------
你每次都是一个一个字节处理吗,你和对方应该有传输协议的,数据如何组织,你要按照协议去读取相对数量的字节数
------解决思路----------------------
为何是点关闭后出问题....关闭程序导致串口关闭然后操作失败?看看catch住的exception信息吧
另外不知道0x1a的虚拟键码是未设定有没有关系
  相关解决方案