Изменить скорость передачи SerialPort, когда соединение открыто - PullRequest
7 голосов
/ 28 апреля 2011

Я использую класс SerialPort для связи с внешним устройством. Я начинаю связь со скоростью 300 бод в секунду, однако после первоначального «рукопожатия» мне приходится переключаться на скорость, указанную устройством (обычно 9600 бит / с).

Я потерпел неудачу в попытках продолжить общение после увеличения скорости передачи, но я не уверен, почему. Это подводит меня к моему вопросу: как правильно изменить скорость передачи данных? Это можно сделать, когда соединение открыто, или мне сначала закрыть соединение?

Мне не удалось найти какую-либо информацию об этом в документации ...

Я испробовал оба варианта и потерпел неудачу в обоих направлениях, что заставило меня подумать, что я упускаю что-то очевидное.

Ответы [ 2 ]

11 голосов
/ 28 апреля 2011

Исходя из моего опыта, самая безопасная ставка - сначала закрыть соединение, изменить скорость, а затем снова открыть. Ваше устройство не будет возражать против этого, поскольку оно, вероятно, ожидает, что вы отправите несколько управляющих символов, чтобы убедиться, что скорость была изменена.

Вы можете попробовать изменить скорость передачи данных при открытом порту, но это может привести к тому, что в буфере будут обнаружены недопустимые символы (в зависимости от устройства и протокола), что означает, что вы также должны очистить буферы сразу после изменения (используя SerialPort.DiscardInBuffer()).

5 голосов
/ 29 мая 2011

Оказывается, вы можете изменить SerialPort.BaudRate, пока он открыт.Но SerialPort.DiscardInBuffer, который упоминается в ответе @Groo, - хороший совет!

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