MikeSv_ Ответов: 2

Проблемы с последовательным портом C#


Всем привет.

У меня возникли некоторые проблемы с чтением данных из моего последовательного порта.
Я посылаю данные с двух датчиков каждую секунду в виде; - разделенной строки и хочу непрерывно читать их и обновлять два текстовых поля.

Когда я пытаюсь прочитать данные из последовательного порта с помощью ReadExcisting() Я получаю больше, чем просто два значения. Readline (), похоже, тоже не работает.

Любая помощь была бы очень кстати:-)

Заранее спасибо,

Майкл

Что я уже пробовал:

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string inData = sp.ReadExisting();
    data = inData.Split(delimiterChars);

    if(data.Contains("Temp1"))
    {
        Temp1txt.Invoke(this.myDelegate, new Object[] { data });
    }
    else if (data.Contains("Temp2"))
    {
        Temp2txt.Invoke(this.myDelegate, new Object[] { data });
    }

    richBox1.Invoke(new Action(() => { richBox1.AppendText(data[1]); }));
    richBox1.Invoke(new Action(() => { richBox1.SelectionStart = richBox1.Text.Length; }));            
    richBox1.Invoke(new Action(() => { richBox1.ScrollToCaret(); }));
}

#realJSOP

Какие дополнительные данные вы получаете, чего не ожидаете?

2 Ответов

Рейтинг:
2

MikeSv_

Спасибо!

Я просто посылаю новый символ строки из микроконтроллера, который отлично работает!

С уважением,

Майкл


Рейтинг:
18

Jochen Arndt

ReadExisting считывает все данные, доступные во внутреннем входном буфере. Это может быть несколько наборов данных, если предыдущее чтение было слишком давно, а также неполный последний набор данных.

Таким образом, вам нужно какое-то обнаружение, чтобы различать наборы данных и если последние данные являются полными. Это зависит от формата ваших данных. Часто набор данных завершается потоком строк, который затем может быть использован. Если это так, ReadLine можно использовать вместо этого (и следует использовать, потому что это значительно упрощает обработку данных).

Но когда ReadLine не возвращается, кажется, нет или другой конец линии индикатора. Если есть другой индикатор, вы можете установить его с помощью Последовательный порт.Строку Собственность (Системы.ИО.Порты)[^] давать возможность ReadLine вернитесь, когда этот символ будет получен.

Таким образом, это зависит от индикатора конца линии / набора данных, который используется вашими датчиками.


CPallini

5.