Вам нужно взглянуть на карту ASCII и определить, какие значения являются контрольными значениями, которые вы ищете.
Так, например, я быопределите следующие управляющие символы в моем коде, затем в вашем событии DataReceived
вы можете искать эти символы.
char ACK = (char)6;
char NAK = (char)21;
char SOH = (char)1;
char LF = (char)10;
StringBuilder sb = new StringBuilder();
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string Data = serialPort1.ReadExisting();
foreach (char c in Data)
{
if (c == LF)
{
sb.Append(c);
CurrentLine = sb.ToString();
sb.Clear();
//parse CurrentLine here or print it to textbox
}
if (c == ACK)
{
sb.Append("<ACK>"); //or whatever you want to print
}
else
{
sb.Append(c);
}
}
}
edit: Чтобы ответить на некоторые ваши вопросы в комментариях ниже.Событие DataReceived
срабатывает, когда в буфер попадают символы, но оно может срабатывать, получая только половину вашего сообщения.Таким образом, при использовании этого события вы должны создавать строку, пока не узнаете, что у вас есть все сообщение.В моем примере выше я предполагаю, что LF (перевод строки) указывает, что у меня есть все сообщение.Для вас вы должны использовать любой символ, который вы ищете, который отмечает конец вашего сообщения (может быть, ACK в вашем случае?).Вы можете добавить этот символ к вашей строке или нет, это зависит от ваших требований.В моем примере вы можете видеть, что я добавляю LF, но вы можете легко убрать эту строку.