无法检索完整的串行数据

Unable to retrieve complete serial data

我正在开发一个个人项目来读取 Arduino 的 RFID 标签。 当我阅读第一个标签时;我收到了总字节数并且信息得到了正确处理。 但是在阅读以下时间时;似乎我的 PC 是 "seeing" 接收到的第一个字节(共 8 个字节)的接收事件;然后对一次接收到的数据进行处理; (当缓冲区中只有 6 个字节时)。 在发送了这 6 个要处理的字节之后,它注意到一个新的字节传入并处理它,以及随后的字节;在 6 字节和 2 字节的两条消息中创建结果。

结果示例:

1st Read: Message: 06DB0934

2nd Read: Message 1: 06

2nd Read: Message 1: DB0934

下面是我谦虚的代码:

private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    if (port.IsOpen)
    {
        byte[] data = new byte[1024];
        int bytesRead = port.Read(data, 0, data.Length);
        idTag = Encoding.ASCII.GetString(data, 0, bytesRead);

        // Custom Event that will update Information on Main Form
        OnTagReceived(); 
    }
}

知道如何解决这个问题吗?

由于这是在接收到的数据中,您需要将传入的字节存储在缓冲区中,直到您读取足够多为止。

将缓冲区作为 global/instance 变量分开,

private string _tagBuffer;

然后在你的方法中

if (port.IsOpen)
{
    byte[] data = new byte[1024];
    int bytesRead = port.Read(data, 0, data.Length);
    _tagBuffer += Encoding.ASCII.GetString(data, 0, bytesRead);

    if (_tagBuffer.Length >= 8)
    {        
        idTag = tagBuffer.substring(0, 8);
        tagBuffer = tagBuffer.substring(8); // might be 9

        OnTagReceived();
    }
}

将标签放在发送给事件的参数中而不是放在 idTag 中可能更好。