正在从串行端口读取字节

本文关键字:读取 字节 串行端口 | 更新日期: 2023-09-27 18:28:42

我正在构建一个应用程序,需要从串行设备中读取15个byes。(ScaleXtic c7042 powerbase)字节需要按正确的顺序排列,最后一个是crc。

在后台工作人员中使用此代码,我得到字节数:

byte[] data = new byte[_APB.ReadBufferSize];
_APB.Read(data, 0, data.Length);

问题是,我没有首先获取第一个字节,就像它将一些字节存储在缓冲区中一样,所以下次触发DataReciveved事件时,我会从上一条消息中获取最后x个字节,而从新消息中仅获取15-x个字节。我把字节写在一个文本框中,它到处都是,所以有些字节在某个地方丢失了。

我试着在每次读取后清除缓冲区,但没有成功。

_APB = new SerialPort(comboBoxCommAPB.SelectedItem.ToString());
_APB.BaudRate = 19200;
_APB.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandlerDataFromAPB);
_APB.Open();
_APB.DiscardInBuffer();

希望任何人都能在这里帮助我

正在从串行端口读取字节

使用此方法从串行端口读取固定数量的字节,对于您的toread = 15;

 public byte[] ReadFromSerialPort(SerialPort serialPort, int toRead)
 {
     byte[] buffer = new byte[toRead];
     int offset = 0;
     int read;
    while (toRead > 0 && (read = serialPort.Read(buffer, offset, toRead)) > 0)
    {
        offset += read;
        toRead -= read;
    }
    if (toRead > 0) throw new EndOfStreamException();
    return buffer;
}