2011-12-19 4 views
0

Я работаю с последовательным COM-портом. Я вставляю этот код в свою программу. Я могу отправлять данные на устройства и не считывать данные с устройств. В режиме отладки я могу получить только serialport.BytesToRead = 0. Могу ли я знать, почему это произойдет?Не удалось получить данные из последовательного порта

while (serialport.BytesToRead > 0) 
{ 
     int byte_count = serialport.BytesToRead; 
     byte[] buffer = new byte[byte_count]; 
     int read_count = serialport.Read(buffer, 0, byte_count); 
     string echo = ASCIIEncoding.ASCII.GetString(buffer, 0, read_count); 
     echo = System.Text.Encoding.UTF8.GetString(buffer); 
     Console.WriteLine(echo); 
} 

ответ

2

Сначала используйте другую программу, такую ​​как Putty или HyperTerminal, чтобы проверить, что устройство и соединение находятся в рабочем состоянии, и дважды проверить, что вы используете правильный порт, скорость передачи, паритет, стопбит и данные. Если вы не можете получить что-либо из устройства с такой программой, то он не будет работать с вашим собственным кодом.

Следующий фокус на рукопожатие. Распространенная ошибка заключается в том, чтобы оставить его никем, а затем не включать сигналы DtrEnable и RtsEnable. Устройство не отправляет ничего, когда думает, что вы в автономном режиме. SysInternals' PortMon utility может быть удобно, он показывает вам, что происходит на уровне драйвера устройства.

1

Когда вам читают SerialPort? Вы пытаетесь прочитать сразу после отправки? В этом случае вы можете попытаться прочитать, прежде чем что-нибудь будет прочитано из порта.

Для чтения данных необходимо использовать событие DataReceived.

Обратите внимание, что это событие может быть инициировано до того, как все данные будут получены, поэтому вам может потребоваться получить данные по нескольким вызовам DataReceived, пока вы не получите все данные, которые вы должны использовать.

Смежные вопросы