Серийный порт останавливается рано с получением - PullRequest
2 голосов
/ 04 августа 2011

Всем доброго времени суток,

Моя проблема заключается в следующем:

Я общаюсь с помощью последовательного порта на устройстве, похожем на зигби, и это работает, однако, когда я отправляю в приложении C # следующее:

(строка «0023000D6F000076CF27431e» (на рисунке отправлено дважды)

Я получаю часть ответа от аппарата (прочитайте окно с картинки):

send the string twice with different answer

Однако, когда я посылаю «0023000D6F000076CF27431e» напрямую в порт через терминал, я получаю аппарат, чтобы ответить на этот вопрос: By therminal

Это полный и правильный ответ.

Иконечно, мне нужна последняя строка (с частью 0024).

Я думаю (пока я не очень хорош в программировании), эта часть получает данные:

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {// Event for receiving data


        string txt = port.ReadExisting();
        Thread.Sleep(10);
        List<PlugwiseMessage> msg = reader.Read(Regex.Split(txt, "\r\n"));
        DataReceived(sender, new System.EventArgs(), msg);

IГуглил насчет ReadExisting, но похоже, что это правильный путь ???? Или это не ??

Может кто-нибудь объяснить мне это поведение?

1 Ответ

1 голос
/ 04 августа 2011

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

Вместо этого вы можете использовать ReadLine (), вы получите одну строкутекст из последовательного терминала выводится для каждого вызова.Это работает, потому что устройство отправляет перевод строки как терминатор строки (0x0a в шестнадцатеричном дампе).Удалите вызов Sleep (), который только усугубляет ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...