正在从串行端口读取字节
本文关键字:读取 字节 串行端口 | 更新日期: 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;
}