C # Serial Port выдает нежелательные сообщения IRP - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь отправить команды и RFID-считыватель через последовательный порт (он действует как клавиатура, M302 от KKMOON).

У меня есть этот кусок кода для отправки инструкций:

SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.StopBits = StopBits.One;

sp.DataReceived += myRecieved;

sp.Open();
byte[] bytestosend = { 0x03, 0x0a, 0x00, 0x0d };
sp.Write(bytestosend, 0, bytestosend.Length);

bytestosend = new byte[]{ 0x04, 0x05, 0x00, 0x00, 0x09 };
sp.Write(bytestosend, 0, bytestosend.Length);

bytestosend = new byte[] { 0x03, 0x06, 0x00, 0x09 };
sp.Write(bytestosend, 0, bytestosend.Length);

if (beep)
{
    running = false;
    bytestosend = new byte[] { 0x02, 0x13, 0x15 };
    sp.Write(bytestosend, 0, bytestosend.Length);
}

sp.Close();
sp.Dispose();
sp = null;

, и я получаю этот вывод от слушателя последовательного порта: The Current Output from the Serial Program

Выход, который мне нужно получить для чтения данных, The required data

1 Ответ

0 голосов
/ 02 июня 2018

Итак, после комментария Ханса Пассанта я понял, что проблема в том, что на самом деле просто неправильно читается последовательный порт!

Чтобы прочитать весь экстент сообщения, я создал метод, который читает весь буфер:

private static string readData()
{
    int reads = sp.BytesToRead;

    byte[] bytesRead = new byte[reads];

    try
    {
        sp.Read(bytesRead, 0, reads);

        return BitConverter.ToString(bytesRead).Trim(' ') != "" ? BitConverter.ToString(bytesRead) : "-1";
    }
    catch
    {
        return "-1";
    }
}

и затем читать весь буфер до тех пор, пока не будут найдены требуемые возвращаемые данные

while ((data += readData()) != "02-05-07")
{
    if (data.Contains("-1"))
    {
        data = "";
    }
    Console.WriteLine(data);
    Console.ReadLine();
}

Это позволит мне прочитать все данные из моего считывателя RFID, и я надеюсь, что это поможет кому-то ещеу кого может быть проблема!

...